From 9e1e6da505e658109eed382df4676c7546e48736 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 02:26:04 +0800 Subject: [PATCH 01/40] Add topic config --- unilabos/ros/nodes/base_device_node.py | 115 ++++++++++++++- unilabos/test/registry/example_devices.py | 49 ++----- unilabos/utils/decorator.py | 170 ++++++++++++++++++++++ 3 files changed, 289 insertions(+), 45 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 6952320f..88dd4be5 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -21,6 +21,7 @@ from rclpy.callback_groups import ReentrantCallbackGroup from rclpy.service import Service from unilabos_msgs.action import SendCmd from unilabos_msgs.srv._serial_command import SerialCommand_Request, SerialCommand_Response +from unilabos.utils.decorator import get_topic_config, get_all_subscriptions from unilabos.resources.container import RegularContainer from unilabos.resources.graphio import ( @@ -48,7 +49,8 @@ from unilabos_msgs.msg import Resource # type: ignore from unilabos.ros.nodes.resource_tracker import ( DeviceNodeResourceTracker, ResourceTreeSet, - ResourceTreeInstance, ResourceDictInstance, + ResourceTreeInstance, + ResourceDictInstance, ) from unilabos.ros.x.rclpyx import get_event_loop from unilabos.ros.utils.driver_creator import WorkstationNodeCreator, PyLabRobotCreator, DeviceClassCreator @@ -168,6 +170,7 @@ class PropertyPublisher: msg_type, initial_period: float = 5.0, print_publish=True, + qos: int = 10, ): self.node = node self.name = name @@ -175,10 +178,11 @@ class PropertyPublisher: self.get_method = get_method self.timer_period = initial_period self.print_publish = print_publish + self.qos = qos self._value = None try: - self.publisher_ = node.create_publisher(msg_type, f"{name}", 10) + self.publisher_ = node.create_publisher(msg_type, f"{name}", qos) except AttributeError as ex: self.node.lab_logger().error( f"创建发布者 {name} 失败,可能由于注册表有误,类型: {msg_type},错误: {ex}\n{traceback.format_exc()}" @@ -186,7 +190,7 @@ class PropertyPublisher: self.timer = node.create_timer(self.timer_period, self.publish_property) self.__loop = get_event_loop() str_msg_type = str(msg_type)[8:-2] - self.node.lab_logger().trace(f"发布属性: {name}, 类型: {str_msg_type}, 周期: {initial_period}秒") + self.node.lab_logger().trace(f"发布属性: {name}, 类型: {str_msg_type}, 周期: {initial_period}秒, QoS: {qos}") def get_property(self): if asyncio.iscoroutinefunction(self.get_method): @@ -326,6 +330,10 @@ class BaseROS2DeviceNode(Node, Generic[T]): continue self.create_ros_action_server(action_name, action_value_mapping) + # 创建订阅者(通过 @subscribe 装饰器) + self._topic_subscribers: Dict[str, Any] = {} + self._setup_decorated_subscribers() + # 创建线程池执行器 self._executor = ThreadPoolExecutor( max_workers=max(len(action_value_mappings), 1), thread_name_prefix=f"ROSDevice{self.device_id}" @@ -1043,6 +1051,29 @@ class BaseROS2DeviceNode(Node, Generic[T]): def create_ros_publisher(self, attr_name, msg_type, initial_period=5.0): """创建ROS发布者""" + # 检测装饰器配置(支持 get_{attr_name} 方法和 @property) + topic_config = {} + + # 优先检测 get_{attr_name} 方法 + if hasattr(self.driver_instance, f"get_{attr_name}"): + getter_method = getattr(self.driver_instance, f"get_{attr_name}") + topic_config = get_topic_config(getter_method) + + # 如果没有配置,检测 @property 装饰的属性 + if not topic_config: + driver_class = type(self.driver_instance) + if hasattr(driver_class, attr_name): + class_attr = getattr(driver_class, attr_name) + if isinstance(class_attr, property) and class_attr.fget is not None: + topic_config = get_topic_config(class_attr.fget) + + # 使用装饰器配置或默认值 + cfg_period = topic_config.get("period") + cfg_print = topic_config.get("print_publish") + cfg_qos = topic_config.get("qos") + period: float = cfg_period if cfg_period is not None else initial_period + print_publish: bool = cfg_print if cfg_print is not None else self._print_publish + qos: int = cfg_qos if cfg_qos is not None else 10 # 获取属性值的方法 def get_device_attr(): @@ -1063,7 +1094,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().error(traceback.format_exc()) self._property_publishers[attr_name] = PropertyPublisher( - self, attr_name, get_device_attr, msg_type, initial_period, self._print_publish + self, attr_name, get_device_attr, msg_type, period, print_publish, qos ) def create_ros_action_server(self, action_name, action_value_mapping): @@ -1081,6 +1112,76 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().trace(f"发布动作: {action_name}, 类型: {str_action_type}") + def _setup_decorated_subscribers(self): + """扫描 driver_instance 中带有 @subscribe 装饰器的方法并创建订阅者""" + subscriptions = get_all_subscriptions(self.driver_instance) + + for method_name, method, config in subscriptions: + topic_template = config.get("topic") + msg_type = config.get("msg_type") + qos = config.get("qos", 10) + + if not topic_template: + self.lab_logger().warning(f"订阅方法 {method_name} 缺少 topic 配置,跳过") + continue + + # 如果没有指定 msg_type,尝试从类型注解推断 + if msg_type is None: + try: + hints = get_type_hints(method) + # 第一个参数是 self,第二个是 msg + param_names = list(hints.keys()) + if param_names: + msg_type = hints[param_names[0]] + except Exception: + pass + + if msg_type is None: + self.lab_logger().warning(f"订阅方法 {method_name} 缺少 msg_type 配置且无法从类型注解推断,跳过") + continue + + # 替换 topic 模板中的占位符 + topic = self._resolve_topic_template(topic_template) + + self.create_ros_subscriber(topic, msg_type, method, qos) + + def _resolve_topic_template(self, topic_template: str) -> str: + """ + 解析 topic 模板,替换占位符 + + 支持的占位符: + - {device_id}: 设备ID + - {namespace}: 完整命名空间 + """ + return topic_template.format( + device_id=self.device_id, + namespace=self.namespace, + ) + + def create_ros_subscriber(self, topic: str, msg_type, callback, qos: int = 10): + """ + 创建ROS订阅者 + + Args: + topic: Topic 名称 + msg_type: ROS 消息类型 + callback: 回调方法(会自动绑定到 driver_instance) + qos: QoS 深度配置 + """ + try: + subscription = self.create_subscription( + msg_type, + topic, + callback, + qos, + callback_group=self.callback_group, + ) + self._topic_subscribers[topic] = subscription + str_msg_type = str(msg_type)[8:-2] if str(msg_type).startswith(" str: + return "Idle" - 支持多种泵送模式,具有高精度流量控制和自动校准功能。 - 适用于实验室自动化系统中的液体处理任务。 - """ - - _ros_node: BaseROS2DeviceNode - - def __init__(self, device_id: str = "smart_pump_01", port: str = "/dev/ttyUSB0"): - """ - 初始化智能泵控制器 - - Args: - device_id: 设备唯一标识符 - port: 通信端口 - """ - self.device_id = device_id - self.port = port - self.is_connected = False - self.current_flow_rate = 0.0 - self.total_volume_pumped = 0.0 - self.calibration_factor = 1.0 - self.pump_mode = "continuous" # continuous, volume, rate - - def post_init(self, ros_node: BaseROS2DeviceNode): - self._ros_node = ros_node - - def connect_device(self, timeout: int = 10) -> bool: - """ - 连接到泵设备 - - Args: - timeout: 连接超时时间(秒) - - Returns: - bool: 连接是否成功 - """ - # 模拟连接过程 - self.is_connected = True + async def action(self, addr: str) -> bool: return True + + + + def disconnect_device(self) -> bool: """ 断开设备连接 diff --git a/unilabos/utils/decorator.py b/unilabos/utils/decorator.py index 77e473c0..667f3531 100644 --- a/unilabos/utils/decorator.py +++ b/unilabos/utils/decorator.py @@ -1,3 +1,9 @@ +from functools import wraps +from typing import Any, Callable, Optional, TypeVar + +F = TypeVar("F", bound=Callable[..., Any]) + + def singleton(cls): """ 单例装饰器 @@ -12,3 +18,167 @@ def singleton(cls): return get_instance + +def topic_config( + period: Optional[float] = None, + print_publish: Optional[bool] = None, + qos: Optional[int] = None, +) -> Callable[[F], F]: + """ + Topic发布配置装饰器 + + 用于装饰 get_{attr_name} 方法或 @property,控制对应属性的ROS topic发布行为。 + + Args: + period: 发布周期(秒)。None 表示使用默认值 5.0 + print_publish: 是否打印发布日志。None 表示使用节点默认配置 + qos: QoS深度配置。None 表示使用默认值 10 + + Example: + class MyDriver: + # 方式1: 装饰 get_{attr_name} 方法 + @topic_config(period=1.0, print_publish=False, qos=5) + def get_temperature(self): + return self._temperature + + # 方式2: 与 @property 连用(topic_config 放在下面) + @property + @topic_config(period=0.1) + def position(self): + return self._position + + Note: + 与 @property 连用时,@topic_config 必须放在 @property 下面, + 这样装饰器执行顺序为:先 topic_config 添加配置,再 property 包装。 + """ + + def decorator(func: F) -> F: + @wraps(func) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + + # 在函数上附加配置属性 (type: ignore 用于动态属性) + wrapper._topic_period = period # type: ignore[attr-defined] + wrapper._topic_print_publish = print_publish # type: ignore[attr-defined] + wrapper._topic_qos = qos # type: ignore[attr-defined] + wrapper._has_topic_config = True # type: ignore[attr-defined] + + return wrapper # type: ignore[return-value] + + return decorator + + +def get_topic_config(func) -> dict: + """ + 获取函数上的topic配置 + + Args: + func: 被装饰的函数 + + Returns: + 包含 period, print_publish, qos 的配置字典 + """ + if hasattr(func, "_has_topic_config") and getattr(func, "_has_topic_config", False): + return { + "period": getattr(func, "_topic_period", None), + "print_publish": getattr(func, "_topic_print_publish", None), + "qos": getattr(func, "_topic_qos", None), + } + return {} + + +def subscribe( + topic: str, + msg_type: Optional[type] = None, + qos: int = 10, +) -> Callable[[F], F]: + """ + Topic订阅装饰器 + + 用于装饰 driver 类中的方法,使其成为 ROS topic 的订阅回调。 + 当 ROS2DeviceNode 初始化时,会自动扫描并创建对应的订阅者。 + + Args: + topic: Topic 名称模板,支持以下占位符: + - {device_id}: 设备ID (如 "pump_1") + - {namespace}: 完整命名空间 (如 "/devices/pump_1") + msg_type: ROS 消息类型。如果为 None,需要在回调函数的类型注解中指定 + qos: QoS 深度配置,默认为 10 + + Example: + from std_msgs.msg import String, Float64 + + class MyDriver: + @subscribe(topic="/devices/{device_id}/set_speed", msg_type=Float64) + def on_speed_update(self, msg: Float64): + self._speed = msg.data + print(f"Speed updated to: {self._speed}") + + @subscribe(topic="{namespace}/command") + def on_command(self, msg: String): + # msg_type 可从类型注解推断 + self.execute_command(msg.data) + + Note: + - 回调方法的第一个参数是 self,第二个参数是收到的 ROS 消息 + - topic 中的占位符会在创建订阅时被实际值替换 + """ + + def decorator(func: F) -> F: + @wraps(func) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + + # 在函数上附加订阅配置 + wrapper._subscribe_topic = topic # type: ignore[attr-defined] + wrapper._subscribe_msg_type = msg_type # type: ignore[attr-defined] + wrapper._subscribe_qos = qos # type: ignore[attr-defined] + wrapper._has_subscribe = True # type: ignore[attr-defined] + + return wrapper # type: ignore[return-value] + + return decorator + + +def get_subscribe_config(func) -> dict: + """ + 获取函数上的订阅配置 + + Args: + func: 被装饰的函数 + + Returns: + 包含 topic, msg_type, qos 的配置字典 + """ + if hasattr(func, "_has_subscribe") and getattr(func, "_has_subscribe", False): + return { + "topic": getattr(func, "_subscribe_topic", None), + "msg_type": getattr(func, "_subscribe_msg_type", None), + "qos": getattr(func, "_subscribe_qos", 10), + } + return {} + + +def get_all_subscriptions(instance) -> list: + """ + 扫描实例的所有方法,获取带有 @subscribe 装饰器的方法及其配置 + + Args: + instance: 要扫描的实例 + + Returns: + 包含 (method_name, method, config) 元组的列表 + """ + subscriptions = [] + for attr_name in dir(instance): + if attr_name.startswith("_"): + continue + try: + attr = getattr(instance, attr_name) + if callable(attr): + config = get_subscribe_config(attr) + if config: + subscriptions.append((attr_name, attr, config)) + except Exception: + pass + return subscriptions From 7e9e93b29c2a3c9ff22b0092a49c93e8093b1166 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 02:28:56 +0800 Subject: [PATCH 02/40] Prcix9320 (#207) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 0.10.7 Update (#101) * Cleanup registry to be easy-understanding (#76) * delete deprecated mock devices * rename categories * combine chromatographic devices * rename rviz simulation nodes * organic virtual devices * parse vessel_id * run registry completion before merge --------- Co-authored-by: Xuwznln <18435084+Xuwznln@users.noreply.github.com> * fix: workstation handlers and vessel_id parsing * fix: working dir error when input config path feat: report publish topic when error * modify default discovery_interval to 15s * feat: add trace log level * feat: 添加ChinWe设备控制类,支持串口通信和电机控制功能 (#79) * fix: drop_tips not using auto resource select * fix: discard_tips error * fix: discard_tips * fix: prcxi_res * add: prcxi res fix: startup slow * feat: workstation example * fix pumps and liquid_handler handle * feat: 优化protocol node节点运行日志 * fix all protocol_compilers and remove deprecated devices * feat: 新增use_remote_resource参数 * fix and remove redundant info * bugfixes on organic protocols * fix filter protocol * fix protocol node * 临时兼容错误的driver写法 * fix: prcxi import error * use call_async in all service to avoid deadlock * fix: figure_resource * Update recipe.yaml * add workstation template and battery example * feat: add sk & ak * update workstation base * Create workstation_architecture.md * refactor: workstation_base 重构为仅含业务逻辑,通信和子设备管理交给 ProtocolNode * refactor: ProtocolNode→WorkstationNode * Add:msgs.action (#83) * update: Workstation dev 将版本号从 0.10.3 更新为 0.10.4 (#84) * Add:msgs.action * update: 将版本号从 0.10.3 更新为 0.10.4 * simplify resource system * uncompleted refactor * example for use WorkstationBase * feat: websocket * feat: websocket test * feat: workstation example * feat: action status * fix: station自己的方法注册错误 * fix: 还原protocol node处理方法 * fix: build * fix: missing job_id key * ws test version 1 * ws test version 2 * ws protocol * 增加物料关系上传日志 * 增加物料关系上传日志 * 修正物料关系上传 * 修复工站的tracker实例追踪失效问题 * 增加handle检测,增加material edge关系上传 * 修复event loop错误 * 修复edge上报错误 * 修复async错误 * 更新schema的title字段 * 主机节点信息等支持自动刷新 * 注册表编辑器 * 修复status密集发送时,消息出错 * 增加addr参数 * fix: addr param * fix: addr param * 取消labid 和 强制config输入 * Add action definitions for LiquidHandlerSetGroup and LiquidHandlerTransferGroup - Created LiquidHandlerSetGroup.action with fields for group name, wells, and volumes. - Created LiquidHandlerTransferGroup.action with fields for source and target group names and unit volume. - Both actions include response fields for return information and success status. * Add LiquidHandlerSetGroup and LiquidHandlerTransferGroup actions to CMakeLists * Add set_group and transfer_group methods to PRCXI9300Handler and update liquid_handler.yaml * result_info改为字典类型 * 新增uat的地址替换 * runze multiple pump support (cherry picked from commit 49354fcf394da52baaa4f4ae8166beaccb823e96) * remove runze multiple software obtainer (cherry picked from commit 8bcc92a39482faedcbf47104fc67cbbf15f03ba7) * support multiple backbone (cherry picked from commit 4771ff2347f66150ca092e66a6c2a97a48fee9a5) * Update runze pump format * Correct runze multiple backbone * Update runze_multiple_backbone * Correct runze pump multiple receive method. * Correct runze pump multiple receive method. * 对于PRCXI9320的transfer_group,一对多和多对多 * 移除MQTT,更新launch文档,提供注册表示例文件,更新到0.10.5 * fix import error * fix dupe upload registry * refactor ws client * add server timeout * Fix: run-column with correct vessel id (#86) * fix run_column * Update run_column_protocol.py (cherry picked from commit e5aa4d940ac492d5595bb48593ade5d75a2a3203) * resource_update use resource_add * 新增版位推荐功能 * 重新规定了版位推荐的入参 * update registry with nested obj * fix protocol node log_message, added create_resource return value * fix protocol node log_message, added create_resource return value * try fix add protocol * fix resource_add * 修复移液站错误的aspirate注册表 * Feature/xprbalance-zhida (#80) * feat(devices): add Zhida GC/MS pretreatment automation workstation * feat(devices): add mettler_toledo xpr balance * balance * 重新补全zhida注册表 * PRCXI9320 json * PRCXI9320 json * PRCXI9320 json * fix resource download * remove class for resource * bump version to 0.10.6 * 更新所有注册表 * 修复protocolnode的兼容性 * 修复protocolnode的兼容性 * Update install md * Add Defaultlayout * 更新物料接口 * fix dict to tree/nested-dict converter * coin_cell_station draft * refactor: rename "station_resource" to "deck" * add standardized BIOYOND resources: bottle_carrier, bottle * refactor and add BIOYOND resources tests * add BIOYOND deck assignment and pass all tests * fix: update resource with correct structure; remove deprecated liquid_handler set_group action * feat: 将新威电池测试系统驱动与配置文件并入 workstation_dev_YB2 (#92) * feat: 新威电池测试系统驱动与注册文件 * feat: bring neware driver & battery.json into workstation_dev_YB2 * add bioyond studio draft * bioyond station with communication init and resource sync * fix bioyond station and registry * fix: update resource with correct structure; remove deprecated liquid_handler set_group action * frontend_docs * create/update resources with POST/PUT for big amount/ small amount data * create/update resources with POST/PUT for big amount/ small amount data * refactor: add itemized_carrier instead of carrier consists of ResourceHolder * create warehouse by factory func * update bioyond launch json * add child_size for itemized_carrier * fix bioyond resource io * Workstation templates: Resources and its CRUD, and workstation tasks (#95) * coin_cell_station draft * refactor: rename "station_resource" to "deck" * add standardized BIOYOND resources: bottle_carrier, bottle * refactor and add BIOYOND resources tests * add BIOYOND deck assignment and pass all tests * fix: update resource with correct structure; remove deprecated liquid_handler set_group action * feat: 将新威电池测试系统驱动与配置文件并入 workstation_dev_YB2 (#92) * feat: 新威电池测试系统驱动与注册文件 * feat: bring neware driver & battery.json into workstation_dev_YB2 * add bioyond studio draft * bioyond station with communication init and resource sync * fix bioyond station and registry * create/update resources with POST/PUT for big amount/ small amount data * refactor: add itemized_carrier instead of carrier consists of ResourceHolder * create warehouse by factory func * update bioyond launch json * add child_size for itemized_carrier * fix bioyond resource io --------- Co-authored-by: h840473807 <47357934+h840473807@users.noreply.github.com> Co-authored-by: Xie Qiming <97236197+Andy6M@users.noreply.github.com> * 更新物料接口 * Workstation dev yb2 (#100) * Refactor and extend reaction station action messages * Refactor dispensing station tasks to enhance parameter clarity and add batch processing capabilities - Updated `create_90_10_vial_feeding_task` to include detailed parameters for 90%/10% vial feeding, improving clarity and usability. - Introduced `create_batch_90_10_vial_feeding_task` for batch processing of 90%/10% vial feeding tasks with JSON formatted input. - Added `create_batch_diamine_solution_task` for batch preparation of diamine solution, also utilizing JSON formatted input. - Refined `create_diamine_solution_task` to include additional parameters for better task configuration. - Enhanced schema descriptions and default values for improved user guidance. * 修复to_plr_resources * add update remove * 支持选择器注册表自动生成 支持转运物料 * 修复资源添加 * 修复transfer_resource_to_another生成 * 更新transfer_resource_to_another参数,支持spot入参 * 新增test_resource动作 * fix host_node error * fix host_node test_resource error * fix host_node test_resource error * 过滤本地动作 * 移动内部action以兼容host node * 修复同步任务报错不显示的bug * feat: 允许返回非本节点物料,后面可以通过decoration进行区分,就不进行warning了 * update todo * modify bioyond/plr converter, bioyond resource registry, and tests * pass the tests * update todo * add conda-pack-build.yml * add auto install script for conda-pack-build.yml (cherry picked from commit 172599adcf5e1421f5681c985a021103ac61de82) * update conda-pack-build.yml * update conda-pack-build.yml * update conda-pack-build.yml * update conda-pack-build.yml * update conda-pack-build.yml * Add version in __init__.py Update conda-pack-build.yml Add create_zip_archive.py * Update conda-pack-build.yml * Update conda-pack-build.yml (with mamba) * Update conda-pack-build.yml * Fix FileNotFoundError * Try fix 'charmap' codec can't encode characters in position 16-23: character maps to * Fix unilabos msgs search error * Fix environment_check.py * Update recipe.yaml * Update registry. Update uuid loop figure method. Update install docs. * Fix nested conda pack * Fix one-key installation path error * Bump version to 0.10.7 * Workshop bj (#99) * Add LaiYu Liquid device integration and tests Introduce LaiYu Liquid device implementation, including backend, controllers, drivers, configuration, and resource files. Add hardware connection, tip pickup, and simplified test scripts, as well as experiment and registry configuration for LaiYu Liquid. Documentation and .gitignore for the device are also included. * feat(LaiYu_Liquid): 重构设备模块结构并添加硬件文档 refactor: 重新组织LaiYu_Liquid模块目录结构 docs: 添加SOPA移液器和步进电机控制指令文档 fix: 修正设备配置中的最大体积默认值 test: 新增工作台配置测试用例 chore: 删除过时的测试脚本和配置文件 * add * 重构: 将 LaiYu_Liquid.py 重命名为 laiyu_liquid_main.py 并更新所有导入引用 - 使用 git mv 将 LaiYu_Liquid.py 重命名为 laiyu_liquid_main.py - 更新所有相关文件中的导入引用 - 保持代码功能不变,仅改善命名一致性 - 测试确认所有导入正常工作 * 修复: 在 core/__init__.py 中添加 LaiYuLiquidBackend 导出 - 添加 LaiYuLiquidBackend 到导入列表 - 添加 LaiYuLiquidBackend 到 __all__ 导出列表 - 确保所有主要类都可以正确导入 * 修复大小写文件夹名字 * 电池装配工站二次开发教程(带目录)上传至dev (#94) * 电池装配工站二次开发教程 * Update intro.md * 物料教程 * 更新物料教程,json格式注释 * Update prcxi driver & fix transfer_liquid mix_times (#90) * Update prcxi driver & fix transfer_liquid mix_times * fix: correct mix_times type * Update liquid_handler registry * test: prcxi.py * Update registry from pr * fix ony-key script not exist * clean files --------- Co-authored-by: Junhan Chang Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> Co-authored-by: Guangxin Zhang Co-authored-by: Xie Qiming <97236197+Andy6M@users.noreply.github.com> Co-authored-by: h840473807 <47357934+h840473807@users.noreply.github.com> Co-authored-by: LccLink <1951855008@qq.com> Co-authored-by: lixinyu1011 <61094742+lixinyu1011@users.noreply.github.com> Co-authored-by: shiyubo0410 * fix startup env check. add auto install during one-key installation * Try fix one-key build on linux * Complete all one key installation * fix: rename schema field to resource_schema with serialization and validation aliases (#104) Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> * Fix one-key installation build Install conda-pack before pack command Add conda-pack to base when building one-key installer Fix param error when using mamba run Try fix one-key build on linux * Fix conda pack on windows * add plr_to_bioyond, and refactor bioyond stations * modify default config * Fix one-key installation build for windows * Fix workstation startup Update registry * Fix/resource UUID and doc fix (#109) * Fix ResourceTreeSet load error * Raise error when using unsupported type to create ResourceTreeSet * Fix children key error * Fix children key error * Fix workstation resource not tracking * Fix workstation deck & children resource dupe * Fix workstation deck & children resource dupe * Fix multiple resource error * Fix resource tree update * Fix resource tree update * Force confirm uuid * Tip more error log * Refactor Bioyond workstation and experiment workflow (#105) Refactored the Bioyond workstation classes to improve parameter handling and workflow management. Updated experiment.py to use BioyondReactionStation with deck and material mappings, and enhanced workflow step parameter mapping and execution logic. Adjusted JSON experiment configs, improved workflow sequence handling, and added UUID assignment to PLR materials. Removed unused station_config and material cache logic, and added detailed docstrings and debug output for workflow methods. * Fix resource get. Fix resource parent not found. Mapping uuid for all resources. * mount parent uuid * Add logging configuration based on BasicConfig in main function * fix workstation node error * fix workstation node error * Update boot example * temp fix for resource get * temp fix for resource get * provide error info when cant find plr type * pack repo info * fix to plr type error * fix to plr type error * Update regular container method * support no size init * fix comprehensive_station.json * fix comprehensive_station.json * fix type conversion * fix state loading for regular container * Update deploy-docs.yml * Update deploy-docs.yml --------- Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> * Close #107 Update doc url. * Fix/update resource (#112) * cancel upload_registry * Refactor Bioyond workstation and experiment workflow -fix (#111) * refactor(bioyond_studio): 优化材料缓存加载和参数验证逻辑 改进材料缓存加载逻辑以支持多种材料类型和详细材料处理 更新工作流参数验证中的字段名从key/value改为Key/DisplayValue 移除未使用的merge_workflow_with_parameters方法 添加get_station_info方法获取工作站基础信息 清理实验文件中的注释代码和更新导入路径 * fix: 修复资源移除时的父资源检查问题 在BaseROS2DeviceNode中,移除资源前添加对父资源是否为None的检查,避免空指针异常 同时更新Bottle和BottleCarrier类以支持**kwargs参数 修正测试文件中Liquid_feeding_beaker的大小写拼写错误 * correct return message --------- Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> * fix resource_get in action * fix(reaction_station): 清空工作流序列和参数避免重复执行 (#113) 在创建任务后清空工作流序列和参数,防止下次执行时累积重复 * Update create_resource device_id * Update ResourceTracker add more enumeration in POSE fix converter in resource_tracker * Update graphio together with workstation design. fix(reaction_station): 为步骤参数添加Value字段传个BY后端 fix(bioyond/warehouses): 修正仓库尺寸和物品排列参数 调整仓库的x轴和z轴物品数量以及物品尺寸参数,使其符合4x1x4的规格要求 fix warehouse serialize/deserialize fix bioyond converter fix itemized_carrier.unassign_child_resource allow not-loaded MSG in registry add layout serializer & converter warehouseuse A1-D4; add warehouse layout fix(graphio): 修正bioyond到plr资源转换中的坐标计算错误 Fix resource assignment and type mapping issues Corrects resource assignment in ItemizedCarrier by using the correct spot key from _ordering. Updates graphio to use 'typeName' instead of 'name' for type mapping in resource_bioyond_to_plr. Renames DummyWorkstation to BioyondWorkstation in workstation_http_service for clarity. * Update workstation & bioyond example Refine descriptions in Bioyond reaction station YAML Updated and clarified field and operation descriptions in the reaction_station_bioyond.yaml file for improved accuracy and consistency. Changes include more precise terminology, clearer parameter explanations, and standardized formatting for operation schemas. refactor(workstation): 更新反应站参数描述并添加分液站配置文件 修正反应站方法参数描述,使其更准确清晰 添加bioyond_dispensing_station.yaml配置文件 add create_workflow script and test add invisible_slots to carriers fix(warehouses): 修正bioyond_warehouse_1x4x4仓库的尺寸参数 调整仓库的num_items_x和num_items_z值以匹配实际布局,并更新物品尺寸参数 save resource get data. allow empty value for layout and cross_section_type More decks&plates support for bioyond (#115) refactor(registry): 重构反应站设备配置,简化并更新操作命令 移除旧的自动操作命令,新增针对具体化学操作的命令配置 更新模块路径和配置结构,优化参数定义和描述 fix(dispensing_station): 修正物料信息查询方法调用 将直接调用material_id_query改为通过hardware_interface调用,以符合接口设计规范 * PRCXI Update 修改prcxi连线 prcxi样例图 Create example_prcxi.json * Update resource extra & uuid. use ordering to convert identifier to idx convert identifier to site idx correct extra key update extra before transfer fix multiple instance error add resource_tree_transfer func fox itemrized carrier assign child resource support internal device material transfer remove extra key use same callback group support material extra support material extra support update_resource_site in extra * Update workstation. modify workstation_architecture docs bioyond_HR (#133) * feat: Enhance Bioyond synchronization and resource management - Implemented synchronization for all material types (consumables, samples, reagents) from Bioyond, logging detailed information for each type. - Improved error handling and logging during synchronization processes. - Added functionality to save Bioyond material IDs in UniLab resources for future updates. - Enhanced the `sync_to_external` method to handle material movements correctly, including querying and creating materials in Bioyond. - Updated warehouse configurations to support new storage types and improved layout for better resource management. - Introduced new resource types such as reactors and tip boxes, with detailed specifications. - Modified warehouse factory to support column offsets for naming conventions (e.g., A05-D08). - Improved resource tracking by merging extra attributes instead of overwriting them. - Added a new method for updating resources in Bioyond, ensuring better synchronization of resource changes. * feat: 添加TipBox和Reactor的配置到bottles.yaml * fix: 修复液体投料方法中的volume参数处理逻辑 修复solid_feeding_vials方法中的volume参数处理逻辑,优化solvents参数的使用条件 更新液体投料方法,支持通过溶剂信息自动计算体积,添加solvents参数并更新文档描述 Add batch creation methods for vial and solution tasks 添加批量创建90%10%小瓶投料任务和二胺溶液配置任务的功能,更新相关参数和默认值 * 封膜仪、撕膜仪、耗材站接口 * 添加Raman和xrd相关代码 * Resource update & asyncio fix correct bioyond config prcxi example fix append_resource fix regularcontainer fix cancel error fix resource_get param fix json dumps support name change during materials change enable slave mode change uuid logger to trace level correct remove_resource stats disable slave connect websocket adjust with_children param modify devices to use correct executor (sleep, create_task) support sleep and create_task in node fix run async execution error * bump version to 0.10.9 update registry * PRCXI Reset Error Correction (#166) * change 9320 desk row number to 4 * Updated 9320 host address * Updated 9320 host address * Add **kwargs in classes: PRCXI9300Deck and PRCXI9300Container * Removed all sample_id in prcxi_9320.json to avoid KeyError * 9320 machine testing settings * Typo * Rewrite setup logic to clear error code * 初始化 step_mode 属性 * 1114物料手册定义教程byxinyu (#165) * 宜宾奔耀工站deck前端by_Xinyu * 构建物料教程byxinyu * 1114物料手册定义教程 * 3d sim (#97) * 修改lh的json启动 * 修改lh的json启动 * 修改backend,做成sim的通用backend * 修改yaml的地址,3D模型适配网页生产环境 * 添加laiyu硬件连接 * 修改移液枪的状态判断方法, 修改移液枪的状态判断方法, 添加三轴的表定点与零点之间的转换 添加三轴真实移动的backend * 修改laiyu移液站 简化移动方法, 取消软件限制位置, 修改当值使用Z轴时也需要重新复位Z轴的问题 * 更新lh以及laiyu workshop 1,现在可以直接通过修改backend,适配其他的移液站,主类依旧使用LiquidHandler,不用重新编写 2,修改枪头判断标准,使用枪头自身判断而不是类的判断, 3,将归零参数用毫米计算,方便手动调整, 4,修改归零方式,上电使用机械归零,确定机械零点,手动归零设置工作区域零点方便计算,二者互不干涉 * 修改枪头动作 * 修改虚拟仿真方法 --------- Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: Junhan Chang * 标准化opcua设备接入unilab (#78) * 初始提交,只保留工作区当前状态 * remove redundant arm_slider meshes --------- Co-authored-by: Junhan Chang * add new laiyu liquid driver, yaml and json files (#164) * HR物料同步,前端展示位置修复 (#135) * 更新Bioyond工作站配置,添加新的物料类型映射和载架定义,优化物料查询逻辑 * 添加Bioyond实验配置文件,定义物料类型映射和设备配置 * 更新bioyond_warehouse_reagent_stack方法,修正试剂堆栈尺寸和布局描述 * 更新Bioyond实验配置,修正物料类型映射,优化设备配置 * 更新Bioyond资源同步逻辑,优化物料入库流程,增强错误处理和日志记录 * 更新Bioyond资源,添加配液站和反应站专用载架,优化仓库工厂函数的排序方式 * 更新Bioyond资源,添加配液站和反应站相关载架,优化试剂瓶和样品瓶配置 * 更新Bioyond实验配置,修正试剂瓶载架ID,确保与设备匹配 * 更新Bioyond资源,移除反应站单烧杯载架,添加反应站单烧瓶载架分类 * Refactor Bioyond resource synchronization and update bottle carrier definitions - Removed traceback printing in error handling for Bioyond synchronization. - Enhanced logging for existing Bioyond material ID usage during synchronization. - Added new bottle carrier definitions for single flask and updated existing ones. - Refactored dispensing station and reaction station bottle definitions for clarity and consistency. - Improved resource mapping and error handling in graphio for Bioyond resource conversion. - Introduced layout parameter in warehouse factory for better warehouse configuration. * 更新Bioyond仓库工厂,添加排序方式支持,优化坐标计算逻辑 * 更新Bioyond载架和甲板配置,调整样品板尺寸和仓库坐标 * 更新Bioyond资源同步,增强占用位置日志信息,修正坐标转换逻辑 * 更新Bioyond反应站和分配站配置,调整材料类型映射和ID,移除不必要的项 * support name change during materials change * fix json dumps * correct tip * 优化调度器API路径,更新相关方法描述 * 更新 BIOYOND 载架相关文档,调整 API 以支持自带试剂瓶的载架类型,修复资源获取时的子物料处理逻辑 * 实现资源删除时的同步处理,优化出库操作逻辑 * 修复 ItemizedCarrier 中的可见性逻辑 * 保存 Bioyond 原始信息到 unilabos_extra,以便出库时查询 * 根据 resource.capacity 判断是试剂瓶(载架)还是多瓶载架,走不同的奔曜转换 * Fix bioyond bottle_carriers ordering * 优化 Bioyond 物料同步逻辑,增强坐标解析和位置更新处理 * disable slave connect websocket * correct remove_resource stats * change uuid logger to trace level * enable slave mode * refactor(bioyond): 统一资源命名并优化物料同步逻辑 - 将DispensingStation和ReactionStation资源统一为PolymerStation命名 - 优化物料同步逻辑,支持耗材类型(typeMode=0)的查询 - 添加物料默认参数配置功能 - 调整仓库坐标布局 - 清理废弃资源定义 * feat(warehouses): 为仓库函数添加col_offset和layout参数 * refactor: 更新实验配置中的物料类型映射命名 将DispensingStation和ReactionStation的物料类型映射统一更名为PolymerStation,保持命名一致性 * fix: 更新实验配置中的载体名称从6VialCarrier到6StockCarrier * feat(bioyond): 实现物料创建与入库分离逻辑 将物料同步流程拆分为两个独立阶段:transfer阶段只创建物料,add阶段执行入库 简化状态检查接口,仅返回连接状态 * fix(reaction_station): 修正液体进料烧杯体积单位并增强返回结果 将液体进料烧杯的体积单位从μL改为g以匹配实际使用场景 在返回结果中添加merged_workflow和order_params字段,提供更完整的工作流信息 * feat(dispensing_station): 在任务创建返回结果中添加order_params信息 在create_order方法返回结果中增加order_params字段,以便调用方获取完整的任务参数 * fix(dispensing_station): 修改90%物料分配逻辑从分成3份改为直接使用 原逻辑将主称固体平均分成3份作为90%物料,现改为直接使用main_portion * feat(bioyond): 添加任务编码和任务ID的输出,支持批量任务创建后的状态监控 * refactor(registry): 简化设备配置中的任务结果处理逻辑 将多个单独的任务编码和ID字段合并为统一的return_info字段 更新相关描述以反映新的数据结构 * feat(工作站): 添加HTTP报送服务和任务完成状态跟踪 - 在graphio.py中添加API必需字段 - 实现工作站HTTP服务启动和停止逻辑 - 添加任务完成状态跟踪字典和等待方法 - 重写任务完成报送处理方法记录状态 - 支持批量任务完成等待和报告获取 * refactor(dispensing_station): 移除wait_for_order_completion_and_get_report功能 该功能已被wait_for_multiple_orders_and_get_reports替代,简化代码结构 * fix: 更新任务报告API错误 * fix(workstation_http_service): 修复状态查询中device_id获取逻辑 处理状态查询时安全获取device_id,避免因属性不存在导致的异常 * fix(bioyond_studio): 改进物料入库失败时的错误处理和日志记录 在物料入库API调用失败时,添加更详细的错误信息打印 同时修正station.py中对空响应和失败情况的判断逻辑 * refactor(bioyond): 优化瓶架载体的分配逻辑和注释说明 重构瓶架载体的分配逻辑,使用嵌套循环替代硬编码索引分配 添加更详细的坐标映射说明,明确PLR与Bioyond坐标的对应关系 * fix(bioyond_rpc): 修复物料入库成功时无data字段返回空的问题 当API返回成功但无data字段时,返回包含success标识的字典而非空字典 --------- Co-authored-by: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Co-authored-by: Junhan Chang * nmr * Update devices * bump version to 0.10.10 * Update repo files. * Add get_resource_with_dir & get_resource method * fix camera & workstation & warehouse & reaction station driver * update docs, test examples fix liquid_handler init bug * bump version to 0.10.11 * Add startup_json_path, disable_browser, port config * Update oss config * feat(bioyond_studio): 添加项目API接口支持及优化物料管理功能 添加通用项目API接口方法(_post_project_api, _delete_project_api)用于与LIMS系统交互 实现compute_experiment_design方法用于实验设计计算 新增brief_step_parameters等订单相关接口方法 优化物料转移逻辑,增加异步任务处理 扩展BioyondV1RPC类,添加批量物料操作、订单状态管理等功能 * feat(bioyond): 添加测量小瓶仓库和更新仓库工厂函数参数 * Support unilabos_samples key * add session_id and normal_exit * Add result schema and add TypedDict conversion. * Fix port error * Add backend api and update doc * Add get_regular_container func * Add get_regular_container func * Transfer_liquid (#176) * change 9320 desk row number to 4 * Updated 9320 host address * Updated 9320 host address * Add **kwargs in classes: PRCXI9300Deck and PRCXI9300Container * Removed all sample_id in prcxi_9320.json to avoid KeyError * 9320 machine testing settings * Typo * Typo in base_device_node.py * Enhance liquid handling functionality by adding support for multiple transfer modes (one-to-many, one-to-one, many-to-one) and improving parameter validation. Default channel usage is set when not specified. Adjusted mixing logic to ensure it only occurs when valid conditions are met. Updated documentation for clarity. * Auto dump logs, fix workstation input schema * Fix startup with remote resource error Resource dict fully change to "pose" key Update oss link Reduce pylabrobot conversion warning & force enable log dump. 更新 logo 图片 * signal when host node is ready * fix ros2 future print all logs to file fix resource dict dump error * update version to 0.10.12 * 修改sample_uuid的返回值 * 修改pose标签设定机制 * 添加 aspiate函数返回值 * 返回dispense后的sample_uuid * 添加self.pending_liquids_dict的重置方法 * 修改prcxi的json文件,解决trach错误问题 * 修改prcxijson,防止PlateT4的硬件错误 * 对laiyu移液站进行部分修改,取消多次初始化的问题 * 修改根据新的物料格式,修改可视化 * 添加切换枪头方法,添加mock振荡与加热方法 * 夹爪添加 * 删除多余的laiyu部分 * 云端可启动夹爪 * Delete __init__.py * Enhance PRCXI9300 classes with new Container and TipRack implementations, improving state management and initialization logic. Update JSON configuration to reflect type changes for containers and plates. * 修改上传数据 --------- Co-authored-by: Junhan Chang Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> Co-authored-by: Guangxin Zhang Co-authored-by: Xie Qiming <97236197+Andy6M@users.noreply.github.com> Co-authored-by: h840473807 <47357934+h840473807@users.noreply.github.com> Co-authored-by: LccLink <1951855008@qq.com> Co-authored-by: lixinyu1011 <61094742+lixinyu1011@users.noreply.github.com> Co-authored-by: shiyubo0410 Co-authored-by: hh.(SII) <103566763+Mile-Away@users.noreply.github.com> Co-authored-by: Xianwei Qi Co-authored-by: WenzheG Co-authored-by: Harry Liu <113173203+ALITTLELZ@users.noreply.github.com> Co-authored-by: q434343 <73513873+q434343@users.noreply.github.com> Co-authored-by: tt <166512503+tt11142023@users.noreply.github.com> Co-authored-by: xyc <49015816+xiaoyu10031@users.noreply.github.com> Co-authored-by: zhangshixiang <@zhangshixiang> Co-authored-by: zhangshixiang <554662886@qq.com> Co-authored-by: ALITTLELZ --- unilabos/app/web/client.py | 25 +- unilabos/device_mesh/resource_visalization.py | 15 +- unilabos/devices/laiyu_liquid/__init__.py | 307 - .../devices/laiyu_liquid/backend/__init__.py | 9 - .../laiyu_liquid/backend/laiyu_backend.py | 334 - .../laiyu_liquid/backend/rviz_backend.py | 209 - .../laiyu_liquid/config/deckconfig.json | 2620 - .../devices/laiyu_liquid/config/deckconfig.md | 14 - .../laiyu_liquid/controllers/__init__.py | 25 - .../controllers/pipette_controller.py | 1073 - .../controllers/xyz_controller.py | 1183 - .../devices/laiyu_liquid/core/__init__.py | 44 - .../laiyu_liquid/core/abstract_protocol.py | 529 - .../laiyu_liquid/core/laiyu_liquid_main.py | 888 - .../laiyu_liquid/core/laiyu_liquid_res.py | 954 - .../devices/laiyu_liquid/docs/CHANGELOG.md | 69 - .../hardware/SOPA气动式移液器RS485控制指令.md | 267 - .../docs/hardware/步进电机控制指令.md | 162 - .../docs/hardware/硬件连接配置指南.md | 1281 - unilabos/devices/laiyu_liquid/docs/readme.md | 269 - .../devices/laiyu_liquid/drivers/__init__.py | 30 - .../drivers/sopa_pipette_driver.py | 1079 - .../drivers/xyz_stepper_driver.py | 663 - .../devices/laiyu_liquid/tests/__init__.py | 13 - .../laiyu_liquid/tests/test_deck_config.py | 315 - .../devices/laiyu_liquid_test/__init__.py | 0 .../driver_enable_move_test.py | 138 - .../laiyu_liquid_test/driver_status_test.py | 58 - .../laiyu_liquid_test/work_origin.json | 8 - .../laiyu_liquid_test/xyz_stepper_driver.py | 336 - .../laiyu/backend/laiyu_v_backend.py | 8 +- .../laiyu/controllers/pipette_controller.py | 10 +- .../liquid_handler_abstract.py | 93 +- .../devices/liquid_handling/prcxi/prcxi.py | 444 +- .../devices/bioyond_dispensing_station.yaml | 50 - unilabos/registry/devices/laiyu_liquid.yaml | 11 +- unilabos/registry/devices/liquid_handler.yaml | 437 +- unilabos/ros/nodes/base_device_node.py | 30 +- unilabos/ros/nodes/presets/host_node.py | 16 +- .../nodes/presets/resource_mesh_manager.py | 10 +- unilabos/ros/nodes/resource_tracker.py | 16 +- .../test/experiments/prcxi_9320_with_res.json | 40337 +++++++++++++++ .../experiments/prcxi_9320_with_res_test.json | 40662 ++++++++++++++++ unilabos/utils/type_check.py | 6 +- 44 files changed, 81999 insertions(+), 13048 deletions(-) delete mode 100644 unilabos/devices/laiyu_liquid/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/backend/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/backend/laiyu_backend.py delete mode 100644 unilabos/devices/laiyu_liquid/backend/rviz_backend.py delete mode 100644 unilabos/devices/laiyu_liquid/config/deckconfig.json delete mode 100644 unilabos/devices/laiyu_liquid/config/deckconfig.md delete mode 100644 unilabos/devices/laiyu_liquid/controllers/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/controllers/pipette_controller.py delete mode 100644 unilabos/devices/laiyu_liquid/controllers/xyz_controller.py delete mode 100644 unilabos/devices/laiyu_liquid/core/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/core/abstract_protocol.py delete mode 100644 unilabos/devices/laiyu_liquid/core/laiyu_liquid_main.py delete mode 100644 unilabos/devices/laiyu_liquid/core/laiyu_liquid_res.py delete mode 100644 unilabos/devices/laiyu_liquid/docs/CHANGELOG.md delete mode 100644 unilabos/devices/laiyu_liquid/docs/hardware/SOPA气动式移液器RS485控制指令.md delete mode 100644 unilabos/devices/laiyu_liquid/docs/hardware/步进电机控制指令.md delete mode 100644 unilabos/devices/laiyu_liquid/docs/hardware/硬件连接配置指南.md delete mode 100644 unilabos/devices/laiyu_liquid/docs/readme.md delete mode 100644 unilabos/devices/laiyu_liquid/drivers/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/drivers/sopa_pipette_driver.py delete mode 100644 unilabos/devices/laiyu_liquid/drivers/xyz_stepper_driver.py delete mode 100644 unilabos/devices/laiyu_liquid/tests/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid/tests/test_deck_config.py delete mode 100644 unilabos/devices/laiyu_liquid_test/__init__.py delete mode 100644 unilabos/devices/laiyu_liquid_test/driver_enable_move_test.py delete mode 100644 unilabos/devices/laiyu_liquid_test/driver_status_test.py delete mode 100644 unilabos/devices/laiyu_liquid_test/work_origin.json delete mode 100644 unilabos/devices/laiyu_liquid_test/xyz_stepper_driver.py create mode 100644 unilabos/test/experiments/prcxi_9320_with_res.json create mode 100644 unilabos/test/experiments/prcxi_9320_with_res_test.json diff --git a/unilabos/app/web/client.py b/unilabos/app/web/client.py index 8968f033..b2fa5038 100644 --- a/unilabos/app/web/client.py +++ b/unilabos/app/web/client.py @@ -4,6 +4,7 @@ HTTP客户端模块 提供与远程服务器通信的客户端功能,只有host需要用 """ +from copy import deepcopy import json import os import time @@ -75,6 +76,26 @@ class HTTPClient: Returns: Dict[str, str]: 旧UUID到新UUID的映射关系 {old_uuid: new_uuid} """ + # 遍历 resources 及其所有子节点,将 pose.position.y 全部变为 -y + def invert_x_position(resource_instance, size_y: float = 0): + # 处理当前节点 + pose = getattr(resource_instance.res_content, "pose", None) + if pose and hasattr(pose, "position"): + position = getattr(pose, "position", None) + pose_size = getattr(pose, "size", None) + if position and hasattr(position, "y") and pose_size and hasattr(pose_size, "height"): + position.y = size_y - position.y - pose_size.height + # 递归处理子节点 + for child in getattr(resource_instance, "children", []): + _size_y = 0 + if pose and hasattr(pose, "size"): + _size_y = pose.size.height + invert_x_position(child, _size_y) + + # 处理所有树的所有节点,从树的根节点递归 + resources_reversed = deepcopy(resources) + for tree in getattr(resources_reversed, "trees", []): + invert_x_position(getattr(tree, "root_node", tree)) with open(os.path.join(BasicConfig.working_dir, "req_resource_tree_add.json"), "w", encoding="utf-8") as f: payload = {"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid} f.write(json.dumps(payload, indent=4)) @@ -85,14 +106,14 @@ class HTTPClient: info(f"首次添加资源,当前远程地址: {self.remote_addr}") response = requests.post( f"{self.remote_addr}/edge/material", - json={"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid}, + json={"nodes": [x for xs in resources_reversed.dump() for x in xs], "mount_uuid": mount_uuid}, headers={"Authorization": f"Lab {self.auth}"}, timeout=60, ) else: response = requests.put( f"{self.remote_addr}/edge/material", - json={"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid}, + json={"nodes": [x for xs in resources_reversed.dump() for x in xs], "mount_uuid": mount_uuid}, headers={"Authorization": f"Lab {self.auth}"}, timeout=10, ) diff --git a/unilabos/device_mesh/resource_visalization.py b/unilabos/device_mesh/resource_visalization.py index fc37150c..ee58d67e 100644 --- a/unilabos/device_mesh/resource_visalization.py +++ b/unilabos/device_mesh/resource_visalization.py @@ -128,14 +128,21 @@ class ResourceVisualization: new_dev.set("device_name", node["id"]+"_") # if node["parent"] is not None: # new_dev.set("station_name", node["parent"]+'_') - - new_dev.set("x",str(float(node["position"]["position"]["x"])/1000)) - new_dev.set("y",str(float(node["position"]["position"]["y"])/1000)) - new_dev.set("z",str(float(node["position"]["position"]["z"])/1000)) + if "position" in node: + new_dev.set("x",str(float(node["position"]["position"]["x"])/1000)) + new_dev.set("y",str(float(node["position"]["position"]["y"])/1000)) + new_dev.set("z",str(float(node["position"]["position"]["z"])/1000)) if "rotation" in node["config"]: new_dev.set("rx",str(float(node["config"]["rotation"]["x"]))) new_dev.set("ry",str(float(node["config"]["rotation"]["y"]))) new_dev.set("r",str(float(node["config"]["rotation"]["z"]))) + if "pose" in node: + new_dev.set("x",str(float(node["pose"]["position"]["x"])/1000)) + new_dev.set("y",str(float(node["pose"]["position"]["y"])/1000)) + new_dev.set("z",str(float(node["pose"]["position"]["z"])/1000)) + new_dev.set("rx",str(float(node["pose"]["rotation"]["x"]))) + new_dev.set("ry",str(float(node["pose"]["rotation"]["y"]))) + new_dev.set("r",str(float(node["pose"]["rotation"]["z"]))) if "device_config" in node["config"]: for key, value in node["config"]["device_config"].items(): new_dev.set(key, str(value)) diff --git a/unilabos/devices/laiyu_liquid/__init__.py b/unilabos/devices/laiyu_liquid/__init__.py deleted file mode 100644 index 89352521..00000000 --- a/unilabos/devices/laiyu_liquid/__init__.py +++ /dev/null @@ -1,307 +0,0 @@ -""" -LaiYu_Liquid 液体处理工作站集成模块 - -该模块提供了 LaiYu_Liquid 工作站与 UniLabOS 的完整集成,包括: -- 硬件后端和抽象接口 -- 资源定义和管理 -- 协议执行和液体传输 -- 工作台配置和布局 - -主要组件: -- LaiYuLiquidBackend: 硬件后端实现 -- LaiYuLiquid: 液体处理器抽象接口 -- 各种资源类:枪头架、板、容器等 -- 便捷创建函数和配置管理 - -使用示例: - from unilabos.devices.laiyu_liquid import ( - LaiYuLiquid, - LaiYuLiquidBackend, - create_standard_deck, - create_tip_rack_1000ul - ) - - # 创建后端和液体处理器 - backend = LaiYuLiquidBackend() - lh = LaiYuLiquid(backend=backend) - - # 创建工作台 - deck = create_standard_deck() - lh.deck = deck - - # 设置和运行 - await lh.setup() -""" - -# 版本信息 -__version__ = "1.0.0" -__author__ = "LaiYu_Liquid Integration Team" -__description__ = "LaiYu_Liquid 液体处理工作站 UniLabOS 集成模块" - -# 驱动程序导入 -from .drivers import ( - XYZStepperController, - SOPAPipette, - MotorAxis, - MotorStatus, - SOPAConfig, - SOPAStatusCode, - StepperMotorDriver -) - -# 控制器导入 -from .controllers import ( - XYZController, - PipetteController, -) - -# 后端导入 -from .backend.rviz_backend import ( - LiquidHandlerRvizBackend, -) - -# 资源类和创建函数导入 -from .core.laiyu_liquid_res import ( - LaiYuLiquidDeck, - LaiYuLiquidContainer, - LaiYuLiquidTipRack -) - -# 主设备类和配置 -from .core.laiyu_liquid_main import ( - LaiYuLiquid, - LaiYuLiquidConfig, - LaiYuLiquidDeck, - LaiYuLiquidContainer, - LaiYuLiquidTipRack, - create_quick_setup -) - -# 后端创建函数导入 -from .backend import ( - LaiYuLiquidBackend, - create_laiyu_backend, -) - -# 导出所有公共接口 -__all__ = [ - # 版本信息 - "__version__", - "__author__", - "__description__", - - # 驱动程序 - "SOPAPipette", - "SOPAConfig", - "StepperMotorDriver", - "XYZStepperController", - - # 控制器 - "PipetteController", - "XYZController", - - # 后端 - "LiquidHandlerRvizBackend", - - # 资源创建函数 - "create_tip_rack_1000ul", - "create_tip_rack_200ul", - "create_96_well_plate", - "create_deep_well_plate", - "create_8_tube_rack", - "create_standard_deck", - "create_waste_container", - "create_wash_container", - "create_reagent_container", - "load_deck_config", - - # 后端创建函数 - "create_laiyu_backend", - - # 主要类 - "LaiYuLiquid", - "LaiYuLiquidConfig", - "LaiYuLiquidBackend", - "LaiYuLiquidDeck", - - # 工具函数 - "get_version", - "get_supported_resources", - "create_quick_setup", - "validate_installation", - "print_module_info", - "setup_logging", -] - -# 别名定义,为了向后兼容 -LaiYuLiquidDevice = LaiYuLiquid # 主设备类别名 -LaiYuLiquidController = XYZController # 控制器别名 -LaiYuLiquidDriver = XYZStepperController # 驱动器别名 - -# 模块级别的便捷函数 - -def get_version() -> str: - """ - 获取模块版本 - - Returns: - str: 版本号 - """ - return __version__ - - -def get_supported_resources() -> dict: - """ - 获取支持的资源类型 - - Returns: - dict: 支持的资源类型字典 - """ - return { - "tip_racks": { - "LaiYuLiquidTipRack": LaiYuLiquidTipRack, - }, - "containers": { - "LaiYuLiquidContainer": LaiYuLiquidContainer, - }, - "decks": { - "LaiYuLiquidDeck": LaiYuLiquidDeck, - }, - "devices": { - "LaiYuLiquid": LaiYuLiquid, - } - } - - -def create_quick_setup() -> tuple: - """ - 快速创建基本设置 - - Returns: - tuple: (backend, controllers, resources) 的元组 - """ - # 创建后端 - backend = LiquidHandlerRvizBackend() - - # 创建控制器(使用默认端口进行演示) - pipette_controller = PipetteController(port="/dev/ttyUSB0", address=4) - xyz_controller = XYZController(port="/dev/ttyUSB1", auto_connect=False) - - # 创建测试资源 - tip_rack_1000 = create_tip_rack_1000ul("tip_rack_1000") - tip_rack_200 = create_tip_rack_200ul("tip_rack_200") - well_plate = create_96_well_plate("96_well_plate") - - controllers = { - 'pipette': pipette_controller, - 'xyz': xyz_controller - } - - resources = { - 'tip_rack_1000': tip_rack_1000, - 'tip_rack_200': tip_rack_200, - 'well_plate': well_plate - } - - return backend, controllers, resources - - -def validate_installation() -> bool: - """ - 验证模块安装是否正确 - - Returns: - bool: 安装是否正确 - """ - try: - # 检查核心类是否可以导入 - from .core.laiyu_liquid_main import LaiYuLiquid, LaiYuLiquidConfig - from .backend import LaiYuLiquidBackend - from .controllers import XYZController, PipetteController - from .drivers import XYZStepperController, SOPAPipette - - # 尝试创建基本对象 - config = LaiYuLiquidConfig() - backend = create_laiyu_backend("validation_test") - - print("模块安装验证成功") - return True - - except Exception as e: - print(f"模块安装验证失败: {e}") - return False - - -def print_module_info(): - """打印模块信息""" - print(f"LaiYu_Liquid 集成模块") - print(f"版本: {__version__}") - print(f"作者: {__author__}") - print(f"描述: {__description__}") - print(f"") - print(f"支持的资源类型:") - - resources = get_supported_resources() - for category, types in resources.items(): - print(f" {category}:") - for type_name, type_class in types.items(): - print(f" - {type_name}: {type_class.__name__}") - - print(f"") - print(f"主要功能:") - print(f" - 硬件集成: LaiYuLiquidBackend") - print(f" - 抽象接口: LaiYuLiquid") - print(f" - 资源管理: 各种资源类和创建函数") - print(f" - 协议执行: transfer_liquid 和相关函数") - print(f" - 配置管理: deck.json 和加载函数") - - -# 模块初始化时的检查 -def _check_dependencies(): - """检查依赖项""" - try: - import pylabrobot - import asyncio - import json - import logging - return True - except ImportError as e: - import logging - logging.warning(f"缺少依赖项 {e}") - return False - - -# 执行依赖检查 -_dependencies_ok = _check_dependencies() - -if not _dependencies_ok: - import logging - logging.warning("某些依赖项缺失,模块功能可能受限") - - -# 模块级别的日志配置 -import logging - -def setup_logging(level: str = "INFO"): - """ - 设置模块日志 - - Args: - level: 日志级别 (DEBUG, INFO, WARNING, ERROR) - """ - logger = logging.getLogger("LaiYu_Liquid") - logger.setLevel(getattr(logging, level.upper())) - - if not logger.handlers: - handler = logging.StreamHandler() - formatter = logging.Formatter( - '%(asctime)s - %(name)s - %(levelname)s - %(message)s' - ) - handler.setFormatter(formatter) - logger.addHandler(handler) - - return logger - - -# 默认日志设置 -_logger = setup_logging() \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/backend/__init__.py b/unilabos/devices/laiyu_liquid/backend/__init__.py deleted file mode 100644 index 4bf29392..00000000 --- a/unilabos/devices/laiyu_liquid/backend/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -LaiYu液体处理设备后端模块 - -提供设备后端接口和实现 -""" - -from .laiyu_backend import LaiYuLiquidBackend, create_laiyu_backend - -__all__ = ['LaiYuLiquidBackend', 'create_laiyu_backend'] \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/backend/laiyu_backend.py b/unilabos/devices/laiyu_liquid/backend/laiyu_backend.py deleted file mode 100644 index 5e8041c0..00000000 --- a/unilabos/devices/laiyu_liquid/backend/laiyu_backend.py +++ /dev/null @@ -1,334 +0,0 @@ -""" -LaiYu液体处理设备后端实现 - -提供设备的后端接口和控制逻辑 -""" - -import logging -from typing import Dict, Any, Optional, List -from abc import ABC, abstractmethod - -# 尝试导入PyLabRobot后端 -try: - from pylabrobot.liquid_handling.backends import LiquidHandlerBackend - PYLABROBOT_AVAILABLE = True -except ImportError: - PYLABROBOT_AVAILABLE = False - # 创建模拟后端基类 - class LiquidHandlerBackend: - def __init__(self, name: str): - self.name = name - self.is_connected = False - - def connect(self): - """连接设备""" - pass - - def disconnect(self): - """断开连接""" - pass - - -class LaiYuLiquidBackend(LiquidHandlerBackend): - """LaiYu液体处理设备后端""" - - def __init__(self, name: str = "LaiYu_Liquid_Backend"): - """ - 初始化LaiYu液体处理设备后端 - - Args: - name: 后端名称 - """ - if PYLABROBOT_AVAILABLE: - # PyLabRobot 的 LiquidHandlerBackend 不接受参数 - super().__init__() - else: - # 模拟版本接受 name 参数 - super().__init__(name) - - self.name = name - self.logger = logging.getLogger(__name__) - self.is_connected = False - self.device_info = { - "name": "LaiYu液体处理设备", - "version": "1.0.0", - "manufacturer": "LaiYu", - "model": "LaiYu_Liquid_Handler" - } - - def connect(self) -> bool: - """ - 连接到LaiYu液体处理设备 - - Returns: - bool: 连接是否成功 - """ - try: - self.logger.info("正在连接到LaiYu液体处理设备...") - # 这里应该实现实际的设备连接逻辑 - # 目前返回模拟连接成功 - self.is_connected = True - self.logger.info("成功连接到LaiYu液体处理设备") - return True - except Exception as e: - self.logger.error(f"连接LaiYu液体处理设备失败: {e}") - self.is_connected = False - return False - - def disconnect(self) -> bool: - """ - 断开与LaiYu液体处理设备的连接 - - Returns: - bool: 断开连接是否成功 - """ - try: - self.logger.info("正在断开与LaiYu液体处理设备的连接...") - # 这里应该实现实际的设备断开连接逻辑 - self.is_connected = False - self.logger.info("成功断开与LaiYu液体处理设备的连接") - return True - except Exception as e: - self.logger.error(f"断开LaiYu液体处理设备连接失败: {e}") - return False - - def is_device_connected(self) -> bool: - """ - 检查设备是否已连接 - - Returns: - bool: 设备是否已连接 - """ - return self.is_connected - - def get_device_info(self) -> Dict[str, Any]: - """ - 获取设备信息 - - Returns: - Dict[str, Any]: 设备信息字典 - """ - return self.device_info.copy() - - def home_device(self) -> bool: - """ - 设备归零操作 - - Returns: - bool: 归零是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行归零操作") - return False - - try: - self.logger.info("正在执行设备归零操作...") - # 这里应该实现实际的设备归零逻辑 - self.logger.info("设备归零操作完成") - return True - except Exception as e: - self.logger.error(f"设备归零操作失败: {e}") - return False - - def aspirate(self, volume: float, location: Dict[str, Any]) -> bool: - """ - 吸液操作 - - Args: - volume: 吸液体积 (微升) - location: 吸液位置信息 - - Returns: - bool: 吸液是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行吸液操作") - return False - - try: - self.logger.info(f"正在执行吸液操作: 体积={volume}μL, 位置={location}") - # 这里应该实现实际的吸液逻辑 - self.logger.info("吸液操作完成") - return True - except Exception as e: - self.logger.error(f"吸液操作失败: {e}") - return False - - def dispense(self, volume: float, location: Dict[str, Any]) -> bool: - """ - 排液操作 - - Args: - volume: 排液体积 (微升) - location: 排液位置信息 - - Returns: - bool: 排液是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行排液操作") - return False - - try: - self.logger.info(f"正在执行排液操作: 体积={volume}μL, 位置={location}") - # 这里应该实现实际的排液逻辑 - self.logger.info("排液操作完成") - return True - except Exception as e: - self.logger.error(f"排液操作失败: {e}") - return False - - def pick_up_tip(self, location: Dict[str, Any]) -> bool: - """ - 取枪头操作 - - Args: - location: 枪头位置信息 - - Returns: - bool: 取枪头是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行取枪头操作") - return False - - try: - self.logger.info(f"正在执行取枪头操作: 位置={location}") - # 这里应该实现实际的取枪头逻辑 - self.logger.info("取枪头操作完成") - return True - except Exception as e: - self.logger.error(f"取枪头操作失败: {e}") - return False - - def drop_tip(self, location: Dict[str, Any]) -> bool: - """ - 丢弃枪头操作 - - Args: - location: 丢弃位置信息 - - Returns: - bool: 丢弃枪头是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行丢弃枪头操作") - return False - - try: - self.logger.info(f"正在执行丢弃枪头操作: 位置={location}") - # 这里应该实现实际的丢弃枪头逻辑 - self.logger.info("丢弃枪头操作完成") - return True - except Exception as e: - self.logger.error(f"丢弃枪头操作失败: {e}") - return False - - def move_to(self, location: Dict[str, Any]) -> bool: - """ - 移动到指定位置 - - Args: - location: 目标位置信息 - - Returns: - bool: 移动是否成功 - """ - if not self.is_connected: - self.logger.error("设备未连接,无法执行移动操作") - return False - - try: - self.logger.info(f"正在移动到位置: {location}") - # 这里应该实现实际的移动逻辑 - self.logger.info("移动操作完成") - return True - except Exception as e: - self.logger.error(f"移动操作失败: {e}") - return False - - def get_status(self) -> Dict[str, Any]: - """ - 获取设备状态 - - Returns: - Dict[str, Any]: 设备状态信息 - """ - return { - "connected": self.is_connected, - "device_info": self.device_info, - "status": "ready" if self.is_connected else "disconnected" - } - - # PyLabRobot 抽象方法实现 - def stop(self): - """停止所有操作""" - self.logger.info("停止所有操作") - pass - - @property - def num_channels(self) -> int: - """返回通道数量""" - return 1 # 单通道移液器 - - def can_pick_up_tip(self, tip_rack, tip_position) -> bool: - """检查是否可以拾取吸头""" - return True # 简化实现,总是返回True - - def pick_up_tips(self, tip_rack, tip_positions): - """拾取多个吸头""" - self.logger.info(f"拾取吸头: {tip_positions}") - pass - - def drop_tips(self, tip_rack, tip_positions): - """丢弃多个吸头""" - self.logger.info(f"丢弃吸头: {tip_positions}") - pass - - def pick_up_tips96(self, tip_rack): - """拾取96个吸头""" - self.logger.info("拾取96个吸头") - pass - - def drop_tips96(self, tip_rack): - """丢弃96个吸头""" - self.logger.info("丢弃96个吸头") - pass - - def aspirate96(self, volume, plate, well_positions): - """96通道吸液""" - self.logger.info(f"96通道吸液: 体积={volume}") - pass - - def dispense96(self, volume, plate, well_positions): - """96通道排液""" - self.logger.info(f"96通道排液: 体积={volume}") - pass - - def pick_up_resource(self, resource, location): - """拾取资源""" - self.logger.info(f"拾取资源: {resource}") - pass - - def drop_resource(self, resource, location): - """放置资源""" - self.logger.info(f"放置资源: {resource}") - pass - - def move_picked_up_resource(self, resource, location): - """移动已拾取的资源""" - self.logger.info(f"移动资源: {resource} 到 {location}") - pass - - -def create_laiyu_backend(name: str = "LaiYu_Liquid_Backend") -> LaiYuLiquidBackend: - """ - 创建LaiYu液体处理设备后端实例 - - Args: - name: 后端名称 - - Returns: - LaiYuLiquidBackend: 后端实例 - """ - return LaiYuLiquidBackend(name) \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/backend/rviz_backend.py b/unilabos/devices/laiyu_liquid/backend/rviz_backend.py deleted file mode 100644 index 44e7be46..00000000 --- a/unilabos/devices/laiyu_liquid/backend/rviz_backend.py +++ /dev/null @@ -1,209 +0,0 @@ - -import json -from typing import List, Optional, Union - -from pylabrobot.liquid_handling.backends.backend import ( - LiquidHandlerBackend, -) -from pylabrobot.liquid_handling.standard import ( - Drop, - DropTipRack, - MultiHeadAspirationContainer, - MultiHeadAspirationPlate, - MultiHeadDispenseContainer, - MultiHeadDispensePlate, - Pickup, - PickupTipRack, - ResourceDrop, - ResourceMove, - ResourcePickup, - SingleChannelAspiration, - SingleChannelDispense, -) -from pylabrobot.resources import Resource, Tip - -import rclpy -from rclpy.node import Node -from sensor_msgs.msg import JointState -import time -from rclpy.action import ActionClient -from unilabos_msgs.action import SendCmd -import re - -from unilabos.devices.ros_dev.liquid_handler_joint_publisher import JointStatePublisher - - -class LiquidHandlerRvizBackend(LiquidHandlerBackend): - """Chatter box backend for device-free testing. Prints out all operations.""" - - _pip_length = 5 - _vol_length = 8 - _resource_length = 20 - _offset_length = 16 - _flow_rate_length = 10 - _blowout_length = 10 - _lld_z_length = 10 - _kwargs_length = 15 - _tip_type_length = 12 - _max_volume_length = 16 - _fitting_depth_length = 20 - _tip_length_length = 16 - # _pickup_method_length = 20 - _filter_length = 10 - - def __init__(self, num_channels: int = 8): - """Initialize a chatter box backend.""" - super().__init__() - self._num_channels = num_channels -# rclpy.init() - if not rclpy.ok(): - rclpy.init() - self.joint_state_publisher = None - - async def setup(self): - self.joint_state_publisher = JointStatePublisher() - await super().setup() - async def stop(self): - pass - - def serialize(self) -> dict: - return {**super().serialize(), "num_channels": self.num_channels} - - @property - def num_channels(self) -> int: - return self._num_channels - - async def assigned_resource_callback(self, resource: Resource): - pass - - async def unassigned_resource_callback(self, name: str): - pass - - async def pick_up_tips(self, ops: List[Pickup], use_channels: List[int], **backend_kwargs): - - for op, channel in zip(ops, use_channels): - offset = f"{round(op.offset.x, 1)},{round(op.offset.y, 1)},{round(op.offset.z, 1)}" - row = ( - f" p{channel}: " - f"{op.resource.name[-30:]:<{LiquidHandlerRvizBackend._resource_length}} " - f"{offset:<{LiquidHandlerRvizBackend._offset_length}} " - f"{op.tip.__class__.__name__:<{LiquidHandlerRvizBackend._tip_type_length}} " - f"{op.tip.maximal_volume:<{LiquidHandlerRvizBackend._max_volume_length}} " - f"{op.tip.fitting_depth:<{LiquidHandlerRvizBackend._fitting_depth_length}} " - f"{op.tip.total_tip_length:<{LiquidHandlerRvizBackend._tip_length_length}} " - # f"{str(op.tip.pickup_method)[-20:]:<{ChatterboxBackend._pickup_method_length}} " - f"{'Yes' if op.tip.has_filter else 'No':<{LiquidHandlerRvizBackend._filter_length}}" - ) - coordinate = ops[0].resource.get_absolute_location(x="c",y="c") - x = coordinate.x - y = coordinate.y - z = coordinate.z + 70 - self.joint_state_publisher.send_resource_action(ops[0].resource.name, x, y, z, "pick") - # goback() - - - - - async def drop_tips(self, ops: List[Drop], use_channels: List[int], **backend_kwargs): - - coordinate = ops[0].resource.get_absolute_location(x="c",y="c") - x = coordinate.x - y = coordinate.y - z = coordinate.z + 70 - self.joint_state_publisher.send_resource_action(ops[0].resource.name, x, y, z, "drop_trash") - # goback() - - async def aspirate( - self, - ops: List[SingleChannelAspiration], - use_channels: List[int], - **backend_kwargs, - ): - # 执行吸液操作 - pass - - for o, p in zip(ops, use_channels): - offset = f"{round(o.offset.x, 1)},{round(o.offset.y, 1)},{round(o.offset.z, 1)}" - row = ( - f" p{p}: " - f"{o.volume:<{LiquidHandlerRvizBackend._vol_length}} " - f"{o.resource.name[-20:]:<{LiquidHandlerRvizBackend._resource_length}} " - f"{offset:<{LiquidHandlerRvizBackend._offset_length}} " - f"{str(o.flow_rate):<{LiquidHandlerRvizBackend._flow_rate_length}} " - f"{str(o.blow_out_air_volume):<{LiquidHandlerRvizBackend._blowout_length}} " - f"{str(o.liquid_height):<{LiquidHandlerRvizBackend._lld_z_length}} " - # f"{o.liquids if o.liquids is not None else 'none'}" - ) - for key, value in backend_kwargs.items(): - if isinstance(value, list) and all(isinstance(v, bool) for v in value): - value = "".join("T" if v else "F" for v in value) - if isinstance(value, list): - value = "".join(map(str, value)) - row += f" {value:<15}" - coordinate = ops[0].resource.get_absolute_location(x="c",y="c") - x = coordinate.x - y = coordinate.y - z = coordinate.z + 70 - self.joint_state_publisher.send_resource_action(ops[0].resource.name, x, y, z, "") - - - async def dispense( - self, - ops: List[SingleChannelDispense], - use_channels: List[int], - **backend_kwargs, - ): - - for o, p in zip(ops, use_channels): - offset = f"{round(o.offset.x, 1)},{round(o.offset.y, 1)},{round(o.offset.z, 1)}" - row = ( - f" p{p}: " - f"{o.volume:<{LiquidHandlerRvizBackend._vol_length}} " - f"{o.resource.name[-20:]:<{LiquidHandlerRvizBackend._resource_length}} " - f"{offset:<{LiquidHandlerRvizBackend._offset_length}} " - f"{str(o.flow_rate):<{LiquidHandlerRvizBackend._flow_rate_length}} " - f"{str(o.blow_out_air_volume):<{LiquidHandlerRvizBackend._blowout_length}} " - f"{str(o.liquid_height):<{LiquidHandlerRvizBackend._lld_z_length}} " - # f"{o.liquids if o.liquids is not None else 'none'}" - ) - for key, value in backend_kwargs.items(): - if isinstance(value, list) and all(isinstance(v, bool) for v in value): - value = "".join("T" if v else "F" for v in value) - if isinstance(value, list): - value = "".join(map(str, value)) - row += f" {value:<{LiquidHandlerRvizBackend._kwargs_length}}" - coordinate = ops[0].resource.get_absolute_location(x="c",y="c") - x = coordinate.x - y = coordinate.y - z = coordinate.z + 70 - self.joint_state_publisher.send_resource_action(ops[0].resource.name, x, y, z, "") - - async def pick_up_tips96(self, pickup: PickupTipRack, **backend_kwargs): - pass - - async def drop_tips96(self, drop: DropTipRack, **backend_kwargs): - pass - - async def aspirate96( - self, aspiration: Union[MultiHeadAspirationPlate, MultiHeadAspirationContainer] - ): - pass - - async def dispense96(self, dispense: Union[MultiHeadDispensePlate, MultiHeadDispenseContainer]): - pass - - async def pick_up_resource(self, pickup: ResourcePickup): - # 执行资源拾取操作 - pass - - async def move_picked_up_resource(self, move: ResourceMove): - # 执行资源移动操作 - pass - - async def drop_resource(self, drop: ResourceDrop): - # 执行资源放置操作 - pass - - def can_pick_up_tip(self, channel_idx: int, tip: Tip) -> bool: - return True - \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/config/deckconfig.json b/unilabos/devices/laiyu_liquid/config/deckconfig.json deleted file mode 100644 index ddda7e0f..00000000 --- a/unilabos/devices/laiyu_liquid/config/deckconfig.json +++ /dev/null @@ -1,2620 +0,0 @@ -{ - "name": "LaiYu_Liquid_Deck", - "size_x": 340.0, - "size_y": 250.0, - "size_z": 160.0, - "coordinate_system": { - "origin": "top_left", - "x_axis": "right", - "y_axis": "down", - "z_axis": "up", - "units": "mm" - }, - "children": [ - { - "id": "module_1_8tubes", - "name": "8管位置模块", - "type": "tube_rack", - "position": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "size": { - "x": 151.0, - "y": 75.0, - "z": 75.0 - }, - "wells": [ - { - "id": "A1", - "position": { - "x": 23.0, - "y": 20.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "A2", - "position": { - "x": 58.0, - "y": 20.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "A3", - "position": { - "x": 93.0, - "y": 20.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "A4", - "position": { - "x": 128.0, - "y": 20.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "B1", - "position": { - "x": 23.0, - "y": 55.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "B2", - "position": { - "x": 58.0, - "y": 55.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "B3", - "position": { - "x": 93.0, - "y": 55.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - }, - { - "id": "B4", - "position": { - "x": 128.0, - "y": 55.0, - "z": 0.0 - }, - "diameter": 29.0, - "depth": 117.0, - "volume": 77000.0, - "shape": "circular" - } - ], - "well_spacing": { - "x": 35.0, - "y": 35.0 - }, - "grid": { - "rows": 2, - "columns": 4, - "row_labels": ["A", "B"], - "column_labels": ["1", "2", "3", "4"] - }, - "metadata": { - "description": "8个试管位置,2x4排列", - "max_volume_ul": 77000, - "well_count": 8, - "tube_type": "50ml_falcon" - } - }, - { - "id": "module_2_96well_deep", - "name": "96深孔板", - "type": "96_well_plate", - "position": { - "x": 175.0, - "y": 11.0, - "z": 48.5 - }, - "size": { - "x": 127.1, - "y": 85.6, - "z": 45.5 - }, - "wells": [ - { - "id": "A01", - "position": { - "x": 175.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A02", - "position": { - "x": 184.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A03", - "position": { - "x": 193.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A04", - "position": { - "x": 202.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A05", - "position": { - "x": 211.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A06", - "position": { - "x": 220.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A07", - "position": { - "x": 229.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A08", - "position": { - "x": 238.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A09", - "position": { - "x": 247.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A10", - "position": { - "x": 256.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A11", - "position": { - "x": 265.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "A12", - "position": { - "x": 274.0, - "y": 11.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B01", - "position": { - "x": 175.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B02", - "position": { - "x": 184.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B03", - "position": { - "x": 193.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B04", - "position": { - "x": 202.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B05", - "position": { - "x": 211.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B06", - "position": { - "x": 220.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B07", - "position": { - "x": 229.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B08", - "position": { - "x": 238.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B09", - "position": { - "x": 247.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B10", - "position": { - "x": 256.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B11", - "position": { - "x": 265.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "B12", - "position": { - "x": 274.0, - "y": 20.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C01", - "position": { - "x": 175.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C02", - "position": { - "x": 184.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C03", - "position": { - "x": 193.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C04", - "position": { - "x": 202.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C05", - "position": { - "x": 211.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C06", - "position": { - "x": 220.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C07", - "position": { - "x": 229.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C08", - "position": { - "x": 238.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C09", - "position": { - "x": 247.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C10", - "position": { - "x": 256.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C11", - "position": { - "x": 265.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "C12", - "position": { - "x": 274.0, - "y": 29.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D01", - "position": { - "x": 175.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D02", - "position": { - "x": 184.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D03", - "position": { - "x": 193.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D04", - "position": { - "x": 202.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D05", - "position": { - "x": 211.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D06", - "position": { - "x": 220.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D07", - "position": { - "x": 229.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D08", - "position": { - "x": 238.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D09", - "position": { - "x": 247.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D10", - "position": { - "x": 256.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D11", - "position": { - "x": 265.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "D12", - "position": { - "x": 274.0, - "y": 38.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E01", - "position": { - "x": 175.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E02", - "position": { - "x": 184.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E03", - "position": { - "x": 193.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E04", - "position": { - "x": 202.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E05", - "position": { - "x": 211.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E06", - "position": { - "x": 220.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E07", - "position": { - "x": 229.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E08", - "position": { - "x": 238.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E09", - "position": { - "x": 247.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E10", - "position": { - "x": 256.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E11", - "position": { - "x": 265.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "E12", - "position": { - "x": 274.0, - "y": 47.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F01", - "position": { - "x": 175.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F02", - "position": { - "x": 184.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F03", - "position": { - "x": 193.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F04", - "position": { - "x": 202.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F05", - "position": { - "x": 211.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F06", - "position": { - "x": 220.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F07", - "position": { - "x": 229.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F08", - "position": { - "x": 238.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F09", - "position": { - "x": 247.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F10", - "position": { - "x": 256.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F11", - "position": { - "x": 265.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "F12", - "position": { - "x": 274.0, - "y": 56.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G01", - "position": { - "x": 175.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G02", - "position": { - "x": 184.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G03", - "position": { - "x": 193.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G04", - "position": { - "x": 202.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G05", - "position": { - "x": 211.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G06", - "position": { - "x": 220.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G07", - "position": { - "x": 229.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G08", - "position": { - "x": 238.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G09", - "position": { - "x": 247.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G10", - "position": { - "x": 256.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G11", - "position": { - "x": 265.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "G12", - "position": { - "x": 274.0, - "y": 65.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H01", - "position": { - "x": 175.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H02", - "position": { - "x": 184.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H03", - "position": { - "x": 193.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H04", - "position": { - "x": 202.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H05", - "position": { - "x": 211.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H06", - "position": { - "x": 220.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H07", - "position": { - "x": 229.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H08", - "position": { - "x": 238.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H09", - "position": { - "x": 247.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H10", - "position": { - "x": 256.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H11", - "position": { - "x": 265.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - }, - { - "id": "H12", - "position": { - "x": 274.0, - "y": 74.0, - "z": 48.5 - }, - "diameter": 8.2, - "depth": 39.4, - "volume": 2080.0, - "shape": "circular" - } - ], - "well_spacing": { - "x": 9.0, - "y": 9.0 - }, - "grid": { - "rows": 8, - "columns": 12, - "row_labels": ["A", "B", "C", "D", "E", "F", "G", "H"], - "column_labels": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] - }, - "metadata": { - "description": "深孔96孔板", - "max_volume_ul": 2080, - "well_count": 96, - "plate_type": "deep_well_plate" - } - }, - { - "id": "module_3_beaker", - "name": "敞口玻璃瓶", - "type": "beaker_holder", - "position": { - "x": 65.0, - "y": 143.5, - "z": 0.0 - }, - "size": { - "x": 130.0, - "y": 117.0, - "z": 110.0 - }, - "wells": [ - { - "id": "A1", - "position": { - "x": 65.0, - "y": 143.5, - "z": 0.0 - }, - "diameter": 80.0, - "depth": 145.0, - "volume": 500000.0, - "shape": "circular", - "container_type": "beaker" - } - ], - "supported_containers": [ - { - "type": "beaker_250ml", - "diameter": 70.0, - "height": 95.0, - "volume": 250000.0 - }, - { - "type": "beaker_500ml", - "diameter": 85.0, - "height": 115.0, - "volume": 500000.0 - }, - { - "type": "beaker_1000ml", - "diameter": 105.0, - "height": 145.0, - "volume": 1000000.0 - } - ], - "metadata": { - "description": "敞口玻璃瓶固定座,支持250ml-1000ml烧杯", - "max_beaker_diameter": 80.0, - "max_beaker_height": 145.0, - "well_count": 1, - "access_from_top": true - } - }, - { - "id": "module_4_96well_tips", - "name": "96枪头盒", - "type": "96_tip_rack", - "position": { - "x": 165.62, - "y": 115.5, - "z": 103.0 - }, - "size": { - "x": 134.0, - "y": 96.0, - "z": 7.0 - }, - "wells": [ - { - "id": "A01", - "position": { - "x": 165.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A02", - "position": { - "x": 174.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A03", - "position": { - "x": 183.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A04", - "position": { - "x": 192.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A05", - "position": { - "x": 201.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A06", - "position": { - "x": 210.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A07", - "position": { - "x": 219.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A08", - "position": { - "x": 228.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A09", - "position": { - "x": 237.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A10", - "position": { - "x": 246.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A11", - "position": { - "x": 255.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "A12", - "position": { - "x": 264.62, - "y": 115.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B01", - "position": { - "x": 165.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B02", - "position": { - "x": 174.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B03", - "position": { - "x": 183.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B04", - "position": { - "x": 192.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B05", - "position": { - "x": 201.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B06", - "position": { - "x": 210.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B07", - "position": { - "x": 219.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B08", - "position": { - "x": 228.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B09", - "position": { - "x": 237.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B10", - "position": { - "x": 246.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B11", - "position": { - "x": 255.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "B12", - "position": { - "x": 264.62, - "y": 124.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C01", - "position": { - "x": 165.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C02", - "position": { - "x": 174.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C03", - "position": { - "x": 183.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C04", - "position": { - "x": 192.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C05", - "position": { - "x": 201.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C06", - "position": { - "x": 210.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C07", - "position": { - "x": 219.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C08", - "position": { - "x": 228.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C09", - "position": { - "x": 237.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C10", - "position": { - "x": 246.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C11", - "position": { - "x": 255.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "C12", - "position": { - "x": 264.62, - "y": 133.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D01", - "position": { - "x": 165.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D02", - "position": { - "x": 174.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D03", - "position": { - "x": 183.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D04", - "position": { - "x": 192.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D05", - "position": { - "x": 201.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D06", - "position": { - "x": 210.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D07", - "position": { - "x": 219.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D08", - "position": { - "x": 228.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D09", - "position": { - "x": 237.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D10", - "position": { - "x": 246.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D11", - "position": { - "x": 255.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "D12", - "position": { - "x": 264.62, - "y": 142.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E01", - "position": { - "x": 165.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E02", - "position": { - "x": 174.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E03", - "position": { - "x": 183.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E04", - "position": { - "x": 192.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E05", - "position": { - "x": 201.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E06", - "position": { - "x": 210.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E07", - "position": { - "x": 219.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E08", - "position": { - "x": 228.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E09", - "position": { - "x": 237.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E10", - "position": { - "x": 246.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E11", - "position": { - "x": 255.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "E12", - "position": { - "x": 264.62, - "y": 151.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F01", - "position": { - "x": 165.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F02", - "position": { - "x": 174.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F03", - "position": { - "x": 183.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F04", - "position": { - "x": 192.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F05", - "position": { - "x": 201.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F06", - "position": { - "x": 210.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F07", - "position": { - "x": 219.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F08", - "position": { - "x": 228.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F09", - "position": { - "x": 237.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F10", - "position": { - "x": 246.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F11", - "position": { - "x": 255.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "F12", - "position": { - "x": 264.62, - "y": 160.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G01", - "position": { - "x": 165.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G02", - "position": { - "x": 174.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G03", - "position": { - "x": 183.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G04", - "position": { - "x": 192.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G05", - "position": { - "x": 201.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G06", - "position": { - "x": 210.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G07", - "position": { - "x": 219.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G08", - "position": { - "x": 228.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G09", - "position": { - "x": 237.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G10", - "position": { - "x": 246.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G11", - "position": { - "x": 255.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "G12", - "position": { - "x": 264.62, - "y": 169.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H01", - "position": { - "x": 165.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H02", - "position": { - "x": 174.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H03", - "position": { - "x": 183.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H04", - "position": { - "x": 192.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H05", - "position": { - "x": 201.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H06", - "position": { - "x": 210.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H07", - "position": { - "x": 219.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H08", - "position": { - "x": 228.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H09", - "position": { - "x": 237.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H10", - "position": { - "x": 246.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H11", - "position": { - "x": 255.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - }, - { - "id": "H12", - "position": { - "x": 264.62, - "y": 178.5, - "z": 103.0 - }, - "diameter": 9.0, - "depth": 95.0, - "volume": 6000.0, - "shape": "circular" - } - ], - "well_spacing": { - "x": 9.0, - "y": 9.0 - }, - "grid": { - "rows": 8, - "columns": 12, - "row_labels": ["A", "B", "C", "D", "E", "F", "G", "H"], - "column_labels": ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"] - }, - "metadata": { - "description": "标准96孔枪头盒", - "max_volume_ul": 6000, - "well_count": 96, - "plate_type": "tip_rack" - } - } - ], - "deck_metadata": { - "total_modules": 4, - "total_wells": 201, - "deck_area": { - "used_x": 299.62, - "used_y": 260.5, - "used_z": 103.0, - "efficiency_x": 88.1, - "efficiency_y": 104.2, - "efficiency_z": 64.4 - }, - "safety_margins": { - "x_min": 10.0, - "x_max": 10.0, - "y_min": 10.0, - "y_max": 10.0, - "z_clearance": 20.0 - }, - "calibration_points": [ - { - "id": "origin", - "position": {"x": 0.0, "y": 0.0, "z": 0.0}, - "description": "工作台左上角原点" - }, - { - "id": "module_1_ref", - "position": {"x": 23.0, "y": 20.0, "z": 0.0}, - "description": "模块1试管架基准孔A1" - }, - { - "id": "module_2_ref", - "position": {"x": 175.0, "y": 11.0, "z": 48.5}, - "description": "模块2深孔板基准孔A01" - }, - { - "id": "module_3_ref", - "position": {"x": 65.0, "y": 143.5, "z": 0.0}, - "description": "模块3敞口玻璃瓶中心" - }, - { - "id": "module_4_ref", - "position": {"x": 165.62, "y": 115.5, "z": 103.0}, - "description": "模块4枪头盒基准孔A01" - } - ], - "version": "2.0", - "created_by": "Doraemon Team", - "last_updated": "2025-09-29" - } -} \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/config/deckconfig.md b/unilabos/devices/laiyu_liquid/config/deckconfig.md deleted file mode 100644 index 7359e625..00000000 --- a/unilabos/devices/laiyu_liquid/config/deckconfig.md +++ /dev/null @@ -1,14 +0,0 @@ - goto 171 178 57 H1 - goto 171 117 57 A1 - goto 172 178 130 - goto 173 179 133 - goto 173 180 133 -goto 173 180 138 -goto 173 180 125 (+10mm,在空的上面边缘) -goto 173 180 130 取不到 -goto 173 180 133 取不到 -goto 173 180 135 -goto 173 180 137 取到了!!!! -goto 173 180 131 弹出枪头 H1 - -goto 173 117 137 A1 (+10mm,可以取到新枪头了!!!!) \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/controllers/__init__.py b/unilabos/devices/laiyu_liquid/controllers/__init__.py deleted file mode 100644 index d50b1eca..00000000 --- a/unilabos/devices/laiyu_liquid/controllers/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -LaiYu_Liquid 控制器模块 - -该模块包含了LaiYu_Liquid液体处理工作站的高级控制器: -- 移液器控制器:提供液体处理的高级接口 -- XYZ运动控制器:提供三轴运动的高级接口 -""" - -# 移液器控制器导入 -from .pipette_controller import PipetteController - -# XYZ运动控制器导入 -from .xyz_controller import XYZController - -__all__ = [ - # 移液器控制器 - "PipetteController", - - # XYZ运动控制器 - "XYZController", -] - -__version__ = "1.0.0" -__author__ = "LaiYu_Liquid Controller Team" -__description__ = "LaiYu_Liquid 高级控制器集合" \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/controllers/pipette_controller.py b/unilabos/devices/laiyu_liquid/controllers/pipette_controller.py deleted file mode 100644 index 6c314a3a..00000000 --- a/unilabos/devices/laiyu_liquid/controllers/pipette_controller.py +++ /dev/null @@ -1,1073 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -移液控制器模块 -封装SOPA移液器的高级控制功能 -""" - -# 添加项目根目录到Python路径以解决模块导入问题 -import sys -import os - -# 无论如何都添加项目根目录到路径 -current_file = os.path.abspath(__file__) -# 从 .../Uni-Lab-OS/unilabos/devices/LaiYu_Liquid/controllers/pipette_controller.py -# 向上5级到 .../Uni-Lab-OS -project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file))))) -# 强制添加项目根目录到sys.path的开头 -sys.path.insert(0, project_root) - -import time -import logging -from typing import Optional, List, Dict, Tuple -from dataclasses import dataclass -from enum import Enum - -from unilabos.devices.laiyu_liquid.drivers.sopa_pipette_driver import ( - SOPAPipette, - SOPAConfig, - SOPAStatusCode, - DetectionMode, - create_sopa_pipette, -) -from unilabos.devices.laiyu_liquid.drivers.xyz_stepper_driver import ( - XYZStepperController, - MotorAxis, - MotorStatus, - ModbusException -) - -logger = logging.getLogger(__name__) - - -class TipStatus(Enum): - """枪头状态""" - NO_TIP = "no_tip" - TIP_ATTACHED = "tip_attached" - TIP_USED = "tip_used" - - -class LiquidClass(Enum): - """液体类型""" - WATER = "water" - SERUM = "serum" - VISCOUS = "viscous" - VOLATILE = "volatile" - CUSTOM = "custom" - - -@dataclass -class LiquidParameters: - """液体处理参数""" - aspirate_speed: int = 500 # 吸液速度 - dispense_speed: int = 800 # 排液速度 - air_gap: float = 10.0 # 空气间隙 - blow_out: float = 5.0 # 吹出量 - pre_wet: bool = False # 预润湿 - mix_cycles: int = 0 # 混合次数 - mix_volume: float = 50.0 # 混合体积 - touch_tip: bool = False # 接触壁 - delay_after_aspirate: float = 0.5 # 吸液后延时 - delay_after_dispense: float = 0.5 # 排液后延时 - - -class PipetteController: - """移液控制器""" - - # 预定义液体参数 - LIQUID_PARAMS = { - LiquidClass.WATER: LiquidParameters( - aspirate_speed=500, - dispense_speed=800, - air_gap=10.0 - ), - LiquidClass.SERUM: LiquidParameters( - aspirate_speed=200, - dispense_speed=400, - air_gap=15.0, - pre_wet=True, - delay_after_aspirate=1.0 - ), - LiquidClass.VISCOUS: LiquidParameters( - aspirate_speed=100, - dispense_speed=200, - air_gap=20.0, - delay_after_aspirate=2.0, - delay_after_dispense=2.0 - ), - LiquidClass.VOLATILE: LiquidParameters( - aspirate_speed=800, - dispense_speed=1000, - air_gap=5.0, - delay_after_aspirate=0.2, - delay_after_dispense=0.2 - ) - } - - def __init__(self, port: str, address: int = 4, xyz_port: Optional[str] = None): - """ - 初始化移液控制器 - - Args: - port: 移液器串口端口 - address: 移液器RS485地址 - xyz_port: XYZ步进电机串口端口(可选,用于枪头装载等运动控制) - """ - self.config = SOPAConfig( - port=port, - address=address, - baudrate=115200 - ) - self.pipette = SOPAPipette(self.config) - self.tip_status = TipStatus.NO_TIP - self.current_volume = 0.0 - self.max_volume = 1000.0 # 默认1000ul - self.liquid_class = LiquidClass.WATER - self.liquid_params = self.LIQUID_PARAMS[LiquidClass.WATER] - - # XYZ步进电机控制器(用于运动控制) - self.xyz_controller: Optional[XYZStepperController] = None - self.xyz_port = xyz_port - self.xyz_connected = False - - # 统计信息 - self.tip_count = 0 - self.aspirate_count = 0 - self.dispense_count = 0 - - def connect(self) -> bool: - """连接移液器和XYZ步进电机控制器""" - try: - # 连接移液器 - if not self.pipette.connect(): - logger.error("移液器连接失败") - return False - logger.info("移液器连接成功") - - # 连接XYZ步进电机控制器(如果提供了端口) - if self.xyz_port: - try: - self.xyz_controller = XYZStepperController(self.xyz_port) - if self.xyz_controller.connect(): - self.xyz_connected = True - logger.info(f"XYZ步进电机控制器连接成功: {self.xyz_port}") - else: - logger.warning(f"XYZ步进电机控制器连接失败: {self.xyz_port}") - self.xyz_controller = None - except Exception as e: - logger.warning(f"XYZ步进电机控制器连接异常: {e}") - self.xyz_controller = None - self.xyz_connected = False - else: - logger.info("未配置XYZ步进电机端口,跳过运动控制器连接") - - return True - except Exception as e: - logger.error(f"设备连接失败: {e}") - return False - - def initialize(self) -> bool: - """初始化移液器""" - try: - if self.pipette.initialize(): - logger.info("移液器初始化成功") - # 检查枪头状态 - self._update_tip_status() - return True - return False - except Exception as e: - logger.error(f"移液器初始化失败: {e}") - return False - - def disconnect(self): - """断开连接""" - # 断开移液器连接 - self.pipette.disconnect() - logger.info("移液器已断开") - - # 断开 XYZ 步进电机连接 - if self.xyz_controller and self.xyz_connected: - try: - self.xyz_controller.disconnect() - self.xyz_connected = False - logger.info("XYZ 步进电机已断开") - except Exception as e: - logger.error(f"断开 XYZ 步进电机失败: {e}") - - def _check_xyz_safety(self, axis: MotorAxis, target_position: int) -> bool: - """ - 检查 XYZ 轴移动的安全性 - - Args: - axis: 电机轴 - target_position: 目标位置(步数) - - Returns: - 是否安全 - """ - try: - # 获取当前电机状态 - motor_position = self.xyz_controller.get_motor_status(axis) - - # 检查电机状态是否正常 (不是碰撞停止或限位停止) - if motor_position.status in [MotorStatus.COLLISION_STOP, - MotorStatus.FORWARD_LIMIT_STOP, - MotorStatus.REVERSE_LIMIT_STOP]: - logger.error(f"{axis.name} 轴电机处于错误状态: {motor_position.status.name}") - return False - - # 检查位置限制 (扩大安全范围以适应实际硬件) - # 步进电机的位置范围通常很大,这里设置更合理的范围 - if target_position < -500000 or target_position > 500000: - logger.error(f"{axis.name} 轴目标位置超出安全范围: {target_position}") - return False - - # 检查移动距离是否过大 (单次移动不超过 20000 步,约12mm) - current_position = motor_position.steps - move_distance = abs(target_position - current_position) - if move_distance > 20000: - logger.error(f"{axis.name} 轴单次移动距离过大: {move_distance}步") - return False - - return True - - except Exception as e: - logger.error(f"安全检查失败: {e}") - return False - - def move_z_relative(self, distance_mm: float, speed: int = 2000, acceleration: int = 500) -> bool: - """ - Z轴相对移动 - - Args: - distance_mm: 移动距离(mm),正值向下,负值向上 - speed: 移动速度(rpm) - acceleration: 加速度(rpm/s) - - Returns: - 移动是否成功 - """ - if not self.xyz_controller or not self.xyz_connected: - logger.error("XYZ 步进电机未连接,无法执行移动") - return False - - try: - # 参数验证 - if abs(distance_mm) > 15.0: - logger.error(f"移动距离过大: {distance_mm}mm,最大允许15mm") - return False - - if speed < 100 or speed > 5000: - logger.error(f"速度参数无效: {speed}rpm,范围应为100-5000") - return False - - # 获取当前 Z 轴位置 - current_status = self.xyz_controller.get_motor_status(MotorAxis.Z) - current_z_position = current_status.steps - - # 计算移动距离对应的步数 (1mm = 1638.4步) - mm_to_steps = 1638.4 - move_distance_steps = int(distance_mm * mm_to_steps) - - # 计算目标位置 - target_z_position = current_z_position + move_distance_steps - - # 安全检查 - if not self._check_xyz_safety(MotorAxis.Z, target_z_position): - logger.error("Z轴移动安全检查失败") - return False - - logger.info(f"Z轴相对移动: {distance_mm}mm ({move_distance_steps}步)") - logger.info(f"当前位置: {current_z_position}步 -> 目标位置: {target_z_position}步") - - # 执行移动 - success = self.xyz_controller.move_to_position( - axis=MotorAxis.Z, - position=target_z_position, - speed=speed, - acceleration=acceleration, - precision=50 - ) - - if not success: - logger.error("Z轴移动命令发送失败") - return False - - # 等待移动完成 - if not self.xyz_controller.wait_for_completion(MotorAxis.Z, timeout=10.0): - logger.error("Z轴移动超时") - return False - - # 验证移动结果 - final_status = self.xyz_controller.get_motor_status(MotorAxis.Z) - final_position = final_status.steps - position_error = abs(final_position - target_z_position) - - logger.info(f"Z轴移动完成,最终位置: {final_position}步,误差: {position_error}步") - - if position_error > 100: - logger.warning(f"Z轴位置误差较大: {position_error}步") - - return True - - except ModbusException as e: - logger.error(f"Modbus通信错误: {e}") - return False - except Exception as e: - logger.error(f"Z轴移动失败: {e}") - return False - - def emergency_stop(self) -> bool: - """ - 紧急停止所有运动 - - Returns: - 停止是否成功 - """ - success = True - - # 停止移液器操作 - try: - if self.pipette and self.connected: - # 这里可以添加移液器的紧急停止逻辑 - logger.info("移液器紧急停止") - except Exception as e: - logger.error(f"移液器紧急停止失败: {e}") - success = False - - # 停止 XYZ 轴运动 - try: - if self.xyz_controller and self.xyz_connected: - self.xyz_controller.emergency_stop() - logger.info("XYZ 轴紧急停止") - except Exception as e: - logger.error(f"XYZ 轴紧急停止失败: {e}") - success = False - - return success - - def pickup_tip(self) -> bool: - """ - 装载枪头 - Z轴向下移动10mm进行枪头装载 - - Returns: - 是否成功 - """ - if self.tip_status == TipStatus.TIP_ATTACHED: - logger.warning("已有枪头,无需重复装载") - return True - - logger.info("开始装载枪头 - Z轴向下移动10mm") - - # 使用相对移动方法,向下移动10mm - if self.move_z_relative(distance_mm=10.0, speed=2000, acceleration=500): - # 更新枪头状态 - self.tip_status = TipStatus.TIP_ATTACHED - self.tip_count += 1 - self.current_volume = 0.0 - logger.info("枪头装载成功") - return True - else: - logger.error("枪头装载失败 - Z轴移动失败") - return False - - def eject_tip(self) -> bool: - """ - 弹出枪头 - - Returns: - 是否成功 - """ - if self.tip_status == TipStatus.NO_TIP: - logger.warning("无枪头可弹出") - return True - - try: - if self.pipette.eject_tip(): - self.tip_status = TipStatus.NO_TIP - self.current_volume = 0.0 - logger.info("枪头已弹出") - return True - return False - except Exception as e: - logger.error(f"弹出枪头失败: {e}") - return False - - def aspirate(self, volume: float, liquid_class: Optional[LiquidClass] = None, - detection: bool = True) -> bool: - """ - 吸液 - - Args: - volume: 吸液体积(ul) - liquid_class: 液体类型 - detection: 是否开启液位检测 - - Returns: - 是否成功 - """ - if self.tip_status != TipStatus.TIP_ATTACHED: - logger.error("无枪头,无法吸液") - return False - - if self.current_volume + volume > self.max_volume: - logger.error(f"吸液量超过枪头容量: {self.current_volume + volume} > {self.max_volume}") - return False - - # 设置液体参数 - if liquid_class: - self.set_liquid_class(liquid_class) - - try: - # 设置吸液速度 - self.pipette.set_max_speed(self.liquid_params.aspirate_speed) - - # 执行液位检测 - if detection: - if not self.pipette.liquid_level_detection(): - logger.warning("液位检测失败,继续吸液") - - # 预润湿 - if self.liquid_params.pre_wet and self.current_volume == 0: - logger.info("执行预润湿") - self._pre_wet(volume * 0.2) - - # 吸液 - if self.pipette.aspirate(volume, detection=False): - self.current_volume += volume - self.aspirate_count += 1 - - # 吸液后延时 - time.sleep(self.liquid_params.delay_after_aspirate) - - # 吸取空气间隙 - if self.liquid_params.air_gap > 0: - self.pipette.aspirate(self.liquid_params.air_gap, detection=False) - self.current_volume += self.liquid_params.air_gap - - logger.info(f"吸液完成: {volume}ul, 当前体积: {self.current_volume}ul") - return True - else: - logger.error("吸液失败") - return False - - except Exception as e: - logger.error(f"吸液异常: {e}") - return False - - def dispense(self, volume: float, blow_out: bool = False) -> bool: - """ - 排液 - - Args: - volume: 排液体积(ul) - blow_out: 是否吹出 - - Returns: - 是否成功 - """ - if self.tip_status != TipStatus.TIP_ATTACHED: - logger.error("无枪头,无法排液") - return False - - if volume > self.current_volume: - logger.error(f"排液量超过当前体积: {volume} > {self.current_volume}") - return False - - try: - # 设置排液速度 - self.pipette.set_max_speed(self.liquid_params.dispense_speed) - - # 排液 - if self.pipette.dispense(volume): - self.current_volume -= volume - self.dispense_count += 1 - - # 排液后延时 - time.sleep(self.liquid_params.delay_after_dispense) - - # 吹出 - if blow_out and self.liquid_params.blow_out > 0: - self.pipette.dispense(self.liquid_params.blow_out) - logger.debug(f"执行吹出: {self.liquid_params.blow_out}ul") - - # 接触壁 - if self.liquid_params.touch_tip: - self._touch_tip() - - logger.info(f"排液完成: {volume}ul, 剩余体积: {self.current_volume}ul") - return True - else: - logger.error("排液失败") - return False - - except Exception as e: - logger.error(f"排液异常: {e}") - return False - - def transfer(self, volume: float, - source_well: Optional[str] = None, - dest_well: Optional[str] = None, - liquid_class: Optional[LiquidClass] = None, - new_tip: bool = True, - mix_before: Optional[Tuple[int, float]] = None, - mix_after: Optional[Tuple[int, float]] = None) -> bool: - """ - 液体转移 - - Args: - volume: 转移体积 - source_well: 源孔位 - dest_well: 目标孔位 - liquid_class: 液体类型 - new_tip: 是否使用新枪头 - mix_before: 吸液前混合(次数, 体积) - mix_after: 排液后混合(次数, 体积) - - Returns: - 是否成功 - """ - try: - # 装载新枪头 - if new_tip: - self.eject_tip() - if not self.pickup_tip(): - return False - - # 设置液体类型 - if liquid_class: - self.set_liquid_class(liquid_class) - - # 吸液前混合 - if mix_before: - cycles, mix_vol = mix_before - self.mix(cycles, mix_vol) - - # 吸液 - if not self.aspirate(volume): - return False - - # 排液 - if not self.dispense(volume, blow_out=True): - return False - - # 排液后混合 - if mix_after: - cycles, mix_vol = mix_after - self.mix(cycles, mix_vol) - - logger.info(f"液体转移完成: {volume}ul") - return True - - except Exception as e: - logger.error(f"液体转移失败: {e}") - return False - - def mix(self, cycles: int = 3, volume: Optional[float] = None) -> bool: - """ - 混合 - - Args: - cycles: 混合次数 - volume: 混合体积 - - Returns: - 是否成功 - """ - volume = volume or self.liquid_params.mix_volume - - logger.info(f"开始混合: {cycles}次, {volume}ul") - - for i in range(cycles): - if not self.aspirate(volume, detection=False): - return False - if not self.dispense(volume): - return False - - logger.info("混合完成") - return True - - def _pre_wet(self, volume: float): - """预润湿""" - self.pipette.aspirate(volume, detection=False) - time.sleep(0.2) - self.pipette.dispense(volume) - time.sleep(0.2) - - def _touch_tip(self): - """接触壁(需要与运动控制配合)""" - # TODO: 实现接触壁动作 - logger.debug("执行接触壁") - time.sleep(0.5) - - def _update_tip_status(self): - """更新枪头状态""" - if self.pipette.get_tip_status(): - self.tip_status = TipStatus.TIP_ATTACHED - else: - self.tip_status = TipStatus.NO_TIP - - def set_liquid_class(self, liquid_class: LiquidClass): - """设置液体类型""" - self.liquid_class = liquid_class - if liquid_class in self.LIQUID_PARAMS: - self.liquid_params = self.LIQUID_PARAMS[liquid_class] - logger.info(f"液体类型设置为: {liquid_class.value}") - - def set_custom_parameters(self, params: LiquidParameters): - """设置自定义液体参数""" - self.liquid_params = params - self.liquid_class = LiquidClass.CUSTOM - - def calibrate_volume(self, expected: float, actual: float): - """ - 体积校准 - - Args: - expected: 期望体积 - actual: 实际体积 - """ - factor = actual / expected - self.pipette.set_calibration_factor(factor) - logger.info(f"体积校准系数: {factor}") - - def get_status(self) -> Dict: - """获取状态信息""" - return { - 'tip_status': self.tip_status.value, - 'current_volume': self.current_volume, - 'max_volume': self.max_volume, - 'liquid_class': self.liquid_class.value, - 'statistics': { - 'tip_count': self.tip_count, - 'aspirate_count': self.aspirate_count, - 'dispense_count': self.dispense_count - } - } - - def reset_statistics(self): - """重置统计信息""" - self.tip_count = 0 - self.aspirate_count = 0 - self.dispense_count = 0 - -# ============================================================================ -# 实例化代码块 - 移液控制器使用示例 -# ============================================================================ - -if __name__ == "__main__": - # 配置日志 - import logging - - # 设置日志级别 - logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' - ) - - def interactive_test(): - """交互式测试模式 - 适用于已连接的设备""" - print("\n" + "=" * 60) - print("🧪 移液器交互式测试模式") - print("=" * 60) - - # 获取用户输入的连接参数 - print("\n📡 设备连接配置:") - port = input("请输入移液器串口端口 (默认: /dev/ttyUSB0): ").strip() or "/dev/ttyUSB0" - address_input = input("请输入移液器设备地址 (默认: 4): ").strip() - address = int(address_input) if address_input else 4 - - # 询问是否连接 XYZ 步进电机控制器 - xyz_enable = input("是否连接 XYZ 步进电机控制器? (y/N): ").strip().lower() - xyz_port = None - if xyz_enable in ['y', 'yes']: - xyz_port = input("请输入 XYZ 控制器串口端口 (默认: /dev/ttyUSB1): ").strip() or "/dev/ttyUSB1" - - try: - # 创建移液控制器实例 - if xyz_port: - print(f"\n🔧 创建移液控制器实例 (移液器端口: {port}, 地址: {address}, XYZ端口: {xyz_port})...") - pipette = PipetteController(port=port, address=address, xyz_port=xyz_port) - else: - print(f"\n🔧 创建移液控制器实例 (端口: {port}, 地址: {address})...") - pipette = PipetteController(port=port, address=address) - - # 连接设备 - print("\n📞 连接移液器设备...") - if not pipette.connect(): - print("❌ 设备连接失败,请检查连接") - return - print("✅ 设备连接成功") - - # 初始化设备 - print("\n🚀 初始化设备...") - if not pipette.initialize(): - print("❌ 设备初始化失败") - return - print("✅ 设备初始化成功") - - # 交互式菜单 - while True: - print("\n" + "=" * 50) - print("🎮 交互式操作菜单:") - print("1. 📋 查看设备状态") - print("2. 🔧 装载枪头") - print("3. 🗑️ 弹出枪头") - print("4. 💧 吸液操作") - print("5. 💦 排液操作") - print("6. 🌀 混合操作") - print("7. 🔄 液体转移") - print("8. ⚙️ 设置液体类型") - print("9. 🎯 自定义参数") - print("10. 📊 校准体积") - print("11. 🧹 重置统计") - print("12. 🔍 液体类型测试") - print("99. 🚨 紧急停止") - print("0. 🚪 退出程序") - print("=" * 50) - - choice = input("\n请选择操作 (0-12, 99): ").strip() - - if choice == "0": - print("\n👋 退出程序...") - break - elif choice == "1": - # 查看设备状态 - status = pipette.get_status() - print("\n📊 设备状态信息:") - print(f" 🎯 枪头状态: {status['tip_status']}") - print(f" 💧 当前体积: {status['current_volume']}ul") - print(f" 📏 最大体积: {status['max_volume']}ul") - print(f" 🧪 液体类型: {status['liquid_class']}") - print(f" 📈 统计信息:") - print(f" 🔧 枪头使用次数: {status['statistics']['tip_count']}") - print(f" ⬆️ 吸液次数: {status['statistics']['aspirate_count']}") - print(f" ⬇️ 排液次数: {status['statistics']['dispense_count']}") - - elif choice == "2": - # 装载枪头 - print("\n🔧 装载枪头...") - if pipette.xyz_connected: - print("📍 使用 XYZ 控制器进行 Z 轴定位 (下移 10mm)") - else: - print("⚠️ 未连接 XYZ 控制器,仅执行移液器枪头装载") - - if pipette.pickup_tip(): - print("✅ 枪头装载成功") - if pipette.xyz_connected: - print("📍 Z 轴已移动到装载位置") - else: - print("❌ 枪头装载失败") - - elif choice == "3": - # 弹出枪头 - print("\n🗑️ 弹出枪头...") - if pipette.eject_tip(): - print("✅ 枪头弹出成功") - else: - print("❌ 枪头弹出失败") - - elif choice == "4": - # 吸液操作 - try: - volume = float(input("请输入吸液体积 (ul): ")) - detection = input("是否启用液面检测? (y/n, 默认y): ").strip().lower() != 'n' - print(f"\n💧 执行吸液操作 ({volume}ul)...") - if pipette.aspirate(volume, detection=detection): - print(f"✅ 吸液成功: {volume}ul") - print(f"📊 当前体积: {pipette.current_volume}ul") - else: - print("❌ 吸液失败") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "5": - # 排液操作 - try: - volume = float(input("请输入排液体积 (ul): ")) - blow_out = input("是否执行吹出操作? (y/n, 默认n): ").strip().lower() == 'y' - print(f"\n💦 执行排液操作 ({volume}ul)...") - if pipette.dispense(volume, blow_out=blow_out): - print(f"✅ 排液成功: {volume}ul") - print(f"📊 剩余体积: {pipette.current_volume}ul") - else: - print("❌ 排液失败") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "6": - # 混合操作 - try: - cycles = int(input("请输入混合次数 (默认3): ") or "3") - volume_input = input("请输入混合体积 (ul, 默认使用当前体积的50%): ").strip() - volume = float(volume_input) if volume_input else None - print(f"\n🌀 执行混合操作 ({cycles}次)...") - if pipette.mix(cycles=cycles, volume=volume): - print("✅ 混合完成") - else: - print("❌ 混合失败") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "7": - # 液体转移 - try: - volume = float(input("请输入转移体积 (ul): ")) - source = input("源孔位 (可选, 如A1): ").strip() or None - dest = input("目标孔位 (可选, 如B1): ").strip() or None - new_tip = input("是否使用新枪头? (y/n, 默认y): ").strip().lower() != 'n' - - print(f"\n🔄 执行液体转移 ({volume}ul)...") - if pipette.transfer(volume=volume, source_well=source, dest_well=dest, new_tip=new_tip): - print("✅ 液体转移完成") - else: - print("❌ 液体转移失败") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "8": - # 设置液体类型 - print("\n🧪 可用液体类型:") - liquid_options = { - "1": (LiquidClass.WATER, "水溶液"), - "2": (LiquidClass.SERUM, "血清"), - "3": (LiquidClass.VISCOUS, "粘稠液体"), - "4": (LiquidClass.VOLATILE, "挥发性液体") - } - - for key, (liquid_class, description) in liquid_options.items(): - print(f" {key}. {description}") - - liquid_choice = input("请选择液体类型 (1-4): ").strip() - if liquid_choice in liquid_options: - liquid_class, description = liquid_options[liquid_choice] - pipette.set_liquid_class(liquid_class) - print(f"✅ 液体类型设置为: {description}") - - # 显示参数 - params = pipette.liquid_params - print(f"📋 参数设置:") - print(f" ⬆️ 吸液速度: {params.aspirate_speed}") - print(f" ⬇️ 排液速度: {params.dispense_speed}") - print(f" 💨 空气间隙: {params.air_gap}ul") - print(f" 💧 预润湿: {'是' if params.pre_wet else '否'}") - else: - print("❌ 无效选择") - - elif choice == "9": - # 自定义参数 - try: - print("\n⚙️ 设置自定义参数 (直接回车使用默认值):") - aspirate_speed = input("吸液速度 (默认500): ").strip() - dispense_speed = input("排液速度 (默认800): ").strip() - air_gap = input("空气间隙 (ul, 默认10.0): ").strip() - pre_wet = input("预润湿 (y/n, 默认n): ").strip().lower() == 'y' - - custom_params = LiquidParameters( - aspirate_speed=int(aspirate_speed) if aspirate_speed else 500, - dispense_speed=int(dispense_speed) if dispense_speed else 800, - air_gap=float(air_gap) if air_gap else 10.0, - pre_wet=pre_wet - ) - - pipette.set_custom_parameters(custom_params) - print("✅ 自定义参数设置完成") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "10": - # 校准体积 - try: - expected = float(input("期望体积 (ul): ")) - actual = float(input("实际测量体积 (ul): ")) - pipette.calibrate_volume(expected, actual) - print(f"✅ 校准完成,校准系数: {actual/expected:.3f}") - except ValueError: - print("❌ 请输入有效的数字") - - elif choice == "11": - # 重置统计 - pipette.reset_statistics() - print("✅ 统计信息已重置") - - elif choice == "12": - # 液体类型测试 - print("\n🧪 液体类型参数对比:") - liquid_tests = [ - (LiquidClass.WATER, "水溶液"), - (LiquidClass.SERUM, "血清"), - (LiquidClass.VISCOUS, "粘稠液体"), - (LiquidClass.VOLATILE, "挥发性液体") - ] - - for liquid_class, description in liquid_tests: - params = pipette.LIQUID_PARAMS[liquid_class] - print(f"\n📋 {description} ({liquid_class.value}):") - print(f" ⬆️ 吸液速度: {params.aspirate_speed}") - print(f" ⬇️ 排液速度: {params.dispense_speed}") - print(f" 💨 空气间隙: {params.air_gap}ul") - print(f" 💧 预润湿: {'是' if params.pre_wet else '否'}") - print(f" ⏱️ 吸液后延时: {params.delay_after_aspirate}s") - - elif choice == "99": - # 紧急停止 - print("\n🚨 执行紧急停止...") - success = pipette.emergency_stop() - if success: - print("✅ 紧急停止执行成功") - print("⚠️ 所有运动已停止,请检查设备状态") - else: - print("❌ 紧急停止执行失败") - print("⚠️ 请手动检查设备状态并采取必要措施") - - # 紧急停止后询问是否继续 - continue_choice = input("\n是否继续操作?(y/n): ").strip().lower() - if continue_choice != 'y': - print("🚪 退出程序") - break - - else: - print("❌ 无效选择,请重新输入") - - # 等待用户确认继续 - input("\n按回车键继续...") - - except KeyboardInterrupt: - print("\n\n⚠️ 用户中断操作") - except Exception as e: - print(f"\n❌ 发生异常: {e}") - finally: - # 断开连接 - print("\n📞 断开设备连接...") - try: - pipette.disconnect() - print("✅ 连接已断开") - except: - print("⚠️ 断开连接时出现问题") - - def demo_test(): - """演示测试模式 - 完整功能演示""" - print("\n" + "=" * 60) - print("🎬 移液控制器演示测试") - print("=" * 60) - - try: - # 创建移液控制器实例 - print("1. 🔧 创建移液控制器实例...") - pipette = PipetteController(port="/dev/ttyUSB0", address=4) - print("✅ 移液控制器实例创建成功") - - # 连接设备 - print("\n2. 📞 连接移液器设备...") - if pipette.connect(): - print("✅ 设备连接成功") - else: - print("❌ 设备连接失败") - return False - - # 初始化设备 - print("\n3. 🚀 初始化设备...") - if pipette.initialize(): - print("✅ 设备初始化成功") - else: - print("❌ 设备初始化失败") - return False - - # 装载枪头 - print("\n4. 🔧 装载枪头...") - if pipette.pickup_tip(): - print("✅ 枪头装载成功") - else: - print("❌ 枪头装载失败") - - # 设置液体类型 - print("\n5. 🧪 设置液体类型为血清...") - pipette.set_liquid_class(LiquidClass.SERUM) - print("✅ 液体类型设置完成") - - # 吸液操作 - print("\n6. 💧 执行吸液操作...") - volume_to_aspirate = 100.0 - if pipette.aspirate(volume_to_aspirate, detection=True): - print(f"✅ 吸液成功: {volume_to_aspirate}ul") - print(f"📊 当前体积: {pipette.current_volume}ul") - else: - print("❌ 吸液失败") - - # 排液操作 - print("\n7. 💦 执行排液操作...") - volume_to_dispense = 50.0 - if pipette.dispense(volume_to_dispense, blow_out=True): - print(f"✅ 排液成功: {volume_to_dispense}ul") - print(f"📊 剩余体积: {pipette.current_volume}ul") - else: - print("❌ 排液失败") - - # 混合操作 - print("\n8. 🌀 执行混合操作...") - if pipette.mix(cycles=3, volume=30.0): - print("✅ 混合完成") - else: - print("❌ 混合失败") - - # 获取状态信息 - print("\n9. 📊 获取设备状态...") - status = pipette.get_status() - print("设备状态信息:") - print(f" 🎯 枪头状态: {status['tip_status']}") - print(f" 💧 当前体积: {status['current_volume']}ul") - print(f" 📏 最大体积: {status['max_volume']}ul") - print(f" 🧪 液体类型: {status['liquid_class']}") - print(f" 📈 统计信息:") - print(f" 🔧 枪头使用次数: {status['statistics']['tip_count']}") - print(f" ⬆️ 吸液次数: {status['statistics']['aspirate_count']}") - print(f" ⬇️ 排液次数: {status['statistics']['dispense_count']}") - - # 弹出枪头 - print("\n10. 🗑️ 弹出枪头...") - if pipette.eject_tip(): - print("✅ 枪头弹出成功") - else: - print("❌ 枪头弹出失败") - - print("\n" + "=" * 60) - print("✅ 移液控制器演示测试完成") - print("=" * 60) - - return True - - except Exception as e: - print(f"\n❌ 测试过程中发生异常: {e}") - return False - - finally: - # 断开连接 - print("\n📞 断开连接...") - pipette.disconnect() - print("✅ 连接已断开") - - # 主程序入口 - print("🧪 移液器控制器测试程序") - print("=" * 40) - print("1. 🎮 交互式测试 (推荐)") - print("2. 🎬 演示测试") - print("0. 🚪 退出") - print("=" * 40) - - mode = input("请选择测试模式 (0-2): ").strip() - - if mode == "1": - interactive_test() - elif mode == "2": - demo_test() - elif mode == "0": - print("👋 再见!") - else: - print("❌ 无效选择") - - print("\n🎉 程序结束!") - print("\n💡 使用说明:") - print("1. 确保移液器硬件已正确连接") - print("2. 根据实际情况修改串口端口号") - print("3. 交互模式支持实时操作和参数调整") - print("4. 在实际使用中需要配合运动控制器进行位置移动") diff --git a/unilabos/devices/laiyu_liquid/controllers/xyz_controller.py b/unilabos/devices/laiyu_liquid/controllers/xyz_controller.py deleted file mode 100644 index 2526f485..00000000 --- a/unilabos/devices/laiyu_liquid/controllers/xyz_controller.py +++ /dev/null @@ -1,1183 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -XYZ三轴步进电机控制器 -支持坐标系管理、限位开关回零、工作原点设定等功能 - -主要功能: -- 坐标系转换层(步数↔毫米) -- 限位开关回零功能 -- 工作原点示教和保存 -- 安全限位检查 -- 运动控制接口 - -""" - -import json -import os -import time -from typing import Optional, Dict, Tuple, Union -from dataclasses import dataclass, asdict -from pathlib import Path -import logging - -# 添加项目根目录到Python路径以解决模块导入问题 -import sys -import os - -# 无论如何都添加项目根目录到路径 -current_file = os.path.abspath(__file__) -# 从 .../Uni-Lab-OS/unilabos/devices/LaiYu_Liquid/controllers/xyz_controller.py -# 向上5级到 .../Uni-Lab-OS -project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file))))) -# 强制添加项目根目录到sys.path的开头 -sys.path.insert(0, project_root) - -# 导入原有的驱动 -from unilabos.devices.laiyu_liquid.drivers.xyz_stepper_driver import XYZStepperController, MotorAxis, MotorStatus - -logger = logging.getLogger(__name__) - - -@dataclass -class MachineConfig: - """机械配置参数""" - # 步距配置 (基于16384步/圈的步进电机) - steps_per_mm_x: float = 204.8 # X轴步距 (16384步/圈 ÷ 80mm导程) - steps_per_mm_y: float = 204.8 # Y轴步距 (16384步/圈 ÷ 80mm导程) - steps_per_mm_z: float = 3276.8 # Z轴步距 (16384步/圈 ÷ 5mm导程) - - # 行程限制 - max_travel_x: float = 340.0 # X轴最大行程 - max_travel_y: float = 250.0 # Y轴最大行程 - max_travel_z: float = 160.0 # Z轴最大行程 - - # 安全移动参数 - safe_z_height: float = 0.0 # Z轴安全移动高度 (mm) - 液体处理工作站安全高度 - z_approach_height: float = 5.0 # Z轴接近高度 (mm) - 在目标位置上方的预备高度 - - # 回零参数 - homing_speed: int = 100 # 回零速度 (rpm) - homing_timeout: float = 30.0 # 回零超时时间 - safe_clearance: float = 1.0 # 安全间隙 (mm) - position_stable_time: float = 3.0 # 位置稳定检测时间(秒) - position_check_interval: float = 0.2 # 位置检查间隔(秒) - - # 运动参数 - default_speed: int = 100 # 默认运动速度 (rpm) - default_acceleration: int = 1000 # 默认加速度 - - -@dataclass -class CoordinateOrigin: - """坐标原点信息""" - machine_origin_steps: Dict[str, int] = None # 机械原点步数位置 - work_origin_steps: Dict[str, int] = None # 工作原点步数位置 - is_homed: bool = False # 是否已回零 - timestamp: str = "" # 设定时间戳 - - def __post_init__(self): - if self.machine_origin_steps is None: - self.machine_origin_steps = {"x": 0, "y": 0, "z": 0} - if self.work_origin_steps is None: - self.work_origin_steps = {"x": 0, "y": 0, "z": 0} - - -class CoordinateSystemError(Exception): - """坐标系统异常""" - pass - - -class XYZController(XYZStepperController): - """XYZ三轴控制器""" - - def __init__(self, port: str, baudrate: int = 115200, - machine_config: Optional[MachineConfig] = None, - config_file: str = "machine_config.json", - auto_connect: bool = True): - """ - 初始化XYZ控制器 - - Args: - port: 串口端口 - baudrate: 波特率 - machine_config: 机械配置参数 - config_file: 配置文件路径 - auto_connect: 是否自动连接设备 - """ - super().__init__(port, baudrate) - - # 机械配置 - self.machine_config = machine_config or MachineConfig() - self.config_file = config_file - - # 坐标系统 - self.coordinate_origin = CoordinateOrigin() - self.origin_file = "coordinate_origin.json" - - # 连接状态 - self.is_connected = False - - # 加载配置 - self._load_config() - self._load_coordinate_origin() - - # 自动连接设备 - if auto_connect: - self.connect_device() - - def connect_device(self) -> bool: - """ - 连接设备并初始化 - - Returns: - bool: 连接是否成功 - """ - try: - logger.info(f"正在连接设备: {self.port}") - - # 连接硬件 - if not self.connect(): - logger.error("硬件连接失败") - return False - - self.is_connected = True - logger.info("设备连接成功") - - # 使能所有轴 - enable_results = self.enable_all_axes(True) - success_count = sum(1 for result in enable_results.values() if result) - logger.info(f"轴使能结果: {success_count}/{len(enable_results)} 成功") - - # 获取系统状态 - try: - status = self.get_system_status() - logger.info(f"系统状态获取成功: {len(status)} 项信息") - except Exception as e: - logger.warning(f"获取系统状态失败: {e}") - - return True - - except Exception as e: - logger.error(f"设备连接失败: {e}") - self.is_connected = False - return False - - def disconnect_device(self): - """断开设备连接""" - try: - if self.is_connected: - self.disconnect() # 使用父类的disconnect方法 - self.is_connected = False - logger.info("设备连接已断开") - except Exception as e: - logger.error(f"断开连接失败: {e}") - - def _load_config(self): - """加载机械配置""" - try: - if os.path.exists(self.config_file): - with open(self.config_file, 'r', encoding='utf-8') as f: - config_data = json.load(f) - # 更新配置参数 - for key, value in config_data.items(): - if hasattr(self.machine_config, key): - setattr(self.machine_config, key, value) - logger.info("机械配置加载完成") - except Exception as e: - logger.warning(f"加载机械配置失败: {e},使用默认配置") - - def _save_config(self): - """保存机械配置""" - try: - with open(self.config_file, 'w', encoding='utf-8') as f: - json.dump(asdict(self.machine_config), f, indent=2, ensure_ascii=False) - logger.info("机械配置保存完成") - except Exception as e: - logger.error(f"保存机械配置失败: {e}") - - def _load_coordinate_origin(self): - """加载坐标原点信息""" - try: - if os.path.exists(self.origin_file): - with open(self.origin_file, 'r', encoding='utf-8') as f: - origin_data = json.load(f) - self.coordinate_origin = CoordinateOrigin(**origin_data) - logger.info("坐标原点信息加载完成") - except Exception as e: - logger.warning(f"加载坐标原点失败: {e},使用默认设置") - - def _save_coordinate_origin(self): - """保存坐标原点信息""" - try: - # 更新时间戳 - from datetime import datetime - self.coordinate_origin.timestamp = datetime.now().isoformat() - - with open(self.origin_file, 'w', encoding='utf-8') as f: - json.dump(asdict(self.coordinate_origin), f, indent=2, ensure_ascii=False) - logger.info("坐标原点信息保存完成") - except Exception as e: - logger.error(f"保存坐标原点失败: {e}") - - # ==================== 坐标转换方法 ==================== - - def mm_to_steps(self, axis: MotorAxis, mm: float) -> int: - """毫米转步数""" - if axis == MotorAxis.X: - return int(mm * self.machine_config.steps_per_mm_x) - elif axis == MotorAxis.Y: - return int(mm * self.machine_config.steps_per_mm_y) - elif axis == MotorAxis.Z: - return int(mm * self.machine_config.steps_per_mm_z) - else: - raise ValueError(f"未知轴: {axis}") - - def steps_to_mm(self, axis: MotorAxis, steps: int) -> float: - """步数转毫米""" - if axis == MotorAxis.X: - return steps / self.machine_config.steps_per_mm_x - elif axis == MotorAxis.Y: - return steps / self.machine_config.steps_per_mm_y - elif axis == MotorAxis.Z: - return steps / self.machine_config.steps_per_mm_z - else: - raise ValueError(f"未知轴: {axis}") - - def work_to_machine_steps(self, x: float = None, y: float = None, z: float = None) -> Dict[str, int]: - """工作坐标转机械坐标步数""" - machine_steps = {} - - if x is not None: - work_steps = self.mm_to_steps(MotorAxis.X, x) - machine_steps['x'] = self.coordinate_origin.work_origin_steps['x'] + work_steps - - if y is not None: - work_steps = self.mm_to_steps(MotorAxis.Y, y) - machine_steps['y'] = self.coordinate_origin.work_origin_steps['y'] + work_steps - - if z is not None: - work_steps = self.mm_to_steps(MotorAxis.Z, z) - machine_steps['z'] = self.coordinate_origin.work_origin_steps['z'] + work_steps - - return machine_steps - - def machine_to_work_coords(self, machine_steps: Dict[str, int]) -> Dict[str, float]: - """机械坐标步数转工作坐标""" - work_coords = {} - - for axis_name, steps in machine_steps.items(): - axis = MotorAxis[axis_name.upper()] - work_origin_steps = self.coordinate_origin.work_origin_steps[axis_name] - relative_steps = steps - work_origin_steps - work_coords[axis_name] = self.steps_to_mm(axis, relative_steps) - - return work_coords - - def check_travel_limits(self, x: float = None, y: float = None, z: float = None) -> bool: - """检查行程限制""" - if x is not None and (x < 0 or x > self.machine_config.max_travel_x): - raise CoordinateSystemError(f"X轴超出行程范围: {x}mm (0 ~ {self.machine_config.max_travel_x}mm)") - - if y is not None and (y < 0 or y > self.machine_config.max_travel_y): - raise CoordinateSystemError(f"Y轴超出行程范围: {y}mm (0 ~ {self.machine_config.max_travel_y}mm)") - - if z is not None and (z < 0 or z > self.machine_config.max_travel_z): - raise CoordinateSystemError(f"Z轴超出行程范围: {z}mm (0 ~ {self.machine_config.max_travel_z}mm)") - - return True - - # ==================== 回零和原点设定方法 ==================== - - def home_axis(self, axis: MotorAxis, direction: int = -1) -> bool: - """ - 单轴回零到限位开关 - 使用步数变化检测 - - Args: - axis: 要回零的轴 - direction: 回零方向 (-1负方向, 1正方向) - - Returns: - bool: 回零是否成功 - """ - if not self.is_connected: - logger.error("设备未连接,无法执行回零操作") - return False - - try: - logger.info(f"开始{axis.name}轴回零") - - # 使能电机 - if not self.enable_motor(axis, True): - raise CoordinateSystemError(f"{axis.name}轴使能失败") - - # 设置回零速度模式,根据方向设置正负 - speed = self.machine_config.homing_speed * direction - if not self.set_speed_mode(axis, speed): - raise CoordinateSystemError(f"{axis.name}轴设置回零速度失败") - - - - # 智能回零检测 - 基于步数变化 - start_time = time.time() - limit_detected = False - final_position = None - - # 步数变化检测参数(从配置获取) - position_stable_time = self.machine_config.position_stable_time - check_interval = self.machine_config.position_check_interval - last_position = None - stable_start_time = None - - logger.info(f"{axis.name}轴开始移动,监测步数变化...") - - while time.time() - start_time < self.machine_config.homing_timeout: - status = self.get_motor_status(axis) - current_position = status.steps - - # 检查是否明确触碰限位开关 - if (direction < 0 and status.status == MotorStatus.REVERSE_LIMIT_STOP) or \ - (direction > 0 and status.status == MotorStatus.FORWARD_LIMIT_STOP): - # 停止运动 - self.emergency_stop(axis) - time.sleep(0.5) - - # 记录机械原点位置 - final_position = current_position - limit_detected = True - logger.info(f"{axis.name}轴检测到限位开关信号,位置: {final_position}步") - break - - # 检查是否发生碰撞 - if status.status == MotorStatus.COLLISION_STOP: - raise CoordinateSystemError(f"{axis.name}轴回零时发生碰撞") - - # 步数变化检测逻辑 - if last_position is not None: - # 检查位置是否发生变化 - if abs(current_position - last_position) <= 1: # 允许1步的误差 - # 位置基本没有变化 - if stable_start_time is None: - stable_start_time = time.time() - logger.debug(f"{axis.name}轴位置开始稳定在 {current_position}步") - elif time.time() - stable_start_time >= position_stable_time: - # 位置稳定超过指定时间,认为已到达限位 - self.emergency_stop(axis) - time.sleep(0.5) - - final_position = current_position - limit_detected = True - logger.info(f"{axis.name}轴位置稳定{position_stable_time}秒,假设已到达限位开关,位置: {final_position}步") - break - else: - # 位置发生变化,重置稳定计时 - stable_start_time = None - logger.debug(f"{axis.name}轴位置变化: {last_position} -> {current_position}") - - last_position = current_position - time.sleep(check_interval) - - # 超时处理 - if not limit_detected: - logger.warning(f"{axis.name}轴回零超时({self.machine_config.homing_timeout}秒),强制停止") - self.emergency_stop(axis) - time.sleep(0.5) - - # 获取当前位置作为机械原点 - try: - status = self.get_motor_status(axis) - final_position = status.steps - logger.info(f"{axis.name}轴超时后位置: {final_position}步") - except Exception as e: - logger.error(f"获取{axis.name}轴位置失败: {e}") - return False - - # 记录机械原点位置 - self.coordinate_origin.machine_origin_steps[axis.name.lower()] = final_position - - # 从限位开关退出安全距离 - try: - clearance_steps = self.mm_to_steps(axis, self.machine_config.safe_clearance) - safe_position = final_position + (clearance_steps * -direction) # 反方向退出 - - if not self.move_to_position(axis, safe_position, - self.machine_config.default_speed): - logger.warning(f"{axis.name}轴无法退出到安全位置") - else: - self.wait_for_completion(axis, 10.0) - logger.info(f"{axis.name}轴已退出到安全位置: {safe_position}步") - except Exception as e: - logger.warning(f"{axis.name}轴退出安全位置时出错: {e}") - - status_msg = "限位检测成功" if limit_detected else "超时假设成功" - logger.info(f"{axis.name}轴回零完成 ({status_msg}),机械原点: {final_position}步") - return True - - except Exception as e: - logger.error(f"{axis.name}轴回零失败: {e}") - self.emergency_stop(axis) - return False - - def home_all_axes(self, sequence: list = None) -> bool: - """ - 全轴回零 (液体处理工作站安全回零) - - 液体处理工作站回零策略: - 1. Z轴必须首先回零,避免与容器、试管架等碰撞 - 2. 然后XY轴回零,确保移动路径安全 - 3. 严格按照Z->X->Y顺序执行,不允许更改 - - Args: - sequence: 回零顺序,液体处理工作站固定为Z->X->Y,不建议修改 - - Returns: - bool: 全轴回零是否成功 - """ - if not self.is_connected: - logger.error("设备未连接,无法执行回零操作") - return False - - # 液体处理工作站安全回零序列:Z轴绝对优先 - safe_sequence = [MotorAxis.Z, MotorAxis.X, MotorAxis.Y] - - if sequence is not None and sequence != safe_sequence: - logger.warning(f"液体处理工作站不建议修改回零序列,使用安全序列: {[axis.name for axis in safe_sequence]}") - - sequence = safe_sequence # 强制使用安全序列 - - logger.info("开始全轴回零") - - try: - for axis in sequence: - if not self.home_axis(axis): - logger.error(f"全轴回零失败,停止在{axis.name}轴") - return False - - # 轴间等待时间 - time.sleep(0.5) - - # 标记为已回零 - self.coordinate_origin.is_homed = True - self._save_coordinate_origin() - - logger.info("全轴回零完成") - return True - - except Exception as e: - logger.error(f"全轴回零异常: {e}") - return False - - def set_work_origin_here(self) -> bool: - """将当前位置设置为工作原点""" - if not self.is_connected: - logger.error("设备未连接,无法设置工作原点") - return False - - try: - if not self.coordinate_origin.is_homed: - logger.warning("建议先执行回零操作再设置工作原点") - - # 获取当前各轴位置 - positions = self.get_all_positions() - - for axis in MotorAxis: - axis_name = axis.name.lower() - current_steps = positions[axis].steps - self.coordinate_origin.work_origin_steps[axis_name] = current_steps - - logger.info(f"{axis.name}轴工作原点设置为: {current_steps}步 " - f"({self.steps_to_mm(axis, current_steps):.2f}mm)") - - self._save_coordinate_origin() - logger.info("工作原点设置完成") - return True - - except Exception as e: - logger.error(f"设置工作原点失败: {e}") - return False - - # ==================== 高级运动控制方法 ==================== - - def move_to_work_coord_safe(self, x: float = None, y: float = None, z: float = None, - speed: int = None, acceleration: int = None) -> bool: - """ - 安全移动到工作坐标系指定位置 (液体处理工作站专用) - 移动策略:Z轴先上升到安全高度 -> XY轴移动到目标位置 -> Z轴下降到目标位置 - - Args: - x, y, z: 工作坐标系下的目标位置 (mm) - speed: 运动速度 (rpm) - acceleration: 加速度 (rpm/s) - - Returns: - bool: 移动是否成功 - """ - if not self.is_connected: - logger.error("设备未连接,无法执行移动操作") - return False - - try: - # 检查坐标系是否已设置 - if not self.coordinate_origin.work_origin_steps: - raise CoordinateSystemError("工作原点未设置,请先调用set_work_origin_here()") - - # 检查行程限制 - self.check_travel_limits(x, y, z) - - # 设置运动参数 - speed = speed or self.machine_config.default_speed - acceleration = acceleration or self.machine_config.default_acceleration - - # 步骤1: Z轴先上升到安全高度 - if z is not None: - safe_z_steps = self.work_to_machine_steps(None, None, self.machine_config.safe_z_height) - if not self.move_to_position(MotorAxis.Z, safe_z_steps['z'], speed, acceleration): - logger.error("Z轴上升到安全高度失败") - return False - logger.info(f"Z轴上升到安全高度: {self.machine_config.safe_z_height} mm") - - # 等待Z轴移动完成 - self.wait_for_completion(MotorAxis.Z, 10.0) - - # 步骤2: XY轴移动到目标位置 - xy_success = True - if x is not None: - machine_steps = self.work_to_machine_steps(x, None, None) - if not self.move_to_position(MotorAxis.X, machine_steps['x'], speed, acceleration): - xy_success = False - - if y is not None: - machine_steps = self.work_to_machine_steps(None, y, None) - if not self.move_to_position(MotorAxis.Y, machine_steps['y'], speed, acceleration): - xy_success = False - - if not xy_success: - logger.error("XY轴移动失败") - return False - - if x is not None or y is not None: - logger.info(f"XY轴移动到目标位置: X:{x} Y:{y} mm") - # 等待XY轴移动完成 - if x is not None: - self.wait_for_completion(MotorAxis.X, 10.0) - if y is not None: - self.wait_for_completion(MotorAxis.Y, 10.0) - - # 步骤3: Z轴下降到目标位置 - if z is not None: - machine_steps = self.work_to_machine_steps(None, None, z) - if not self.move_to_position(MotorAxis.Z, machine_steps['z'], speed, acceleration): - logger.error("Z轴下降到目标位置失败") - return False - logger.info(f"Z轴下降到目标位置: {z} mm") - self.wait_for_completion(MotorAxis.Z, 10.0) - - logger.info(f"安全移动到工作坐标 X:{x} Y:{y} Z:{z} (mm) 完成") - return True - - except Exception as e: - logger.error(f"安全移动失败: {e}") - return False - - def move_to_work_coord(self, x: float = None, y: float = None, z: float = None, - speed: int = None, acceleration: int = None) -> bool: - """ - 移动到工作坐标 (已禁用) - - 此方法已被禁用,请使用 move_to_work_coord_safe() 方法。 - - Raises: - RuntimeError: 方法已禁用 - """ - error_msg = "Method disabled, use move_to_work_coord_safe instead" - logger.error(error_msg) - raise RuntimeError(error_msg) - - def move_relative_work_coord(self, dx: float = 0, dy: float = 0, dz: float = 0, - speed: int = None, acceleration: int = None) -> bool: - """ - 相对当前位置移动 - - Args: - dx, dy, dz: 相对移动距离 (mm) - speed: 运动速度 (rpm) - acceleration: 加速度 (rpm/s) - - Returns: - bool: 移动是否成功 - """ - if not self.is_connected: - logger.error("设备未连接,无法执行移动操作") - return False - - try: - # 获取当前工作坐标 - current_work = self.get_current_work_coords() - - # 计算目标坐标 - target_x = current_work['x'] + dx if dx != 0 else None - target_y = current_work['y'] + dy if dy != 0 else None - target_z = current_work['z'] + dz if dz != 0 else None - - return self.move_to_work_coord_safe(target_x, target_y, target_z, speed, acceleration) - - except Exception as e: - logger.error(f"相对移动失败: {e}") - return False - - def get_current_work_coords(self) -> Dict[str, float]: - """获取当前工作坐标""" - if not self.is_connected: - logger.error("设备未连接,无法获取当前坐标") - return {'x': 0.0, 'y': 0.0, 'z': 0.0} - - try: - # 获取当前机械坐标 - positions = self.get_all_positions() - machine_steps = {axis.name.lower(): pos.steps for axis, pos in positions.items()} - - # 转换为工作坐标 - return self.machine_to_work_coords(machine_steps) - - except Exception as e: - logger.error(f"获取工作坐标失败: {e}") - return {'x': 0.0, 'y': 0.0, 'z': 0.0} - - def get_current_position_mm(self) -> Dict[str, float]: - """获取当前位置坐标(毫米单位)""" - return self.get_current_work_coords() - - def wait_for_move_completion(self, timeout: float = 30.0) -> bool: - """等待所有轴运动完成""" - if not self.is_connected: - return False - - for axis in MotorAxis: - if not self.wait_for_completion(axis, timeout): - return False - return True - - # ==================== 系统状态和配置方法 ==================== - - def get_system_status(self) -> Dict: - """获取系统状态信息""" - status = { - "connection": { - "is_connected": self.is_connected, - "port": self.port, - "baudrate": self.baudrate - }, - "coordinate_system": { - "is_homed": self.coordinate_origin.is_homed, - "machine_origin": self.coordinate_origin.machine_origin_steps, - "work_origin": self.coordinate_origin.work_origin_steps, - "timestamp": self.coordinate_origin.timestamp - }, - "machine_config": asdict(self.machine_config), - "current_position": {} - } - - if self.is_connected: - try: - # 获取当前位置 - positions = self.get_all_positions() - for axis, pos in positions.items(): - axis_name = axis.name.lower() - status["current_position"][axis_name] = { - "steps": pos.steps, - "mm": self.steps_to_mm(axis, pos.steps), - "status": pos.status.name if hasattr(pos.status, 'name') else str(pos.status) - } - - # 获取工作坐标 - work_coords = self.get_current_work_coords() - status["current_work_coords"] = work_coords - - except Exception as e: - status["position_error"] = str(e) - - return status - - def update_machine_config(self, **kwargs): - """更新机械配置参数""" - for key, value in kwargs.items(): - if hasattr(self.machine_config, key): - setattr(self.machine_config, key, value) - logger.info(f"更新配置参数 {key}: {value}") - else: - logger.warning(f"未知配置参数: {key}") - - # 保存配置 - self._save_config() - - def reset_coordinate_system(self): - """重置坐标系统""" - self.coordinate_origin = CoordinateOrigin() - self._save_coordinate_origin() - logger.info("坐标系统已重置") - - def __enter__(self): - """上下文管理器入口""" - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - """上下文管理器出口""" - self.disconnect_device() - - -def interactive_control(controller: XYZController): - """ - 交互式控制模式 - - Args: - controller: 已连接的控制器实例 - """ - print("\n" + "="*60) - print("进入交互式控制模式") - print("="*60) - - # 显示当前状态 - def show_status(): - try: - current_pos = controller.get_current_position_mm() - print(f"\n当前位置: X={current_pos['x']:.2f}mm, Y={current_pos['y']:.2f}mm, Z={current_pos['z']:.2f}mm") - except Exception as e: - print(f"获取位置失败: {e}") - - # 显示帮助信息 - def show_help(): - print("\n可用命令:") - print(" move <轴> <距离> - 相对移动,例: move x 10.5") - print(" goto - 绝对移动到指定坐标,例: goto 10 20 5") - print(" home [轴] - 回零操作,例: home 或 home x") - print(" origin - 设置当前位置为工作原点") - print(" status - 显示当前状态") - print(" speed <速度> - 设置运动速度(rpm),例: speed 2000") - print(" limits - 显示行程限制") - print(" config - 显示机械配置") - print(" help - 显示此帮助信息") - print(" quit/exit - 退出交互模式") - print("\n提示:") - print(" - 轴名称: x, y, z") - print(" - 距离单位: 毫米(mm)") - print(" - 正数向正方向移动,负数向负方向移动") - - # 安全回零操作 - def safe_homing(): - print("\n系统安全初始化...") - print("为确保操作安全,系统将执行回零操作") - print("提示: 已安装限位开关,超时后将假设回零成功") - - # 询问用户是否继续 - while True: - user_choice = input("是否继续执行回零操作? (y/n/skip): ").strip().lower() - if user_choice in ['y', 'yes', '是']: - print("\n开始执行全轴回零...") - print("回零过程可能需要一些时间,请耐心等待...") - - # 执行回零操作 - homing_success = controller.home_all_axes() - - if homing_success: - print("回零操作完成,系统已就绪") - # 设置当前位置为工作原点 - if controller.set_work_origin_here(): - print("工作原点已设置为回零位置") - else: - print("工作原点设置失败,但可以继续操作") - return True - else: - print("回零操作失败") - print("这可能是由于通信问题,但限位开关应该已经起作用") - - # 询问是否继续 - retry_choice = input("是否仍要继续操作? (y/n): ").strip().lower() - if retry_choice in ['y', 'yes', '是']: - print("继续操作,请手动确认设备位置安全") - return True - else: - return False - - elif user_choice in ['n', 'no', '否']: - print("用户取消回零操作,退出交互模式") - return False - elif user_choice in ['skip', 's', '跳过']: - print("跳过回零操作,请注意安全!") - print("建议在开始操作前手动执行 'home' 命令") - return True - else: - print("请输入 y(继续)/n(取消)/skip(跳过)") - - # 安全回原点操作 - def safe_return_home(): - print("\n系统安全关闭...") - print("正在将所有轴移动到安全位置...") - - try: - # 移动到工作原点 (0,0,0) - 使用安全移动方法 - if controller.move_to_work_coord_safe(0, 0, 0, speed=500): - print("已安全返回工作原点") - show_status() - else: - print("返回原点失败,请手动检查设备位置") - except Exception as e: - print(f"返回原点时出错: {e}") - - # 当前运动速度 - current_speed = controller.machine_config.default_speed - - try: - # 1. 首先执行安全回零 - if not safe_homing(): - return - - # 2. 显示初始状态和帮助 - show_status() - show_help() - - while True: - try: - # 获取用户输入 - user_input = input("\n请输入命令 (输入 help 查看帮助): ").strip().lower() - - if not user_input: - continue - - # 解析命令 - parts = user_input.split() - command = parts[0] - - if command in ['quit', 'exit', 'q']: - print("准备退出交互模式...") - # 执行安全回原点操作 - safe_return_home() - print("退出交互模式") - break - - elif command == 'help' or command == 'h': - show_help() - - elif command == 'status' or command == 's': - show_status() - print(f"当前速度: {current_speed} rpm") - print(f"是否已回零: {controller.coordinate_origin.is_homed}") - - elif command == 'move' or command == 'm': - if len(parts) != 3: - print("格式错误,正确格式: move <轴> <距离>") - print(" 例如: move x 10.5") - continue - - axis = parts[1].lower() - try: - distance = float(parts[2]) - except ValueError: - print("距离必须是数字") - continue - - if axis not in ['x', 'y', 'z']: - print("轴名称必须是 x, y 或 z") - continue - - print(f"{axis.upper()}轴移动 {distance:+.2f}mm...") - - # 执行移动 - kwargs = {f'd{axis}': distance, 'speed': current_speed} - if controller.move_relative_work_coord(**kwargs): - print(f"{axis.upper()}轴移动完成") - show_status() - else: - print(f"{axis.upper()}轴移动失败") - - elif command == 'goto' or command == 'g': - if len(parts) != 4: - print("格式错误,正确格式: goto ") - print(" 例如: goto 10 20 5") - continue - - try: - x = float(parts[1]) - y = float(parts[2]) - z = float(parts[3]) - except ValueError: - print("坐标必须是数字") - continue - - print(f"移动到坐标 ({x}, {y}, {z})...") - print("使用安全移动策略: Z轴先上升 → XY移动 → Z轴下降") - - if controller.move_to_work_coord_safe(x, y, z, speed=current_speed): - print("安全移动到目标位置完成") - show_status() - else: - print("移动失败") - - elif command == 'home': - if len(parts) == 1: - # 全轴回零 - print("开始全轴回零...") - if controller.home_all_axes(): - print("全轴回零完成") - show_status() - else: - print("回零失败") - elif len(parts) == 2: - # 单轴回零 - axis_name = parts[1].lower() - if axis_name not in ['x', 'y', 'z']: - print("轴名称必须是 x, y 或 z") - continue - - axis = MotorAxis[axis_name.upper()] - print(f"{axis_name.upper()}轴回零...") - - if controller.home_axis(axis): - print(f"{axis_name.upper()}轴回零完成") - show_status() - else: - print(f"{axis_name.upper()}轴回零失败") - else: - print("格式错误,正确格式: home 或 home <轴>") - - elif command == 'origin' or command == 'o': - print("设置当前位置为工作原点...") - if controller.set_work_origin_here(): - print("工作原点设置完成") - show_status() - else: - print("工作原点设置失败") - - elif command == 'speed': - if len(parts) != 2: - print("格式错误,正确格式: speed <速度>") - print(" 例如: speed 2000") - continue - - try: - new_speed = int(parts[1]) - if new_speed <= 0: - print("速度必须大于0") - continue - if new_speed > 10000: - print("速度不能超过10000 rpm") - continue - - current_speed = new_speed - print(f"运动速度设置为: {current_speed} rpm") - - except ValueError: - print("速度必须是整数") - - elif command == 'limits' or command == 'l': - config = controller.machine_config - print("\n行程限制:") - print(f" X轴: 0 ~ {config.max_travel_x} mm") - print(f" Y轴: 0 ~ {config.max_travel_y} mm") - print(f" Z轴: 0 ~ {config.max_travel_z} mm") - - elif command == 'config' or command == 'c': - config = controller.machine_config - print("\n机械配置:") - print(f" X轴步距: {config.steps_per_mm_x:.1f} 步/mm") - print(f" Y轴步距: {config.steps_per_mm_y:.1f} 步/mm") - print(f" Z轴步距: {config.steps_per_mm_z:.1f} 步/mm") - print(f" 回零速度: {config.homing_speed} rpm") - print(f" 默认速度: {config.default_speed} rpm") - print(f" 安全间隙: {config.safe_clearance} mm") - - else: - print(f"未知命令: {command}") - print("输入 help 查看可用命令") - - except KeyboardInterrupt: - print("\n\n用户中断,退出交互模式") - break - except Exception as e: - print(f"命令执行错误: {e}") - print("输入 help 查看正确的命令格式") - - finally: - # 确保正确断开连接 - try: - controller.disconnect_device() - print("设备连接已断开") - except Exception as e: - print(f"断开连接时出错: {e}") - - -def run_tests(): - """运行测试函数""" - print("=== XYZ控制器测试 ===") - - # 1. 测试机械配置 - print("\n1. 测试机械配置") - config = MachineConfig( - steps_per_mm_x=204.8, # 16384步/圈 ÷ 80mm导程 - steps_per_mm_y=204.8, # 16384步/圈 ÷ 80mm导程 - steps_per_mm_z=3276.8, # 16384步/圈 ÷ 5mm导程 - max_travel_x=340.0, - max_travel_y=250.0, - max_travel_z=160.0, - homing_speed=100, - default_speed=100 - ) - print(f"X轴步距: {config.steps_per_mm_x} 步/mm") - print(f"Y轴步距: {config.steps_per_mm_y} 步/mm") - print(f"Z轴步距: {config.steps_per_mm_z} 步/mm") - print(f"行程限制: X={config.max_travel_x}mm, Y={config.max_travel_y}mm, Z={config.max_travel_z}mm") - - # 2. 测试坐标原点数据结构 - print("\n2. 测试坐标原点数据结构") - origin = CoordinateOrigin() - print(f"初始状态: 已回零={origin.is_homed}") - print(f"机械原点: {origin.machine_origin_steps}") - print(f"工作原点: {origin.work_origin_steps}") - - # 设置示例数据 - origin.machine_origin_steps = {'x': 0, 'y': 0, 'z': 0} - origin.work_origin_steps = {'x': 16384, 'y': 16384, 'z': 13107} # 5mm, 5mm, 2mm (基于16384步/圈) - origin.is_homed = True - origin.timestamp = "2024-09-26 12:00:00" - print(f"设置后: 已回零={origin.is_homed}") - print(f"机械原点: {origin.machine_origin_steps}") - print(f"工作原点: {origin.work_origin_steps}") - - # 3. 测试离线功能 - print("\n3. 测试离线功能") - - # 创建离线控制器(不自动连接) - offline_controller = XYZController( - port='/dev/tty.usbserial-3130', - machine_config=config, - auto_connect=False - ) - - # 测试单位转换 - print("\n单位转换测试:") - test_distances = [1.0, 5.0, 10.0, 25.5] - for distance in test_distances: - x_steps = offline_controller.mm_to_steps(MotorAxis.X, distance) - y_steps = offline_controller.mm_to_steps(MotorAxis.Y, distance) - z_steps = offline_controller.mm_to_steps(MotorAxis.Z, distance) - print(f"{distance}mm -> X:{x_steps}步, Y:{y_steps}步, Z:{z_steps}步") - - # 反向转换验证 - x_mm = offline_controller.steps_to_mm(MotorAxis.X, x_steps) - y_mm = offline_controller.steps_to_mm(MotorAxis.Y, y_steps) - z_mm = offline_controller.steps_to_mm(MotorAxis.Z, z_steps) - print(f"反向转换: X:{x_mm:.2f}mm, Y:{y_mm:.2f}mm, Z:{z_mm:.2f}mm") - - # 测试坐标系转换 - print("\n坐标系转换测试:") - offline_controller.coordinate_origin = origin # 使用示例原点 - work_coords = [(0, 0, 0), (10, 15, 5), (50, 30, 20)] - - for x, y, z in work_coords: - try: - machine_steps = offline_controller.work_to_machine_steps(x, y, z) - print(f"工作坐标 ({x}, {y}, {z}) -> 机械步数 {machine_steps}") - - # 反向转换验证 - work_coords_back = offline_controller.machine_to_work_coords(machine_steps) - print(f"反向转换: ({work_coords_back['x']:.2f}, {work_coords_back['y']:.2f}, {work_coords_back['z']:.2f})") - except Exception as e: - print(f"转换失败: {e}") - - # 测试行程限制检查 - print("\n行程限制检查测试:") - test_positions = [ - (50, 50, 25, "正常位置"), - (250, 50, 25, "X轴超限"), - (50, 350, 25, "Y轴超限"), - (50, 50, 150, "Z轴超限"), - (-10, 50, 25, "X轴负超限"), - (50, -10, 25, "Y轴负超限"), - (50, 50, -5, "Z轴负超限") - ] - - for x, y, z, desc in test_positions: - try: - offline_controller.check_travel_limits(x, y, z) - print(f"{desc} ({x}, {y}, {z}): 有效") - except CoordinateSystemError as e: - print(f"{desc} ({x}, {y}, {z}): 超限 - {e}") - - print("\n=== 离线功能测试完成 ===") - - # 4. 硬件连接测试 - print("\n4. 硬件连接测试") - print("尝试连接真实设备...") - - # 可能的串口列表 - possible_ports = [ - '/dev/ttyCH341USB0' # CH340 USB串口转换器 - ] - - connected_controller = None - - for port in possible_ports: - try: - print(f"尝试连接端口: {port}") - controller = XYZController( - port=port, - machine_config=config, - auto_connect=True - ) - - if controller.is_connected: - print(f"成功连接到 {port}") - connected_controller = controller - - # 获取系统状态 - status = controller.get_system_status() - print("\n系统状态:") - print(f" 连接状态: {status['connection']['is_connected']}") - print(f" 是否已回零: {status['coordinate_system']['is_homed']}") - - if 'current_position' in status: - print(" 当前位置:") - for axis, pos_info in status['current_position'].items(): - print(f" {axis.upper()}轴: {pos_info['steps']}步 ({pos_info['mm']:.2f}mm)") - - # 测试基本移动功能 - print("\n测试基本移动功能:") - try: - # 获取当前位置 - current_pos = controller.get_current_position_mm() - print(f"当前工作坐标: {current_pos}") - - # 小幅移动测试 - print("执行小幅移动测试 (X+1mm)...") - if controller.move_relative_work_coord(dx=1.0, speed=500): - print("移动成功") - time.sleep(1) - new_pos = controller.get_current_position_mm() - print(f"移动后坐标: {new_pos}") - else: - print("移动失败") - - except Exception as e: - print(f"移动测试失败: {e}") - - break - - except Exception as e: - print(f"连接 {port} 失败: {e}") - continue - - if not connected_controller: - print("未找到可用的设备端口") - print("请检查:") - print(" 1. 设备是否正确连接") - print(" 2. 串口端口是否正确") - print(" 3. 设备驱动是否安装") - else: - # 进入交互式控制模式 - interactive_control(connected_controller) - - print("\n=== XYZ控制器测试完成 ===") - - -# ==================== 测试和示例代码 ==================== -if __name__ == "__main__": - run_tests() \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/core/__init__.py b/unilabos/devices/laiyu_liquid/core/__init__.py deleted file mode 100644 index 87214f83..00000000 --- a/unilabos/devices/laiyu_liquid/core/__init__.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -LaiYu液体处理设备核心模块 - -该模块包含LaiYu液体处理设备的核心功能组件: -- LaiYu_Liquid.py: 主设备类和配置管理 -- abstract_protocol.py: 抽象协议定义 -- laiyu_liquid_res.py: 设备资源管理 - -作者: UniLab团队 -版本: 2.0.0 -""" - -from .laiyu_liquid_main import ( - LaiYuLiquid, - LaiYuLiquidConfig, - LaiYuLiquidBackend, - LaiYuLiquidDeck, - LaiYuLiquidContainer, - LaiYuLiquidTipRack, - create_quick_setup -) - -from .laiyu_liquid_res import ( - LaiYuLiquidDeck, - LaiYuLiquidContainer, - LaiYuLiquidTipRack -) - -__all__ = [ - # 主设备类 - 'LaiYuLiquid', - 'LaiYuLiquidConfig', - 'LaiYuLiquidBackend', - - # 设备资源 - 'LaiYuLiquidDeck', - 'LaiYuLiquidContainer', - 'LaiYuLiquidTipRack', - - # 工具函数 - 'create_quick_setup' -] \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/core/abstract_protocol.py b/unilabos/devices/laiyu_liquid/core/abstract_protocol.py deleted file mode 100644 index 9959c364..00000000 --- a/unilabos/devices/laiyu_liquid/core/abstract_protocol.py +++ /dev/null @@ -1,529 +0,0 @@ -""" -LaiYu_Liquid 抽象协议实现 - -该模块提供了液体资源管理和转移的抽象协议,包括: -- MaterialResource: 液体资源管理类 -- transfer_liquid: 液体转移函数 -- 相关的辅助类和函数 - -主要功能: -- 管理多孔位的液体资源 -- 计算和跟踪液体体积 -- 处理液体转移操作 -- 提供资源状态查询 -""" - -import logging -from typing import Dict, List, Optional, Union, Any, Tuple -from dataclasses import dataclass, field -from enum import Enum -import uuid -import time - -# pylabrobot 导入 -from pylabrobot.resources import Resource, Well, Plate - -logger = logging.getLogger(__name__) - - -class LiquidType(Enum): - """液体类型枚举""" - WATER = "water" - ETHANOL = "ethanol" - DMSO = "dmso" - BUFFER = "buffer" - SAMPLE = "sample" - REAGENT = "reagent" - WASTE = "waste" - UNKNOWN = "unknown" - - -@dataclass -class LiquidInfo: - """液体信息类""" - liquid_type: LiquidType = LiquidType.UNKNOWN - volume: float = 0.0 # 体积 (μL) - concentration: Optional[float] = None # 浓度 (mg/ml, M等) - ph: Optional[float] = None # pH值 - temperature: Optional[float] = None # 温度 (°C) - viscosity: Optional[float] = None # 粘度 (cP) - density: Optional[float] = None # 密度 (g/ml) - description: str = "" # 描述信息 - - def __str__(self) -> str: - return f"{self.liquid_type.value}({self.description})" - - -@dataclass -class WellContent: - """孔位内容类""" - volume: float = 0.0 # 当前体积 (ul) - max_volume: float = 1000.0 # 最大容量 (ul) - liquid_info: LiquidInfo = field(default_factory=LiquidInfo) - last_updated: float = field(default_factory=time.time) - - @property - def is_empty(self) -> bool: - """检查是否为空""" - return self.volume <= 0.0 - - @property - def is_full(self) -> bool: - """检查是否已满""" - return self.volume >= self.max_volume - - @property - def available_volume(self) -> float: - """可用体积""" - return max(0.0, self.max_volume - self.volume) - - @property - def fill_percentage(self) -> float: - """填充百分比""" - return (self.volume / self.max_volume) * 100.0 if self.max_volume > 0 else 0.0 - - def can_add_volume(self, volume: float) -> bool: - """检查是否可以添加指定体积""" - return (self.volume + volume) <= self.max_volume - - def can_remove_volume(self, volume: float) -> bool: - """检查是否可以移除指定体积""" - return self.volume >= volume - - def add_volume(self, volume: float, liquid_info: Optional[LiquidInfo] = None) -> bool: - """ - 添加液体体积 - - Args: - volume: 要添加的体积 (ul) - liquid_info: 液体信息 - - Returns: - bool: 是否成功添加 - """ - if not self.can_add_volume(volume): - return False - - self.volume += volume - if liquid_info: - self.liquid_info = liquid_info - self.last_updated = time.time() - return True - - def remove_volume(self, volume: float) -> bool: - """ - 移除液体体积 - - Args: - volume: 要移除的体积 (ul) - - Returns: - bool: 是否成功移除 - """ - if not self.can_remove_volume(volume): - return False - - self.volume -= volume - self.last_updated = time.time() - - # 如果完全清空,重置液体信息 - if self.volume <= 0.0: - self.volume = 0.0 - self.liquid_info = LiquidInfo() - - return True - - -class MaterialResource: - """ - 液体资源管理类 - - 该类用于管理液体处理过程中的资源状态,包括: - - 跟踪多个孔位的液体体积和类型 - - 计算总体积和可用体积 - - 处理液体的添加和移除 - - 提供资源状态查询 - """ - - def __init__( - self, - resource: Resource, - wells: Optional[List[Well]] = None, - default_max_volume: float = 1000.0 - ): - """ - 初始化材料资源 - - Args: - resource: pylabrobot 资源对象 - wells: 孔位列表,如果为None则自动获取 - default_max_volume: 默认最大体积 (ul) - """ - self.resource = resource - self.resource_id = str(uuid.uuid4()) - self.default_max_volume = default_max_volume - - # 获取孔位列表 - if wells is None: - if hasattr(resource, 'get_wells'): - self.wells = resource.get_wells() - elif hasattr(resource, 'wells'): - self.wells = resource.wells - else: - # 如果没有孔位,创建一个虚拟孔位 - self.wells = [resource] - else: - self.wells = wells - - # 初始化孔位内容 - self.well_contents: Dict[str, WellContent] = {} - for well in self.wells: - well_id = self._get_well_id(well) - self.well_contents[well_id] = WellContent( - max_volume=default_max_volume - ) - - logger.info(f"初始化材料资源: {resource.name}, 孔位数: {len(self.wells)}") - - def _get_well_id(self, well: Union[Well, Resource]) -> str: - """获取孔位ID""" - if hasattr(well, 'name'): - return well.name - else: - return str(id(well)) - - @property - def name(self) -> str: - """资源名称""" - return self.resource.name - - @property - def total_volume(self) -> float: - """总液体体积""" - return sum(content.volume for content in self.well_contents.values()) - - @property - def total_max_volume(self) -> float: - """总最大容量""" - return sum(content.max_volume for content in self.well_contents.values()) - - @property - def available_volume(self) -> float: - """总可用体积""" - return sum(content.available_volume for content in self.well_contents.values()) - - @property - def well_count(self) -> int: - """孔位数量""" - return len(self.wells) - - @property - def empty_wells(self) -> List[str]: - """空孔位列表""" - return [well_id for well_id, content in self.well_contents.items() - if content.is_empty] - - @property - def full_wells(self) -> List[str]: - """满孔位列表""" - return [well_id for well_id, content in self.well_contents.items() - if content.is_full] - - @property - def occupied_wells(self) -> List[str]: - """有液体的孔位列表""" - return [well_id for well_id, content in self.well_contents.items() - if not content.is_empty] - - def get_well_content(self, well_id: str) -> Optional[WellContent]: - """获取指定孔位的内容""" - return self.well_contents.get(well_id) - - def get_well_volume(self, well_id: str) -> float: - """获取指定孔位的体积""" - content = self.get_well_content(well_id) - return content.volume if content else 0.0 - - def set_well_volume( - self, - well_id: str, - volume: float, - liquid_info: Optional[LiquidInfo] = None - ) -> bool: - """ - 设置指定孔位的体积 - - Args: - well_id: 孔位ID - volume: 体积 (ul) - liquid_info: 液体信息 - - Returns: - bool: 是否成功设置 - """ - if well_id not in self.well_contents: - logger.error(f"孔位 {well_id} 不存在") - return False - - content = self.well_contents[well_id] - if volume > content.max_volume: - logger.error(f"体积 {volume} 超过最大容量 {content.max_volume}") - return False - - content.volume = max(0.0, volume) - if liquid_info: - content.liquid_info = liquid_info - content.last_updated = time.time() - - logger.info(f"设置孔位 {well_id} 体积: {volume}ul") - return True - - def add_liquid( - self, - well_id: str, - volume: float, - liquid_info: Optional[LiquidInfo] = None - ) -> bool: - """ - 向指定孔位添加液体 - - Args: - well_id: 孔位ID - volume: 添加的体积 (ul) - liquid_info: 液体信息 - - Returns: - bool: 是否成功添加 - """ - if well_id not in self.well_contents: - logger.error(f"孔位 {well_id} 不存在") - return False - - content = self.well_contents[well_id] - success = content.add_volume(volume, liquid_info) - - if success: - logger.info(f"向孔位 {well_id} 添加 {volume}ul 液体") - else: - logger.error(f"无法向孔位 {well_id} 添加 {volume}ul 液体") - - return success - - def remove_liquid(self, well_id: str, volume: float) -> bool: - """ - 从指定孔位移除液体 - - Args: - well_id: 孔位ID - volume: 移除的体积 (ul) - - Returns: - bool: 是否成功移除 - """ - if well_id not in self.well_contents: - logger.error(f"孔位 {well_id} 不存在") - return False - - content = self.well_contents[well_id] - success = content.remove_volume(volume) - - if success: - logger.info(f"从孔位 {well_id} 移除 {volume}ul 液体") - else: - logger.error(f"无法从孔位 {well_id} 移除 {volume}ul 液体") - - return success - - def find_wells_with_volume(self, min_volume: float) -> List[str]: - """ - 查找具有指定最小体积的孔位 - - Args: - min_volume: 最小体积 (ul) - - Returns: - List[str]: 符合条件的孔位ID列表 - """ - return [well_id for well_id, content in self.well_contents.items() - if content.volume >= min_volume] - - def find_wells_with_space(self, min_space: float) -> List[str]: - """ - 查找具有指定最小空间的孔位 - - Args: - min_space: 最小空间 (ul) - - Returns: - List[str]: 符合条件的孔位ID列表 - """ - return [well_id for well_id, content in self.well_contents.items() - if content.available_volume >= min_space] - - def get_status_summary(self) -> Dict[str, Any]: - """获取资源状态摘要""" - return { - "resource_name": self.name, - "resource_id": self.resource_id, - "well_count": self.well_count, - "total_volume": self.total_volume, - "total_max_volume": self.total_max_volume, - "available_volume": self.available_volume, - "fill_percentage": (self.total_volume / self.total_max_volume) * 100.0, - "empty_wells": len(self.empty_wells), - "full_wells": len(self.full_wells), - "occupied_wells": len(self.occupied_wells) - } - - def get_detailed_status(self) -> Dict[str, Any]: - """获取详细状态信息""" - well_details = {} - for well_id, content in self.well_contents.items(): - well_details[well_id] = { - "volume": content.volume, - "max_volume": content.max_volume, - "available_volume": content.available_volume, - "fill_percentage": content.fill_percentage, - "liquid_type": content.liquid_info.liquid_type.value, - "description": content.liquid_info.description, - "last_updated": content.last_updated - } - - return { - "summary": self.get_status_summary(), - "wells": well_details - } - - -def transfer_liquid( - source: MaterialResource, - target: MaterialResource, - volume: float, - source_well_id: Optional[str] = None, - target_well_id: Optional[str] = None, - liquid_info: Optional[LiquidInfo] = None -) -> bool: - """ - 在两个材料资源之间转移液体 - - Args: - source: 源资源 - target: 目标资源 - volume: 转移体积 (ul) - source_well_id: 源孔位ID,如果为None则自动选择 - target_well_id: 目标孔位ID,如果为None则自动选择 - liquid_info: 液体信息 - - Returns: - bool: 转移是否成功 - """ - try: - # 自动选择源孔位 - if source_well_id is None: - available_wells = source.find_wells_with_volume(volume) - if not available_wells: - logger.error(f"源资源 {source.name} 没有足够体积的孔位") - return False - source_well_id = available_wells[0] - - # 自动选择目标孔位 - if target_well_id is None: - available_wells = target.find_wells_with_space(volume) - if not available_wells: - logger.error(f"目标资源 {target.name} 没有足够空间的孔位") - return False - target_well_id = available_wells[0] - - # 检查源孔位是否有足够液体 - if not source.get_well_content(source_well_id).can_remove_volume(volume): - logger.error(f"源孔位 {source_well_id} 液体不足") - return False - - # 检查目标孔位是否有足够空间 - if not target.get_well_content(target_well_id).can_add_volume(volume): - logger.error(f"目标孔位 {target_well_id} 空间不足") - return False - - # 获取源液体信息 - source_content = source.get_well_content(source_well_id) - transfer_liquid_info = liquid_info or source_content.liquid_info - - # 执行转移 - if source.remove_liquid(source_well_id, volume): - if target.add_liquid(target_well_id, volume, transfer_liquid_info): - logger.info(f"成功转移 {volume}ul 液体: {source.name}[{source_well_id}] -> {target.name}[{target_well_id}]") - return True - else: - # 如果目标添加失败,回滚源操作 - source.add_liquid(source_well_id, volume, source_content.liquid_info) - logger.error("目标添加失败,已回滚源操作") - return False - else: - logger.error("源移除失败") - return False - - except Exception as e: - logger.error(f"液体转移失败: {e}") - return False - - -def create_material_resource( - name: str, - resource: Resource, - initial_volumes: Optional[Dict[str, float]] = None, - liquid_info: Optional[LiquidInfo] = None, - max_volume: float = 1000.0 -) -> MaterialResource: - """ - 创建材料资源的便捷函数 - - Args: - name: 资源名称 - resource: pylabrobot 资源对象 - initial_volumes: 初始体积字典 {well_id: volume} - liquid_info: 液体信息 - max_volume: 最大体积 - - Returns: - MaterialResource: 创建的材料资源 - """ - material_resource = MaterialResource( - resource=resource, - default_max_volume=max_volume - ) - - # 设置初始体积 - if initial_volumes: - for well_id, volume in initial_volumes.items(): - material_resource.set_well_volume(well_id, volume, liquid_info) - - return material_resource - - -def batch_transfer_liquid( - transfers: List[Tuple[MaterialResource, MaterialResource, float]], - liquid_info: Optional[LiquidInfo] = None -) -> List[bool]: - """ - 批量液体转移 - - Args: - transfers: 转移列表 [(source, target, volume), ...] - liquid_info: 液体信息 - - Returns: - List[bool]: 每个转移操作的结果 - """ - results = [] - - for source, target, volume in transfers: - result = transfer_liquid(source, target, volume, liquid_info=liquid_info) - results.append(result) - - if not result: - logger.warning(f"批量转移中的操作失败: {source.name} -> {target.name}") - - success_count = sum(results) - logger.info(f"批量转移完成: {success_count}/{len(transfers)} 成功") - - return results \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/core/laiyu_liquid_main.py b/unilabos/devices/laiyu_liquid/core/laiyu_liquid_main.py deleted file mode 100644 index f369a208..00000000 --- a/unilabos/devices/laiyu_liquid/core/laiyu_liquid_main.py +++ /dev/null @@ -1,888 +0,0 @@ -""" -LaiYu_Liquid 液体处理工作站主要集成文件 - -该模块实现了 LaiYu_Liquid 与 UniLabOS 系统的集成,提供标准化的液体处理接口。 -主要包含: -- LaiYuLiquidBackend: 硬件通信后端 -- LaiYuLiquid: 主要接口类 -- 相关的异常类和容器类 -""" - -import asyncio -import logging -import time -from typing import List, Optional, Dict, Any, Union, Tuple -from dataclasses import dataclass -from abc import ABC, abstractmethod - -from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode - -# 基础导入 -try: - from pylabrobot.resources import Deck, Plate, TipRack, Tip, Resource, Well - - PYLABROBOT_AVAILABLE = True -except ImportError: - # 如果 pylabrobot 不可用,创建基础的模拟类 - PYLABROBOT_AVAILABLE = False - - class Resource: - def __init__(self, name: str): - self.name = name - - class Deck(Resource): - pass - - class Plate(Resource): - pass - - class TipRack(Resource): - pass - - class Tip(Resource): - pass - - class Well(Resource): - pass - - -# LaiYu_Liquid 控制器导入 -try: - from .controllers.pipette_controller import PipetteController, TipStatus, LiquidClass, LiquidParameters - from .controllers.xyz_controller import XYZController, MachineConfig, CoordinateOrigin, MotorAxis - - CONTROLLERS_AVAILABLE = True -except ImportError: - CONTROLLERS_AVAILABLE = False - - # 创建模拟的控制器类 - class PipetteController: - def __init__(self, *args, **kwargs): - pass - - def connect(self): - return True - - def initialize(self): - return True - - class XYZController: - def __init__(self, *args, **kwargs): - pass - - def connect_device(self): - return True - - -logger = logging.getLogger(__name__) - - -class LaiYuLiquidError(RuntimeError): - """LaiYu_Liquid 设备异常""" - - pass - - -@dataclass -class LaiYuLiquidConfig: - """LaiYu_Liquid 设备配置""" - - port: str = "/dev/cu.usbserial-3130" # RS485转USB端口 - address: int = 1 # 设备地址 - baudrate: int = 9600 # 波特率 - timeout: float = 5.0 # 通信超时时间 - - # 工作台尺寸 - deck_width: float = 340.0 # 工作台宽度 (mm) - deck_height: float = 250.0 # 工作台高度 (mm) - deck_depth: float = 160.0 # 工作台深度 (mm) - - # 移液参数 - max_volume: float = 1000.0 # 最大体积 (μL) - min_volume: float = 0.1 # 最小体积 (μL) - - # 运动参数 - max_speed: float = 100.0 # 最大速度 (mm/s) - acceleration: float = 50.0 # 加速度 (mm/s²) - - # 安全参数 - safe_height: float = 50.0 # 安全高度 (mm) - tip_pickup_depth: float = 10.0 # 吸头拾取深度 (mm) - liquid_detection: bool = True # 液面检测 - - # 取枪头相关参数 - tip_pickup_speed: int = 30 # 取枪头时的移动速度 (rpm) - tip_pickup_acceleration: int = 500 # 取枪头时的加速度 (rpm/s) - tip_approach_height: float = 5.0 # 接近枪头时的高度 (mm) - tip_pickup_force_depth: float = 2.0 # 强制插入深度 (mm) - tip_pickup_retract_height: float = 20.0 # 取枪头后的回退高度 (mm) - - # 丢弃枪头相关参数 - tip_drop_height: float = 10.0 # 丢弃枪头时的高度 (mm) - tip_drop_speed: int = 50 # 丢弃枪头时的移动速度 (rpm) - trash_position: Tuple[float, float, float] = (300.0, 200.0, 0.0) # 垃圾桶位置 (mm) - - # 安全范围配置 - deck_width: float = 300.0 # 工作台宽度 (mm) - deck_height: float = 200.0 # 工作台高度 (mm) - deck_depth: float = 100.0 # 工作台深度 (mm) - safe_height: float = 50.0 # 安全高度 (mm) - position_validation: bool = True # 启用位置验证 - emergency_stop_enabled: bool = True # 启用紧急停止 - - -class LaiYuLiquidDeck: - """LaiYu_Liquid 工作台管理""" - - def __init__(self, config: LaiYuLiquidConfig): - self.config = config - self.resources: Dict[str, Resource] = {} - self.positions: Dict[str, Tuple[float, float, float]] = {} - - def add_resource(self, name: str, resource: Resource, position: Tuple[float, float, float]): - """添加资源到工作台""" - self.resources[name] = resource - self.positions[name] = position - - def get_resource(self, name: str) -> Optional[Resource]: - """获取资源""" - return self.resources.get(name) - - def get_position(self, name: str) -> Optional[Tuple[float, float, float]]: - """获取资源位置""" - return self.positions.get(name) - - def list_resources(self) -> List[str]: - """列出所有资源""" - return list(self.resources.keys()) - - -class LaiYuLiquidContainer: - """LaiYu_Liquid 容器类""" - - def __init__( - self, - name: str, - size_x: float = 0, - size_y: float = 0, - size_z: float = 0, - container_type: str = "", - volume: float = 0.0, - max_volume: float = 1000.0, - lid_height: float = 0.0, - ): - self.name = name - self.size_x = size_x - self.size_y = size_y - self.size_z = size_z - self.lid_height = lid_height - self.container_type = container_type - self.volume = volume - self.max_volume = max_volume - self.last_updated = time.time() - self.child_resources = {} # 存储子资源 - - @property - def is_empty(self) -> bool: - return self.volume <= 0.0 - - @property - def is_full(self) -> bool: - return self.volume >= self.max_volume - - @property - def available_volume(self) -> float: - return max(0.0, self.max_volume - self.volume) - - def add_volume(self, volume: float) -> bool: - """添加体积""" - if self.volume + volume <= self.max_volume: - self.volume += volume - self.last_updated = time.time() - return True - return False - - def remove_volume(self, volume: float) -> bool: - """移除体积""" - if self.volume >= volume: - self.volume -= volume - self.last_updated = time.time() - return True - return False - - def assign_child_resource(self, resource, location=None): - """分配子资源 - 与 PyLabRobot 资源管理系统兼容""" - if hasattr(resource, "name"): - self.child_resources[resource.name] = {"resource": resource, "location": location} - - -class LaiYuLiquidTipRack: - """LaiYu_Liquid 吸头架类""" - - def __init__( - self, - name: str, - size_x: float = 0, - size_y: float = 0, - size_z: float = 0, - tip_count: int = 96, - tip_volume: float = 1000.0, - ): - self.name = name - self.size_x = size_x - self.size_y = size_y - self.size_z = size_z - self.tip_count = tip_count - self.tip_volume = tip_volume - self.tips_available = [True] * tip_count - self.child_resources = {} # 存储子资源 - - @property - def available_tips(self) -> int: - return sum(self.tips_available) - - @property - def is_empty(self) -> bool: - return self.available_tips == 0 - - def pick_tip(self, position: int) -> bool: - """拾取吸头""" - if 0 <= position < self.tip_count and self.tips_available[position]: - self.tips_available[position] = False - return True - return False - - def has_tip(self, position: int) -> bool: - """检查位置是否有吸头""" - if 0 <= position < self.tip_count: - return self.tips_available[position] - return False - - def assign_child_resource(self, resource, location=None): - """分配子资源到指定位置""" - self.child_resources[resource.name] = {"resource": resource, "location": location} - - -def get_module_info(): - """获取模块信息""" - return { - "name": "LaiYu_Liquid", - "version": "1.0.0", - "description": "LaiYu液体处理工作站模块,提供移液器控制、XYZ轴控制和资源管理功能", - "author": "UniLabOS Team", - "capabilities": ["移液器控制", "XYZ轴运动控制", "吸头架管理", "板和容器管理", "资源位置管理"], - "dependencies": {"required": ["serial"], "optional": ["pylabrobot"]}, - } - - -class LaiYuLiquidBackend: - """LaiYu_Liquid 硬件通信后端""" - - _ros_node: BaseROS2DeviceNode - - def __init__(self, config: LaiYuLiquidConfig, deck: Optional["LaiYuLiquidDeck"] = None): - self.config = config - self.deck = deck # 工作台引用,用于获取资源位置信息 - self.pipette_controller = None - self.xyz_controller = None - self.is_connected = False - self.is_initialized = False - - # 状态跟踪 - self.current_position = (0.0, 0.0, 0.0) - self.tip_attached = False - self.current_volume = 0.0 - - def post_init(self, ros_node: BaseROS2DeviceNode): - self._ros_node = ros_node - - def _validate_position(self, x: float, y: float, z: float) -> bool: - """验证位置是否在安全范围内""" - try: - # 检查X轴范围 - if not (0 <= x <= self.config.deck_width): - logger.error(f"X轴位置 {x:.2f}mm 超出范围 [0, {self.config.deck_width}]") - return False - - # 检查Y轴范围 - if not (0 <= y <= self.config.deck_height): - logger.error(f"Y轴位置 {y:.2f}mm 超出范围 [0, {self.config.deck_height}]") - return False - - # 检查Z轴范围(负值表示向下,0为工作台表面) - if not (-self.config.deck_depth <= z <= self.config.safe_height): - logger.error(f"Z轴位置 {z:.2f}mm 超出安全范围 [{-self.config.deck_depth}, {self.config.safe_height}]") - return False - - return True - except Exception as e: - logger.error(f"位置验证失败: {e}") - return False - - def _check_hardware_ready(self) -> bool: - """检查硬件是否准备就绪""" - if not self.is_connected: - logger.error("设备未连接") - return False - - if CONTROLLERS_AVAILABLE: - if self.xyz_controller is None: - logger.error("XYZ控制器未初始化") - return False - - return True - - async def emergency_stop(self) -> bool: - """紧急停止所有运动""" - try: - logger.warning("执行紧急停止") - - if CONTROLLERS_AVAILABLE and self.xyz_controller: - # 停止XYZ控制器 - await self.xyz_controller.stop_all_motion() - logger.info("XYZ控制器已停止") - - if self.pipette_controller: - # 停止移液器控制器 - await self.pipette_controller.stop() - logger.info("移液器控制器已停止") - - return True - except Exception as e: - logger.error(f"紧急停止失败: {e}") - return False - - async def move_to_safe_position(self) -> bool: - """移动到安全位置""" - try: - if not self._check_hardware_ready(): - return False - - safe_position = ( - self.config.deck_width / 2, # 工作台中心X - self.config.deck_height / 2, # 工作台中心Y - self.config.safe_height, # 安全高度Z - ) - - if not self._validate_position(*safe_position): - logger.error("安全位置无效") - return False - - if CONTROLLERS_AVAILABLE and self.xyz_controller: - await self.xyz_controller.move_to_work_coord(*safe_position) - self.current_position = safe_position - logger.info(f"已移动到安全位置: {safe_position}") - return True - else: - # 模拟模式 - self.current_position = safe_position - logger.info("模拟移动到安全位置") - return True - - except Exception as e: - logger.error(f"移动到安全位置失败: {e}") - return False - - async def setup(self) -> bool: - """设置硬件连接""" - try: - if CONTROLLERS_AVAILABLE: - # 初始化移液器控制器 - self.pipette_controller = PipetteController(port=self.config.port, address=self.config.address) - - # 初始化XYZ控制器 - machine_config = MachineConfig() - self.xyz_controller = XYZController( - port=self.config.port, baudrate=self.config.baudrate, machine_config=machine_config - ) - - # 连接设备 - pipette_connected = await asyncio.to_thread(self.pipette_controller.connect) - xyz_connected = await asyncio.to_thread(self.xyz_controller.connect_device) - - if pipette_connected and xyz_connected: - self.is_connected = True - logger.info("LaiYu_Liquid 硬件连接成功") - return True - else: - logger.error("LaiYu_Liquid 硬件连接失败") - return False - else: - # 模拟模式 - logger.info("LaiYu_Liquid 运行在模拟模式") - self.is_connected = True - return True - - except Exception as e: - logger.error(f"LaiYu_Liquid 设置失败: {e}") - return False - - async def stop(self): - """停止设备""" - try: - if self.pipette_controller and hasattr(self.pipette_controller, "disconnect"): - await asyncio.to_thread(self.pipette_controller.disconnect) - - if self.xyz_controller and hasattr(self.xyz_controller, "disconnect"): - await asyncio.to_thread(self.xyz_controller.disconnect) - - self.is_connected = False - self.is_initialized = False - logger.info("LaiYu_Liquid 已停止") - - except Exception as e: - logger.error(f"LaiYu_Liquid 停止失败: {e}") - - async def move_to(self, x: float, y: float, z: float) -> bool: - """移动到指定位置""" - try: - if not self.is_connected: - raise LaiYuLiquidError("设备未连接") - - # 模拟移动 - await self._ros_node.sleep(0.1) # 模拟移动时间 - self.current_position = (x, y, z) - logger.debug(f"移动到位置: ({x}, {y}, {z})") - return True - - except Exception as e: - logger.error(f"移动失败: {e}") - return False - - async def pick_up_tip(self, tip_rack: str, position: int) -> bool: - """拾取吸头 - 包含真正的Z轴下降控制""" - try: - # 硬件准备检查 - if not self._check_hardware_ready(): - return False - - if self.tip_attached: - logger.warning("已有吸头附着,无法拾取新吸头") - return False - - logger.info(f"开始从 {tip_rack} 位置 {position} 拾取吸头") - - # 获取枪头架位置信息 - if self.deck is None: - logger.error("工作台未初始化") - return False - - tip_position = self.deck.get_position(tip_rack) - if tip_position is None: - logger.error(f"未找到枪头架 {tip_rack} 的位置信息") - return False - - # 计算具体枪头位置(这里简化处理,实际应根据position计算偏移) - tip_x, tip_y, tip_z = tip_position - - # 验证所有关键位置的安全性 - safe_z = tip_z + self.config.tip_approach_height - pickup_z = tip_z - self.config.tip_pickup_force_depth - retract_z = tip_z + self.config.tip_pickup_retract_height - - if not ( - self._validate_position(tip_x, tip_y, safe_z) - and self._validate_position(tip_x, tip_y, pickup_z) - and self._validate_position(tip_x, tip_y, retract_z) - ): - logger.error("枪头拾取位置超出安全范围") - return False - - if CONTROLLERS_AVAILABLE and self.xyz_controller: - # 真实硬件控制流程 - logger.info("使用真实XYZ控制器进行枪头拾取") - - try: - # 1. 移动到枪头上方的安全位置 - safe_z = tip_z + self.config.tip_approach_height - logger.info(f"移动到枪头上方安全位置: ({tip_x:.2f}, {tip_y:.2f}, {safe_z:.2f})") - move_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, tip_x, tip_y, safe_z - ) - if not move_success: - logger.error("移动到枪头上方失败") - return False - - # 2. Z轴下降到枪头位置 - pickup_z = tip_z - self.config.tip_pickup_force_depth - logger.info(f"Z轴下降到枪头拾取位置: {pickup_z:.2f}mm") - z_down_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, tip_x, tip_y, pickup_z - ) - if not z_down_success: - logger.error("Z轴下降到枪头位置失败") - return False - - # 3. 等待一小段时间确保枪头牢固附着 - await self._ros_node.sleep(0.2) - - # 4. Z轴上升到回退高度 - retract_z = tip_z + self.config.tip_pickup_retract_height - logger.info(f"Z轴上升到回退高度: {retract_z:.2f}mm") - z_up_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, tip_x, tip_y, retract_z - ) - if not z_up_success: - logger.error("Z轴上升失败") - return False - - # 5. 更新当前位置 - self.current_position = (tip_x, tip_y, retract_z) - - except Exception as move_error: - logger.error(f"枪头拾取过程中发生错误: {move_error}") - # 尝试移动到安全位置 - if self.config.emergency_stop_enabled: - await self.emergency_stop() - await self.move_to_safe_position() - return False - - else: - # 模拟模式 - logger.info("模拟模式:执行枪头拾取动作") - await self._ros_node.sleep(1.0) # 模拟整个拾取过程的时间 - self.current_position = (tip_x, tip_y, tip_z + self.config.tip_pickup_retract_height) - - # 6. 标记枪头已附着 - self.tip_attached = True - logger.info("吸头拾取成功") - return True - - except Exception as e: - logger.error(f"拾取吸头失败: {e}") - return False - - async def drop_tip(self, location: str = "trash") -> bool: - """丢弃吸头 - 包含真正的Z轴控制""" - try: - # 硬件准备检查 - if not self._check_hardware_ready(): - return False - - if not self.tip_attached: - logger.warning("没有吸头附着,无需丢弃") - return True - - logger.info(f"开始丢弃吸头到 {location}") - - # 确定丢弃位置 - if location == "trash": - # 使用配置中的垃圾桶位置 - drop_x, drop_y, drop_z = self.config.trash_position - else: - # 尝试从deck获取指定位置 - if self.deck is None: - logger.error("工作台未初始化") - return False - - drop_position = self.deck.get_position(location) - if drop_position is None: - logger.error(f"未找到丢弃位置 {location} 的信息") - return False - drop_x, drop_y, drop_z = drop_position - - # 验证丢弃位置的安全性 - safe_z = drop_z + self.config.safe_height - drop_height_z = drop_z + self.config.tip_drop_height - - if not ( - self._validate_position(drop_x, drop_y, safe_z) - and self._validate_position(drop_x, drop_y, drop_height_z) - ): - logger.error("枪头丢弃位置超出安全范围") - return False - - if CONTROLLERS_AVAILABLE and self.xyz_controller: - # 真实硬件控制流程 - logger.info("使用真实XYZ控制器进行枪头丢弃") - - try: - # 1. 移动到丢弃位置上方的安全高度 - safe_z = drop_z + self.config.tip_drop_height - logger.info(f"移动到丢弃位置上方: ({drop_x:.2f}, {drop_y:.2f}, {safe_z:.2f})") - move_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, drop_x, drop_y, safe_z - ) - if not move_success: - logger.error("移动到丢弃位置上方失败") - return False - - # 2. Z轴下降到丢弃高度 - logger.info(f"Z轴下降到丢弃高度: {drop_z:.2f}mm") - z_down_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, drop_x, drop_y, drop_z - ) - if not z_down_success: - logger.error("Z轴下降到丢弃位置失败") - return False - - # 3. 执行枪头弹出动作(如果有移液器控制器) - if self.pipette_controller: - try: - # 发送弹出枪头命令 - await asyncio.to_thread(self.pipette_controller.eject_tip) - logger.info("执行枪头弹出命令") - except Exception as e: - logger.warning(f"枪头弹出命令失败: {e}") - - # 4. 等待一小段时间确保枪头完全脱离 - await self._ros_node.sleep(0.3) - - # 5. Z轴上升到安全高度 - logger.info(f"Z轴上升到安全高度: {safe_z:.2f}mm") - z_up_success = await asyncio.to_thread( - self.xyz_controller.move_to_work_coord, drop_x, drop_y, safe_z - ) - if not z_up_success: - logger.error("Z轴上升失败") - return False - - # 6. 更新当前位置 - self.current_position = (drop_x, drop_y, safe_z) - - except Exception as drop_error: - logger.error(f"枪头丢弃过程中发生错误: {drop_error}") - # 尝试移动到安全位置 - if self.config.emergency_stop_enabled: - await self.emergency_stop() - await self.move_to_safe_position() - return False - - else: - # 模拟模式 - logger.info("模拟模式:执行枪头丢弃动作") - await self._ros_node.sleep(0.8) # 模拟整个丢弃过程的时间 - self.current_position = (drop_x, drop_y, drop_z + self.config.tip_drop_height) - - # 7. 标记枪头已脱离,清空体积 - self.tip_attached = False - self.current_volume = 0.0 - logger.info("吸头丢弃成功") - return True - - except Exception as e: - logger.error(f"丢弃吸头失败: {e}") - return False - - async def aspirate(self, volume: float, location: str) -> bool: - """吸取液体""" - try: - if not self.is_connected: - raise LaiYuLiquidError("设备未连接") - - if not self.tip_attached: - raise LaiYuLiquidError("没有吸头附着") - - if volume <= 0 or volume > self.config.max_volume: - raise LaiYuLiquidError(f"体积超出范围: {volume}") - - # 模拟吸取 - await self._ros_node.sleep(0.3) - self.current_volume += volume - logger.debug(f"从 {location} 吸取 {volume} μL") - return True - - except Exception as e: - logger.error(f"吸取失败: {e}") - return False - - async def dispense(self, volume: float, location: str) -> bool: - """分配液体""" - try: - if not self.is_connected: - raise LaiYuLiquidError("设备未连接") - - if not self.tip_attached: - raise LaiYuLiquidError("没有吸头附着") - - if volume <= 0 or volume > self.current_volume: - raise LaiYuLiquidError(f"分配体积无效: {volume}") - - # 模拟分配 - await self._ros_node.sleep(0.3) - self.current_volume -= volume - logger.debug(f"向 {location} 分配 {volume} μL") - return True - - except Exception as e: - logger.error(f"分配失败: {e}") - return False - - -class LaiYuLiquid: - """LaiYu_Liquid 主要接口类""" - - def __init__(self, config: Optional[LaiYuLiquidConfig] = None, **kwargs): - # 如果传入了关键字参数,创建配置对象 - if kwargs and config is None: - # 从kwargs中提取配置参数 - config_params = {} - for key, value in kwargs.items(): - if hasattr(LaiYuLiquidConfig, key): - config_params[key] = value - self.config = LaiYuLiquidConfig(**config_params) - else: - self.config = config or LaiYuLiquidConfig() - - # 先创建deck,然后传递给backend - self.deck = LaiYuLiquidDeck(self.config) - self.backend = LaiYuLiquidBackend(self.config, self.deck) - self.is_setup = False - - @property - def current_position(self) -> Tuple[float, float, float]: - """获取当前位置""" - return self.backend.current_position - - @property - def current_volume(self) -> float: - """获取当前体积""" - return self.backend.current_volume - - @property - def is_connected(self) -> bool: - """获取连接状态""" - return self.backend.is_connected - - @property - def is_initialized(self) -> bool: - """获取初始化状态""" - return self.backend.is_initialized - - @property - def tip_attached(self) -> bool: - """获取吸头附着状态""" - return self.backend.tip_attached - - async def setup(self) -> bool: - """设置液体处理器""" - try: - success = await self.backend.setup() - if success: - self.is_setup = True - logger.info("LaiYu_Liquid 设置完成") - return success - except Exception as e: - logger.error(f"LaiYu_Liquid 设置失败: {e}") - return False - - async def stop(self): - """停止液体处理器""" - await self.backend.stop() - self.is_setup = False - - async def transfer( - self, source: str, target: str, volume: float, tip_rack: str = "tip_rack_1", tip_position: int = 0 - ) -> bool: - """液体转移""" - try: - if not self.is_setup: - raise LaiYuLiquidError("设备未设置") - - # 获取源和目标位置 - source_pos = self.deck.get_position(source) - target_pos = self.deck.get_position(target) - tip_pos = self.deck.get_position(tip_rack) - - if not all([source_pos, target_pos, tip_pos]): - raise LaiYuLiquidError("位置信息不完整") - - # 执行转移步骤 - steps = [ - ("移动到吸头架", self.backend.move_to(*tip_pos)), - ("拾取吸头", self.backend.pick_up_tip(tip_rack, tip_position)), - ("移动到源位置", self.backend.move_to(*source_pos)), - ("吸取液体", self.backend.aspirate(volume, source)), - ("移动到目标位置", self.backend.move_to(*target_pos)), - ("分配液体", self.backend.dispense(volume, target)), - ("丢弃吸头", self.backend.drop_tip()), - ] - - for step_name, step_coro in steps: - logger.debug(f"执行步骤: {step_name}") - success = await step_coro - if not success: - raise LaiYuLiquidError(f"步骤失败: {step_name}") - - logger.info(f"液体转移完成: {source} -> {target}, {volume} μL") - return True - - except Exception as e: - logger.error(f"液体转移失败: {e}") - return False - - def add_resource(self, name: str, resource_type: str, position: Tuple[float, float, float]): - """添加资源到工作台""" - if resource_type == "plate": - resource = Plate(name) - elif resource_type == "tip_rack": - resource = TipRack(name) - else: - resource = Resource(name) - - self.deck.add_resource(name, resource, position) - - def get_status(self) -> Dict[str, Any]: - """获取设备状态""" - return { - "connected": self.backend.is_connected, - "setup": self.is_setup, - "current_position": self.backend.current_position, - "tip_attached": self.backend.tip_attached, - "current_volume": self.backend.current_volume, - "resources": self.deck.list_resources(), - } - - -def create_quick_setup() -> LaiYuLiquidDeck: - """ - 创建快速设置的LaiYu液体处理工作站 - - Returns: - LaiYuLiquidDeck: 配置好的工作台实例 - """ - # 创建默认配置 - config = LaiYuLiquidConfig() - - # 创建工作台 - deck = LaiYuLiquidDeck(config) - - # 导入资源创建函数 - try: - from .laiyu_liquid_res import ( - create_tip_rack_1000ul, - create_tip_rack_200ul, - create_96_well_plate, - create_waste_container, - ) - - # 添加基本资源 - tip_rack_1000 = create_tip_rack_1000ul("tip_rack_1000") - tip_rack_200 = create_tip_rack_200ul("tip_rack_200") - plate_96 = create_96_well_plate("plate_96") - waste = create_waste_container("waste") - - # 添加到工作台 - deck.add_resource("tip_rack_1000", tip_rack_1000, (50, 50, 0)) - deck.add_resource("tip_rack_200", tip_rack_200, (150, 50, 0)) - deck.add_resource("plate_96", plate_96, (250, 50, 0)) - deck.add_resource("waste", waste, (50, 150, 0)) - - except ImportError: - # 如果资源模块不可用,创建空的工作台 - logger.warning("资源模块不可用,创建空的工作台") - - return deck - - -__all__ = [ - "LaiYuLiquid", - "LaiYuLiquidBackend", - "LaiYuLiquidConfig", - "LaiYuLiquidDeck", - "LaiYuLiquidContainer", - "LaiYuLiquidTipRack", - "LaiYuLiquidError", - "create_quick_setup", - "get_module_info", -] diff --git a/unilabos/devices/laiyu_liquid/core/laiyu_liquid_res.py b/unilabos/devices/laiyu_liquid/core/laiyu_liquid_res.py deleted file mode 100644 index f6adcb13..00000000 --- a/unilabos/devices/laiyu_liquid/core/laiyu_liquid_res.py +++ /dev/null @@ -1,954 +0,0 @@ -""" -LaiYu_Liquid 资源定义模块 - -该模块提供了 LaiYu_Liquid 工作站专用的资源定义函数,包括: -- 各种规格的枪头架 -- 不同类型的板和容器 -- 特殊功能位置 -- 资源创建的便捷函数 - -所有资源都基于 deck.json 中的配置参数创建。 -""" - -import json -import os -from typing import Dict, List, Optional, Tuple, Any -from pathlib import Path - -# PyLabRobot 资源导入 -try: - from pylabrobot.resources import ( - Resource, Deck, Plate, TipRack, Container, Tip, - Coordinate - ) - from pylabrobot.resources.tip_rack import TipSpot - from pylabrobot.resources.well import Well as PlateWell - PYLABROBOT_AVAILABLE = True -except ImportError: - # 如果 PyLabRobot 不可用,创建模拟类 - PYLABROBOT_AVAILABLE = False - - class Resource: - def __init__(self, name: str): - self.name = name - - class Deck(Resource): - pass - - class Plate(Resource): - pass - - class TipRack(Resource): - pass - - class Container(Resource): - pass - - class Tip(Resource): - pass - - class TipSpot(Resource): - def __init__(self, name: str, **kwargs): - super().__init__(name) - # 忽略其他参数 - - class PlateWell(Resource): - pass - - class Coordinate: - def __init__(self, x: float, y: float, z: float): - self.x = x - self.y = y - self.z = z - -# 本地导入 -from .laiyu_liquid_main import LaiYuLiquidDeck, LaiYuLiquidContainer, LaiYuLiquidTipRack - - -def load_deck_config() -> Dict[str, Any]: - """ - 加载工作台配置文件 - - Returns: - Dict[str, Any]: 配置字典 - """ - # 优先使用最新的deckconfig.json文件 - config_path = Path(__file__).parent / "controllers" / "deckconfig.json" - - # 如果最新配置文件不存在,回退到旧配置文件 - if not config_path.exists(): - config_path = Path(__file__).parent / "config" / "deck.json" - - try: - with open(config_path, 'r', encoding='utf-8') as f: - return json.load(f) - except FileNotFoundError: - # 如果找不到配置文件,返回默认配置 - return { - "name": "LaiYu_Liquid_Deck", - "size_x": 340.0, - "size_y": 250.0, - "size_z": 160.0 - } - - -# 加载配置 -DECK_CONFIG = load_deck_config() - - -class LaiYuTipRack1000(LaiYuLiquidTipRack): - """1000μL 枪头架""" - - def __init__(self, name: str): - """ - 初始化1000μL枪头架 - - Args: - name: 枪头架名称 - """ - super().__init__( - name=name, - size_x=127.76, - size_y=85.48, - size_z=30.0, - tip_count=96, - tip_volume=1000.0 - ) - - # 创建枪头位置 - self._create_tip_spots( - tip_count=96, - tip_spacing=9.0, - tip_type="1000ul" - ) - - def _create_tip_spots(self, tip_count: int, tip_spacing: float, tip_type: str): - """ - 创建枪头位置 - 从配置文件中读取绝对坐标 - - Args: - tip_count: 枪头数量 - tip_spacing: 枪头间距 - tip_type: 枪头类型 - """ - # 从配置文件中获取枪头架的孔位信息 - config = DECK_CONFIG - tip_module = None - - # 查找枪头架模块 - for module in config.get("children", []): - if module.get("type") == "tip_rack": - tip_module = module - break - - if not tip_module: - # 如果配置文件中没有找到,使用默认的相对坐标计算 - rows = 8 - cols = 12 - - for row in range(rows): - for col in range(cols): - spot_name = f"{chr(65 + row)}{col + 1:02d}" - x = col * tip_spacing + tip_spacing / 2 - y = row * tip_spacing + tip_spacing / 2 - - # 创建枪头 - 根据PyLabRobot或模拟类使用不同参数 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的Tip需要特定参数 - tip = Tip( - has_filter=False, - total_tip_length=95.0, # 1000ul枪头长度 - maximal_volume=1000.0, # 最大体积 - fitting_depth=8.0 # 安装深度 - ) - else: - # 模拟类只需要name - tip = Tip(name=f"tip_{spot_name}") - - # 创建枪头位置 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的TipSpot需要特定参数 - tip_spot = TipSpot( - name=spot_name, - size_x=9.0, # 枪头位置宽度 - size_y=9.0, # 枪头位置深度 - size_z=95.0, # 枪头位置高度 - make_tip=lambda: tip # 创建枪头的函数 - ) - else: - # 模拟类只需要name - tip_spot = TipSpot(name=spot_name) - - # 将吸头位置分配到吸头架 - self.assign_child_resource( - tip_spot, - location=Coordinate(x, y, 0) - ) - return - - # 使用配置文件中的绝对坐标 - module_position = tip_module.get("position", {"x": 0, "y": 0, "z": 0}) - - for well_config in tip_module.get("wells", []): - spot_name = well_config["id"] - well_pos = well_config["position"] - - # 计算相对于模块的坐标(绝对坐标减去模块位置) - relative_x = well_pos["x"] - module_position["x"] - relative_y = well_pos["y"] - module_position["y"] - relative_z = well_pos["z"] - module_position["z"] - - # 创建枪头 - 根据PyLabRobot或模拟类使用不同参数 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的Tip需要特定参数 - tip = Tip( - has_filter=False, - total_tip_length=95.0, # 1000ul枪头长度 - maximal_volume=1000.0, # 最大体积 - fitting_depth=8.0 # 安装深度 - ) - else: - # 模拟类只需要name - tip = Tip(name=f"tip_{spot_name}") - - # 创建枪头位置 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的TipSpot需要特定参数 - tip_spot = TipSpot( - name=spot_name, - size_x=well_config.get("diameter", 9.0), # 使用配置中的直径 - size_y=well_config.get("diameter", 9.0), - size_z=well_config.get("depth", 95.0), # 使用配置中的深度 - make_tip=lambda: tip # 创建枪头的函数 - ) - else: - # 模拟类只需要name - tip_spot = TipSpot(name=spot_name) - - # 将吸头位置分配到吸头架 - self.assign_child_resource( - tip_spot, - location=Coordinate(relative_x, relative_y, relative_z) - ) - - # 注意:在PyLabRobot中,Tip不是Resource,不需要分配给TipSpot - # TipSpot的make_tip函数会在需要时创建Tip - - -class LaiYuTipRack200(LaiYuLiquidTipRack): - """200μL 枪头架""" - - def __init__(self, name: str): - """ - 初始化200μL枪头架 - - Args: - name: 枪头架名称 - """ - super().__init__( - name=name, - size_x=127.76, - size_y=85.48, - size_z=30.0, - tip_count=96, - tip_volume=200.0 - ) - - # 创建枪头位置 - self._create_tip_spots( - tip_count=96, - tip_spacing=9.0, - tip_type="200ul" - ) - - def _create_tip_spots(self, tip_count: int, tip_spacing: float, tip_type: str): - """ - 创建枪头位置 - - Args: - tip_count: 枪头数量 - tip_spacing: 枪头间距 - tip_type: 枪头类型 - """ - rows = 8 - cols = 12 - - for row in range(rows): - for col in range(cols): - spot_name = f"{chr(65 + row)}{col + 1:02d}" - x = col * tip_spacing + tip_spacing / 2 - y = row * tip_spacing + tip_spacing / 2 - - # 创建枪头 - 根据PyLabRobot或模拟类使用不同参数 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的Tip需要特定参数 - tip = Tip( - has_filter=False, - total_tip_length=72.0, # 200ul枪头长度 - maximal_volume=200.0, # 最大体积 - fitting_depth=8.0 # 安装深度 - ) - else: - # 模拟类只需要name - tip = Tip(name=f"tip_{spot_name}") - - # 创建枪头位置 - if PYLABROBOT_AVAILABLE: - # PyLabRobot的TipSpot需要特定参数 - tip_spot = TipSpot( - name=spot_name, - size_x=9.0, # 枪头位置宽度 - size_y=9.0, # 枪头位置深度 - size_z=72.0, # 枪头位置高度 - make_tip=lambda: tip # 创建枪头的函数 - ) - else: - # 模拟类只需要name - tip_spot = TipSpot(name=spot_name) - - # 将吸头位置分配到吸头架 - self.assign_child_resource( - tip_spot, - location=Coordinate(x, y, 0) - ) - - # 注意:在PyLabRobot中,Tip不是Resource,不需要分配给TipSpot - # TipSpot的make_tip函数会在需要时创建Tip - - -class LaiYu96WellPlate(LaiYuLiquidContainer): - """96孔板""" - - def __init__(self, name: str, lid_height: float = 0.0): - """ - 初始化96孔板 - - Args: - name: 板名称 - lid_height: 盖子高度 - """ - super().__init__( - name=name, - size_x=127.76, - size_y=85.48, - size_z=14.22, - container_type="96_well_plate", - volume=0.0, - max_volume=200.0, - lid_height=lid_height - ) - - # 创建孔位 - self._create_wells( - well_count=96, - well_volume=200.0, - well_spacing=9.0 - ) - - def get_size_z(self) -> float: - """获取孔位深度""" - return 10.0 # 96孔板孔位深度 - - def _create_wells(self, well_count: int, well_volume: float, well_spacing: float): - """ - 创建孔位 - 从配置文件中读取绝对坐标 - - Args: - well_count: 孔位数量 - well_volume: 孔位体积 - well_spacing: 孔位间距 - """ - # 从配置文件中获取96孔板的孔位信息 - config = DECK_CONFIG - plate_module = None - - # 查找96孔板模块 - for module in config.get("children", []): - if module.get("type") == "96_well_plate": - plate_module = module - break - - if not plate_module: - # 如果配置文件中没有找到,使用默认的相对坐标计算 - rows = 8 - cols = 12 - - for row in range(rows): - for col in range(cols): - well_name = f"{chr(65 + row)}{col + 1:02d}" - x = col * well_spacing + well_spacing / 2 - y = row * well_spacing + well_spacing / 2 - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=well_spacing * 0.8, - size_y=well_spacing * 0.8, - size_z=self.get_size_z(), - max_volume=well_volume - ) - - # 添加到板 - self.assign_child_resource( - well, - location=Coordinate(x, y, 0) - ) - return - - # 使用配置文件中的绝对坐标 - module_position = plate_module.get("position", {"x": 0, "y": 0, "z": 0}) - - for well_config in plate_module.get("wells", []): - well_name = well_config["id"] - well_pos = well_config["position"] - - # 计算相对于模块的坐标(绝对坐标减去模块位置) - relative_x = well_pos["x"] - module_position["x"] - relative_y = well_pos["y"] - module_position["y"] - relative_z = well_pos["z"] - module_position["z"] - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=well_config.get("diameter", 8.2) * 0.8, # 使用配置中的直径 - size_y=well_config.get("diameter", 8.2) * 0.8, - size_z=well_config.get("depth", self.get_size_z()), - max_volume=well_config.get("volume", well_volume) - ) - - # 添加到板 - self.assign_child_resource( - well, - location=Coordinate(relative_x, relative_y, relative_z) - ) - - -class LaiYuDeepWellPlate(LaiYuLiquidContainer): - """深孔板""" - - def __init__(self, name: str, lid_height: float = 0.0): - """ - 初始化深孔板 - - Args: - name: 板名称 - lid_height: 盖子高度 - """ - super().__init__( - name=name, - size_x=127.76, - size_y=85.48, - size_z=41.3, - container_type="deep_well_plate", - volume=0.0, - max_volume=2000.0, - lid_height=lid_height - ) - - # 创建孔位 - self._create_wells( - well_count=96, - well_volume=2000.0, - well_spacing=9.0 - ) - - def get_size_z(self) -> float: - """获取孔位深度""" - return 35.0 # 深孔板孔位深度 - - def _create_wells(self, well_count: int, well_volume: float, well_spacing: float): - """ - 创建孔位 - 从配置文件中读取绝对坐标 - - Args: - well_count: 孔位数量 - well_volume: 孔位体积 - well_spacing: 孔位间距 - """ - # 从配置文件中获取深孔板的孔位信息 - config = DECK_CONFIG - plate_module = None - - # 查找深孔板模块(通常是第二个96孔板模块) - plate_modules = [] - for module in config.get("children", []): - if module.get("type") == "96_well_plate": - plate_modules.append(module) - - # 如果有多个96孔板模块,选择第二个作为深孔板 - if len(plate_modules) > 1: - plate_module = plate_modules[1] - elif len(plate_modules) == 1: - plate_module = plate_modules[0] - - if not plate_module: - # 如果配置文件中没有找到,使用默认的相对坐标计算 - rows = 8 - cols = 12 - - for row in range(rows): - for col in range(cols): - well_name = f"{chr(65 + row)}{col + 1:02d}" - x = col * well_spacing + well_spacing / 2 - y = row * well_spacing + well_spacing / 2 - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=well_spacing * 0.8, - size_y=well_spacing * 0.8, - size_z=self.get_size_z(), - max_volume=well_volume - ) - - # 添加到板 - self.assign_child_resource( - well, - location=Coordinate(x, y, 0) - ) - return - - # 使用配置文件中的绝对坐标 - module_position = plate_module.get("position", {"x": 0, "y": 0, "z": 0}) - - for well_config in plate_module.get("wells", []): - well_name = well_config["id"] - well_pos = well_config["position"] - - # 计算相对于模块的坐标(绝对坐标减去模块位置) - relative_x = well_pos["x"] - module_position["x"] - relative_y = well_pos["y"] - module_position["y"] - relative_z = well_pos["z"] - module_position["z"] - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=well_config.get("diameter", 8.2) * 0.8, # 使用配置中的直径 - size_y=well_config.get("diameter", 8.2) * 0.8, - size_z=well_config.get("depth", self.get_size_z()), - max_volume=well_config.get("volume", well_volume) - ) - - # 添加到板 - self.assign_child_resource( - well, - location=Coordinate(relative_x, relative_y, relative_z) - ) - - -class LaiYuWasteContainer(Container): - """废液容器""" - - def __init__(self, name: str): - """ - 初始化废液容器 - - Args: - name: 容器名称 - """ - super().__init__( - name=name, - size_x=100.0, - size_y=100.0, - size_z=50.0, - max_volume=5000.0 - ) - - -class LaiYuWashContainer(Container): - """清洗容器""" - - def __init__(self, name: str): - """ - 初始化清洗容器 - - Args: - name: 容器名称 - """ - super().__init__( - name=name, - size_x=100.0, - size_y=100.0, - size_z=50.0, - max_volume=5000.0 - ) - - -class LaiYuReagentContainer(Container): - """试剂容器""" - - def __init__(self, name: str): - """ - 初始化试剂容器 - - Args: - name: 容器名称 - """ - super().__init__( - name=name, - size_x=50.0, - size_y=50.0, - size_z=100.0, - max_volume=2000.0 - ) - - -class LaiYu8TubeRack(LaiYuLiquidContainer): - """8管试管架""" - - def __init__(self, name: str): - """ - 初始化8管试管架 - - Args: - name: 试管架名称 - """ - super().__init__( - name=name, - size_x=151.0, - size_y=75.0, - size_z=75.0, - container_type="tube_rack", - volume=0.0, - max_volume=77000.0 - ) - - # 创建孔位 - self._create_wells( - well_count=8, - well_volume=77000.0, - well_spacing=35.0 - ) - - def get_size_z(self) -> float: - """获取孔位深度""" - return 117.0 # 试管深度 - - def _create_wells(self, well_count: int, well_volume: float, well_spacing: float): - """ - 创建孔位 - 从配置文件中读取绝对坐标 - - Args: - well_count: 孔位数量 - well_volume: 孔位体积 - well_spacing: 孔位间距 - """ - # 从配置文件中获取8管试管架的孔位信息 - config = DECK_CONFIG - tube_module = None - - # 查找8管试管架模块 - for module in config.get("children", []): - if module.get("type") == "tube_rack": - tube_module = module - break - - if not tube_module: - # 如果配置文件中没有找到,使用默认的相对坐标计算 - rows = 2 - cols = 4 - - for row in range(rows): - for col in range(cols): - well_name = f"{chr(65 + row)}{col + 1}" - x = col * well_spacing + well_spacing / 2 - y = row * well_spacing + well_spacing / 2 - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=29.0, - size_y=29.0, - size_z=self.get_size_z(), - max_volume=well_volume - ) - - # 添加到试管架 - self.assign_child_resource( - well, - location=Coordinate(x, y, 0) - ) - return - - # 使用配置文件中的绝对坐标 - module_position = tube_module.get("position", {"x": 0, "y": 0, "z": 0}) - - for well_config in tube_module.get("wells", []): - well_name = well_config["id"] - well_pos = well_config["position"] - - # 计算相对于模块的坐标(绝对坐标减去模块位置) - relative_x = well_pos["x"] - module_position["x"] - relative_y = well_pos["y"] - module_position["y"] - relative_z = well_pos["z"] - module_position["z"] - - # 创建孔位 - well = PlateWell( - name=well_name, - size_x=well_config.get("diameter", 29.0), - size_y=well_config.get("diameter", 29.0), - size_z=well_config.get("depth", self.get_size_z()), - max_volume=well_config.get("volume", well_volume) - ) - - # 添加到试管架 - self.assign_child_resource( - well, - location=Coordinate(relative_x, relative_y, relative_z) - ) - - -class LaiYuTipDisposal(Resource): - """枪头废料位置""" - - def __init__(self, name: str): - """ - 初始化枪头废料位置 - - Args: - name: 位置名称 - """ - super().__init__( - name=name, - size_x=100.0, - size_y=100.0, - size_z=50.0 - ) - - -class LaiYuMaintenancePosition(Resource): - """维护位置""" - - def __init__(self, name: str): - """ - 初始化维护位置 - - Args: - name: 位置名称 - """ - super().__init__( - name=name, - size_x=50.0, - size_y=50.0, - size_z=100.0 - ) - - -# 资源创建函数 -def create_tip_rack_1000ul(name: str = "tip_rack_1000ul") -> LaiYuTipRack1000: - """ - 创建1000μL枪头架 - - Args: - name: 枪头架名称 - - Returns: - LaiYuTipRack1000: 1000μL枪头架实例 - """ - return LaiYuTipRack1000(name) - - -def create_tip_rack_200ul(name: str = "tip_rack_200ul") -> LaiYuTipRack200: - """ - 创建200μL枪头架 - - Args: - name: 枪头架名称 - - Returns: - LaiYuTipRack200: 200μL枪头架实例 - """ - return LaiYuTipRack200(name) - - -def create_96_well_plate(name: str = "96_well_plate", lid_height: float = 0.0) -> LaiYu96WellPlate: - """ - 创建96孔板 - - Args: - name: 板名称 - lid_height: 盖子高度 - - Returns: - LaiYu96WellPlate: 96孔板实例 - """ - return LaiYu96WellPlate(name, lid_height) - - -def create_deep_well_plate(name: str = "deep_well_plate", lid_height: float = 0.0) -> LaiYuDeepWellPlate: - """ - 创建深孔板 - - Args: - name: 板名称 - lid_height: 盖子高度 - - Returns: - LaiYuDeepWellPlate: 深孔板实例 - """ - return LaiYuDeepWellPlate(name, lid_height) - - -def create_8_tube_rack(name: str = "8_tube_rack") -> LaiYu8TubeRack: - """ - 创建8管试管架 - - Args: - name: 试管架名称 - - Returns: - LaiYu8TubeRack: 8管试管架实例 - """ - return LaiYu8TubeRack(name) - - -def create_waste_container(name: str = "waste_container") -> LaiYuWasteContainer: - """ - 创建废液容器 - - Args: - name: 容器名称 - - Returns: - LaiYuWasteContainer: 废液容器实例 - """ - return LaiYuWasteContainer(name) - - -def create_wash_container(name: str = "wash_container") -> LaiYuWashContainer: - """ - 创建清洗容器 - - Args: - name: 容器名称 - - Returns: - LaiYuWashContainer: 清洗容器实例 - """ - return LaiYuWashContainer(name) - - -def create_reagent_container(name: str = "reagent_container") -> LaiYuReagentContainer: - """ - 创建试剂容器 - - Args: - name: 容器名称 - - Returns: - LaiYuReagentContainer: 试剂容器实例 - """ - return LaiYuReagentContainer(name) - - -def create_tip_disposal(name: str = "tip_disposal") -> LaiYuTipDisposal: - """ - 创建枪头废料位置 - - Args: - name: 位置名称 - - Returns: - LaiYuTipDisposal: 枪头废料位置实例 - """ - return LaiYuTipDisposal(name) - - -def create_maintenance_position(name: str = "maintenance_position") -> LaiYuMaintenancePosition: - """ - 创建维护位置 - - Args: - name: 位置名称 - - Returns: - LaiYuMaintenancePosition: 维护位置实例 - """ - return LaiYuMaintenancePosition(name) - - -def create_standard_deck() -> LaiYuLiquidDeck: - """ - 创建标准工作台配置 - - Returns: - LaiYuLiquidDeck: 配置好的工作台实例 - """ - # 从配置文件创建工作台 - deck = LaiYuLiquidDeck(config=DECK_CONFIG) - - return deck - - -def get_resource_by_name(deck: LaiYuLiquidDeck, name: str) -> Optional[Resource]: - """ - 根据名称获取资源 - - Args: - deck: 工作台实例 - name: 资源名称 - - Returns: - Optional[Resource]: 找到的资源,如果不存在则返回None - """ - for child in deck.children: - if child.name == name: - return child - return None - - -def get_resources_by_type(deck: LaiYuLiquidDeck, resource_type: type) -> List[Resource]: - """ - 根据类型获取资源列表 - - Args: - deck: 工作台实例 - resource_type: 资源类型 - - Returns: - List[Resource]: 匹配类型的资源列表 - """ - return [child for child in deck.children if isinstance(child, resource_type)] - - -def list_all_resources(deck: LaiYuLiquidDeck) -> Dict[str, List[str]]: - """ - 列出所有资源 - - Args: - deck: 工作台实例 - - Returns: - Dict[str, List[str]]: 按类型分组的资源名称字典 - """ - resources = { - "tip_racks": [], - "plates": [], - "containers": [], - "positions": [] - } - - for child in deck.children: - if isinstance(child, (LaiYuTipRack1000, LaiYuTipRack200)): - resources["tip_racks"].append(child.name) - elif isinstance(child, (LaiYu96WellPlate, LaiYuDeepWellPlate)): - resources["plates"].append(child.name) - elif isinstance(child, (LaiYuWasteContainer, LaiYuWashContainer, LaiYuReagentContainer)): - resources["containers"].append(child.name) - elif isinstance(child, (LaiYuTipDisposal, LaiYuMaintenancePosition)): - resources["positions"].append(child.name) - - return resources - - -# 导出的类别名(向后兼容) -TipRack1000ul = LaiYuTipRack1000 -TipRack200ul = LaiYuTipRack200 -Plate96Well = LaiYu96WellPlate -Plate96DeepWell = LaiYuDeepWellPlate -TubeRack8 = LaiYu8TubeRack -WasteContainer = LaiYuWasteContainer -WashContainer = LaiYuWashContainer -ReagentContainer = LaiYuReagentContainer -TipDisposal = LaiYuTipDisposal -MaintenancePosition = LaiYuMaintenancePosition \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/docs/CHANGELOG.md b/unilabos/devices/laiyu_liquid/docs/CHANGELOG.md deleted file mode 100644 index a0f2b632..00000000 --- a/unilabos/devices/laiyu_liquid/docs/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -# 更新日志 - -本文档记录了 LaiYu_Liquid 模块的所有重要变更。 - -## [1.0.0] - 2024-01-XX - -### 新增功能 -- ✅ 完整的液体处理工作站集成 -- ✅ RS485 通信协议支持 -- ✅ SOPA 气动式移液器驱动 -- ✅ XYZ 三轴步进电机控制 -- ✅ PyLabRobot 兼容后端 -- ✅ 标准化资源管理系统 -- ✅ 96孔板、离心管架、枪头架支持 -- ✅ RViz 可视化后端 -- ✅ 完整的配置管理系统 -- ✅ 抽象协议实现 -- ✅ 生产级错误处理和日志记录 - -### 技术特性 -- **硬件支持**: SOPA移液器 + XYZ三轴运动平台 -- **通信协议**: RS485总线,波特率115200 -- **坐标系统**: 机械坐标与工作坐标自动转换 -- **安全机制**: 限位保护、紧急停止、错误恢复 -- **兼容性**: 完全兼容 PyLabRobot 框架 - -### 文件结构 -``` -LaiYu_Liquid/ -├── core/ -│ └── LaiYu_Liquid.py # 主模块文件 -├── __init__.py # 模块初始化 -├── abstract_protocol.py # 抽象协议 -├── laiyu_liquid_res.py # 资源管理 -├── rviz_backend.py # RViz后端 -├── backend/ # 后端驱动 -├── config/ # 配置文件 -├── controllers/ # 控制器 -├── docs/ # 技术文档 -└── drivers/ # 底层驱动 -``` - -### 已知问题 -- 无 - -### 依赖要求 -- Python 3.8+ -- PyLabRobot -- pyserial -- asyncio - ---- - -## 版本说明 - -### 版本号格式 -采用语义化版本控制 (Semantic Versioning): `MAJOR.MINOR.PATCH` - -- **MAJOR**: 不兼容的API变更 -- **MINOR**: 向后兼容的功能新增 -- **PATCH**: 向后兼容的问题修复 - -### 变更类型 -- **新增功能**: 新的功能特性 -- **变更**: 现有功能的变更 -- **弃用**: 即将移除的功能 -- **移除**: 已移除的功能 -- **修复**: 问题修复 -- **安全**: 安全相关的修复 \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/docs/hardware/SOPA气动式移液器RS485控制指令.md b/unilabos/devices/laiyu_liquid/docs/hardware/SOPA气动式移液器RS485控制指令.md deleted file mode 100644 index 6db19eb1..00000000 --- a/unilabos/devices/laiyu_liquid/docs/hardware/SOPA气动式移液器RS485控制指令.md +++ /dev/null @@ -1,267 +0,0 @@ -# SOPA气动式移液器RS485控制指令合集 - -## 1. RS485通信基本配置 - -### 1.1 支持的设备型号 -- **仅SC-STxxx-00-13支持RS485通信** -- 其他型号主要使用CAN通信 - -### 1.2 通信参数 -- **波特率**: 9600, 115200(默认值) -- **地址范围**: 1~254个设备,255为广播地址 -- **通信接口**: RS485差分信号 - -### 1.3 引脚分配(10位LIF连接器) -- **引脚7**: RS485+ (RS485通信正极) -- **引脚8**: RS485- (RS485通信负极) - -## 2. RS485通信协议格式 - -### 2.1 发送数据格式 -``` -头码 | 地址 | 命令/数据 | 尾码 | 校验和 -``` - -### 2.2 从机回应格式 -``` -头码 | 地址 | 数据(固定9字节) | 尾码 | 校验和 -``` - -### 2.3 格式详细说明 -- **头码**: - - 终端调试: '/' (0x2F) - - OEM通信: '[' (0x5B) -- **地址**: 设备节点地址,1~254,多字节ASCII(注意:地址不可为47,69,91) -- **命令/数据**: ASCII格式的命令字符串 -- **尾码**: 'E' (0x45) -- **校验和**: 以上数据的累加值,1字节 - -## 3. 初始化和基本控制指令 - -### 3.1 初始化指令 -```bash -# 初始化活塞驱动机构 -HE - -# 示例(OEM通信): -# 主机发送: 5B 32 48 45 1A -# 从机回应开始: 2F 02 06 0A 30 00 00 00 00 00 00 45 B6 -# 从机回应完成: 2F 02 06 00 30 00 00 00 00 00 00 45 AC -``` - -### 3.2 枪头操作指令 -```bash -# 顶出枪头 -RE - -# 枪头检测状态报告 -Q28 # 返回枪头存在状态(0=不存在,1=存在) -``` - -## 4. 移液控制指令 - -### 4.1 位置控制指令 -```bash -# 绝对位置移动(微升) -A[n]E -# 示例:移动到位置0 -A0E - -# 相对抽吸(向上移动) -P[n]E -# 示例:抽吸200微升 -P200E - -# 相对分配(向下移动) -D[n]E -# 示例:分配200微升 -D200E -``` - -### 4.2 速度设置指令 -```bash -# 设置最高速度(0.1ul/秒为单位) -s[n]E -# 示例:设置最高速度为2000(200ul/秒) -s2000E - -# 设置启动速度 -b[n]E -# 示例:设置启动速度为100(10ul/秒) -b100E - -# 设置断流速度 -c[n]E -# 示例:设置断流速度为100(10ul/秒) -c100E - -# 设置加速度 -a[n]E -# 示例:设置加速度为30000 -a30000E -``` - -## 5. 液体检测和安全控制指令 - -### 5.1 吸排液检测控制 -```bash -# 开启吸排液检测 -f1E # 开启 -f0E # 关闭 - -# 设置空吸门限 -$[n]E -# 示例:设置空吸门限为4 -$4E - -# 设置泡沫门限 -![n]E -# 示例:设置泡沫门限为20 -!20E - -# 设置堵塞门限 -%[n]E -# 示例:设置堵塞门限为350 -%350E -``` - -### 5.2 液位检测指令 -```bash -# 压力式液位检测 -m0E # 设置为压力探测模式 -L[n]E # 执行液位检测,[n]为灵敏度(3~40) -k[n]E # 设置检测速度(100~2000) - -# 电容式液位检测 -m1E # 设置为电容探测模式 -``` - -## 6. 状态查询和报告指令 - -### 6.1 基本状态查询 -```bash -# 查询固件版本 -V - -# 查询设备状态 -Q[n] -# 常用查询参数: -Q01 # 报告加速度 -Q02 # 报告启动速度 -Q03 # 报告断流速度 -Q06 # 报告最大速度 -Q08 # 报告节点地址 -Q11 # 报告波特率 -Q18 # 报告当前位置 -Q28 # 报告枪头存在状态 -Q29 # 报告校准系数 -Q30 # 报告空吸门限 -Q31 # 报告堵针门限 -Q32 # 报告泡沫门限 -``` - -## 7. 配置和校准指令 - -### 7.1 校准参数设置 -```bash -# 设置校准系数 -j[n]E -# 示例:设置校准系数为1.04 -j1.04E - -# 设置补偿偏差 -e[n]E -# 示例:设置补偿偏差为2.03 -e2.03E - -# 设置吸头容量 -C[n]E -# 示例:设置1000ul吸头 -C1000E -``` - -### 7.2 高级控制参数 -```bash -# 设置回吸粘度 -][n]E -# 示例:设置回吸粘度为30 -]30E - -# 延时控制 -M[n]E -# 示例:延时1000毫秒 -M1000E -``` - -## 8. 复合操作指令示例 - -### 8.1 标准移液操作 -```bash -# 完整的200ul移液操作 -a30000b200c200s2000P200E -# 解析:设置加速度30000 + 启动速度200 + 断流速度200 + 最高速度2000 + 抽吸200ul + 执行 -``` - -### 8.2 带检测的移液操作 -```bash -# 带空吸检测的200ul抽吸 -a30000b200c200s2000f1P200f0E -# 解析:设置参数 + 开启检测 + 抽吸200ul + 关闭检测 + 执行 -``` - -### 8.3 液面检测操作 -```bash -# 压力式液面检测 -m0k200L5E -# 解析:压力模式 + 检测速度200 + 灵敏度5 + 执行检测 - -# 电容式液面检测 -m1L3E -# 解析:电容模式 + 灵敏度3 + 执行检测 -``` - -## 9. 错误处理 - -### 9.1 状态字节说明 -- **00h**: 无错误 -- **01h**: 上次动作未完成 -- **02h**: 设备未初始化 -- **03h**: 设备过载 -- **04h**: 无效指令 -- **05h**: 液位探测故障 -- **0Dh**: 空吸 -- **0Eh**: 堵针 -- **10h**: 泡沫 -- **11h**: 吸液超过吸头容量 - -### 9.2 错误查询 -```bash -# 查询当前错误状态 -Q # 返回状态字节和错误代码 -``` - -## 10. 通信示例 - -### 10.1 基本通信流程 -1. **执行命令**: 主机发送命令 → 从机确认 → 从机执行 → 从机回应完成 -2. **读取数据**: 主机发送查询 → 从机确认 → 从机返回数据 - -### 10.2 快速指令表 -| 操作 | 指令 | 说明 | -|------|------|------| -| 初始化 | `HE` | 初始化设备 | -| 退枪头 | `RE` | 顶出枪头 | -| 吸液200ul | `a30000b200c200s2000P200E` | 基本吸液 | -| 带检测吸液 | `a30000b200c200s2000f1P200f0E` | 开启空吸检测 | -| 吐液200ul | `a300000b500c500s6000D200E` | 基本分配 | -| 压力液面检测 | `m0k200L5E` | pLLD检测 | -| 电容液面检测 | `m1L3E` | cLLD检测 | - -## 11. 注意事项 - -1. **地址限制**: RS485地址不可设为47、69、91 -2. **校验和**: 终端调试时不关心校验和,OEM通信需要校验 -3. **ASCII格式**: 所有命令和参数都使用ASCII字符 -4. **执行指令**: 大部分命令需要以'E'结尾才能执行 -5. **设备支持**: 只有SC-STxxx-00-13型号支持RS485通信 -6. **波特率设置**: 默认115200,可设置为9600 \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/docs/hardware/步进电机控制指令.md b/unilabos/devices/laiyu_liquid/docs/hardware/步进电机控制指令.md deleted file mode 100644 index e7013484..00000000 --- a/unilabos/devices/laiyu_liquid/docs/hardware/步进电机控制指令.md +++ /dev/null @@ -1,162 +0,0 @@ -# 步进电机B系列控制指令详解 - -## 基本通信参数 -- **通信方式**: RS485 -- **协议**: Modbus -- **波特率**: 115200 (默认) -- **数据位**: 8位 -- **停止位**: 1位 -- **校验位**: 无 -- **默认站号**: 1 (可设置1-254) - -## 支持的功能码 -- **03H**: 读取寄存器 -- **06H**: 写入单个寄存器 -- **10H**: 写入多个寄存器 - -## 寄存器地址表 - -### 状态监控寄存器 (只读) -| 地址 | 功能码 | 内容 | 说明 | -|------|--------|------|------| -| 00H | 03H | 电机状态 | 0000H-待机/到位, 0001H-运行中, 0002H-碰撞停, 0003H-正光电停, 0004H-反光电停 | -| 01H | 03H | 实际步数高位 | 当前电机位置的高16位 | -| 02H | 03H | 实际步数低位 | 当前电机位置的低16位 | -| 03H | 03H | 实际速度 | 当前转速 (rpm) | -| 05H | 03H | 电流 | 当前工作电流 (mA) | - -### 控制寄存器 (读写) -| 地址 | 功能码 | 内容 | 说明 | -|------|--------|------|------| -| 04H | 03H/06H/10H | 急停指令 | 紧急停止控制 | -| 06H | 03H/06H/10H | 失能控制 | 1-使能, 0-失能 | -| 07H | 03H/06H/10H | PWM输出 | 0-1000对应0%-100%占空比 | -| 0EH | 03H/06H/10H | 单圈绝对值归零 | 归零指令 | -| 0FH | 03H/06H/10H | 归零指令 | 定点模式归零速度设置 | - -### 位置模式寄存器 -| 地址 | 功能码 | 内容 | 说明 | -|------|--------|------|------| -| 10H | 03H/06H/10H | 目标步数高位 | 目标位置高16位 | -| 11H | 03H/06H/10H | 目标步数低位 | 目标位置低16位 | -| 12H | 03H/06H/10H | 保留 | - | -| 13H | 03H/06H/10H | 速度 | 运行速度 (rpm) | -| 14H | 03H/06H/10H | 加速度 | 0-60000 rpm/s | -| 15H | 03H/06H/10H | 精度 | 到位精度设置 | - -### 速度模式寄存器 -| 地址 | 功能码 | 内容 | 说明 | -|------|--------|------|------| -| 60H | 03H/06H/10H | 保留 | - | -| 61H | 03H/06H/10H | 速度 | 正值正转,负值反转 | -| 62H | 03H/06H/10H | 加速度 | 0-60000 rpm/s | - -### 设备参数寄存器 -| 地址 | 功能码 | 内容 | 默认值 | 说明 | -|------|--------|------|--------|------| -| E0H | 03H/06H/10H | 设备地址 | 0001H | Modbus从站地址 | -| E1H | 03H/06H/10H | 堵转电流 | 0BB8H | 堵转检测电流阈值 | -| E2H | 03H/06H/10H | 保留 | 0258H | - | -| E3H | 03H/06H/10H | 每圈步数 | 0640H | 细分设置 | -| E4H | 03H/06H/10H | 限位开关使能 | F000H | 1-使能, 0-禁用 | -| E5H | 03H/06H/10H | 堵转逻辑 | 0000H | 00-断电, 01-对抗 | -| E6H | 03H/06H/10H | 堵转时间 | 0000H | 堵转检测时间(ms) | -| E7H | 03H/06H/10H | 默认速度 | 1388H | 上电默认速度 | -| E8H | 03H/06H/10H | 默认加速度 | EA60H | 上电默认加速度 | -| E9H | 03H/06H/10H | 默认精度 | 0064H | 上电默认精度 | -| EAH | 03H/06H/10H | 波特率高位 | 0001H | 通信波特率设置 | -| EBH | 03H/06H/10H | 波特率低位 | C200H | 115200对应01C200H | - -### 版本信息寄存器 (只读) -| 地址 | 功能码 | 内容 | 说明 | -|------|--------|------|------| -| F0H | 03H | 版本号 | 固件版本信息 | -| F1H-F4H | 03H | 型号 | 产品型号信息 | - -## 常用控制指令示例 - -### 读取电机状态 -``` -发送: 01 03 00 00 00 01 84 0A -接收: 01 03 02 00 01 79 84 -说明: 电机状态为0001H (正在运行) -``` - -### 读取当前位置 -``` -发送: 01 03 00 01 00 02 95 CB -接收: 01 03 04 00 19 00 00 2B F4 -说明: 当前位置为1638400步 (100圈) -``` - -### 停止电机 -``` -发送: 01 10 00 04 00 01 02 00 00 A7 D4 -接收: 01 10 00 04 00 01 40 08 -说明: 急停指令 -``` - -### 位置模式运动 -``` -发送: 01 10 00 10 00 06 0C 00 19 00 00 00 00 13 88 00 00 00 00 9F FB -接收: 01 10 00 10 00 06 41 CE -说明: 以5000rpm速度运动到1638400步位置 -``` - -### 速度模式 - 正转 -``` -发送: 01 10 00 60 00 04 08 00 00 13 88 00 FA 00 00 F4 77 -接收: 01 10 00 60 00 04 C1 D4 -说明: 以5000rpm速度正转 -``` - -### 速度模式 - 反转 -``` -发送: 01 10 00 60 00 04 08 00 00 EC 78 00 FA 00 00 A0 6D -接收: 01 10 00 60 00 04 C1 D4 -说明: 以5000rpm速度反转 (EC78H = -5000) -``` - -### 设置设备地址 -``` -发送: 00 06 00 E0 00 02 C9 F1 -接收: 00 06 00 E0 00 02 C9 F1 -说明: 将设备地址设置为2 -``` - -## 错误码 -| 状态码 | 含义 | -|--------|------| -| 0001H | 功能码错误 | -| 0002H | 地址错误 | -| 0003H | 长度错误 | - -## CRC校验算法 -```c -public static byte[] ModBusCRC(byte[] data, int offset, int cnt) { - int wCrc = 0x0000FFFF; - byte[] CRC = new byte[2]; - for (int i = 0; i < cnt; i++) { - wCrc ^= ((data[i + offset]) & 0xFF); - for (int j = 0; j < 8; j++) { - if ((wCrc & 0x00000001) == 1) { - wCrc >>= 1; - wCrc ^= 0x0000A001; - } else { - wCrc >>= 1; - } - } - } - CRC[1] = (byte) ((wCrc & 0x0000FF00) >> 8); - CRC[0] = (byte) (wCrc & 0x000000FF); - return CRC; -} -``` - -## 注意事项 -1. 所有16位数据采用大端序传输 -2. 步数计算: 实际步数 = 高位<<16 | 低位 -3. 负数使用补码表示 -4. PWM输出K脚: 0%开漏, 100%接地, 其他输出1KHz PWM -5. 光电开关需使用NPN开漏型 -6. 限位开关: LF正向, LB反向 \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/docs/hardware/硬件连接配置指南.md b/unilabos/devices/laiyu_liquid/docs/hardware/硬件连接配置指南.md deleted file mode 100644 index 64529097..00000000 --- a/unilabos/devices/laiyu_liquid/docs/hardware/硬件连接配置指南.md +++ /dev/null @@ -1,1281 +0,0 @@ -# LaiYu液体处理设备硬件连接配置指南 - -## 📋 文档概述 - -本指南提供LaiYu液体处理设备的完整硬件连接配置方案,包括快速入门、详细配置、连接验证和故障排除。适用于设备初次安装、配置变更和问题诊断。 - ---- - -## 🚀 快速入门指南 - -### 基本配置步骤 - -1. **确认硬件连接** - - 将RS485转USB设备连接到计算机 - - 确保XYZ控制器和移液器通过RS485总线连接 - - 检查设备供电状态 - -2. **获取串口信息** - ```bash - # macOS/Linux - ls /dev/cu.* | grep usbserial - - # 常见输出: /dev/cu.usbserial-3130 - ``` - -3. **基本配置参数** - ```python - # 推荐的默认配置 - config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", # 🔧 替换为实际串口号 - address=4, # 移液器地址(固定) - baudrate=115200, # 推荐波特率 - timeout=5.0 # 通信超时 - ) - ``` - -4. **快速连接测试** - ```python - device = LaiYuLiquid(config) - success = await device.setup() - print(f"连接状态: {'成功' if success else '失败'}") - ``` - ---- - -## 🏗️ 硬件架构详解 - -### 系统组成 - -LaiYu液体处理设备采用RS485总线架构,包含以下核心组件: - -| 组件 | 通信协议 | 设备地址 | 默认波特率 | 功能描述 | -|------|----------|----------|------------|----------| -| **XYZ三轴控制器** | RS485 (Modbus) | X轴=1, Y轴=2, Z轴=3 | 115200 | 三维运动控制 | -| **SOPA移液器** | RS485 | 4 (推荐) | 115200 | 液体吸取分配 | -| **RS485转USB** | USB/串口 | - | 115200 | 通信接口转换 | - -### 地址分配策略 - -``` -RS485总线地址分配: -├── 地址 1: X轴步进电机 (自动分配) -├── 地址 2: Y轴步进电机 (自动分配) -├── 地址 3: Z轴步进电机 (自动分配) -├── 地址 4: SOPA移液器 (推荐配置) -└── 禁用地址: 47('/'), 69('E'), 91('[') -``` - -### 通信参数规范 - -| 参数 | XYZ控制器 | SOPA移液器 | 说明 | -|------|-----------|------------|------| -| **数据位** | 8 | 8 | 固定值 | -| **停止位** | 1 | 1 | 固定值 | -| **校验位** | 无 | 无 | 固定值 | -| **流控制** | 无 | 无 | 固定值 | - ---- - -## ⚙️ 配置参数详解 - -### 1. 核心配置类 - -#### LaiYuLiquidConfig 参数说明 - -```python -@dataclass -class LaiYuLiquidConfig: - # === 通信参数 === - port: str = "/dev/cu.usbserial-3130" # 串口设备路径 - address: int = 4 # 移液器地址(推荐值) - baudrate: int = 115200 # 通信波特率(推荐值) - timeout: float = 5.0 # 通信超时时间(秒) - - # === 工作台物理尺寸 === - deck_width: float = 340.0 # 工作台宽度 (mm) - deck_height: float = 250.0 # 工作台高度 (mm) - deck_depth: float = 160.0 # 工作台深度 (mm) - - # === 运动控制参数 === - max_speed: float = 100.0 # 最大移动速度 (mm/s) - acceleration: float = 50.0 # 加速度 (mm/s²) - safe_height: float = 50.0 # 安全移动高度 (mm) - - # === 移液参数 === - max_volume: float = 1000.0 # 最大移液体积 (μL) - min_volume: float = 0.1 # 最小移液体积 (μL) - liquid_detection: bool = True # 启用液面检测 - - # === 枪头操作参数 === - tip_pickup_speed: int = 30 # 取枪头速度 (rpm) - tip_pickup_acceleration: int = 500 # 取枪头加速度 (rpm/s) - tip_pickup_depth: float = 10.0 # 枪头插入深度 (mm) - tip_drop_height: float = 10.0 # 丢弃枪头高度 (mm) -``` - -### 2. 配置文件位置 - -#### A. 代码配置(推荐) -```python -# 在Python代码中直接配置 -from unilabos.devices.laiyu_liquid import LaiYuLiquidConfig - -config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", # 🔧 修改为实际串口 - address=4, # 🔧 移液器地址 - baudrate=115200, # 🔧 通信波特率 - timeout=5.0 # 🔧 超时时间 -) -``` - -#### B. JSON配置文件 -```json -{ - "laiyu_liquid_config": { - "port": "/dev/cu.usbserial-3130", - "address": 4, - "baudrate": 115200, - "timeout": 5.0, - "deck_width": 340.0, - "deck_height": 250.0, - "deck_depth": 160.0, - "max_speed": 100.0, - "acceleration": 50.0, - "safe_height": 50.0 - } -} -``` - -#### C. 实验协议配置 -```json -// test/experiments/laiyu_liquid.json -{ - "device_config": { - "type": "laiyu_liquid", - "config": { - "port": "/dev/cu.usbserial-3130", - "address": 4, - "baudrate": 115200 - } - } -} -``` - -### 2. 串口设备识别 - -#### 自动识别方法(推荐) - -```python -import serial.tools.list_ports - -def find_laiyu_device(): - """自动查找LaiYu设备串口""" - ports = serial.tools.list_ports.comports() - - for port in ports: - # 根据设备描述或VID/PID识别 - if 'usbserial' in port.device.lower(): - print(f"找到可能的设备: {port.device}") - print(f"描述: {port.description}") - print(f"硬件ID: {port.hwid}") - return port.device - - return None - -# 使用示例 -device_port = find_laiyu_device() -if device_port: - print(f"检测到设备端口: {device_port}") -else: - print("未检测到设备") -``` - -#### 手动识别方法 - -| 操作系统 | 命令 | 设备路径格式 | -|---------|------|-------------| -| **macOS** | `ls /dev/cu.*` | `/dev/cu.usbserial-XXXX` | -| **Linux** | `ls /dev/ttyUSB*` | `/dev/ttyUSB0` | -| **Windows** | 设备管理器 | `COM3`, `COM4` 等 | - -#### macOS 详细识别 -```bash -# 1. 列出所有USB串口设备 -ls /dev/cu.usbserial-* - -# 2. 查看USB设备详细信息 -system_profiler SPUSBDataType | grep -A 10 "Serial" - -# 3. 实时监控设备插拔 -ls /dev/cu.* && echo "--- 请插入设备 ---" && sleep 3 && ls /dev/cu.* -``` - -#### Linux 详细识别 -```bash -# 1. 列出串口设备 -ls /dev/ttyUSB* /dev/ttyACM* - -# 2. 查看设备信息 -dmesg | grep -i "usb.*serial" -lsusb | grep -i "serial\|converter" - -# 3. 查看设备属性 -udevadm info --name=/dev/ttyUSB0 --attribute-walk -``` - -#### Windows 详细识别 -```powershell -# PowerShell命令 -Get-WmiObject -Class Win32_SerialPort | Select-Object Name, DeviceID, Description - -# 或在设备管理器中查看"端口(COM和LPT)" -``` - -### 3. 控制器特定配置 - -#### XYZ步进电机控制器 -- **地址范围**: 1-3 (X轴=1, Y轴=2, Z轴=3) -- **通信协议**: Modbus RTU -- **波特率**: 9600 或 115200 -- **数据位**: 8 -- **停止位**: 1 -- **校验位**: None - -#### XYZ控制器配置 (`controllers/xyz_controller.py`) - -XYZ控制器负责三轴运动控制,提供精确的位置控制和运动规划功能。 - -**主要功能:** -- 三轴独立控制(X、Y、Z轴) -- 位置精度控制 -- 运动速度调节 -- 安全限位检测 - -**配置参数:** -```python -xyz_config = { - "port": "/dev/ttyUSB0", # 串口设备 - "baudrate": 115200, # 波特率 - "timeout": 1.0, # 通信超时 - "max_speed": { # 最大速度限制 - "x": 1000, # X轴最大速度 - "y": 1000, # Y轴最大速度 - "z": 500 # Z轴最大速度 - }, - "acceleration": 500, # 加速度 - "home_position": [0, 0, 0] # 原点位置 -} -``` - -```python -def __init__(self, port: str, baudrate: int = 115200, - machine_config: Optional[MachineConfig] = None, - config_file: str = "machine_config.json", - auto_connect: bool = True): - """ - Args: - port: 串口端口 (如: "/dev/cu.usbserial-3130") - baudrate: 波特率 (默认: 115200) - machine_config: 机械配置参数 - config_file: 配置文件路径 - auto_connect: 是否自动连接 - """ -``` - -#### SOPA移液器 -- **地址**: 通常为 4 或更高 -- **通信协议**: 自定义协议 -- **波特率**: 115200 (推荐) -- **响应时间**: < 100ms - -#### 移液器控制器配置 (`controllers/pipette_controller.py`) - -移液器控制器负责精确的液体吸取和分配操作,支持多种移液模式和参数配置。 - -**主要功能:** -- 精确体积控制 -- 液面检测 -- 枪头管理 -- 速度调节 - -**配置参数:** -```python -@dataclass -class SOPAConfig: - # 通信参数 - port: str = "/dev/ttyUSB0" # 🔧 修改串口号 - baudrate: int = 115200 # 🔧 修改波特率 - address: int = 1 # 🔧 修改设备地址 (1-254) - timeout: float = 5.0 # 🔧 修改超时时间 - comm_type: CommunicationType = CommunicationType.TERMINAL_DEBUG -``` - -## 🔍 连接验证与测试 - -### 1. 编程方式验证连接 - -#### 创建测试脚本 -```python -#!/usr/bin/env python3 -""" -LaiYu液体处理设备连接测试脚本 -""" - -import sys -import os -sys.path.append('/Users/dp/Documents/DPT/HuaiRou/Uni-Lab-OS') - -from unilabos.devices.laiyu_liquid.core.LaiYu_Liquid import ( - LaiYuLiquid, LaiYuLiquidConfig -) - -def test_connection(): - """测试设备连接""" - - # 🔧 修改这里的配置参数 - config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", # 修改为你的串口号 - address=1, # 修改为你的设备地址 - baudrate=9600, # 修改为你的波特率 - timeout=5.0 - ) - - print("🔌 正在测试LaiYu液体处理设备连接...") - print(f"串口: {config.port}") - print(f"波特率: {config.baudrate}") - print(f"设备地址: {config.address}") - print("-" * 50) - - try: - # 创建设备实例 - device = LaiYuLiquid(config) - - # 尝试连接和初始化 - print("📡 正在连接设备...") - success = await device.setup() - - if success: - print("✅ 设备连接成功!") - print(f"连接状态: {device.is_connected}") - print(f"初始化状态: {device.is_initialized}") - print(f"当前位置: {device.current_position}") - - # 获取设备状态 - status = device.get_status() - print("\n📊 设备状态:") - for key, value in status.items(): - print(f" {key}: {value}") - - else: - print("❌ 设备连接失败!") - print("请检查:") - print(" 1. 串口号是否正确") - print(" 2. 设备是否已连接并通电") - print(" 3. 波特率和设备地址是否匹配") - print(" 4. 串口是否被其他程序占用") - - except Exception as e: - print(f"❌ 连接测试出错: {e}") - print("\n🔧 故障排除建议:") - print(" 1. 检查串口设备是否存在:") - print(" macOS: ls /dev/cu.*") - print(" Linux: ls /dev/ttyUSB* /dev/ttyACM*") - print(" 2. 检查设备权限:") - print(" sudo chmod 666 /dev/cu.usbserial-*") - print(" 3. 检查设备是否被占用:") - print(" lsof | grep /dev/cu.usbserial") - - finally: - # 清理连接 - if 'device' in locals(): - await device.stop() - -if __name__ == "__main__": - import asyncio - asyncio.run(test_connection()) -``` - -### 2. 命令行验证工具 - -#### 串口通信测试 -```bash -# 安装串口调试工具 -pip install pyserial - -# 使用Python测试串口 -python -c " -import serial -try: - ser = serial.Serial('/dev/cu.usbserial-3130', 9600, timeout=1) - print('串口连接成功:', ser.is_open) - ser.close() -except Exception as e: - print('串口连接失败:', e) -" -``` - -#### 设备权限检查 -```bash -# macOS/Linux 检查串口权限 -ls -la /dev/cu.usbserial-* - -# 如果权限不足,修改权限 -sudo chmod 666 /dev/cu.usbserial-* - -# 检查串口是否被占用 -lsof | grep /dev/cu.usbserial -``` - -### 3. 连接状态指示器 - -设备提供多种方式检查连接状态: - -#### A. 属性检查 -```python -device = LaiYuLiquid(config) - -# 检查连接状态 -print(f"设备已连接: {device.is_connected}") -print(f"设备已初始化: {device.is_initialized}") -print(f"枪头已安装: {device.tip_attached}") -print(f"当前位置: {device.current_position}") -print(f"当前体积: {device.current_volume}") -``` - -#### B. 状态字典 -```python -status = device.get_status() -print("完整设备状态:", status) - -# 输出示例: -# { -# 'connected': True, -# 'initialized': True, -# 'position': (0.0, 0.0, 50.0), -# 'tip_attached': False, -# 'current_volume': 0.0, -# 'last_error': None -# } -``` - -## 🛠️ 故障排除指南 - -### 1. 连接问题诊断 - -#### 🔍 问题诊断流程 -```python -def diagnose_connection_issues(): - """连接问题诊断工具""" - import serial.tools.list_ports - import serial - - print("🔍 开始连接问题诊断...") - - # 1. 检查串口设备 - ports = list(serial.tools.list_ports.comports()) - if not ports: - print("❌ 未检测到任何串口设备") - print("💡 解决方案:") - print(" - 检查USB连接线") - print(" - 确认设备电源") - print(" - 安装设备驱动") - return - - print(f"✅ 检测到 {len(ports)} 个串口设备") - for port in ports: - print(f" 📍 {port.device}: {port.description}") - - # 2. 测试串口访问权限 - for port in ports: - try: - with serial.Serial(port.device, 9600, timeout=1): - print(f"✅ {port.device}: 访问权限正常") - except PermissionError: - print(f"❌ {port.device}: 权限不足") - print("💡 解决方案: sudo chmod 666 " + port.device) - except Exception as e: - print(f"⚠️ {port.device}: {e}") - -# 运行诊断 -diagnose_connection_issues() -``` - -#### 🚫 常见连接错误 - -| 错误类型 | 症状 | 解决方案 | -|---------|------|----------| -| **设备未找到** | `FileNotFoundError: No such file or directory` | 1. 检查USB连接
2. 确认设备驱动
3. 重新插拔设备 | -| **权限不足** | `PermissionError: Permission denied` | 1. `sudo chmod 666 /dev/ttyUSB0`
2. 添加用户到dialout组
3. 使用sudo运行 | -| **设备占用** | `SerialException: Device or resource busy` | 1. 关闭其他程序
2. `lsof /dev/ttyUSB0`查找占用
3. 重启系统 | -| **驱动问题** | 设备管理器显示未知设备 | 1. 安装CH340/CP210x驱动
2. 更新系统驱动
3. 使用原装USB线 | - -### 2. 通信问题解决 - -#### 📡 通信参数调试 -```python -def test_communication_parameters(): - """测试不同通信参数""" - import serial - - port = "/dev/cu.usbserial-3130" # 修改为实际端口 - baudrates = [9600, 19200, 38400, 57600, 115200] - - for baudrate in baudrates: - print(f"🔄 测试波特率: {baudrate}") - try: - with serial.Serial(port, baudrate, timeout=2) as ser: - # 发送测试命令 - test_cmd = b'\x01\x03\x00\x00\x00\x01\x84\x0A' - ser.write(test_cmd) - - response = ser.read(100) - if response: - print(f" ✅ 成功: 收到 {len(response)} 字节") - print(f" 📦 数据: {response.hex()}") - return baudrate - else: - print(f" ❌ 无响应") - except Exception as e: - print(f" ❌ 错误: {e}") - - return None -``` - -#### ⚡ 通信故障排除 - -| 问题类型 | 症状 | 诊断方法 | 解决方案 | -|---------|------|----------|----------| -| **通信超时** | `TimeoutError` | 检查波特率和设备地址 | 1. 调整超时时间
2. 验证波特率
3. 检查设备地址 | -| **数据校验错误** | `CRCError` | 检查数据完整性 | 1. 更换USB线
2. 降低波特率
3. 检查电磁干扰 | -| **协议错误** | 响应格式异常 | 验证命令格式 | 1. 检查协议版本
2. 确认设备类型
3. 更新固件 | -| **间歇性故障** | 时好时坏 | 监控连接稳定性 | 1. 检查连接线
2. 稳定电源
3. 减少干扰源 | - -### 3. 设备功能问题 - -#### 🎯 设备状态检查 -```python -def check_device_health(): - """设备健康状态检查""" - from unilabos.devices.laiyu_liquid import LaiYuLiquidConfig, LaiYuLiquidBackend - - config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200, - timeout=5.0 - ) - - try: - backend = LaiYuLiquidBackend(config) - backend.connect() - - # 检查项目 - checks = { - "设备连接": lambda: backend.is_connected(), - "XYZ轴状态": lambda: backend.xyz_controller.get_all_positions(), - "移液器状态": lambda: backend.pipette_controller.get_status(), - "设备温度": lambda: backend.get_temperature(), - "错误状态": lambda: backend.get_error_status(), - } - - print("🏥 设备健康检查报告") - print("=" * 40) - - for check_name, check_func in checks.items(): - try: - result = check_func() - print(f"✅ {check_name}: 正常") - if result: - print(f" 📊 数据: {result}") - except Exception as e: - print(f"❌ {check_name}: 异常 - {e}") - - backend.disconnect() - - except Exception as e: - print(f"❌ 无法连接设备: {e}") -``` - -### 4. 高级故障排除 - -#### 🔧 日志分析工具 -```python -import logging - -def setup_debug_logging(): - """设置调试日志""" - logging.basicConfig( - level=logging.DEBUG, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - handlers=[ - logging.FileHandler('laiyu_debug.log'), - logging.StreamHandler() - ] - ) - - # 启用串口通信日志 - serial_logger = logging.getLogger('serial') - serial_logger.setLevel(logging.DEBUG) - - print("🔍 调试日志已启用,日志文件: laiyu_debug.log") -``` - -#### 📊 性能监控 -```python -def monitor_performance(): - """性能监控工具""" - import time - import psutil - - print("📊 开始性能监控...") - - start_time = time.time() - start_cpu = psutil.cpu_percent() - start_memory = psutil.virtual_memory().percent - - # 执行设备操作 - # ... 你的设备操作代码 ... - - end_time = time.time() - end_cpu = psutil.cpu_percent() - end_memory = psutil.virtual_memory().percent - - print(f"⏱️ 执行时间: {end_time - start_time:.2f} 秒") - print(f"💻 CPU使用: {end_cpu - start_cpu:.1f}%") - print(f"🧠 内存使用: {end_memory - start_memory:.1f}%") -``` - -## 📝 配置文件模板 - -### 1. 基础配置模板 - -#### 标准配置(推荐) -```python -from unilabos.devices.laiyu_liquid import LaiYuLiquidConfig, LaiYuLiquidBackend, LaiYuLiquid - -# 创建标准配置 -config = LaiYuLiquidConfig( - # === 通信参数 === - port="/dev/cu.usbserial-3130", # 🔧 修改为实际串口 - address=4, # 移液器地址(推荐) - baudrate=115200, # 通信波特率(推荐) - timeout=5.0, # 通信超时时间 - - # === 工作台尺寸 === - deck_width=340.0, # 工作台宽度 (mm) - deck_height=250.0, # 工作台高度 (mm) - deck_depth=160.0, # 工作台深度 (mm) - - # === 运动控制参数 === - max_speed=100.0, # 最大移动速度 (mm/s) - acceleration=50.0, # 加速度 (mm/s²) - safe_height=50.0, # 安全移动高度 (mm) - - # === 移液参数 === - max_volume=1000.0, # 最大移液体积 (μL) - min_volume=0.1, # 最小移液体积 (μL) - liquid_detection=True, # 启用液面检测 - - # === 枪头操作参数 === - tip_pickup_speed=30, # 取枪头速度 (rpm) - tip_pickup_acceleration=500, # 取枪头加速度 (rpm/s) - tip_pickup_depth=10.0, # 枪头插入深度 (mm) - tip_drop_height=10.0, # 丢弃枪头高度 (mm) -) - -# 创建设备实例 -backend = LaiYuLiquidBackend(config) -device = LaiYuLiquid(backend) -``` - -### 2. 高级配置模板 - -#### 多设备配置 -```python -# 配置多个LaiYu设备 -configs = { - "device_1": LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200, - deck_width=340.0, - deck_height=250.0, - deck_depth=160.0 - ), - "device_2": LaiYuLiquidConfig( - port="/dev/cu.usbserial-3131", - address=4, - baudrate=115200, - deck_width=340.0, - deck_height=250.0, - deck_depth=160.0 - ) -} - -# 创建设备实例 -devices = {} -for name, config in configs.items(): - backend = LaiYuLiquidBackend(config) - devices[name] = LaiYuLiquid(backend) -``` - -#### 自定义参数配置 -```python -# 高精度移液配置 -precision_config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200, - timeout=10.0, # 增加超时时间 - - # 精密运动控制 - max_speed=50.0, # 降低速度提高精度 - acceleration=25.0, # 降低加速度 - safe_height=30.0, # 降低安全高度 - - # 精密移液参数 - max_volume=200.0, # 小体积移液 - min_volume=0.5, # 提高最小体积 - liquid_detection=True, - - # 精密枪头操作 - tip_pickup_speed=15, # 降低取枪头速度 - tip_pickup_acceleration=250, # 降低加速度 - tip_pickup_depth=8.0, # 减少插入深度 - tip_drop_height=5.0, # 降低丢弃高度 -) -``` - -### 3. 实验协议配置 - -#### JSON配置文件模板 -```json -{ - "experiment_name": "LaiYu液体处理实验", - "version": "1.0", - "devices": { - "laiyu_liquid": { - "type": "LaiYu_Liquid", - "config": { - "port": "/dev/cu.usbserial-3130", - "address": 4, - "baudrate": 115200, - "timeout": 5.0, - "deck_width": 340.0, - "deck_height": 250.0, - "deck_depth": 160.0, - "max_speed": 100.0, - "acceleration": 50.0, - "safe_height": 50.0, - "max_volume": 1000.0, - "min_volume": 0.1, - "liquid_detection": true - } - } - }, - "deck_layout": { - "tip_rack": { - "type": "tip_rack_96", - "position": [10, 10, 0], - "tips": "1000μL" - }, - "source_plate": { - "type": "plate_96", - "position": [100, 10, 0], - "contents": "样品" - }, - "dest_plate": { - "type": "plate_96", - "position": [200, 10, 0], - "contents": "目标" - } - } -} -``` - -### 4. 完整配置示例 -```json -{ - "laiyu_liquid_config": { - "communication": { - "xyz_controller": { - "port": "/dev/cu.usbserial-3130", - "baudrate": 115200, - "timeout": 5.0 - }, - "pipette_controller": { - "port": "/dev/cu.usbserial-3131", - "baudrate": 115200, - "address": 4, - "timeout": 5.0 - } - }, - "mechanical": { - "deck_width": 340.0, - "deck_height": 250.0, - "deck_depth": 160.0, - "safe_height": 50.0 - }, - "motion": { - "max_speed": 100.0, - "acceleration": 50.0, - "tip_pickup_speed": 30, - "tip_pickup_acceleration": 500 - }, - "safety": { - "position_validation": true, - "emergency_stop_enabled": true, - "deck_width": 300.0, - "deck_height": 200.0, - "deck_depth": 100.0, - "safe_height": 50.0 - } - } -} -``` - -### 5. 完整使用示例 - -#### 基础移液操作 -```python -async def basic_pipetting_example(): - """基础移液操作示例""" - - # 1. 设备初始化 - config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200 - ) - - backend = LaiYuLiquidBackend(config) - device = LaiYuLiquid(backend) - - try: - # 2. 设备设置 - await device.setup() - print("✅ 设备初始化完成") - - # 3. 回到原点 - await device.home_all_axes() - print("✅ 轴归零完成") - - # 4. 取枪头 - tip_position = (50, 50, 10) # 枪头架位置 - await device.pick_up_tip(tip_position) - print("✅ 取枪头完成") - - # 5. 移液操作 - source_pos = (100, 100, 15) # 源位置 - dest_pos = (200, 200, 15) # 目标位置 - volume = 100.0 # 移液体积 (μL) - - await device.aspirate(volume, source_pos) - print(f"✅ 吸取 {volume}μL 完成") - - await device.dispense(volume, dest_pos) - print(f"✅ 分配 {volume}μL 完成") - - # 6. 丢弃枪头 - trash_position = (300, 300, 20) - await device.drop_tip(trash_position) - print("✅ 丢弃枪头完成") - - except Exception as e: - print(f"❌ 操作失败: {e}") - - finally: - # 7. 清理资源 - await device.cleanup() - print("✅ 设备清理完成") - -# 运行示例 -import asyncio -asyncio.run(basic_pipetting_example()) -``` - -#### 批量处理示例 -```python -async def batch_processing_example(): - """批量处理示例""" - - config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200 - ) - - backend = LaiYuLiquidBackend(config) - device = LaiYuLiquid(backend) - - try: - await device.setup() - await device.home_all_axes() - - # 定义位置 - tip_rack = [(50 + i*9, 50, 10) for i in range(12)] # 12个枪头位置 - source_wells = [(100 + i*9, 100, 15) for i in range(12)] # 12个源孔 - dest_wells = [(200 + i*9, 200, 15) for i in range(12)] # 12个目标孔 - - # 批量移液 - for i in range(12): - print(f"🔄 处理第 {i+1} 个样品...") - - # 取枪头 - await device.pick_up_tip(tip_rack[i]) - - # 移液 - await device.aspirate(50.0, source_wells[i]) - await device.dispense(50.0, dest_wells[i]) - - # 丢弃枪头 - await device.drop_tip((300, 300, 20)) - - print(f"✅ 第 {i+1} 个样品处理完成") - - print("🎉 批量处理完成!") - - except Exception as e: - print(f"❌ 批量处理失败: {e}") - - finally: - await device.cleanup() - -# 运行批量处理 -asyncio.run(batch_processing_example()) -``` - -## 🔧 调试与日志管理 - -### 1. 调试模式配置 - -#### 启用全局调试 -```python -import logging -from unilabos.devices.laiyu_liquid import LaiYuLiquidConfig, LaiYuLiquidBackend - -# 配置全局日志 -logging.basicConfig( - level=logging.DEBUG, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - handlers=[ - logging.FileHandler('laiyu_debug.log'), - logging.StreamHandler() - ] -) - -# 创建调试配置 -debug_config = LaiYuLiquidConfig( - port="/dev/cu.usbserial-3130", - address=4, - baudrate=115200, - timeout=10.0, # 增加超时时间便于调试 - debug_mode=True # 启用调试模式 -) -``` - -#### 分级日志配置 -```python -def setup_logging(log_level="INFO"): - """设置分级日志""" - - # 日志级别映射 - levels = { - "DEBUG": logging.DEBUG, - "INFO": logging.INFO, - "WARNING": logging.WARNING, - "ERROR": logging.ERROR - } - - # 创建日志记录器 - logger = logging.getLogger('LaiYu_Liquid') - logger.setLevel(levels.get(log_level, logging.INFO)) - - # 文件处理器 - file_handler = logging.FileHandler('laiyu_operations.log') - file_formatter = logging.Formatter( - '%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s' - ) - file_handler.setFormatter(file_formatter) - - # 控制台处理器 - console_handler = logging.StreamHandler() - console_formatter = logging.Formatter('%(levelname)s - %(message)s') - console_handler.setFormatter(console_formatter) - - logger.addHandler(file_handler) - logger.addHandler(console_handler) - - return logger - -# 使用示例 -logger = setup_logging("DEBUG") -logger.info("开始LaiYu设备操作") -``` - -### 2. 通信监控 - -#### 串口通信日志 -```python -def enable_serial_logging(): - """启用串口通信日志""" - import serial - - # 创建串口日志记录器 - serial_logger = logging.getLogger('serial.communication') - serial_logger.setLevel(logging.DEBUG) - - # 创建专用的串口日志文件 - serial_handler = logging.FileHandler('laiyu_serial.log') - serial_formatter = logging.Formatter( - '%(asctime)s - SERIAL - %(message)s' - ) - serial_handler.setFormatter(serial_formatter) - serial_logger.addHandler(serial_handler) - - print("📡 串口通信日志已启用: laiyu_serial.log") - return serial_logger -``` - -#### 实时通信监控 -```python -class CommunicationMonitor: - """通信监控器""" - - def __init__(self): - self.sent_count = 0 - self.received_count = 0 - self.error_count = 0 - self.start_time = time.time() - - def log_sent(self, data): - """记录发送数据""" - self.sent_count += 1 - logging.debug(f"📤 发送 #{self.sent_count}: {data.hex()}") - - def log_received(self, data): - """记录接收数据""" - self.received_count += 1 - logging.debug(f"📥 接收 #{self.received_count}: {data.hex()}") - - def log_error(self, error): - """记录错误""" - self.error_count += 1 - logging.error(f"❌ 通信错误 #{self.error_count}: {error}") - - def get_statistics(self): - """获取统计信息""" - duration = time.time() - self.start_time - return { - "运行时间": f"{duration:.2f}秒", - "发送次数": self.sent_count, - "接收次数": self.received_count, - "错误次数": self.error_count, - "成功率": f"{((self.sent_count - self.error_count) / max(self.sent_count, 1) * 100):.1f}%" - } -``` - -### 3. 性能监控 - -#### 操作性能分析 -```python -import time -import functools - -def performance_monitor(operation_name): - """性能监控装饰器""" - def decorator(func): - @functools.wraps(func) - async def wrapper(*args, **kwargs): - start_time = time.time() - start_memory = psutil.Process().memory_info().rss / 1024 / 1024 # MB - - try: - result = await func(*args, **kwargs) - - end_time = time.time() - end_memory = psutil.Process().memory_info().rss / 1024 / 1024 # MB - - duration = end_time - start_time - memory_delta = end_memory - start_memory - - logging.info(f"⏱️ {operation_name}: {duration:.3f}s, 内存变化: {memory_delta:+.1f}MB") - - return result - - except Exception as e: - end_time = time.time() - duration = end_time - start_time - logging.error(f"❌ {operation_name} 失败 ({duration:.3f}s): {e}") - raise - - return wrapper - return decorator - -# 使用示例 -@performance_monitor("移液操作") -async def monitored_pipetting(): - await device.aspirate(100.0, (100, 100, 15)) - await device.dispense(100.0, (200, 200, 15)) -``` - -#### 系统资源监控 -```python -import psutil -import threading -import time - -class SystemMonitor: - """系统资源监控器""" - - def __init__(self, interval=1.0): - self.interval = interval - self.monitoring = False - self.data = [] - - def start_monitoring(self): - """开始监控""" - self.monitoring = True - self.monitor_thread = threading.Thread(target=self._monitor_loop) - self.monitor_thread.daemon = True - self.monitor_thread.start() - print("📊 系统监控已启动") - - def stop_monitoring(self): - """停止监控""" - self.monitoring = False - if hasattr(self, 'monitor_thread'): - self.monitor_thread.join() - print("📊 系统监控已停止") - - def _monitor_loop(self): - """监控循环""" - while self.monitoring: - cpu_percent = psutil.cpu_percent() - memory = psutil.virtual_memory() - - self.data.append({ - 'timestamp': time.time(), - 'cpu_percent': cpu_percent, - 'memory_percent': memory.percent, - 'memory_used_mb': memory.used / 1024 / 1024 - }) - - time.sleep(self.interval) - - def get_report(self): - """生成监控报告""" - if not self.data: - return "无监控数据" - - avg_cpu = sum(d['cpu_percent'] for d in self.data) / len(self.data) - avg_memory = sum(d['memory_percent'] for d in self.data) / len(self.data) - max_memory = max(d['memory_used_mb'] for d in self.data) - - return f""" -📊 系统资源监控报告 -================== -监控时长: {len(self.data) * self.interval:.1f}秒 -平均CPU使用率: {avg_cpu:.1f}% -平均内存使用率: {avg_memory:.1f}% -峰值内存使用: {max_memory:.1f}MB - """ - -# 使用示例 -monitor = SystemMonitor() -monitor.start_monitoring() - -# 执行设备操作 -# ... 你的代码 ... - -monitor.stop_monitoring() -print(monitor.get_report()) -``` - -### 4. 错误追踪 - -#### 异常处理和记录 -```python -import traceback - -class ErrorTracker: - """错误追踪器""" - - def __init__(self): - self.errors = [] - - def log_error(self, operation, error, context=None): - """记录错误""" - error_info = { - 'timestamp': time.time(), - 'operation': operation, - 'error_type': type(error).__name__, - 'error_message': str(error), - 'traceback': traceback.format_exc(), - 'context': context or {} - } - - self.errors.append(error_info) - - # 记录到日志 - logging.error(f"❌ {operation} 失败: {error}") - logging.debug(f"错误详情: {error_info}") - - def get_error_summary(self): - """获取错误摘要""" - if not self.errors: - return "✅ 无错误记录" - - error_types = {} - for error in self.errors: - error_type = error['error_type'] - error_types[error_type] = error_types.get(error_type, 0) + 1 - - summary = f"❌ 共记录 {len(self.errors)} 个错误:\n" - for error_type, count in error_types.items(): - summary += f" - {error_type}: {count} 次\n" - - return summary - -# 全局错误追踪器 -error_tracker = ErrorTracker() - -# 使用示例 -try: - await device.move_to(x=1000, y=1000, z=100) # 可能超出范围 -except Exception as e: - error_tracker.log_error("移动操作", e, {"target": (1000, 1000, 100)}) -``` - ---- - -## 📚 总结 - -本文档提供了LaiYu液体处理设备的完整硬件连接配置指南,涵盖了从基础设置到高级故障排除的所有方面。 - -### 🎯 关键要点 - -1. **标准配置**: 使用 `port="/dev/cu.usbserial-3130"`, `address=4`, `baudrate=115200` -2. **设备架构**: XYZ轴控制器(地址1-3) + SOPA移液器(地址4) -3. **连接验证**: 使用提供的测试脚本验证硬件连接 -4. **故障排除**: 参考故障排除指南解决常见问题 -5. **性能监控**: 启用日志和监控确保稳定运行 - -### 🔗 相关文档 - -- [LaiYu控制架构详解](./UniLab_LaiYu_控制架构详解.md) -- [XYZ集成功能说明](./XYZ_集成功能说明.md) -- [设备API文档](./readme.md) - -### 📞 技术支持 - -如遇到问题,请: -1. 检查硬件连接和配置 -2. 查看调试日志 -3. 参考故障排除指南 -4. 联系技术支持团队 - ---- - -*最后更新: 2024年1月* \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/docs/readme.md b/unilabos/devices/laiyu_liquid/docs/readme.md deleted file mode 100644 index 4927138a..00000000 --- a/unilabos/devices/laiyu_liquid/docs/readme.md +++ /dev/null @@ -1,269 +0,0 @@ -# LaiYu_Liquid 液体处理工作站 - -## 概述 - -LaiYu_Liquid 是一个完全集成到 UniLabOS 的自动化液体处理工作站,基于 RS485 通信协议,专为精确的液体分配和转移操作而设计。本模块已完成生产环境部署准备,提供完整的硬件控制、资源管理和标准化接口。 - -## 系统组成 - -### 硬件组件 -- **XYZ三轴运动平台**: 3个RS485步进电机驱动(地址:X轴=0x01, Y轴=0x02, Z轴=0x03) -- **SOPA气动式移液器**: RS485总线控制,支持精密液体处理操作 -- **通信接口**: RS485转USB模块,默认波特率115200 -- **机械结构**: 稳固工作台面,支持离心管架、96孔板等标准实验耗材 - -### 软件架构 -- **驱动层**: 底层硬件通信驱动,支持RS485协议 -- **控制层**: 高级控制逻辑和坐标系管理 -- **抽象层**: 完全符合UniLabOS标准的液体处理接口 -- **资源层**: 标准化的实验器具和耗材管理 - -## 🎯 生产就绪组件 - -### ✅ 核心驱动程序 (`drivers/`) -- **`sopa_pipette_driver.py`** - SOPA移液器完整驱动 - - 支持液体吸取、分配、检测 - - 完整的错误处理和状态管理 - - 生产级别的通信协议实现 - -- **`xyz_stepper_driver.py`** - XYZ三轴步进电机驱动 - - 精确的位置控制和运动规划 - - 安全限位和错误检测 - - 高性能运动控制算法 - -### ✅ 高级控制器 (`controllers/`) -- **`pipette_controller.py`** - 移液控制器 - - 封装高级液体处理功能 - - 支持多种液体类型和处理参数 - - 智能错误恢复机制 - -- **`xyz_controller.py`** - XYZ运动控制器 - - 坐标系管理和转换 - - 运动路径优化 - - 安全运动控制 - -### ✅ UniLabOS集成 (`core/LaiYu_Liquid.py`) -- **完整的液体处理抽象接口** -- **标准化的资源管理系统** -- **与PyLabRobot兼容的后端实现** -- **生产级别的错误处理和日志记录** - -### ✅ 资源管理系统 -- **`laiyu_liquid_res.py`** - 标准化资源定义 - - 96孔板、离心管架、枪头架等标准器具 - - 自动化的资源创建和配置函数 - - 与工作台布局的完美集成 - -### ✅ 配置管理 (`config/`) -- **`config/deck.json`** - 工作台布局配置 - - 精确的空间定义和槽位管理 - - 支持多种实验器具的标准化放置 - - 可扩展的配置架构 - -- **`__init__.py`** - 模块集成和导出 - - 完整的API导出和版本管理 - - 依赖检查和安装验证 - - 专业的模块信息展示 - - - -## 🚀 核心功能特性 - -### 液体处理能力 -- **精密体积控制**: 支持1-1000μL精确分配 -- **多种液体类型**: 水性、有机溶剂、粘稠液体等 -- **智能检测**: 液位检测、气泡检测、堵塞检测 -- **自动化流程**: 完整的吸取-转移-分配工作流 - -### 运动控制系统 -- **三轴精密定位**: 微米级精度控制 -- **路径优化**: 智能运动规划和碰撞避免 -- **安全机制**: 限位保护、紧急停止、错误恢复 -- **坐标系管理**: 工作坐标与机械坐标的自动转换 - -### 资源管理 -- **标准化器具**: 支持96孔板、离心管架、枪头架等 -- **状态跟踪**: 实时监控液体体积、枪头状态等 -- **自动配置**: 基于JSON的灵活配置系统 -- **扩展性**: 易于添加新的器具类型 - -## 📁 目录结构 - -``` -LaiYu_Liquid/ -├── __init__.py # 模块初始化和API导出 -├── readme.md # 本文档 -├── backend/ # 后端驱动模块 -│ ├── __init__.py -│ └── laiyu_backend.py # PyLabRobot兼容后端 -├── core/ # 核心模块 -│ ├── core/ -│ │ └── LaiYu_Liquid.py # 主设备类 -│ ├── abstract_protocol.py # 抽象协议 -│ └── laiyu_liquid_res.py # 设备资源定义 -├── config/ # 配置文件目录 -│ └── deck.json # 工作台布局配置 -├── controllers/ # 高级控制器 -│ ├── __init__.py -│ ├── pipette_controller.py # 移液控制器 -│ └── xyz_controller.py # XYZ运动控制器 -├── docs/ # 技术文档 -│ ├── SOPA气动式移液器RS485控制指令.md -│ ├── 步进电机控制指令.md -│ └── hardware/ # 硬件相关文档 -├── drivers/ # 底层驱动程序 -│ ├── __init__.py -│ ├── sopa_pipette_driver.py # SOPA移液器驱动 -│ └── xyz_stepper_driver.py # XYZ步进电机驱动 -└── tests/ # 测试文件 -``` - -## 🔧 快速开始 - -### 1. 安装和验证 - -```python -# 验证模块安装 -from unilabos.devices.laiyu_liquid import ( - LaiYuLiquid, - LaiYuLiquidConfig, - create_quick_setup, - print_module_info -) - -# 查看模块信息 -print_module_info() - -# 快速创建默认资源 -resources = create_quick_setup() -print(f"已创建 {len(resources)} 个资源") -``` - -### 2. 基本使用示例 - -```python -from unilabos.devices.LaiYu_Liquid import ( - create_quick_setup, - create_96_well_plate, - create_laiyu_backend -) - -# 快速创建默认资源 -resources = create_quick_setup() -print(f"创建了以下资源: {list(resources.keys())}") - -# 创建96孔板 -plate_96 = create_96_well_plate("test_plate") -print(f"96孔板包含 {len(plate_96.children)} 个孔位") - -# 创建后端实例(用于PyLabRobot集成) -backend = create_laiyu_backend("LaiYu_Device") -print(f"后端设备: {backend.name}") -``` - -### 3. 后端驱动使用 - -```python -from unilabos.devices.laiyu_liquid.backend import create_laiyu_backend - -# 创建后端实例 -backend = create_laiyu_backend("LaiYu_Liquid_Station") - -# 连接设备 -await backend.connect() - -# 设备归位 -await backend.home_device() - -# 获取设备状态 -status = await backend.get_status() -print(f"设备状态: {status}") - -# 断开连接 -await backend.disconnect() -``` - -### 4. 资源管理示例 - -```python -from unilabos.devices.LaiYu_Liquid import ( - create_centrifuge_tube_rack, - create_tip_rack, - load_deck_config -) - -# 加载工作台配置 -deck_config = load_deck_config() -print(f"工作台尺寸: {deck_config['size_x']}x{deck_config['size_y']}mm") - -# 创建不同类型的资源 -tube_rack = create_centrifuge_tube_rack("sample_rack") -tip_rack = create_tip_rack("tip_rack_200ul") - -print(f"离心管架: {tube_rack.name}, 容量: {len(tube_rack.children)} 个位置") -print(f"枪头架: {tip_rack.name}, 容量: {len(tip_rack.children)} 个枪头") -``` - -## 🔍 技术架构 - -### 坐标系统 -- **机械坐标**: 基于步进电机的原始坐标系统 -- **工作坐标**: 用户友好的实验室坐标系统 -- **自动转换**: 透明的坐标系转换和校准 - -### 通信协议 -- **RS485总线**: 高可靠性工业通信标准 -- **Modbus协议**: 标准化的设备通信协议 -- **错误检测**: 完整的通信错误检测和恢复 - -### 安全机制 -- **限位保护**: 硬件和软件双重限位保护 -- **紧急停止**: 即时停止所有运动和操作 -- **状态监控**: 实时设备状态监控和报警 - -## 🧪 验证和测试 - -### 功能验证 -```python -# 验证模块安装 -from unilabos.devices.laiyu_liquid import validate_installation -validate_installation() - -# 查看模块信息 -from unilabos.devices.laiyu_liquid import print_module_info -print_module_info() -``` - -### 硬件连接测试 -```python -# 测试SOPA移液器连接 -from unilabos.devices.laiyu_liquid.drivers import SOPAPipette, SOPAConfig - -config = SOPAConfig(port="/dev/cu.usbserial-3130", address=4) -pipette = SOPAPipette(config) -success = pipette.connect() -print(f"SOPA连接状态: {'成功' if success else '失败'}") -``` - -## 📚 维护和支持 - -### 日志记录 -- **结构化日志**: 使用Python logging模块的专业日志记录 -- **错误追踪**: 详细的错误信息和堆栈跟踪 -- **性能监控**: 操作时间和性能指标记录 - -### 配置管理 -- **JSON配置**: 灵活的JSON格式配置文件 -- **参数验证**: 自动配置参数验证和错误提示 -- **热重载**: 支持配置文件的动态重载 - -### 扩展性 -- **模块化设计**: 易于扩展和定制的模块化架构 -- **插件接口**: 支持第三方插件和扩展 -- **API兼容**: 向后兼容的API设计 - - diff --git a/unilabos/devices/laiyu_liquid/drivers/__init__.py b/unilabos/devices/laiyu_liquid/drivers/__init__.py deleted file mode 100644 index cedd47a0..00000000 --- a/unilabos/devices/laiyu_liquid/drivers/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -LaiYu_Liquid 驱动程序模块 - -该模块包含了LaiYu_Liquid液体处理工作站的硬件驱动程序: -- SOPA移液器驱动程序 -- XYZ步进电机驱动程序 -""" - -# SOPA移液器驱动程序导入 -from .sopa_pipette_driver import SOPAPipette, SOPAConfig, SOPAStatusCode - -# XYZ步进电机驱动程序导入 -from .xyz_stepper_driver import StepperMotorDriver, XYZStepperController, MotorAxis, MotorStatus - -__all__ = [ - # SOPA移液器 - "SOPAPipette", - "SOPAConfig", - "SOPAStatusCode", - - # XYZ步进电机 - "StepperMotorDriver", - "XYZStepperController", - "MotorAxis", - "MotorStatus", -] - -__version__ = "1.0.0" -__author__ = "LaiYu_Liquid Driver Team" -__description__ = "LaiYu_Liquid 硬件驱动程序集合" \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/drivers/sopa_pipette_driver.py b/unilabos/devices/laiyu_liquid/drivers/sopa_pipette_driver.py deleted file mode 100644 index 3cfed55f..00000000 --- a/unilabos/devices/laiyu_liquid/drivers/sopa_pipette_driver.py +++ /dev/null @@ -1,1079 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -SOPA气动式移液器RS485控制驱动程序 - -基于SOPA气动式移液器RS485控制指令合集编写的Python驱动程序, -支持完整的移液器控制功能,包括移液、检测、配置等操作。 - -仅支持SC-STxxx-00-13型号的RS485通信。 -""" - -import serial -import time -import logging -import threading -from typing import Optional, Union, Dict, Any, Tuple, List -from enum import Enum, IntEnum -from dataclasses import dataclass -from contextlib import contextmanager - -# 配置日志 -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -class SOPAError(Exception): - """SOPA移液器异常基类""" - pass - - -class SOPACommunicationError(SOPAError): - """通信异常""" - pass - - -class SOPADeviceError(SOPAError): - """设备异常""" - pass - - -class SOPAStatusCode(IntEnum): - """状态码枚举""" - NO_ERROR = 0x00 # 无错误 - ACTION_INCOMPLETE = 0x01 # 上次动作未完成 - NOT_INITIALIZED = 0x02 # 设备未初始化 - DEVICE_OVERLOAD = 0x03 # 设备过载 - INVALID_COMMAND = 0x04 # 无效指令 - LLD_FAULT = 0x05 # 液位探测故障 - AIR_ASPIRATE = 0x0D # 空吸 - NEEDLE_BLOCK = 0x0E # 堵针 - FOAM_DETECT = 0x10 # 泡沫 - EXCEED_TIP_VOLUME = 0x11 # 吸液超过吸头容量 - - -class CommunicationType(Enum): - """通信类型""" - TERMINAL_DEBUG = "/" # 终端调试,头码为0x2F - OEM_COMMUNICATION = "[" # OEM通信,头码为0x5B - - -class DetectionMode(IntEnum): - """液位检测模式""" - PRESSURE = 0 # 压力式检测(pLLD) - CAPACITIVE = 1 # 电容式检测(cLLD) - - -@dataclass -class SOPAConfig: - """SOPA移液器配置参数""" - # 通信参数 - port: str = "/dev/ttyUSB0" - baudrate: int = 115200 - address: int = 1 - timeout: float = 5.0 - comm_type: CommunicationType = CommunicationType.TERMINAL_DEBUG - - # 运动参数 (单位: 0.1ul/秒) - max_speed: int = 2000 # 最高速度 200ul/秒 - start_speed: int = 200 # 启动速度 20ul/秒 - cutoff_speed: int = 200 # 断流速度 20ul/秒 - acceleration: int = 30000 # 加速度 - - # 检测参数 - empty_threshold: int = 4 # 空吸门限 - foam_threshold: int = 20 # 泡沫门限 - block_threshold: int = 350 # 堵塞门限 - - # 液位检测参数 - lld_speed: int = 200 # 检测速度 (100~2000) - lld_sensitivity: int = 5 # 检测灵敏度 (3~40) - detection_mode: DetectionMode = DetectionMode.PRESSURE - - # 吸头参数 - tip_volume: int = 1000 # 吸头容量 (ul) - calibration_factor: float = 1.0 # 校准系数 - compensation_offset: float = 0.0 # 补偿偏差 - - def __post_init__(self): - """初始化后验证参数""" - self._validate_address() - - def _validate_address(self): - """ - 验证设备地址是否符合协议要求 - - 协议要求: - - 地址范围:1~254 - - 禁用地址:47, 69, 91 (对应ASCII字符 '/', 'E', '[') - """ - if not (1 <= self.address <= 254): - raise ValueError(f"设备地址必须在1-254范围内,当前地址: {self.address}") - - forbidden_addresses = [47, 69, 91] # '/', 'E', '[' - if self.address in forbidden_addresses: - forbidden_chars = {47: "'/' (0x2F)", 69: "'E' (0x45)", 91: "'[' (0x5B)"} - char_desc = forbidden_chars[self.address] - raise ValueError( - f"地址 {self.address} 不可用,因为它对应协议字符 {char_desc}。" - f"请选择其他地址(1-254,排除47、69、91)" - ) - - -class SOPAPipette: - """SOPA气动式移液器驱动类""" - - def __init__(self, config: SOPAConfig): - """ - 初始化SOPA移液器 - - Args: - config: 移液器配置参数 - """ - self.config = config - self.serial_port: Optional[serial.Serial] = None - self.is_connected = False - self.is_initialized = False - self.lock = threading.Lock() - - # 状态缓存 - self._last_status = SOPAStatusCode.NOT_INITIALIZED - self._current_position = 0 - self._tip_present = False - - def connect(self) -> bool: - """ - 连接移液器 - - Returns: - bool: 连接是否成功 - """ - try: - self.serial_port = serial.Serial( - port=self.config.port, - baudrate=self.config.baudrate, - bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - timeout=self.config.timeout - ) - - if self.serial_port.is_open: - self.is_connected = True - logger.info(f"已连接到SOPA移液器,端口: {self.config.port}, 地址: {self.config.address}") - - # 查询设备信息 - version = self.get_firmware_version() - if version: - logger.info(f"固件版本: {version}") - - return True - else: - raise SOPACommunicationError("串口打开失败") - - except Exception as e: - logger.error(f"连接失败: {str(e)}") - self.is_connected = False - return False - - def disconnect(self): - """断开连接""" - if self.serial_port and self.serial_port.is_open: - self.serial_port.close() - self.is_connected = False - self.is_initialized = False - logger.info("已断开SOPA移液器连接") - - def _calculate_checksum(self, data: bytes) -> int: - """计算校验和""" - return sum(data) & 0xFF - - def _build_command(self, command: str) -> bytes: - """ - 构建完整命令字节串 - - 根据协议格式:头码 + 地址 + 命令/数据 + 尾码 + 校验和 - - Args: - command: 命令字符串 - - Returns: - bytes: 完整的命令字节串 - """ - header = self.config.comm_type.value # '/' 或 '[' - address = str(self.config.address) # 设备地址 - tail = "E" # 尾码固定为 'E' - - # 构建基础命令字符串:头码 + 地址 + 命令 + 尾码 - cmd_str = f"{header}{address}{command}{tail}" - - # 转换为字节串 - cmd_bytes = cmd_str.encode('ascii') - - # 计算校验和(所有字节的累加值) - checksum = self._calculate_checksum(cmd_bytes) - - # 返回完整命令:基础命令字节 + 校验和字节 - return cmd_bytes + bytes([checksum]) - - def _send_command(self, command: str) -> bool: - """ - 发送命令到移液器 - - Args: - command: 要发送的命令 - - Returns: - bool: 命令是否发送成功 - """ - if not self.is_connected or not self.serial_port: - raise SOPACommunicationError("设备未连接") - - with self.lock: - try: - full_command_bytes = self._build_command(command) - # 转换为可读字符串用于日志显示 - readable_cmd = ''.join(chr(b) if 32 <= b <= 126 else f'\\x{b:02X}' for b in full_command_bytes) - logger.debug(f"发送命令: {readable_cmd}") - - self.serial_port.write(full_command_bytes) - self.serial_port.flush() - - # 等待响应 - time.sleep(0.1) - return True - - except Exception as e: - logger.error(f"发送命令失败: {str(e)}") - raise SOPACommunicationError(f"发送命令失败: {str(e)}") - - def _read_response(self, timeout: float = None) -> Optional[str]: - """ - 读取设备响应 - - Args: - timeout: 超时时间 - - Returns: - Optional[str]: 设备响应字符串 - """ - if not self.is_connected or not self.serial_port: - return None - - timeout = timeout or self.config.timeout - - try: - # 设置读取超时 - self.serial_port.timeout = timeout - - response = b'' - start_time = time.time() - - while time.time() - start_time < timeout: - if self.serial_port.in_waiting > 0: - chunk = self.serial_port.read(self.serial_port.in_waiting) - response += chunk - - # 检查是否收到完整响应(以'E'结尾) - if response.endswith(b'E') or len(response) >= 20: - break - - time.sleep(0.01) - - if response: - decoded_response = response.decode('ascii', errors='ignore') - logger.debug(f"收到响应: {decoded_response}") - return decoded_response - - except Exception as e: - logger.error(f"读取响应失败: {str(e)}") - - return None - - def _send_query(self, query: str) -> Optional[str]: - """ - 发送查询命令并获取响应 - - Args: - query: 查询命令 - - Returns: - Optional[str]: 查询结果 - """ - try: - self._send_command(query) - return self._read_response() - except Exception as e: - logger.error(f"查询失败: {str(e)}") - return None - - # ==================== 基础控制方法 ==================== - - def initialize(self) -> bool: - """ - 初始化移液器 - - Returns: - bool: 初始化是否成功 - """ - try: - logger.info("初始化SOPA移液器...") - - # 发送初始化命令 - self._send_command("HE") - - # 等待初始化完成 - time.sleep(2.0) - - # 检查状态 - status = self.get_status() - if status == SOPAStatusCode.NO_ERROR: - self.is_initialized = True - logger.info("移液器初始化成功") - - # 应用配置参数 - self._apply_configuration() - return True - else: - logger.error(f"初始化失败,状态码: {status}") - return False - - except Exception as e: - logger.error(f"初始化异常: {str(e)}") - return False - - def _apply_configuration(self): - """应用配置参数""" - try: - # 设置运动参数 - self.set_acceleration(self.config.acceleration) - self.set_start_speed(self.config.start_speed) - self.set_cutoff_speed(self.config.cutoff_speed) - self.set_max_speed(self.config.max_speed) - - # 设置检测参数 - self.set_empty_threshold(self.config.empty_threshold) - self.set_foam_threshold(self.config.foam_threshold) - self.set_block_threshold(self.config.block_threshold) - - # 设置吸头参数 - self.set_tip_volume(self.config.tip_volume) - self.set_calibration_factor(self.config.calibration_factor) - - # 设置液位检测参数 - self.set_detection_mode(self.config.detection_mode) - self.set_lld_speed(self.config.lld_speed) - - logger.info("配置参数应用完成") - - except Exception as e: - logger.warning(f"应用配置参数失败: {str(e)}") - - def eject_tip(self) -> bool: - """ - 顶出枪头 - - Returns: - bool: 操作是否成功 - """ - try: - logger.info("顶出枪头") - self._send_command("RE") - time.sleep(1.0) - return True - except Exception as e: - logger.error(f"顶出枪头失败: {str(e)}") - return False - - def get_tip_status(self) -> bool: - """ - 获取枪头状态 - - Returns: - bool: True表示有枪头,False表示无枪头 - """ - try: - response = self._send_query("Q28") - if response and len(response) > 10: - # 解析响应中的枪头状态 - status_char = response[10] if len(response) > 10 else '0' - self._tip_present = (status_char == '1') - return self._tip_present - except Exception as e: - logger.error(f"获取枪头状态失败: {str(e)}") - - return False - - # ==================== 移液控制方法 ==================== - - def move_absolute(self, position: float) -> bool: - """ - 绝对位置移动 - - Args: - position: 目标位置(微升) - - Returns: - bool: 移动是否成功 - """ - try: - if not self.is_initialized: - raise SOPADeviceError("设备未初始化") - - pos_int = int(position) - logger.debug(f"绝对移动到位置: {pos_int}ul") - - self._send_command(f"A{pos_int}E") - time.sleep(0.5) - - self._current_position = pos_int - return True - - except Exception as e: - logger.error(f"绝对移动失败: {str(e)}") - return False - - def aspirate(self, volume: float, detection: bool = False) -> bool: - """ - 抽吸液体 - - Args: - volume: 抽吸体积(微升) - detection: 是否开启液体检测 - - Returns: - bool: 抽吸是否成功 - """ - try: - if not self.is_initialized: - raise SOPADeviceError("设备未初始化") - - vol_int = int(volume) - logger.info(f"抽吸液体: {vol_int}ul, 检测: {detection}") - - # 构建命令 - cmd_parts = [] - cmd_parts.append(f"a{self.config.acceleration}") - cmd_parts.append(f"b{self.config.start_speed}") - cmd_parts.append(f"c{self.config.cutoff_speed}") - cmd_parts.append(f"s{self.config.max_speed}") - - if detection: - cmd_parts.append("f1") # 开启检测 - - cmd_parts.append(f"P{vol_int}") - - if detection: - cmd_parts.append("f0") # 关闭检测 - - cmd_parts.append("E") - - command = "".join(cmd_parts) - self._send_command(command) - - # 等待操作完成 - time.sleep(max(1.0, vol_int / 100.0)) - - # 检查状态 - status = self.get_status() - if status == SOPAStatusCode.NO_ERROR: - self._current_position += vol_int - logger.info(f"抽吸成功: {vol_int}ul") - return True - elif status == SOPAStatusCode.AIR_ASPIRATE: - logger.warning("检测到空吸") - return False - elif status == SOPAStatusCode.NEEDLE_BLOCK: - logger.error("检测到堵针") - return False - else: - logger.error(f"抽吸失败,状态码: {status}") - return False - - except Exception as e: - logger.error(f"抽吸失败: {str(e)}") - return False - - def dispense(self, volume: float, detection: bool = False) -> bool: - """ - 分配液体 - - Args: - volume: 分配体积(微升) - detection: 是否开启液体检测 - - Returns: - bool: 分配是否成功 - """ - try: - if not self.is_initialized: - raise SOPADeviceError("设备未初始化") - - vol_int = int(volume) - logger.info(f"分配液体: {vol_int}ul, 检测: {detection}") - - # 构建命令 - cmd_parts = [] - cmd_parts.append(f"a{self.config.acceleration}") - cmd_parts.append(f"b{self.config.start_speed}") - cmd_parts.append(f"c{self.config.cutoff_speed}") - cmd_parts.append(f"s{self.config.max_speed}") - - if detection: - cmd_parts.append("f1") # 开启检测 - - cmd_parts.append(f"D{vol_int}") - - if detection: - cmd_parts.append("f0") # 关闭检测 - - cmd_parts.append("E") - - command = "".join(cmd_parts) - self._send_command(command) - - # 等待操作完成 - time.sleep(max(1.0, vol_int / 200.0)) - - # 检查状态 - status = self.get_status() - if status == SOPAStatusCode.NO_ERROR: - self._current_position -= vol_int - logger.info(f"分配成功: {vol_int}ul") - return True - else: - logger.error(f"分配失败,状态码: {status}") - return False - - except Exception as e: - logger.error(f"分配失败: {str(e)}") - return False - - # ==================== 液位检测方法 ==================== - - def liquid_level_detection(self, sensitivity: int = None) -> bool: - """ - 执行液位检测 - - Args: - sensitivity: 检测灵敏度 (3~40) - - Returns: - bool: 检测是否成功 - """ - try: - if not self.is_initialized: - raise SOPADeviceError("设备未初始化") - - sens = sensitivity or self.config.lld_sensitivity - - if self.config.detection_mode == DetectionMode.PRESSURE: - # 压力式液面检测 - command = f"m0k{self.config.lld_speed}L{sens}E" - else: - # 电容式液面检测 - command = f"m1L{sens}E" - - logger.info(f"执行液位检测, 模式: {self.config.detection_mode.name}, 灵敏度: {sens}") - - self._send_command(command) - time.sleep(2.0) - - # 检查检测结果 - status = self.get_status() - if status == SOPAStatusCode.NO_ERROR: - logger.info("液位检测成功") - return True - elif status == SOPAStatusCode.LLD_FAULT: - logger.error("液位检测故障") - return False - else: - logger.warning(f"液位检测异常,状态码: {status}") - return False - - except Exception as e: - logger.error(f"液位检测失败: {str(e)}") - return False - - # ==================== 参数设置方法 ==================== - - def set_max_speed(self, speed: int) -> bool: - """设置最高速度 (0.1ul/秒为单位)""" - try: - self._send_command(f"s{speed}E") - self.config.max_speed = speed - logger.debug(f"设置最高速度: {speed} (0.1ul/秒)") - return True - except Exception as e: - logger.error(f"设置最高速度失败: {str(e)}") - return False - - def set_start_speed(self, speed: int) -> bool: - """设置启动速度 (0.1ul/秒为单位)""" - try: - self._send_command(f"b{speed}E") - self.config.start_speed = speed - logger.debug(f"设置启动速度: {speed} (0.1ul/秒)") - return True - except Exception as e: - logger.error(f"设置启动速度失败: {str(e)}") - return False - - def set_cutoff_speed(self, speed: int) -> bool: - """设置断流速度 (0.1ul/秒为单位)""" - try: - self._send_command(f"c{speed}E") - self.config.cutoff_speed = speed - logger.debug(f"设置断流速度: {speed} (0.1ul/秒)") - return True - except Exception as e: - logger.error(f"设置断流速度失败: {str(e)}") - return False - - def set_acceleration(self, accel: int) -> bool: - """设置加速度""" - try: - self._send_command(f"a{accel}E") - self.config.acceleration = accel - logger.debug(f"设置加速度: {accel}") - return True - except Exception as e: - logger.error(f"设置加速度失败: {str(e)}") - return False - - def set_empty_threshold(self, threshold: int) -> bool: - """设置空吸门限""" - try: - self._send_command(f"${threshold}E") - self.config.empty_threshold = threshold - logger.debug(f"设置空吸门限: {threshold}") - return True - except Exception as e: - logger.error(f"设置空吸门限失败: {str(e)}") - return False - - def set_foam_threshold(self, threshold: int) -> bool: - """设置泡沫门限""" - try: - self._send_command(f"!{threshold}E") - self.config.foam_threshold = threshold - logger.debug(f"设置泡沫门限: {threshold}") - return True - except Exception as e: - logger.error(f"设置泡沫门限失败: {str(e)}") - return False - - def set_block_threshold(self, threshold: int) -> bool: - """设置堵塞门限""" - try: - self._send_command(f"%{threshold}E") - self.config.block_threshold = threshold - logger.debug(f"设置堵塞门限: {threshold}") - return True - except Exception as e: - logger.error(f"设置堵塞门限失败: {str(e)}") - return False - - def set_tip_volume(self, volume: int) -> bool: - """设置吸头容量""" - try: - self._send_command(f"C{volume}E") - self.config.tip_volume = volume - logger.debug(f"设置吸头容量: {volume}ul") - return True - except Exception as e: - logger.error(f"设置吸头容量失败: {str(e)}") - return False - - def set_calibration_factor(self, factor: float) -> bool: - """设置校准系数""" - try: - self._send_command(f"j{factor}E") - self.config.calibration_factor = factor - logger.debug(f"设置校准系数: {factor}") - return True - except Exception as e: - logger.error(f"设置校准系数失败: {str(e)}") - return False - - def set_detection_mode(self, mode: DetectionMode) -> bool: - """设置液位检测模式""" - try: - self._send_command(f"m{mode.value}E") - self.config.detection_mode = mode - logger.debug(f"设置检测模式: {mode.name}") - return True - except Exception as e: - logger.error(f"设置检测模式失败: {str(e)}") - return False - - def set_lld_speed(self, speed: int) -> bool: - """设置液位检测速度""" - try: - if 100 <= speed <= 2000: - self._send_command(f"k{speed}E") - self.config.lld_speed = speed - logger.debug(f"设置检测速度: {speed}") - return True - else: - logger.error("检测速度超出范围 (100~2000)") - return False - except Exception as e: - logger.error(f"设置检测速度失败: {str(e)}") - return False - - # ==================== 状态查询方法 ==================== - - def get_status(self) -> SOPAStatusCode: - """ - 获取设备状态 - - Returns: - SOPAStatusCode: 当前状态码 - """ - try: - response = self._send_query("Q") - if response and len(response) > 8: - # 解析状态字节 - status_char = response[8] if len(response) > 8 else '0' - try: - status_code = int(status_char, 16) if status_char.isdigit() or status_char.lower() in 'abcdef' else 0 - self._last_status = SOPAStatusCode(status_code) - except ValueError: - self._last_status = SOPAStatusCode.NO_ERROR - - return self._last_status - except Exception as e: - logger.error(f"获取状态失败: {str(e)}") - - return SOPAStatusCode.NO_ERROR - - def get_firmware_version(self) -> Optional[str]: - """ - 获取固件版本信息 - 处理SOPA移液器的双响应帧格式 - - Returns: - Optional[str]: 固件版本字符串,获取失败返回None - """ - try: - if not self.is_connected: - logger.debug("设备未连接,无法查询版本") - return "设备未连接" - - # 清空串口缓冲区,避免残留数据干扰 - if self.serial_port and self.serial_port.in_waiting > 0: - logger.debug(f"清空缓冲区中的 {self.serial_port.in_waiting} 字节数据") - self.serial_port.reset_input_buffer() - - # 发送版本查询命令 - 使用VE命令 - command = self._build_command("VE") - logger.debug(f"发送版本查询命令: {command}") - self.serial_port.write(command) - - # 等待响应 - time.sleep(0.3) # 增加等待时间 - - # 读取所有可用数据 - all_data = b'' - timeout_count = 0 - max_timeout = 15 # 增加最大等待时间到1.5秒 - - while timeout_count < max_timeout: - if self.serial_port.in_waiting > 0: - data = self.serial_port.read(self.serial_port.in_waiting) - all_data += data - logger.debug(f"接收到 {len(data)} 字节数据: {data.hex().upper()}") - timeout_count = 0 # 重置超时计数 - else: - time.sleep(0.1) - timeout_count += 1 - - # 检查是否收到完整的双响应帧 - if len(all_data) >= 26: # 两个13字节的响应帧 - logger.debug("收到完整的双响应帧") - break - elif len(all_data) >= 13: # 至少一个响应帧 - # 继续等待一段时间看是否有第二个帧 - if timeout_count > 5: # 等待0.5秒后如果没有更多数据就停止 - logger.debug("只收到单响应帧") - break - - logger.debug(f"总共接收到 {len(all_data)} 字节数据: {all_data.hex().upper()}") - - if len(all_data) < 13: - logger.warning("接收到的数据不足一个完整响应帧") - return "版本信息不可用" - - # 解析响应数据 - version_info = self._parse_version_response(all_data) - logger.info(f"解析得到版本信息: {version_info}") - return version_info - - except Exception as e: - logger.error(f"获取固件版本失败: {str(e)}") - return "版本信息不可用" - - def _parse_version_response(self, data: bytes) -> str: - """ - 解析版本响应数据 - - Args: - data: 原始响应数据 - - Returns: - str: 解析后的版本信息 - """ - try: - # 将数据转换为十六进制字符串用于调试 - hex_data = data.hex().upper() - logger.debug(f"收到版本响应数据: {hex_data}") - - # 查找响应帧的起始位置 - responses = [] - i = 0 - while i < len(data) - 12: - # 查找帧头 0x2F (/) - if data[i] == 0x2F: - # 检查是否是完整的13字节帧 - if i + 12 < len(data) and data[i + 11] == 0x45: # 尾码 E - frame = data[i:i+13] - responses.append(frame) - i += 13 - else: - i += 1 - else: - i += 1 - - if len(responses) < 2: - # 如果只有一个响应帧,尝试解析 - if len(responses) == 1: - return self._extract_version_from_frame(responses[0]) - else: - return f"响应格式异常: {hex_data}" - - # 解析第二个响应帧(通常包含版本信息) - version_frame = responses[1] - return self._extract_version_from_frame(version_frame) - - except Exception as e: - logger.error(f"解析版本响应失败: {str(e)}") - return f"解析失败: {data.hex().upper()}" - - def _extract_version_from_frame(self, frame: bytes) -> str: - """ - 从响应帧中提取版本信息 - - Args: - frame: 13字节的响应帧 - - Returns: - str: 版本信息字符串 - """ - try: - # 帧格式: 头码(1) + 地址(1) + 数据(9) + 尾码(1) + 校验和(1) - if len(frame) != 13: - return f"帧长度错误: {frame.hex().upper()}" - - # 提取数据部分 (索引2-10,共9字节) - data_part = frame[2:11] - - # 尝试不同的解析方法 - version_candidates = [] - - # 方法1: 查找可打印的ASCII字符 - ascii_chars = [] - for byte in data_part: - if 32 <= byte <= 126: # 可打印ASCII范围 - ascii_chars.append(chr(byte)) - - if ascii_chars: - version_candidates.append(''.join(ascii_chars)) - - # 方法2: 解析为版本号格式 (如果前几个字节是版本信息) - if len(data_part) >= 3: - # 检查是否是 V.x.y 格式 - if data_part[0] == 0x56: # 'V' - version_str = f"V{data_part[1]}.{data_part[2]}" - version_candidates.append(version_str) - - # 方法3: 十六进制表示 - hex_version = ' '.join(f'{b:02X}' for b in data_part) - version_candidates.append(f"HEX: {hex_version}") - - # 返回最合理的版本信息 - for candidate in version_candidates: - if candidate and len(candidate.strip()) > 1: - return candidate.strip() - - return f"原始数据: {frame.hex().upper()}" - - except Exception as e: - logger.error(f"提取版本信息失败: {str(e)}") - return f"提取失败: {frame.hex().upper()}" - - def get_current_position(self) -> float: - """ - 获取当前位置 - - Returns: - float: 当前位置 (微升) - """ - try: - response = self._send_query("Q18") - if response and len(response) > 10: - # 解析位置信息 - pos_str = response[8:14].strip() - try: - self._current_position = int(pos_str) - except ValueError: - pass - except Exception as e: - logger.error(f"获取位置失败: {str(e)}") - - return self._current_position - - def get_device_info(self) -> Dict[str, Any]: - """ - 获取设备完整信息 - - Returns: - Dict[str, Any]: 设备信息字典 - """ - info = { - 'firmware_version': self.get_firmware_version(), - 'current_position': self.get_current_position(), - 'tip_present': self.get_tip_status(), - 'status': self.get_status(), - 'is_connected': self.is_connected, - 'is_initialized': self.is_initialized, - 'config': { - 'address': self.config.address, - 'baudrate': self.config.baudrate, - 'max_speed': self.config.max_speed, - 'tip_volume': self.config.tip_volume, - 'detection_mode': self.config.detection_mode.name - } - } - - return info - - # ==================== 高级操作方法 ==================== - - def transfer_liquid(self, source_volume: float, dispense_volume: float = None, - with_detection: bool = True, pre_wet: bool = False) -> bool: - """ - 完整的液体转移操作 - - Args: - source_volume: 从源容器抽吸的体积 - dispense_volume: 分配到目标容器的体积(默认等于抽吸体积) - with_detection: 是否使用液体检测 - pre_wet: 是否进行预润湿 - - Returns: - bool: 操作是否成功 - """ - try: - if not self.is_initialized: - raise SOPADeviceError("设备未初始化") - - dispense_volume = dispense_volume or source_volume - - logger.info(f"开始液体转移: 抽吸{source_volume}ul -> 分配{dispense_volume}ul") - - # 预润湿(如果需要) - if pre_wet: - logger.info("执行预润湿操作") - if not self.aspirate(source_volume * 0.1, with_detection): - return False - if not self.dispense(source_volume * 0.1): - return False - - # 执行液位检测(如果启用) - if with_detection: - if not self.liquid_level_detection(): - logger.warning("液位检测失败,继续执行") - - # 抽吸液体 - if not self.aspirate(source_volume, with_detection): - logger.error("抽吸失败") - return False - - # 可选的延时 - time.sleep(0.5) - - # 分配液体 - if not self.dispense(dispense_volume, with_detection): - logger.error("分配失败") - return False - - logger.info("液体转移完成") - return True - - except Exception as e: - logger.error(f"液体转移失败: {str(e)}") - return False - - @contextmanager - def batch_operation(self): - """批量操作上下文管理器""" - logger.info("开始批量操作") - try: - yield self - finally: - logger.info("批量操作完成") - - def reset_to_home(self) -> bool: - """回到初始位置""" - return self.move_absolute(0) - - def emergency_stop(self): - """紧急停止""" - try: - if self.serial_port and self.serial_port.is_open: - # 发送停止命令(如果协议支持) - self.serial_port.write(b'\x03') # Ctrl+C - logger.warning("执行紧急停止") - except Exception as e: - logger.error(f"紧急停止失败: {str(e)}") - - def __enter__(self): - """上下文管理器入口""" - if not self.is_connected: - self.connect() - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - """上下文管理器出口""" - self.disconnect() - - def __del__(self): - """析构函数""" - self.disconnect() - - -# ==================== 工厂函数和便利方法 ==================== - -def create_sopa_pipette(port: str = "/dev/ttyUSB0", address: int = 1, - baudrate: int = 115200, **kwargs) -> SOPAPipette: - """ - 创建SOPA移液器实例的便利函数 - - Args: - port: 串口端口 - address: RS485地址 - baudrate: 波特率 - **kwargs: 其他配置参数 - - Returns: - SOPAPipette: 移液器实例 - """ - config = SOPAConfig( - port=port, - address=address, - baudrate=baudrate, - **kwargs - ) - - return SOPAPipette(config) diff --git a/unilabos/devices/laiyu_liquid/drivers/xyz_stepper_driver.py b/unilabos/devices/laiyu_liquid/drivers/xyz_stepper_driver.py deleted file mode 100644 index 146cbb4e..00000000 --- a/unilabos/devices/laiyu_liquid/drivers/xyz_stepper_driver.py +++ /dev/null @@ -1,663 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -XYZ三轴步进电机B系列驱动程序 -支持RS485通信,Modbus协议 -""" - -import serial -import struct -import time -import logging -from typing import Optional, Tuple, Dict, Any -from enum import Enum -from dataclasses import dataclass - -# 配置日志 -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -class MotorAxis(Enum): - """电机轴枚举""" - X = 1 - Y = 2 - Z = 3 - - -class MotorStatus(Enum): - """电机状态枚举""" - STANDBY = 0x0000 # 待机/到位 - RUNNING = 0x0001 # 运行中 - COLLISION_STOP = 0x0002 # 碰撞停 - FORWARD_LIMIT_STOP = 0x0003 # 正光电停 - REVERSE_LIMIT_STOP = 0x0004 # 反光电停 - - -class ModbusFunction(Enum): - """Modbus功能码""" - READ_HOLDING_REGISTERS = 0x03 - WRITE_SINGLE_REGISTER = 0x06 - WRITE_MULTIPLE_REGISTERS = 0x10 - - -@dataclass -class MotorPosition: - """电机位置信息""" - steps: int - speed: int - current: int - status: MotorStatus - - -class ModbusException(Exception): - """Modbus通信异常""" - pass - - -class StepperMotorDriver: - """步进电机驱动器基类""" - - # 寄存器地址常量 - REG_STATUS = 0x00 - REG_POSITION_HIGH = 0x01 - REG_POSITION_LOW = 0x02 - REG_ACTUAL_SPEED = 0x03 - REG_EMERGENCY_STOP = 0x04 - REG_CURRENT = 0x05 - REG_ENABLE = 0x06 - REG_PWM_OUTPUT = 0x07 - REG_ZERO_SINGLE = 0x0E - REG_ZERO_COMMAND = 0x0F - - # 位置模式寄存器 - REG_TARGET_POSITION_HIGH = 0x10 - REG_TARGET_POSITION_LOW = 0x11 - REG_POSITION_SPEED = 0x13 - REG_POSITION_ACCELERATION = 0x14 - REG_POSITION_PRECISION = 0x15 - - # 速度模式寄存器 - REG_SPEED_MODE_SPEED = 0x61 - REG_SPEED_MODE_ACCELERATION = 0x62 - - # 设备参数寄存器 - REG_DEVICE_ADDRESS = 0xE0 - REG_DEFAULT_SPEED = 0xE7 - REG_DEFAULT_ACCELERATION = 0xE8 - - def __init__(self, port: str, baudrate: int = 115200, timeout: float = 1.0): - """ - 初始化步进电机驱动器 - - Args: - port: 串口端口名 - baudrate: 波特率 - timeout: 通信超时时间 - """ - self.port = port - self.baudrate = baudrate - self.timeout = timeout - self.serial_conn: Optional[serial.Serial] = None - - def connect(self) -> bool: - """ - 建立串口连接 - - Returns: - 连接是否成功 - """ - try: - self.serial_conn = serial.Serial( - port=self.port, - baudrate=self.baudrate, - bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - timeout=self.timeout - ) - logger.info(f"已连接到串口: {self.port}") - return True - except Exception as e: - logger.error(f"串口连接失败: {e}") - return False - - def disconnect(self) -> None: - """关闭串口连接""" - if self.serial_conn and self.serial_conn.is_open: - self.serial_conn.close() - logger.info("串口连接已关闭") - - def __enter__(self): - """上下文管理器入口""" - if self.connect(): - return self - raise ModbusException("无法建立串口连接") - - def __exit__(self, exc_type, exc_val, exc_tb): - """上下文管理器出口""" - self.disconnect() - - @staticmethod - def calculate_crc(data: bytes) -> bytes: - """ - 计算Modbus CRC校验码 - - Args: - data: 待校验的数据 - - Returns: - CRC校验码 (2字节) - """ - crc = 0xFFFF - for byte in data: - crc ^= byte - for _ in range(8): - if crc & 0x0001: - crc >>= 1 - crc ^= 0xA001 - else: - crc >>= 1 - return struct.pack(' bytes: - """ - 发送Modbus命令并接收响应 - - Args: - slave_addr: 从站地址 - data: 命令数据 - - Returns: - 响应数据 - - Raises: - ModbusException: 通信异常 - """ - if not self.serial_conn or not self.serial_conn.is_open: - raise ModbusException("串口未连接") - - # 构建完整命令 - command = bytes([slave_addr]) + data - crc = self.calculate_crc(command) - full_command = command + crc - - # 清空接收缓冲区 - self.serial_conn.reset_input_buffer() - - # 发送命令 - self.serial_conn.write(full_command) - logger.debug(f"发送命令: {' '.join(f'{b:02X}' for b in full_command)}") - - # 等待响应 - time.sleep(0.01) # 短暂延时 - - # 读取响应 - response = self.serial_conn.read(256) # 最大读取256字节 - if not response: - raise ModbusException("未收到响应") - - logger.debug(f"接收响应: {' '.join(f'{b:02X}' for b in response)}") - - # 验证CRC - if len(response) < 3: - raise ModbusException("响应数据长度不足") - - data_part = response[:-2] - received_crc = response[-2:] - calculated_crc = self.calculate_crc(data_part) - - if received_crc != calculated_crc: - raise ModbusException("CRC校验失败") - - return response - - def read_registers(self, slave_addr: int, start_addr: int, count: int) -> list: - """ - 读取保持寄存器 - - Args: - slave_addr: 从站地址 - start_addr: 起始地址 - count: 寄存器数量 - - Returns: - 寄存器值列表 - """ - data = struct.pack('>BHH', ModbusFunction.READ_HOLDING_REGISTERS.value, start_addr, count) - response = self._send_command(slave_addr, data) - - if len(response) < 5: - raise ModbusException("响应长度不足") - - if response[1] != ModbusFunction.READ_HOLDING_REGISTERS.value: - raise ModbusException(f"功能码错误: {response[1]:02X}") - - byte_count = response[2] - values = [] - for i in range(0, byte_count, 2): - value = struct.unpack('>H', response[3+i:5+i])[0] - values.append(value) - - return values - - def write_single_register(self, slave_addr: int, addr: int, value: int) -> bool: - """ - 写入单个寄存器 - - Args: - slave_addr: 从站地址 - addr: 寄存器地址 - value: 寄存器值 - - Returns: - 写入是否成功 - """ - data = struct.pack('>BHH', ModbusFunction.WRITE_SINGLE_REGISTER.value, addr, value) - response = self._send_command(slave_addr, data) - - return len(response) >= 8 and response[1] == ModbusFunction.WRITE_SINGLE_REGISTER.value - - def write_multiple_registers(self, slave_addr: int, start_addr: int, values: list) -> bool: - """ - 写入多个寄存器 - - Args: - slave_addr: 从站地址 - start_addr: 起始地址 - values: 寄存器值列表 - - Returns: - 写入是否成功 - """ - byte_count = len(values) * 2 - data = struct.pack('>BHHB', ModbusFunction.WRITE_MULTIPLE_REGISTERS.value, - start_addr, len(values), byte_count) - - for value in values: - data += struct.pack('>H', value) - - response = self._send_command(slave_addr, data) - - return len(response) >= 8 and response[1] == ModbusFunction.WRITE_MULTIPLE_REGISTERS.value - - -class XYZStepperController(StepperMotorDriver): - """XYZ三轴步进电机控制器""" - - # 电机配置常量 - STEPS_PER_REVOLUTION = 16384 # 每圈步数 - - def __init__(self, port: str, baudrate: int = 115200, timeout: float = 1.0): - """ - 初始化XYZ三轴步进电机控制器 - - Args: - port: 串口端口名 - baudrate: 波特率 - timeout: 通信超时时间 - """ - super().__init__(port, baudrate, timeout) - self.axis_addresses = { - MotorAxis.X: 1, - MotorAxis.Y: 2, - MotorAxis.Z: 3 - } - - def degrees_to_steps(self, degrees: float) -> int: - """ - 将角度转换为步数 - - Args: - degrees: 角度值 - - Returns: - 对应的步数 - """ - return int(degrees * self.STEPS_PER_REVOLUTION / 360.0) - - def steps_to_degrees(self, steps: int) -> float: - """ - 将步数转换为角度 - - Args: - steps: 步数 - - Returns: - 对应的角度值 - """ - return steps * 360.0 / self.STEPS_PER_REVOLUTION - - def revolutions_to_steps(self, revolutions: float) -> int: - """ - 将圈数转换为步数 - - Args: - revolutions: 圈数 - - Returns: - 对应的步数 - """ - return int(revolutions * self.STEPS_PER_REVOLUTION) - - def steps_to_revolutions(self, steps: int) -> float: - """ - 将步数转换为圈数 - - Args: - steps: 步数 - - Returns: - 对应的圈数 - """ - return steps / self.STEPS_PER_REVOLUTION - - def get_motor_status(self, axis: MotorAxis) -> MotorPosition: - """ - 获取电机状态信息 - - Args: - axis: 电机轴 - - Returns: - 电机位置信息 - """ - addr = self.axis_addresses[axis] - - # 读取状态、位置、速度、电流 - values = self.read_registers(addr, self.REG_STATUS, 6) - - status = MotorStatus(values[0]) - position_high = values[1] - position_low = values[2] - speed = values[3] - current = values[5] - - # 合并32位位置 - position = (position_high << 16) | position_low - # 处理有符号数 - if position > 0x7FFFFFFF: - position -= 0x100000000 - - return MotorPosition(position, speed, current, status) - - def emergency_stop(self, axis: MotorAxis) -> bool: - """ - 紧急停止电机 - - Args: - axis: 电机轴 - - Returns: - 操作是否成功 - """ - addr = self.axis_addresses[axis] - return self.write_single_register(addr, self.REG_EMERGENCY_STOP, 0x0000) - - def enable_motor(self, axis: MotorAxis, enable: bool = True) -> bool: - """ - 使能/失能电机 - - Args: - axis: 电机轴 - enable: True为使能,False为失能 - - Returns: - 操作是否成功 - """ - addr = self.axis_addresses[axis] - value = 0x0001 if enable else 0x0000 - return self.write_single_register(addr, self.REG_ENABLE, value) - - def move_to_position(self, axis: MotorAxis, position: int, speed: int = 5000, - acceleration: int = 1000, precision: int = 100) -> bool: - """ - 移动到指定位置 - - Args: - axis: 电机轴 - position: 目标位置(步数) - speed: 运行速度(rpm) - acceleration: 加速度(rpm/s) - precision: 到位精度 - - Returns: - 操作是否成功 - """ - addr = self.axis_addresses[axis] - - # 处理32位位置 - if position < 0: - position += 0x100000000 - - position_high = (position >> 16) & 0xFFFF - position_low = position & 0xFFFF - - values = [ - position_high, # 目标位置高位 - position_low, # 目标位置低位 - 0x0000, # 保留 - speed, # 速度 - acceleration, # 加速度 - precision # 精度 - ] - - return self.write_multiple_registers(addr, self.REG_TARGET_POSITION_HIGH, values) - - def set_speed_mode(self, axis: MotorAxis, speed: int, acceleration: int = 1000) -> bool: - """ - 设置速度模式运行 - - Args: - axis: 电机轴 - speed: 运行速度(rpm),正值正转,负值反转 - acceleration: 加速度(rpm/s) - - Returns: - 操作是否成功 - """ - addr = self.axis_addresses[axis] - - # 处理负数 - if speed < 0: - speed = 0x10000 + speed # 补码表示 - - values = [0x0000, speed, acceleration, 0x0000] - - return self.write_multiple_registers(addr, 0x60, values) - - def home_axis(self, axis: MotorAxis) -> bool: - """ - 轴归零操作 - - Args: - axis: 电机轴 - - Returns: - 操作是否成功 - """ - addr = self.axis_addresses[axis] - return self.write_single_register(addr, self.REG_ZERO_SINGLE, 0x0001) - - def wait_for_completion(self, axis: MotorAxis, timeout: float = 30.0) -> bool: - """ - 等待电机运动完成 - - Args: - axis: 电机轴 - timeout: 超时时间(秒) - - Returns: - 是否在超时前完成 - """ - start_time = time.time() - - while time.time() - start_time < timeout: - status = self.get_motor_status(axis) - if status.status == MotorStatus.STANDBY: - return True - time.sleep(0.1) - - logger.warning(f"{axis.name}轴运动超时") - return False - - def move_xyz(self, x: Optional[int] = None, y: Optional[int] = None, z: Optional[int] = None, - speed: int = 5000, acceleration: int = 1000) -> Dict[MotorAxis, bool]: - """ - 同时控制XYZ轴移动 - - Args: - x: X轴目标位置 - y: Y轴目标位置 - z: Z轴目标位置 - speed: 运行速度 - acceleration: 加速度 - - Returns: - 各轴操作结果字典 - """ - results = {} - - if x is not None: - results[MotorAxis.X] = self.move_to_position(MotorAxis.X, x, speed, acceleration) - - if y is not None: - results[MotorAxis.Y] = self.move_to_position(MotorAxis.Y, y, speed, acceleration) - - if z is not None: - results[MotorAxis.Z] = self.move_to_position(MotorAxis.Z, z, speed, acceleration) - - return results - - def move_xyz_degrees(self, x_deg: Optional[float] = None, y_deg: Optional[float] = None, - z_deg: Optional[float] = None, speed: int = 5000, - acceleration: int = 1000) -> Dict[MotorAxis, bool]: - """ - 使用角度值同时移动多个轴到指定位置 - - Args: - x_deg: X轴目标角度(度) - y_deg: Y轴目标角度(度) - z_deg: Z轴目标角度(度) - speed: 移动速度 - acceleration: 加速度 - - Returns: - 各轴移动操作结果 - """ - # 将角度转换为步数 - x_steps = self.degrees_to_steps(x_deg) if x_deg is not None else None - y_steps = self.degrees_to_steps(y_deg) if y_deg is not None else None - z_steps = self.degrees_to_steps(z_deg) if z_deg is not None else None - - return self.move_xyz(x_steps, y_steps, z_steps, speed, acceleration) - - def move_xyz_revolutions(self, x_rev: Optional[float] = None, y_rev: Optional[float] = None, - z_rev: Optional[float] = None, speed: int = 5000, - acceleration: int = 1000) -> Dict[MotorAxis, bool]: - """ - 使用圈数值同时移动多个轴到指定位置 - - Args: - x_rev: X轴目标圈数 - y_rev: Y轴目标圈数 - z_rev: Z轴目标圈数 - speed: 移动速度 - acceleration: 加速度 - - Returns: - 各轴移动操作结果 - """ - # 将圈数转换为步数 - x_steps = self.revolutions_to_steps(x_rev) if x_rev is not None else None - y_steps = self.revolutions_to_steps(y_rev) if y_rev is not None else None - z_steps = self.revolutions_to_steps(z_rev) if z_rev is not None else None - - return self.move_xyz(x_steps, y_steps, z_steps, speed, acceleration) - - def move_to_position_degrees(self, axis: MotorAxis, degrees: float, speed: int = 5000, - acceleration: int = 1000, precision: int = 100) -> bool: - """ - 使用角度值移动单个轴到指定位置 - - Args: - axis: 电机轴 - degrees: 目标角度(度) - speed: 移动速度 - acceleration: 加速度 - precision: 精度 - - Returns: - 移动操作是否成功 - """ - steps = self.degrees_to_steps(degrees) - return self.move_to_position(axis, steps, speed, acceleration, precision) - - def move_to_position_revolutions(self, axis: MotorAxis, revolutions: float, speed: int = 5000, - acceleration: int = 1000, precision: int = 100) -> bool: - """ - 使用圈数值移动单个轴到指定位置 - - Args: - axis: 电机轴 - revolutions: 目标圈数 - speed: 移动速度 - acceleration: 加速度 - precision: 精度 - - Returns: - 移动操作是否成功 - """ - steps = self.revolutions_to_steps(revolutions) - return self.move_to_position(axis, steps, speed, acceleration, precision) - - def stop_all_axes(self) -> Dict[MotorAxis, bool]: - """ - 紧急停止所有轴 - - Returns: - 各轴停止结果字典 - """ - results = {} - for axis in MotorAxis: - results[axis] = self.emergency_stop(axis) - return results - - def enable_all_axes(self, enable: bool = True) -> Dict[MotorAxis, bool]: - """ - 使能/失能所有轴 - - Args: - enable: True为使能,False为失能 - - Returns: - 各轴操作结果字典 - """ - results = {} - for axis in MotorAxis: - results[axis] = self.enable_motor(axis, enable) - return results - - def get_all_positions(self) -> Dict[MotorAxis, MotorPosition]: - """ - 获取所有轴的位置信息 - - Returns: - 各轴位置信息字典 - """ - positions = {} - for axis in MotorAxis: - positions[axis] = self.get_motor_status(axis) - return positions - - def home_all_axes(self) -> Dict[MotorAxis, bool]: - """ - 所有轴归零 - - Returns: - 各轴归零结果字典 - """ - results = {} - for axis in MotorAxis: - results[axis] = self.home_axis(axis) - return results diff --git a/unilabos/devices/laiyu_liquid/tests/__init__.py b/unilabos/devices/laiyu_liquid/tests/__init__.py deleted file mode 100644 index 7ff58fe2..00000000 --- a/unilabos/devices/laiyu_liquid/tests/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -LaiYu液体处理设备测试模块 - -该模块包含LaiYu液体处理设备的测试用例: -- test_deck_config.py: 工作台配置测试 - -作者: UniLab团队 -版本: 2.0.0 -""" - -__all__ = [] \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid/tests/test_deck_config.py b/unilabos/devices/laiyu_liquid/tests/test_deck_config.py deleted file mode 100644 index 04688302..00000000 --- a/unilabos/devices/laiyu_liquid/tests/test_deck_config.py +++ /dev/null @@ -1,315 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -测试脚本:验证更新后的deck配置是否正常工作 -""" - -import sys -import os -import json - -# 添加项目根目录到Python路径 -project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -sys.path.insert(0, project_root) - -def test_config_loading(): - """测试配置文件加载功能""" - print("=" * 50) - print("测试配置文件加载功能") - print("=" * 50) - - try: - # 直接测试配置文件加载 - config_path = os.path.join(os.path.dirname(__file__), "controllers", "deckconfig.json") - fallback_path = os.path.join(os.path.dirname(__file__), "config", "deck.json") - - config = None - config_source = "" - - if os.path.exists(config_path): - with open(config_path, 'r', encoding='utf-8') as f: - config = json.load(f) - config_source = "config/deckconfig.json" - elif os.path.exists(fallback_path): - with open(fallback_path, 'r', encoding='utf-8') as f: - config = json.load(f) - config_source = "config/deck.json" - else: - print("❌ 配置文件不存在") - return False - - print(f"✅ 配置文件加载成功: {config_source}") - print(f" - 甲板尺寸: {config.get('size_x', 'N/A')} x {config.get('size_y', 'N/A')} x {config.get('size_z', 'N/A')}") - print(f" - 子模块数量: {len(config.get('children', []))}") - - # 检查各个模块是否存在 - modules = config.get('children', []) - module_types = [module.get('type') for module in modules] - module_names = [module.get('name') for module in modules] - - print(f" - 模块类型: {', '.join(set(filter(None, module_types)))}") - print(f" - 模块名称: {', '.join(filter(None, module_names))}") - - return config - except Exception as e: - print(f"❌ 配置文件加载失败: {e}") - return None - -def test_module_coordinates(config): - """测试各模块的坐标信息""" - print("\n" + "=" * 50) - print("测试模块坐标信息") - print("=" * 50) - - if not config: - print("❌ 配置为空,无法测试") - return False - - modules = config.get('children', []) - - for module in modules: - module_name = module.get('name', '未知模块') - module_type = module.get('type', '未知类型') - position = module.get('position', {}) - size = module.get('size', {}) - - print(f"\n模块: {module_name} ({module_type})") - print(f" - 位置: ({position.get('x', 0)}, {position.get('y', 0)}, {position.get('z', 0)})") - print(f" - 尺寸: {size.get('x', 0)} x {size.get('y', 0)} x {size.get('z', 0)}") - - # 检查孔位信息 - wells = module.get('wells', []) - if wells: - print(f" - 孔位数量: {len(wells)}") - - # 显示前几个和后几个孔位的坐标 - sample_wells = wells[:3] + wells[-3:] if len(wells) > 6 else wells - for well in sample_wells: - well_id = well.get('id', '未知') - well_pos = well.get('position', {}) - print(f" {well_id}: ({well_pos.get('x', 0)}, {well_pos.get('y', 0)}, {well_pos.get('z', 0)})") - else: - print(f" - 无孔位信息") - - return True - -def test_coordinate_ranges(config): - """测试坐标范围的合理性""" - print("\n" + "=" * 50) - print("测试坐标范围合理性") - print("=" * 50) - - if not config: - print("❌ 配置为空,无法测试") - return False - - deck_size = { - 'x': config.get('size_x', 340), - 'y': config.get('size_y', 250), - 'z': config.get('size_z', 160) - } - - print(f"甲板尺寸: {deck_size['x']} x {deck_size['y']} x {deck_size['z']}") - - modules = config.get('children', []) - all_coordinates = [] - - for module in modules: - module_name = module.get('name', '未知模块') - wells = module.get('wells', []) - - for well in wells: - well_pos = well.get('position', {}) - x, y, z = well_pos.get('x', 0), well_pos.get('y', 0), well_pos.get('z', 0) - all_coordinates.append((x, y, z, f"{module_name}:{well.get('id', '未知')}")) - - if not all_coordinates: - print("❌ 没有找到任何坐标信息") - return False - - # 计算坐标范围 - x_coords = [coord[0] for coord in all_coordinates] - y_coords = [coord[1] for coord in all_coordinates] - z_coords = [coord[2] for coord in all_coordinates] - - x_range = (min(x_coords), max(x_coords)) - y_range = (min(y_coords), max(y_coords)) - z_range = (min(z_coords), max(z_coords)) - - print(f"X坐标范围: {x_range[0]:.2f} ~ {x_range[1]:.2f}") - print(f"Y坐标范围: {y_range[0]:.2f} ~ {y_range[1]:.2f}") - print(f"Z坐标范围: {z_range[0]:.2f} ~ {z_range[1]:.2f}") - - # 检查是否超出甲板范围 - issues = [] - if x_range[1] > deck_size['x']: - issues.append(f"X坐标超出甲板范围: {x_range[1]} > {deck_size['x']}") - if y_range[1] > deck_size['y']: - issues.append(f"Y坐标超出甲板范围: {y_range[1]} > {deck_size['y']}") - if z_range[1] > deck_size['z']: - issues.append(f"Z坐标超出甲板范围: {z_range[1]} > {deck_size['z']}") - - if x_range[0] < 0: - issues.append(f"X坐标为负值: {x_range[0]}") - if y_range[0] < 0: - issues.append(f"Y坐标为负值: {y_range[0]}") - if z_range[0] < 0: - issues.append(f"Z坐标为负值: {z_range[0]}") - - if issues: - print("⚠️ 发现坐标问题:") - for issue in issues: - print(f" - {issue}") - return False - else: - print("✅ 所有坐标都在合理范围内") - return True - -def test_well_spacing(config): - """测试孔位间距的一致性""" - print("\n" + "=" * 50) - print("测试孔位间距一致性") - print("=" * 50) - - if not config: - print("❌ 配置为空,无法测试") - return False - - modules = config.get('children', []) - - for module in modules: - module_name = module.get('name', '未知模块') - module_type = module.get('type', '未知类型') - wells = module.get('wells', []) - - if len(wells) < 2: - continue - - print(f"\n模块: {module_name} ({module_type})") - - # 计算相邻孔位的间距 - spacings_x = [] - spacings_y = [] - - # 按行列排序孔位 - wells_by_row = {} - for well in wells: - well_id = well.get('id', '') - if len(well_id) >= 3: # 如A01格式 - row = well_id[0] - col = int(well_id[1:]) - if row not in wells_by_row: - wells_by_row[row] = {} - wells_by_row[row][col] = well - - # 计算同行相邻孔位的X间距 - for row, cols in wells_by_row.items(): - sorted_cols = sorted(cols.keys()) - for i in range(len(sorted_cols) - 1): - col1, col2 = sorted_cols[i], sorted_cols[i + 1] - if col2 == col1 + 1: # 相邻列 - pos1 = cols[col1].get('position', {}) - pos2 = cols[col2].get('position', {}) - spacing = abs(pos2.get('x', 0) - pos1.get('x', 0)) - spacings_x.append(spacing) - - # 计算同列相邻孔位的Y间距 - cols_by_row = {} - for well in wells: - well_id = well.get('id', '') - if len(well_id) >= 3: - row = ord(well_id[0]) - ord('A') - col = int(well_id[1:]) - if col not in cols_by_row: - cols_by_row[col] = {} - cols_by_row[col][row] = well - - for col, rows in cols_by_row.items(): - sorted_rows = sorted(rows.keys()) - for i in range(len(sorted_rows) - 1): - row1, row2 = sorted_rows[i], sorted_rows[i + 1] - if row2 == row1 + 1: # 相邻行 - pos1 = rows[row1].get('position', {}) - pos2 = rows[row2].get('position', {}) - spacing = abs(pos2.get('y', 0) - pos1.get('y', 0)) - spacings_y.append(spacing) - - # 检查间距一致性 - if spacings_x: - avg_x = sum(spacings_x) / len(spacings_x) - max_diff_x = max(abs(s - avg_x) for s in spacings_x) - print(f" - X方向平均间距: {avg_x:.2f}mm, 最大偏差: {max_diff_x:.2f}mm") - - if spacings_y: - avg_y = sum(spacings_y) / len(spacings_y) - max_diff_y = max(abs(s - avg_y) for s in spacings_y) - print(f" - Y方向平均间距: {avg_y:.2f}mm, 最大偏差: {max_diff_y:.2f}mm") - - return True - -def main(): - """主测试函数""" - print("LaiYu液体处理设备配置测试") - print("测试时间:", os.popen('date').read().strip()) - - # 运行所有测试 - tests = [ - ("配置文件加载", test_config_loading), - ] - - config = None - results = [] - - for test_name, test_func in tests: - try: - if test_name == "配置文件加载": - result = test_func() - config = result if result else None - results.append((test_name, bool(result))) - else: - result = test_func(config) - results.append((test_name, result)) - except Exception as e: - print(f"❌ 测试 {test_name} 执行失败: {e}") - results.append((test_name, False)) - - # 如果配置加载成功,运行其他测试 - if config: - additional_tests = [ - ("模块坐标信息", test_module_coordinates), - ("坐标范围合理性", test_coordinate_ranges), - ("孔位间距一致性", test_well_spacing) - ] - - for test_name, test_func in additional_tests: - try: - result = test_func(config) - results.append((test_name, result)) - except Exception as e: - print(f"❌ 测试 {test_name} 执行失败: {e}") - results.append((test_name, False)) - - # 输出测试总结 - print("\n" + "=" * 50) - print("测试总结") - print("=" * 50) - - passed = sum(1 for _, result in results if result) - total = len(results) - - for test_name, result in results: - status = "✅ 通过" if result else "❌ 失败" - print(f" {test_name}: {status}") - - print(f"\n总计: {passed}/{total} 个测试通过") - - if passed == total: - print("🎉 所有测试通过!配置更新成功。") - return True - else: - print("⚠️ 部分测试失败,需要进一步检查。") - return False - -if __name__ == "__main__": - success = main() - sys.exit(0 if success else 1) \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid_test/__init__.py b/unilabos/devices/laiyu_liquid_test/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/unilabos/devices/laiyu_liquid_test/driver_enable_move_test.py b/unilabos/devices/laiyu_liquid_test/driver_enable_move_test.py deleted file mode 100644 index a3c5797d..00000000 --- a/unilabos/devices/laiyu_liquid_test/driver_enable_move_test.py +++ /dev/null @@ -1,138 +0,0 @@ - -import os -import time -import json -import logging -from xyz_stepper_driver import ModbusRTUTransport, ModbusClient, XYZStepperController, MotorStatus - -# ========== 日志配置 ========== -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger("XYZ_Debug") - - -def create_controller(port: str = "/dev/ttyUSB1", baudrate: int = 115200) -> XYZStepperController: - """ - 初始化通信层与三轴控制器 - """ - logger.info(f"🔧 初始化控制器: {port} @ {baudrate}bps") - transport = ModbusRTUTransport(port=port, baudrate=baudrate) - transport.open() - client = ModbusClient(transport) - return XYZStepperController(client=client, port=port, baudrate=baudrate) - - -def load_existing_soft_zero(ctrl: XYZStepperController, path: str = "work_origin.json") -> bool: - """ - 如果已存在软零点文件则加载,否则返回 False - """ - if not os.path.exists(path): - logger.warning("⚠ 未找到已有软零点文件,将等待人工定义新零点。") - return False - - try: - with open(path, "r", encoding="utf-8") as f: - data = json.load(f) - origin = data.get("work_origin_steps", {}) - ctrl.work_origin_steps = origin - ctrl.is_homed = True - logger.info(f"✔ 已加载软零点文件:{path}") - logger.info(f"当前软零点步数: {origin}") - return True - except Exception as e: - logger.error(f"读取软零点文件失败: {e}") - return False - - -def test_enable_axis(ctrl: XYZStepperController): - """ - 依次使能 X / Y / Z 三轴 - """ - logger.info("=== 测试各轴使能 ===") - for axis in ["X", "Y", "Z"]: - try: - result = ctrl.enable(axis, True) - if result: - vals = ctrl.get_status(axis) - st = MotorStatus(vals[3]) - logger.info(f"{axis} 轴使能成功,当前状态: {st.name}") - else: - logger.error(f"{axis} 轴使能失败") - except Exception as e: - logger.error(f"{axis} 轴使能异常: {e}") - time.sleep(0.5) - - -def test_status_read(ctrl: XYZStepperController): - """ - 读取各轴当前状态(调试) - """ - logger.info("=== 当前各轴状态 ===") - for axis in ["X", "Y", "Z"]: - try: - vals = ctrl.get_status(axis) - st = MotorStatus(vals[3]) - logger.info( - f"{axis}: steps={vals[0]}, speed={vals[1]}, " - f"current={vals[2]}, status={st.name}" - ) - except Exception as e: - logger.error(f"获取 {axis} 状态失败: {e}") - time.sleep(0.2) - - -def redefine_soft_zero(ctrl: XYZStepperController): - """ - 手动重新定义软零点 - """ - logger.info("=== ⚙️ 重新定义软零点 ===") - ctrl.define_current_as_zero("work_origin.json") - logger.info("✅ 新软零点已写入 work_origin.json") - - -def test_soft_zero_move(ctrl: XYZStepperController): - """ - 以软零点为基准执行三轴运动测试 - """ - logger.info("=== 测试软零点相对运动 ===") - ctrl.move_xyz_work(x=100.0, y=100.0, z=40.0, speed=100, acc=800) - - for axis in ["X", "Y", "Z"]: - ctrl.wait_complete(axis) - - test_status_read(ctrl) - logger.info("✅ 软零点运动测试完成") - - -def main(): - ctrl = create_controller(port="/dev/ttyUSB1", baudrate=115200) - - try: - test_enable_axis(ctrl) - test_status_read(ctrl) - - # === 初始化或加载软零点 === - loaded = load_existing_soft_zero(ctrl) - if not loaded: - logger.info("👣 首次运行,定义软零点并保存。") - ctrl.define_current_as_zero("work_origin.json") - - # === 软零点回归动作 === - ctrl.return_to_work_origin() - - # === 可选软零点运动测试 === - # test_soft_zero_move(ctrl) - - except KeyboardInterrupt: - logger.info("🛑 手动中断退出") - - except Exception as e: - logger.exception(f"❌ 调试出错: {e}") - - finally: - if hasattr(ctrl.client, "transport"): - ctrl.client.transport.close() - logger.info("串口已安全关闭 ✅") - - -if __name__ == "__main__": - main() diff --git a/unilabos/devices/laiyu_liquid_test/driver_status_test.py b/unilabos/devices/laiyu_liquid_test/driver_status_test.py deleted file mode 100644 index f6960d5b..00000000 --- a/unilabos/devices/laiyu_liquid_test/driver_status_test.py +++ /dev/null @@ -1,58 +0,0 @@ - -import logging -from xyz_stepper_driver import ( - ModbusRTUTransport, - ModbusClient, - XYZStepperController, - MotorAxis, -) - -logger = logging.getLogger("XYZStepperCommTest") -logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") - - -def test_xyz_stepper_comm(): - """仅测试 Modbus 通信是否正常(并输出寄存器数据,不做电机运动)""" - port = "/dev/ttyUSB1" - baudrate = 115200 - timeout = 1.2 # 略长避免响应被截断 - - logger.info(f"尝试连接 Modbus 设备 {port} ...") - transport = ModbusRTUTransport(port, baudrate=baudrate, timeout=timeout) - transport.open() - - client = ModbusClient(transport) - ctrl = XYZStepperController(client) - - try: - logger.info("✅ 串口已打开,开始读取三个轴状态(打印寄存器内容) ...") - for axis in [MotorAxis.X, MotorAxis.Y, MotorAxis.Z]: - addr = ctrl.axis_addr[axis] - - try: - # # 在 get_status 前打印原始寄存器内容 - # regs = client.read_registers(addr, ctrl.REG_STATUS, 6) - # hex_regs = [f"0x{val:04X}" for val in regs] - # logger.info(f"[{axis.name}] 原始寄存器 ({len(regs)} 个): {regs} -> {hex_regs}") - - # 调用 get_status() 正常解析 - status = ctrl.get_status(axis) - logger.info( - f"[{axis.name}] ✅ 通信正常: steps={status.steps}, speed={status.speed}, " - f"current={status.current}, status={status.status.name}" - ) - - except Exception as e_axis: - logger.error(f"[{axis.name}] ❌ 通信失败: {e_axis}") - - - except Exception as e: - logger.error(f"❌ 通讯测试失败: {e}") - - finally: - transport.close() - logger.info("🔌 串口已关闭") - - -if __name__ == "__main__": - test_xyz_stepper_comm() diff --git a/unilabos/devices/laiyu_liquid_test/work_origin.json b/unilabos/devices/laiyu_liquid_test/work_origin.json deleted file mode 100644 index 935c3e3b..00000000 --- a/unilabos/devices/laiyu_liquid_test/work_origin.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "work_origin_steps": { - "x": 11799, - "y": 11476, - "z": 3312 - }, - "timestamp": "2025-11-04T15:31:09.802155" -} \ No newline at end of file diff --git a/unilabos/devices/laiyu_liquid_test/xyz_stepper_driver.py b/unilabos/devices/laiyu_liquid_test/xyz_stepper_driver.py deleted file mode 100644 index 6ad37ed7..00000000 --- a/unilabos/devices/laiyu_liquid_test/xyz_stepper_driver.py +++ /dev/null @@ -1,336 +0,0 @@ - -""" -XYZ 三轴步进电机驱动(统一字符串参数版) -基于 Modbus RTU 协议 -Author: Xiuyu Chen (Modified by Assistant) -""" - -import serial # type: ignore -import struct -import time -import logging -from enum import Enum -from dataclasses import dataclass -from typing import Optional, List, Dict - -# ========== 日志配置 ========== -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger("XYZStepper") - - -# ========== 层 1:Modbus RTU ========== -class ModbusException(Exception): - pass - - -class ModbusRTUTransport: - """底层串口通信层""" - - def __init__(self, port: str, baudrate: int = 115200, timeout: float = 1.2): - self.port = port - self.baudrate = baudrate - self.timeout = timeout - self.ser: Optional[serial.Serial] = None - - def open(self): - try: - self.ser = serial.Serial( - port=self.port, - baudrate=self.baudrate, - bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - timeout=0.02, - write_timeout=0.5, - ) - logger.info(f"[RTU] 串口连接成功: {self.port}") - except Exception as e: - raise ModbusException(f"无法打开串口 {self.port}: {e}") - - def close(self): - if self.ser and self.ser.is_open: - self.ser.close() - logger.info("[RTU] 串口已关闭") - - def send(self, frame: bytes): - if not self.ser or not self.ser.is_open: - raise ModbusException("串口未连接") - - self.ser.reset_input_buffer() - self.ser.write(frame) - self.ser.flush() - logger.debug(f"[TX] {frame.hex(' ').upper()}") - - def receive(self, expected_len: int) -> bytes: - if not self.ser or not self.ser.is_open: - raise ModbusException("串口未连接") - - start = time.time() - buf = bytearray() - while len(buf) < expected_len and (time.time() - start) < self.timeout: - chunk = self.ser.read(expected_len - len(buf)) - if chunk: - buf.extend(chunk) - else: - time.sleep(0.01) - return bytes(buf) - - -# ========== 层 2:Modbus 协议 ========== -class ModbusFunction(Enum): - READ_HOLDING_REGISTERS = 0x03 - WRITE_SINGLE_REGISTER = 0x06 - WRITE_MULTIPLE_REGISTERS = 0x10 - - -class ModbusClient: - """Modbus RTU 客户端""" - - def __init__(self, transport: ModbusRTUTransport): - self.transport = transport - - @staticmethod - def calc_crc(data: bytes) -> bytes: - crc = 0xFFFF - for b in data: - crc ^= b - for _ in range(8): - crc = (crc >> 1) ^ 0xA001 if crc & 1 else crc >> 1 - return struct.pack(" bytes: - frame = bytes([addr, func]) + payload - full = frame + self.calc_crc(frame) - self.transport.send(full) - time.sleep(0.01) - resp = self.transport.ser.read(256) - if not resp: - raise ModbusException("未收到响应") - - start = resp.find(bytes([addr, func])) - if start > 0: - resp = resp[start:] - if len(resp) < 5: - raise ModbusException(f"响应长度不足: {resp.hex(' ').upper()}") - if self.calc_crc(resp[:-2]) != resp[-2:]: - raise ModbusException("CRC 校验失败") - return resp - - def read_registers(self, addr: int, start: int, count: int) -> List[int]: - payload = struct.pack(">HH", start, count) - resp = self.send_request(addr, ModbusFunction.READ_HOLDING_REGISTERS.value, payload) - byte_count = resp[2] - regs = [struct.unpack(">H", resp[3 + i:5 + i])[0] for i in range(0, byte_count, 2)] - return regs - - def write_single_register(self, addr: int, reg: int, val: int) -> bool: - payload = struct.pack(">HH", reg, val) - resp = self.send_request(addr, ModbusFunction.WRITE_SINGLE_REGISTER.value, payload) - return resp[1] == ModbusFunction.WRITE_SINGLE_REGISTER.value - - def write_multiple_registers(self, addr: int, start: int, values: List[int]) -> bool: - byte_count = len(values) * 2 - payload = struct.pack(">HHB", start, len(values), byte_count) - payload += b"".join(struct.pack(">H", v & 0xFFFF) for v in values) - resp = self.send_request(addr, ModbusFunction.WRITE_MULTIPLE_REGISTERS.value, payload) - return resp[1] == ModbusFunction.WRITE_MULTIPLE_REGISTERS.value - - -# ========== 层 3:业务逻辑 ========== -class MotorAxis(Enum): - X = 1 - Y = 2 - Z = 3 - - -class MotorStatus(Enum): - STANDBY = 0 - RUNNING = 1 - COLLISION_STOP = 2 - FORWARD_LIMIT_STOP = 3 - REVERSE_LIMIT_STOP = 4 - - -@dataclass -class MotorPosition: - steps: int - speed: int - current: int - status: MotorStatus - - -class XYZStepperController: - """XYZ 三轴步进控制器(字符串接口版)""" - - STEPS_PER_REV = 16384 - LEAD_MM_X, LEAD_MM_Y, LEAD_MM_Z = 80.0, 80.0, 5.0 - STEPS_PER_MM_X = STEPS_PER_REV / LEAD_MM_X - STEPS_PER_MM_Y = STEPS_PER_REV / LEAD_MM_Y - STEPS_PER_MM_Z = STEPS_PER_REV / LEAD_MM_Z - - REG_STATUS, REG_POS_HIGH, REG_POS_LOW = 0x00, 0x01, 0x02 - REG_ACTUAL_SPEED, REG_CURRENT, REG_ENABLE = 0x03, 0x05, 0x06 - REG_ZERO_CMD, REG_TARGET_HIGH, REG_TARGET_LOW = 0x0F, 0x10, 0x11 - REG_SPEED, REG_ACCEL, REG_PRECISION, REG_START = 0x13, 0x14, 0x15, 0x16 - REG_COMMAND = 0x60 - - def __init__(self, client: Optional[ModbusClient] = None, - port="/dev/ttyUSB0", baudrate=115200, - origin_path="unilabos/devices/laiyu_liquid_test/work_origin.json"): - if client is None: - transport = ModbusRTUTransport(port, baudrate) - transport.open() - self.client = ModbusClient(transport) - else: - self.client = client - - self.axis_addr = {MotorAxis.X: 1, MotorAxis.Y: 2, MotorAxis.Z: 3} - self.work_origin_steps = {"x": 0, "y": 0, "z": 0} - self.is_homed = False - self._load_work_origin(origin_path) - - # ========== 基础工具 ========== - @staticmethod - def s16(v: int) -> int: - return v - 0x10000 if v & 0x8000 else v - - @staticmethod - def s32(h: int, l: int) -> int: - v = (h << 16) | l - return v - 0x100000000 if v & 0x80000000 else v - - @classmethod - def mm_to_steps(cls, axis: str, mm: float = 0.0) -> int: - axis = axis.upper() - if axis == "X": - return int(mm * cls.STEPS_PER_MM_X) - elif axis == "Y": - return int(mm * cls.STEPS_PER_MM_Y) - elif axis == "Z": - return int(mm * cls.STEPS_PER_MM_Z) - raise ValueError(f"未知轴: {axis}") - - @classmethod - def steps_to_mm(cls, axis: str, steps: int) -> float: - axis = axis.upper() - if axis == "X": - return steps / cls.STEPS_PER_MM_X - elif axis == "Y": - return steps / cls.STEPS_PER_MM_Y - elif axis == "Z": - return steps / cls.STEPS_PER_MM_Z - raise ValueError(f"未知轴: {axis}") - - # ========== 状态与控制 ========== - def get_status(self, axis: str = "Z") -> list: - """返回简化数组格式: [steps, speed, current, status_value]""" - if isinstance(axis, MotorAxis): - axis_enum = axis - elif isinstance(axis, str): - axis_enum = MotorAxis[axis.upper()] - else: - raise TypeError("axis 参数必须为 str 或 MotorAxis") - - vals = self.client.read_registers(self.axis_addr[axis_enum], self.REG_STATUS, 6) - return [ - self.s32(vals[1], vals[2]), - self.s16(vals[3]), - vals[4], - int(MotorStatus(vals[0]).value) - ] - - def enable(self, axis: str, state: bool) -> bool: - a = MotorAxis[axis.upper()] - return self.client.write_single_register(self.axis_addr[a], self.REG_ENABLE, 1 if state else 0) - - def wait_complete(self, axis: str, timeout=30.0) -> bool: - a = axis.upper() - start = time.time() - while time.time() - start < timeout: - vals = self.get_status(a) - st = MotorStatus(vals[3]) # 第4个元素是状态值 - if st == MotorStatus.STANDBY: - return True - if st in (MotorStatus.COLLISION_STOP, MotorStatus.FORWARD_LIMIT_STOP, MotorStatus.REVERSE_LIMIT_STOP): - logger.warning(f"{a} 轴异常停止: {st.name}") - return False - time.sleep(0.1) - logger.warning(f"{a} 轴运动超时") - return False - - # ========== 控制命令 ========== - def move_to(self, axis: str, steps: int, speed: int = 2000, acc: int = 500, precision: int = 50) -> bool: - a = MotorAxis[axis.upper()] - addr = self.axis_addr[a] - hi, lo = (steps >> 16) & 0xFFFF, steps & 0xFFFF - values = [hi, lo, speed, acc, precision] - ok = self.client.write_multiple_registers(addr, self.REG_TARGET_HIGH, values) - if ok: - self.client.write_single_register(addr, self.REG_START, 1) - return ok - - def move_xyz_work(self, x: float = 0.0, y: float = 0.0, z: float = 0.0, speed: int = 100, acc: int = 1500): - logger.info("🧭 执行安全多轴运动:Z→XY→Z") - if z is not None: - safe_z = self._to_machine_steps("Z", 0.0) - self.move_to("Z", safe_z, speed, acc) - self.wait_complete("Z") - - if x is not None or y is not None: - if x is not None: - self.move_to("X", self._to_machine_steps("X", x), speed, acc) - if y is not None: - self.move_to("Y", self._to_machine_steps("Y", y), speed, acc) - if x is not None: - self.wait_complete("X") - if y is not None: - self.wait_complete("Y") - - if z is not None: - self.move_to("Z", self._to_machine_steps("Z", z), speed, acc) - self.wait_complete("Z") - logger.info("✅ 多轴顺序运动完成") - - # ========== 坐标与零点 ========== - def _to_machine_steps(self, axis: str, mm: float) -> int: - base = self.work_origin_steps.get(axis.lower(), 0) - return base + self.mm_to_steps(axis, mm) - - def define_current_as_zero(self, save_path="work_origin.json"): - import json - from datetime import datetime - - origin = {} - for axis in ["X", "Y", "Z"]: - vals = self.get_status(axis) - origin[axis.lower()] = int(vals[0]) # 第1个是步数 - with open(save_path, "w", encoding="utf-8") as f: - json.dump({"work_origin_steps": origin, "timestamp": datetime.now().isoformat()}, f, indent=2) - self.work_origin_steps = origin - self.is_homed = True - logger.info(f"✅ 零点已定义并保存至 {save_path}") - - def _load_work_origin(self, path: str) -> bool: - import json, os - - if not os.path.exists(path): - logger.warning("⚠️ 未找到软零点文件") - return False - with open(path, "r", encoding="utf-8") as f: - data = json.load(f) - self.work_origin_steps = data.get("work_origin_steps", {"x": 0, "y": 0, "z": 0}) - self.is_homed = True - logger.info(f"📂 软零点已加载: {self.work_origin_steps}") - return True - - def return_to_work_origin(self, speed: int = 200, acc: int = 800): - logger.info("🏁 回工件软零点") - self.move_to("Z", self._to_machine_steps("Z", 0.0), speed, acc) - self.wait_complete("Z") - self.move_to("X", self.work_origin_steps.get("x", 0), speed, acc) - self.move_to("Y", self.work_origin_steps.get("y", 0), speed, acc) - self.wait_complete("X") - self.wait_complete("Y") - self.move_to("Z", self.work_origin_steps.get("z", 0), speed, acc) - self.wait_complete("Z") - logger.info("🎯 回软零点完成 ✅") diff --git a/unilabos/devices/liquid_handling/laiyu/backend/laiyu_v_backend.py b/unilabos/devices/liquid_handling/laiyu/backend/laiyu_v_backend.py index d5636b25..9e824e1b 100644 --- a/unilabos/devices/liquid_handling/laiyu/backend/laiyu_v_backend.py +++ b/unilabos/devices/liquid_handling/laiyu/backend/laiyu_v_backend.py @@ -153,7 +153,7 @@ class UniLiquidHandlerLaiyuBackend(LiquidHandlerBackend): if self.hardware_interface.tip_status == TipStatus.TIP_ATTACHED: print("已有枪头,无需重复拾取") return - self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z,speed=100) + self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z,speed=200) self.hardware_interface.xyz_controller.move_to_work_coord_safe(z=self.hardware_interface.xyz_controller.machine_config.safe_z_height,speed=100) # self.joint_state_publisher.send_resource_action(ops[0].resource.name, x, y, z, "pick",channels=use_channels) # goback() @@ -202,7 +202,7 @@ class UniLiquidHandlerLaiyuBackend(LiquidHandlerBackend): if self.hardware_interface.tip_status == TipStatus.NO_TIP: print("无枪头,无需丢弃") return - self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z) + self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z,speed=200) self.hardware_interface.eject_tip self.hardware_interface.xyz_controller.move_to_work_coord_safe(z=self.hardware_interface.xyz_controller.machine_config.safe_z_height) @@ -267,7 +267,7 @@ class UniLiquidHandlerLaiyuBackend(LiquidHandlerBackend): return # 移动到吸液位置 - self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z) + self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z,speed=200) self.pipette_aspirate(volume=ops[0].volume, flow_rate=flow_rate) @@ -340,7 +340,7 @@ class UniLiquidHandlerLaiyuBackend(LiquidHandlerBackend): # 移动到排液位置 - self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z) + self.hardware_interface.xyz_controller.move_to_work_coord_safe(x=x, y=-y, z=z,speed=200) self.pipette_dispense(volume=ops[0].volume, flow_rate=flow_rate) diff --git a/unilabos/devices/liquid_handling/laiyu/controllers/pipette_controller.py b/unilabos/devices/liquid_handling/laiyu/controllers/pipette_controller.py index e6ddd4f0..17a47df1 100644 --- a/unilabos/devices/liquid_handling/laiyu/controllers/pipette_controller.py +++ b/unilabos/devices/liquid_handling/laiyu/controllers/pipette_controller.py @@ -128,6 +128,7 @@ class PipetteController: baudrate=115200 ) self.pipette = SOPAPipette(self.config) + self.pipette_port = port self.tip_status = TipStatus.NO_TIP self.current_volume = 0.0 self.max_volume = 1000.0 # 默认1000ul @@ -154,7 +155,7 @@ class PipetteController: logger.info("移液器连接成功") # 连接XYZ步进电机控制器(如果提供了端口) - if self.xyz_port: + if self.xyz_port != self.pipette_port: try: self.xyz_controller = XYZController(self.xyz_port) if self.xyz_controller.connect(): @@ -168,7 +169,12 @@ class PipetteController: self.xyz_controller = None self.xyz_connected = False else: - logger.info("未配置XYZ步进电机端口,跳过运动控制器连接") + try: + self.xyz_controller = XYZController(self.xyz_port, auto_connect=False) + self.xyz_controller.serial_conn = self.pipette.serial_port + self.xyz_controller.is_connected = True + except Exception as e: + logger.info("未配置XYZ步进电机端口,跳过运动控制器连接") return True except Exception as e: diff --git a/unilabos/devices/liquid_handling/liquid_handler_abstract.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py index e849ffb9..96289ffd 100644 --- a/unilabos/devices/liquid_handling/liquid_handler_abstract.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -6,6 +6,7 @@ import traceback from collections import Counter from typing import List, Sequence, Optional, Literal, Union, Iterator, Dict, Any, Callable, Set, cast +from typing_extensions import TypedDict from pylabrobot.liquid_handling import LiquidHandler, LiquidHandlerBackend, LiquidHandlerChatterboxBackend, Strictness from unilabos.devices.liquid_handling.rviz_backend import UniLiquidHandlerRvizBackend from unilabos.devices.liquid_handling.laiyu.backend.laiyu_v_backend import UniLiquidHandlerLaiyuBackend @@ -28,12 +29,15 @@ from pylabrobot.resources import ( ) from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode - +class SimpleReturn(TypedDict): + samples: list + volumes: list class LiquidHandlerMiddleware(LiquidHandler): def __init__(self, backend: LiquidHandlerBackend, deck: Deck, simulator: bool = False, channel_num: int = 8, **kwargs): self._simulator = simulator self.channel_num = channel_num + self.pending_liquids_dict = {} joint_config = kwargs.get("joint_config", None) if simulator: if joint_config: @@ -131,7 +135,9 @@ class LiquidHandlerMiddleware(LiquidHandler): 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) + await super().drop_tips(tip_spots, use_channels, offsets, allow_nonzero_volume, **backend_kwargs) + self.pending_liquids_dict = {} + return async def return_tips( self, use_channels: Optional[list[int]] = None, allow_nonzero_volume: bool = False, **backend_kwargs @@ -154,8 +160,10 @@ class LiquidHandlerMiddleware(LiquidHandler): offsets = [Coordinate.zero()] * len(use_channels) 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) - + await super().discard_tips(use_channels, allow_nonzero_volume, offsets, **backend_kwargs) + self.pending_liquids_dict = {} + return + def _check_containers(self, resources: Sequence[Resource]): super()._check_containers(resources) @@ -171,6 +179,8 @@ class LiquidHandlerMiddleware(LiquidHandler): spread: Literal["wide", "tight", "custom"] = "wide", **backend_kwargs, ): + + if self._simulator: return await self._simulate_handler.aspirate( resources, @@ -183,7 +193,7 @@ class LiquidHandlerMiddleware(LiquidHandler): spread, **backend_kwargs, ) - return await super().aspirate( + await super().aspirate( resources, vols, use_channels, @@ -195,6 +205,18 @@ class LiquidHandlerMiddleware(LiquidHandler): **backend_kwargs, ) + res_samples = [] + res_volumes = [] + for resource, volume, channel in zip(resources, vols, use_channels): + res_samples.append({"name": resource.name, "sample_uuid": resource.unilabos_extra.get("sample_uuid", None)}) + res_volumes.append(volume) + self.pending_liquids_dict[channel] = { + "sample_uuid": resource.unilabos_extra.get("sample_uuid", None), + "volume": volume + } + return SimpleReturn(samples=res_samples, volumes=res_volumes) + + async def dispense( self, resources: Sequence[Container], @@ -206,7 +228,7 @@ class LiquidHandlerMiddleware(LiquidHandler): blow_out_air_volume: Optional[List[Optional[float]]] = None, spread: Literal["wide", "tight", "custom"] = "wide", **backend_kwargs, - ): + ) -> SimpleReturn: if self._simulator: return await self._simulate_handler.dispense( resources, @@ -219,7 +241,7 @@ class LiquidHandlerMiddleware(LiquidHandler): spread, **backend_kwargs, ) - return await super().dispense( + await super().dispense( resources, vols, use_channels, @@ -229,7 +251,17 @@ class LiquidHandlerMiddleware(LiquidHandler): blow_out_air_volume, **backend_kwargs, ) + res_samples = [] + res_volumes = [] + for resource, volume, channel in zip(resources, vols, use_channels): + res_uuid = self.pending_liquids_dict[channel]["sample_uuid"] + self.pending_liquids_dict[channel]["volume"] -= volume + resource.unilabos_extra["sample_uuid"] = res_uuid + res_samples.append({"name": resource.name, "sample_uuid": res_uuid}) + res_volumes.append(volume) + return SimpleReturn(samples=res_samples, volumes=res_volumes) + async def transfer( self, source: Well, @@ -549,25 +581,66 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): support_touch_tip = True _ros_node: BaseROS2DeviceNode - def __init__(self, backend: LiquidHandlerBackend, deck: Deck, simulator: bool=False, channel_num:int = 8): + def __init__(self, backend: LiquidHandlerBackend, deck: Deck, simulator: bool=False, channel_num:int = 8, total_height:float = 310): """Initialize a LiquidHandler. Args: backend: Backend to use. deck: Deck to use. """ + backend_type = None + if isinstance(backend, dict) and "type" in backend: + backend_dict = backend.copy() + type_str = backend_dict.pop("type") + try: + # Try to get class from string using globals (current module), or fallback to pylabrobot or unilabos namespaces + backend_cls = None + if type_str in globals(): + backend_cls = globals()[type_str] + else: + # Try resolving dotted notation, e.g. "xxx.yyy.ClassName" + components = type_str.split(".") + mod = None + if len(components) > 1: + module_name = ".".join(components[:-1]) + try: + import importlib + mod = importlib.import_module(module_name) + except ImportError: + mod = None + if mod is not None: + backend_cls = getattr(mod, components[-1], None) + if backend_cls is None: + # Try pylabrobot style import (if available) + try: + import pylabrobot + backend_cls = getattr(pylabrobot, type_str, None) + except Exception: + backend_cls = None + if backend_cls is not None and isinstance(backend_cls, type): + backend_type = backend_cls(**backend_dict) # pass the rest of dict as kwargs + except Exception as exc: + raise RuntimeError(f"Failed to convert backend type '{type_str}' to class: {exc}") + else: + backend_type = backend self._simulator = simulator self.group_info = dict() - super().__init__(backend, deck, simulator, channel_num) + super().__init__(backend_type, deck, simulator, channel_num) def post_init(self, ros_node: BaseROS2DeviceNode): self._ros_node = ros_node @classmethod - def set_liquid(cls, wells: list[Well], liquid_names: list[str], volumes: list[float]): + def set_liquid(cls, wells: list[Well], liquid_names: list[str], volumes: list[float]) -> SimpleReturn: """Set the liquid in a well.""" + res_samples = [] + res_volumes = [] for well, liquid_name, volume in zip(wells, liquid_names, volumes): well.set_liquids([(liquid_name, volume)]) # type: ignore + res_samples.append({"name": well.name, "sample_uuid": well.unilabos_extra.get("sample_uuid", None)}) + res_volumes.append(volume) + + return SimpleReturn(samples=res_samples, volumes=res_volumes) # --------------------------------------------------------------- # REMOVE LIQUID -------------------------------------------------- # --------------------------------------------------------------- diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py index 68cc280c..02ef20d1 100644 --- a/unilabos/devices/liquid_handling/prcxi/prcxi.py +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -1,12 +1,14 @@ import asyncio import collections +from collections import OrderedDict import contextlib import json import os import socket import time import uuid -from typing import Any, List, Dict, Optional, OrderedDict, Tuple, TypedDict, Union, Sequence, Iterator, Literal +from typing import Any, List, Dict, Optional, Tuple, TypedDict, Union, Sequence, Iterator, Literal +from pylabrobot.liquid_handling.standard import GripDirection from pylabrobot.liquid_handling import ( LiquidHandlerBackend, @@ -28,9 +30,9 @@ from pylabrobot.liquid_handling.standard import ( ResourceMove, ResourceDrop, ) -from pylabrobot.resources import Tip, Deck, Plate, Well, TipRack, Resource, Container, Coordinate, TipSpot, Trash, TubeRack, PlateAdapter +from pylabrobot.resources import ResourceHolder, ResourceStack, Tip, Deck, Plate, Well, TipRack, Resource, Container, Coordinate, TipSpot, Trash, PlateAdapter, TubeRack -from unilabos.devices.liquid_handling.liquid_handler_abstract import LiquidHandlerAbstract +from unilabos.devices.liquid_handling.liquid_handler_abstract import LiquidHandlerAbstract, SimpleReturn from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode @@ -69,7 +71,35 @@ class PRCXI9300Deck(Deck): def __init__(self, name: str, size_x: float, size_y: float, size_z: float, **kwargs): super().__init__(name, size_x, size_y, size_z) self.slots = [None] * 6 # PRCXI 9300 有 6 个槽位 +class PRCXI9300Container(Plate): + """PRCXI 9300 的专用 Container 类,继承自 Plate,用于槽位定位和未知模块。 + 该类定义了 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, + **kwargs, + ): + 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 PRCXI9300Plate(Plate): """ 专用孔板类: @@ -83,11 +113,43 @@ class PRCXI9300Plate(Plate): model: Optional[str] = None, material_info: Optional[Dict[str, Any]] = None, **kwargs): - items = ordered_items if ordered_items is not None else ordering - super().__init__(name, size_x, size_y, size_z, - ordered_items=items, - category=category, - model=model, **kwargs) + # 如果 ordered_items 不为 None,直接使用 + if ordered_items is not None: + items = ordered_items + elif ordering is not None: + # 检查 ordering 中的值是否是字符串(从 JSON 反序列化时的情况) + # 如果是字符串,说明这是位置名称,需要让 Plate 自己创建 Well 对象 + # 我们只传递位置信息(键),不传递值,使用 ordering 参数 + if ordering and isinstance(next(iter(ordering.values()), None), str): + # ordering 的值是字符串,只使用键(位置信息)创建新的 OrderedDict + # 传递 ordering 参数而不是 ordered_items,让 Plate 自己创建 Well 对象 + items = None + # 使用 ordering 参数,只包含位置信息(键) + ordering_param = collections.OrderedDict((k, None) for k in ordering.keys()) + else: + # ordering 的值已经是对象,可以直接使用 + items = ordering + ordering_param = None + else: + items = None + ordering_param = None + + # 根据情况传递不同的参数 + if items is not None: + super().__init__(name, size_x, size_y, size_z, + ordered_items=items, + category=category, + model=model, **kwargs) + elif ordering_param is not None: + # 传递 ordering 参数,让 Plate 自己创建 Well 对象 + super().__init__(name, size_x, size_y, size_z, + ordering=ordering_param, + category=category, + model=model, **kwargs) + else: + super().__init__(name, size_x, size_y, size_z, + category=category, + model=model, **kwargs) self._unilabos_state = {} if material_info: @@ -124,8 +186,7 @@ class PRCXI9300Plate(Plate): safe_state[k] = v data.update(safe_state) - return data - + return data # 其他顶层属性也进行类型检查 class PRCXI9300TipRack(TipRack): """ 专用吸头盒类 """ def __init__(self, name: str, size_x: float, size_y: float, size_z: float, @@ -135,11 +196,43 @@ class PRCXI9300TipRack(TipRack): model: Optional[str] = None, material_info: Optional[Dict[str, Any]] = None, **kwargs): - items = ordered_items if ordered_items is not None else ordering - super().__init__(name, size_x, size_y, size_z, - ordered_items=items, - category=category, - model=model, **kwargs) + # 如果 ordered_items 不为 None,直接使用 + if ordered_items is not None: + items = ordered_items + elif ordering is not None: + # 检查 ordering 中的值是否是字符串(从 JSON 反序列化时的情况) + # 如果是字符串,说明这是位置名称,需要让 TipRack 自己创建 Tip 对象 + # 我们只传递位置信息(键),不传递值,使用 ordering 参数 + if ordering and isinstance(next(iter(ordering.values()), None), str): + # ordering 的值是字符串,只使用键(位置信息)创建新的 OrderedDict + # 传递 ordering 参数而不是 ordered_items,让 TipRack 自己创建 Tip 对象 + items = None + # 使用 ordering 参数,只包含位置信息(键) + ordering_param = collections.OrderedDict((k, None) for k in ordering.keys()) + else: + # ordering 的值已经是对象,可以直接使用 + items = ordering + ordering_param = None + else: + items = None + ordering_param = None + + # 根据情况传递不同的参数 + if items is not None: + super().__init__(name, size_x, size_y, size_z, + ordered_items=items, + category=category, + model=model, **kwargs) + elif ordering_param is not None: + # 传递 ordering 参数,让 TipRack 自己创建 Tip 对象 + super().__init__(name, size_x, size_y, size_z, + ordering=ordering_param, + category=category, + model=model, **kwargs) + else: + super().__init__(name, size_x, size_y, size_z, + category=category, + model=model, **kwargs) self._unilabos_state = {} if material_info: self._unilabos_state["Material"] = material_info @@ -235,16 +328,53 @@ class PRCXI9300TubeRack(TubeRack): category: str = "tube_rack", items: Optional[Dict[str, Any]] = None, ordered_items: Optional[OrderedDict] = None, + ordering: Optional[OrderedDict] = None, model: Optional[str] = None, material_info: Optional[Dict[str, Any]] = None, **kwargs): - # 兼容处理:PLR 的 TubeRack 构造函数可能接受 items 或 ordered_items - items_to_pass = items if items is not None else ordered_items - super().__init__(name, size_x, size_y, size_z, - ordered_items=ordered_items, - model=model, - **kwargs) + # 如果 ordered_items 不为 None,直接使用 + if ordered_items is not None: + items_to_pass = ordered_items + ordering_param = None + elif ordering is not None: + # 检查 ordering 中的值是否是字符串(从 JSON 反序列化时的情况) + # 如果是字符串,说明这是位置名称,需要让 TubeRack 自己创建 Tube 对象 + # 我们只传递位置信息(键),不传递值,使用 ordering 参数 + if ordering and isinstance(next(iter(ordering.values()), None), str): + # ordering 的值是字符串,只使用键(位置信息)创建新的 OrderedDict + # 传递 ordering 参数而不是 ordered_items,让 TubeRack 自己创建 Tube 对象 + items_to_pass = None + # 使用 ordering 参数,只包含位置信息(键) + ordering_param = collections.OrderedDict((k, None) for k in ordering.keys()) + else: + # ordering 的值已经是对象,可以直接使用 + items_to_pass = ordering + ordering_param = None + elif items is not None: + # 兼容旧的 items 参数 + items_to_pass = items + ordering_param = None + else: + items_to_pass = None + ordering_param = None + + # 根据情况传递不同的参数 + if items_to_pass is not None: + super().__init__(name, size_x, size_y, size_z, + ordered_items=items_to_pass, + model=model, + **kwargs) + elif ordering_param is not None: + # 传递 ordering 参数,让 TubeRack 自己创建 Tube 对象 + super().__init__(name, size_x, size_y, size_z, + ordering=ordering_param, + model=model, + **kwargs) + else: + super().__init__(name, size_x, size_y, size_z, + model=model, + **kwargs) self._unilabos_state = {} if material_info: @@ -375,16 +505,12 @@ class PRCXI9300Handler(LiquidHandlerAbstract): tablets_info = [] count = 0 for child in deck.children: - child_state = getattr(child, "_unilabos_state", {}) - if "Material" in child_state: - count += 1 - tablets_info.append( - WorkTablets( - Number=count, - Code=f"T{count}", - Material=child_state["Material"] + if child.children: + if "Material" in child.children[0]._unilabos_state: + number = int(child.name.replace("T", "")) + tablets_info.append( + WorkTablets(Number=number, Code=f"T{number}", Material=child.children[0]._unilabos_state["Material"]) ) - ) if is_9320: print("当前设备是9320") # 始终初始化 step_mode 属性 @@ -403,7 +529,7 @@ class PRCXI9300Handler(LiquidHandlerAbstract): super().post_init(ros_node) self._unilabos_backend.post_init(ros_node) - def set_liquid(self, wells: list[Well], liquid_names: list[str], volumes: list[float]): + def set_liquid(self, wells: list[Well], liquid_names: list[str], volumes: list[float]) -> SimpleReturn: return super().set_liquid(wells, liquid_names, volumes) def set_group(self, group_name: str, wells: List[Well], volumes: List[float]): @@ -660,6 +786,37 @@ class PRCXI9300Handler(LiquidHandlerAbstract): 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) + async def shaker_action(self, time: int, module_no: int, amplitude: int, is_wait: bool): + return await self._unilabos_backend.shaker_action(time, module_no, amplitude, is_wait) + + async def heater_action(self, temperature: float, time: int): + return await self._unilabos_backend.heater_action(temperature, time) + async def move_plate( + self, + plate: Plate, + to: Resource, + 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, + ): + + return await super().move_plate( + plate, + to, + intermediate_locations, + pickup_offset, + destination_offset, + drop_direction, + pickup_direction, + pickup_distance_from_top, + target_plate_number = to, + **backend_kwargs, + ) + class PRCXI9300Backend(LiquidHandlerBackend): """PRCXI 9300 的后端实现,继承自 LiquidHandlerBackend。 @@ -700,6 +857,55 @@ class PRCXI9300Backend(LiquidHandlerBackend): self._num_channels = channel_num self._execute_setup = setup self.debug = debug + self.axis = "Left" + + async def shaker_action(self, time: int, module_no: int, amplitude: int, is_wait: bool): + step = self.api_client.shaker_action( + time=time, + module_no=module_no, + amplitude=amplitude, + is_wait=is_wait, + ) + self.steps_todo_list.append(step) + return step + + + async def pick_up_resource(self, pickup: ResourcePickup, **backend_kwargs): + + resource=pickup.resource + offset=pickup.offset + pickup_distance_from_top=pickup.pickup_distance_from_top + direction=pickup.direction + + plate_number = int(resource.parent.name.replace("T", "")) + is_whole_plate = True + balance_height = 0 + step = self.api_client.clamp_jaw_pick_up(plate_number, is_whole_plate, balance_height) + + self.steps_todo_list.append(step) + return step + + async def drop_resource(self, drop: ResourceDrop, **backend_kwargs): + + + plate_number = None + target_plate_number = backend_kwargs.get("target_plate_number", None) + if target_plate_number is not None: + plate_number = int(target_plate_number.name.replace("T", "")) + + + is_whole_plate = True + balance_height = 0 + if plate_number is None: + raise ValueError("target_plate_number is required when dropping a resource") + step = self.api_client.clamp_jaw_drop(plate_number, is_whole_plate, balance_height) + self.steps_todo_list.append(step) + return step + + + async def heater_action(self, temperature: float, time: int): + print(f"\n\nHeater action: temperature={temperature}, time={time}\n\n") + # return await self.api_client.heater_action(temperature, time) def post_init(self, ros_node: BaseROS2DeviceNode): self._ros_node = ros_node @@ -731,7 +937,11 @@ class PRCXI9300Backend(LiquidHandlerBackend): print(f"PRCXI9300Backend created solution with ID: {solution_id}") self.api_client.load_solution(solution_id) print(json.dumps(self.steps_todo_list, indent=2)) - return self.api_client.start() + if not self.api_client.start(): + return False + if not self.api_client.wait_for_finish(): + return False + return True @classmethod def check_channels(cls, use_channels: List[int]) -> List[int]: @@ -753,7 +963,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): # 清除错误代码 self.api_client.clear_error_code() print("PRCXI9300 error code cleared.") - + self.api_client.call("IAutomation", "Stop") # 执行重置 print("Starting PRCXI9300 reset...") self.api_client.call("IAutomation", "Reset") @@ -777,12 +987,23 @@ class PRCXI9300Backend(LiquidHandlerBackend): async def pick_up_tips(self, ops: List[Pickup], use_channels: List[int] = None): """Pick up tips from the specified resource.""" - + # INSERT_YOUR_CODE + # Ensure use_channels is converted to a list of ints if it's an array + if hasattr(use_channels, 'tolist'): + _use_channels = use_channels.tolist() + else: + _use_channels = list(use_channels) if use_channels is not None else None + if _use_channels == [0]: + axis = "Left" + elif _use_channels == [1]: + axis = "Right" + else: + raise ValueError("Invalid use channels: " + str(_use_channels)) plate_indexes = [] for op in ops: plate = op.resource.parent - deck = plate.parent - plate_index = deck.children.index(plate) + deck = plate.parent.parent + plate_index = deck.children.index(plate.parent) # print(f"Plate index: {plate_index}, Plate name: {plate.name}") # print(f"Number of children in deck: {len(deck.children)}") @@ -807,6 +1028,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): hole_row = tipspot_index % 8 + 1 step = self.api_client.Load( + axis=axis, dosage=0, plate_no=PlateNo, is_whole_plate=False, @@ -821,13 +1043,23 @@ class PRCXI9300Backend(LiquidHandlerBackend): async def drop_tips(self, ops: List[Drop], use_channels: List[int] = None): """Pick up tips from the specified resource.""" - + if hasattr(use_channels, 'tolist'): + _use_channels = use_channels.tolist() + else: + _use_channels = list(use_channels) if use_channels is not None else None + if _use_channels == [0]: + axis = "Left" + elif _use_channels == [1]: + axis = "Right" + else: + raise ValueError("Invalid use channels: " + str(_use_channels)) # 检查trash # if ops[0].resource.name == "trash": - PlateNo = ops[0].resource.parent.children.index(ops[0].resource) + 1 + PlateNo = ops[0].resource.parent.parent.children.index(ops[0].resource.parent) + 1 step = self.api_client.UnLoad( + axis=axis, dosage=0, plate_no=PlateNo, is_whole_plate=False, @@ -845,8 +1077,8 @@ class PRCXI9300Backend(LiquidHandlerBackend): plate_indexes = [] for op in ops: plate = op.resource.parent - deck = plate.parent - plate_index = deck.children.index(plate) + deck = plate.parent.parent + plate_index = deck.children.index(plate.parent) plate_indexes.append(plate_index) if len(set(plate_indexes)) != 1: raise ValueError( @@ -870,6 +1102,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): hole_row = tipspot_index % 8 + 1 step = self.api_client.UnLoad( + axis=axis, dosage=0, plate_no=PlateNo, is_whole_plate=False, @@ -893,12 +1126,12 @@ class PRCXI9300Backend(LiquidHandlerBackend): none_keys: List[str] = [], ): """Mix liquid in the specified resources.""" - + plate_indexes = [] for op in targets: - deck = op.parent.parent + deck = op.parent.parent.parent plate = op.parent - plate_index = deck.children.index(plate) + plate_index = deck.children.index(plate.parent) plate_indexes.append(plate_index) if len(set(plate_indexes)) != 1: @@ -936,12 +1169,21 @@ class PRCXI9300Backend(LiquidHandlerBackend): async def aspirate(self, ops: List[SingleChannelAspiration], use_channels: List[int] = None): """Aspirate liquid from the specified resources.""" - + if hasattr(use_channels, 'tolist'): + _use_channels = use_channels.tolist() + else: + _use_channels = list(use_channels) if use_channels is not None else None + if _use_channels == [0]: + axis = "Left" + elif _use_channels == [1]: + axis = "Right" + else: + raise ValueError("Invalid use channels: " + str(_use_channels)) plate_indexes = [] for op in ops: plate = op.resource.parent - deck = plate.parent - plate_index = deck.children.index(plate) + deck = plate.parent.parent + plate_index = deck.children.index(plate.parent) plate_indexes.append(plate_index) if len(set(plate_indexes)) != 1: @@ -969,6 +1211,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): hole_row = tipspot_index % 8 + 1 step = self.api_client.Imbibing( + axis=axis, dosage=int(volumes[0]), plate_no=PlateNo, is_whole_plate=False, @@ -983,12 +1226,21 @@ class PRCXI9300Backend(LiquidHandlerBackend): async def dispense(self, ops: List[SingleChannelDispense], use_channels: List[int] = None): """Dispense liquid into the specified resources.""" - + if hasattr(use_channels, 'tolist'): + _use_channels = use_channels.tolist() + else: + _use_channels = list(use_channels) if use_channels is not None else None + if _use_channels == [0]: + axis = "Left" + elif _use_channels == [1]: + axis = "Right" + else: + raise ValueError("Invalid use channels: " + str(_use_channels)) plate_indexes = [] for op in ops: plate = op.resource.parent - deck = plate.parent - plate_index = deck.children.index(plate) + deck = plate.parent.parent + plate_index = deck.children.index(plate.parent) plate_indexes.append(plate_index) if len(set(plate_indexes)) != 1: @@ -1017,6 +1269,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): hole_row = tipspot_index % 8 + 1 step = self.api_client.Tapping( + axis=axis, dosage=int(volumes[0]), plate_no=PlateNo, is_whole_plate=False, @@ -1041,14 +1294,8 @@ class PRCXI9300Backend(LiquidHandlerBackend): 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.") + pass def can_pick_up_tip(self, channel_idx: int, tip: Tip) -> bool: return True # PRCXI9300Backend does not have tip compatibility issues @@ -1139,6 +1386,28 @@ class PRCXI9300Api: def start(self) -> bool: return self.call("IAutomation", "Start") + def wait_for_finish(self) -> bool: + success = False + start = False + while not success: + status = self.step_state_list() + if len(status) == 1: + start = True + if status is None: + break + if len(status) == 0: + break + if status[-1]["State"] == 2 and start: + success = True + elif status[-1]["State"] > 2: + break + elif status[-1]["State"] == 0: + start = True + else: + time.sleep(1) + return success + + def call(self, service: str, method: str, params: Optional[list] = None) -> Any: payload = json.dumps( {"ServiceName": service, "MethodName": method, "Paramters": params or []}, separators=(",", ":") @@ -1225,9 +1494,10 @@ class PRCXI9300Api: assist_fun4: str = "", assist_fun5: str = "", liquid_method: str = "NormalDispense", + axis: str = "Left", ) -> Dict[str, Any]: return { - "StepAxis": self.axis, + "StepAxis": axis, "Function": "Load", "DosageNum": dosage, "PlateNo": plate_no, @@ -1263,9 +1533,10 @@ class PRCXI9300Api: assist_fun4: str = "", assist_fun5: str = "", liquid_method: str = "NormalDispense", - ) -> Dict[str, Any]: + axis: str = "Left", + ) -> Dict[str, Any]: return { - "StepAxis": self.axis, + "StepAxis": axis, "Function": "Imbibing", "DosageNum": dosage, "PlateNo": plate_no, @@ -1301,9 +1572,10 @@ class PRCXI9300Api: assist_fun4: str = "", assist_fun5: str = "", liquid_method: str = "NormalDispense", + axis: str = "Left", ) -> Dict[str, Any]: return { - "StepAxis": self.axis, + "StepAxis": axis, "Function": "Tapping", "DosageNum": dosage, "PlateNo": plate_no, @@ -1339,9 +1611,10 @@ class PRCXI9300Api: assist_fun4: str = "", assist_fun5: str = "", liquid_method: str = "NormalDispense", - ) -> Dict[str, Any]: + axis: str = "Left", + ) -> Dict[str, Any]: return { - "StepAxis": self.axis, + "StepAxis": axis, "Function": "Blending", "DosageNum": dosage, "PlateNo": plate_no, @@ -1377,9 +1650,10 @@ class PRCXI9300Api: assist_fun4: str = "", assist_fun5: str = "", liquid_method: str = "NormalDispense", + axis: str = "Left", ) -> Dict[str, Any]: return { - "StepAxis": self.axis, + "StepAxis": axis, "Function": "UnLoad", "DosageNum": dosage, "PlateNo": plate_no, @@ -1398,6 +1672,50 @@ class PRCXI9300Api: "LiquidDispensingMethod": liquid_method, } + def clamp_jaw_pick_up(self, + plate_no: int, + is_whole_plate: bool, + balance_height: int, + + ) -> Dict[str, Any]: + return { + "StepAxis": "ClampingJaw", + "Function": "DefectiveLift", + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": 1, + "HoleCol": 1, + "BalanceHeight": balance_height, + "PlateOrHoleNum": f"T{plate_no}" + } + + def clamp_jaw_drop( + self, + plate_no: int, + is_whole_plate: bool, + balance_height: int, + + ) -> Dict[str, Any]: + return { + "StepAxis": "ClampingJaw", + "Function": "PutDown", + "PlateNo": plate_no, + "IsWholePlate": is_whole_plate, + "HoleRow": 1, + "HoleCol": 1, + "BalanceHeight": balance_height, + "PlateOrHoleNum": f"T{plate_no}" + } + + def shaker_action(self, time: int, module_no: int, amplitude: int, is_wait: bool): + return { + "StepAxis": "Left", + "Function": "Shaking", + "AssistFun1": time, + "AssistFun2": module_no, + "AssistFun3": amplitude, + "AssistFun4": is_wait, + } class DefaultLayout: diff --git a/unilabos/registry/devices/bioyond_dispensing_station.yaml b/unilabos/registry/devices/bioyond_dispensing_station.yaml index ecc0c877..5f3e1dde 100644 --- a/unilabos/registry/devices/bioyond_dispensing_station.yaml +++ b/unilabos/registry/devices/bioyond_dispensing_station.yaml @@ -591,56 +591,6 @@ bioyond_dispensing_station: title: DispenStationSolnPrep type: object type: DispenStationSolnPrep - transfer_materials_to_reaction_station: - feedback: {} - goal: - target_device_id: target_device_id - transfer_groups: transfer_groups - goal_default: - target_device_id: '' - transfer_groups: '' - handles: {} - placeholder_keys: - target_device_id: unilabos_devices - result: {} - schema: - description: 将配液站完成的物料(溶液、样品等)转移到指定反应站的堆栈库位。支持配置多组转移任务,每组包含物料名称、目标堆栈和目标库位。 - properties: - feedback: {} - goal: - properties: - target_device_id: - description: 目标反应站设备ID(从设备列表中选择,所有转移组都使用同一个目标设备) - type: string - transfer_groups: - description: 转移任务组列表,每组包含物料名称、目标堆栈和目标库位,可以添加多组 - items: - properties: - materials: - description: 物料名称(手动输入,系统将通过RPC查询验证) - type: string - target_sites: - description: 目标库位(手动输入,如"A01") - type: string - target_stack: - description: 目标堆栈名称(手动输入,如"堆栈1左") - type: string - required: - - materials - - target_stack - - target_sites - type: object - type: array - required: - - target_device_id - - transfer_groups - type: object - result: {} - required: - - goal - title: transfer_materials_to_reaction_station参数 - type: object - type: UniLabJsonCommand wait_for_multiple_orders_and_get_reports: feedback: {} goal: diff --git a/unilabos/registry/devices/laiyu_liquid.yaml b/unilabos/registry/devices/laiyu_liquid.yaml index 64c0c182..98201a7d 100644 --- a/unilabos/registry/devices/laiyu_liquid.yaml +++ b/unilabos/registry/devices/laiyu_liquid.yaml @@ -1361,7 +1361,8 @@ laiyu_liquid: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: 0 + mix_times: + - 0 mix_vol: 0 none_keys: - '' @@ -1491,9 +1492,11 @@ laiyu_liquid: mix_stage: type: string mix_times: - maximum: 2147483647 - minimum: -2147483648 - type: integer + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array mix_vol: maximum: 2147483647 minimum: -2147483648 diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index fdfb6b5c..c611d211 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -4019,7 +4019,8 @@ liquid_handler: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: 0 + mix_times: + - 0 mix_vol: 0 none_keys: - '' @@ -4175,9 +4176,11 @@ liquid_handler: mix_stage: type: string mix_times: - maximum: 2147483647 - minimum: -2147483648 - type: integer + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -4497,6 +4500,9 @@ liquid_handler: simulator: default: false type: boolean + total_height: + default: 310 + type: number required: - backend - deck @@ -5037,7 +5043,8 @@ liquid_handler.biomek: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: 0 + mix_times: + - 0 mix_vol: 0 none_keys: - '' @@ -5180,9 +5187,11 @@ liquid_handler.biomek: mix_stage: type: string mix_times: - maximum: 2147483647 - minimum: -2147483648 - type: integer + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -7547,6 +7556,35 @@ liquid_handler.prcxi: title: custom_delay参数 type: object type: UniLabJsonCommandAsync + auto-heater_action: + feedback: {} + goal: {} + goal_default: + temperature: null + time: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + temperature: + type: number + time: + type: integer + required: + - temperature + - time + type: object + result: {} + required: + - goal + title: heater_action参数 + type: object + type: UniLabJsonCommandAsync auto-iter_tips: feedback: {} goal: {} @@ -7688,6 +7726,43 @@ liquid_handler.prcxi: title: set_group参数 type: object type: UniLabJsonCommand + auto-shaker_action: + feedback: {} + goal: {} + goal_default: + amplitude: null + is_wait: null + module_no: null + time: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + amplitude: + type: integer + is_wait: + type: boolean + module_no: + type: integer + time: + type: integer + required: + - time + - module_no + - amplitude + - is_wait + type: object + result: {} + required: + - goal + title: shaker_action参数 + type: object + type: UniLabJsonCommandAsync auto-touch_tip: feedback: {} goal: {} @@ -8347,6 +8422,341 @@ liquid_handler.prcxi: title: LiquidHandlerMix type: object type: LiquidHandlerMix + move_plate: + feedback: {} + goal: + destination_offset: destination_offset + drop_direction: drop_direction + get_direction: get_direction + intermediate_locations: intermediate_locations + pickup_direction: pickup_direction + pickup_offset: pickup_offset + plate: plate + 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 + 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: {} + placeholder_keys: + plate: unilabos_resources + to: unilabos_resources + result: + name: name + 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: destination_offset + 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: intermediate_locations + 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: pickup_offset + 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: orientation + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: position + 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: plate + type: object + put_direction: + type: string + resource_offset: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: resource_offset + 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: orientation + type: object + position: + properties: + x: + type: number + y: + type: number + z: + type: number + required: + - x + - y + - z + title: position + 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: to + 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 pick_up_tips: feedback: {} goal: @@ -9261,7 +9671,8 @@ liquid_handler.prcxi: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: 0 + mix_times: + - 0 mix_vol: 0 none_keys: - '' @@ -9417,9 +9828,11 @@ liquid_handler.prcxi: mix_stage: type: string mix_times: - maximum: 2147483647 - minimum: -2147483648 - type: integer + items: + maximum: 2147483647 + minimum: -2147483648 + type: integer + type: array mix_vol: maximum: 2147483647 minimum: -2147483648 diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 88dd4be5..16aba6d1 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -1243,20 +1243,28 @@ class BaseROS2DeviceNode(Node, Generic[T]): plr_resource = await self.get_resource_with_dir( resource_id=resource_data["id"], with_children=True ) + if "sample_id" in resource_data: + plr_resource.unilabos_extra["sample_uuid"] = resource_data["sample_id"] queried_resources.append(plr_resource) self.lab_logger().debug(f"资源查询结果: 共 {len(queried_resources)} 个资源") # 通过资源跟踪器获取本地实例 final_resources = queried_resources if is_sequence else queried_resources[0] - final_resources = ( - self.resource_tracker.figure_resource({"name": final_resources.name}, try_mode=False) - if not is_sequence - else [ - self.resource_tracker.figure_resource({"name": res.name}, try_mode=False) - for res in queried_resources - ] - ) + if not is_sequence: + plr = self.resource_tracker.figure_resource({"name": final_resources.name}, try_mode=False) + # 保留unilabos_extra + if hasattr(final_resources, "unilabos_extra") and hasattr(plr, "unilabos_extra"): + plr.unilabos_extra = getattr(final_resources, "unilabos_extra", {}).copy() + final_resources = plr + else: + new_resources = [] + for res in queried_resources: + plr = self.resource_tracker.figure_resource({"name": res.name}, try_mode=False) + if hasattr(res, "unilabos_extra") and hasattr(plr, "unilabos_extra"): + plr.unilabos_extra = getattr(res, "unilabos_extra", {}).copy() + new_resources.append(plr) + final_resources = new_resources action_kwargs[k] = final_resources except Exception as e: @@ -1370,7 +1378,11 @@ class BaseROS2DeviceNode(Node, Generic[T]): seen = set() unique_resources = [] for rs in akv: # todo: 这里目前只支持plr的类型 - res = self.resource_tracker.parent_resource(rs) # 获取 resource 对象 + if isinstance(rs, list): + for r in rs: + res = self.resource_tracker.parent_resource(r) # 获取 resource 对象 + else: + res = self.resource_tracker.parent_resource(r) if id(res) not in seen: seen.add(id(res)) unique_resources.append(res) diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index fa9cad12..ebc44924 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -706,7 +706,20 @@ class HostNode(BaseROS2DeviceNode): raise ValueError(f"ActionClient {action_id} not found.") action_client: ActionClient = self._action_clients[action_id] + # 遍历action_kwargs下的所有子dict,将"sample_uuid"的值赋给"sample_id" + def assign_sample_id(obj): + if isinstance(obj, dict): + if "sample_uuid" in obj: + obj["sample_id"] = obj["sample_uuid"] + obj.pop("sample_uuid") + for k,v in obj.items(): + if k != "unilabos_extra": + assign_sample_id(v) + elif isinstance(obj, list): + for item in obj: + assign_sample_id(item) + assign_sample_id(action_kwargs) goal_msg = convert_to_ros_msg(action_client._action_type.Goal(), action_kwargs) self.lab_logger().info(f"[Host Node] Sending goal for {action_id}: {goal_msg}") @@ -1146,13 +1159,10 @@ class HostNode(BaseROS2DeviceNode): def _resource_get_callback(self, request: SerialCommand.Request, response: SerialCommand.Response): """ 获取资源回调 - 处理获取资源请求,从桥接器或本地查询资源数据 - Args: request: 包含资源ID的请求对象 response: 响应对象 - Returns: 响应对象,包含查询到的资源 """ diff --git a/unilabos/ros/nodes/presets/resource_mesh_manager.py b/unilabos/ros/nodes/presets/resource_mesh_manager.py index f46184b6..1ff504c4 100644 --- a/unilabos/ros/nodes/presets/resource_mesh_manager.py +++ b/unilabos/ros/nodes/presets/resource_mesh_manager.py @@ -203,9 +203,9 @@ class ResourceMeshManager(BaseROS2DeviceNode): continue # 提取位置信息并转换单位 position = { - "x": float(resource_config['position']['position']['x'])/1000, - "y": float(resource_config['position']['position']['y'])/1000, - "z": float(resource_config['position']['position']['z'])/1000 + "x": float(resource_config['pose']['position']['x'])/1000, + "y": float(resource_config['pose']['position']['y'])/1000, + "z": float(resource_config['pose']['position']['z'])/1000 } rotation_dict = { @@ -214,8 +214,8 @@ class ResourceMeshManager(BaseROS2DeviceNode): "z": 0 } - if 'rotation' in resource_config['position']: - rotation_dict = resource_config['position']['rotation'] + if 'rotation' in resource_config['pose']: + rotation_dict = resource_config['pose']['rotation'] # 从欧拉角转换为四元数 q = quaternion_from_euler( diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index 849d64a8..e3491d09 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -146,8 +146,20 @@ class ResourceDictInstance(object): content["data"] = {} if not content.get("extra"): # MagicCode content["extra"] = {} - if "pose" not in content: - content["pose"] = content.pop("position", {}) + if "position" in content: + pose = content.get("pose",{}) + if "position" not in pose : + if "position" in content["position"]: + pose["position"] = content["position"]["position"] + else: + pose["position"] = {"x": 0, "y": 0, "z": 0} + if "size" not in pose: + pose["size"] = { + "width": content["config"].get("size_x", 0), + "height": content["config"].get("size_y", 0), + "depth": content["config"].get("size_z", 0) + } + content["pose"] = pose return ResourceDictInstance(ResourceDict.model_validate(content)) def get_plr_nested_dict(self) -> Dict[str, Any]: diff --git a/unilabos/test/experiments/prcxi_9320_with_res.json b/unilabos/test/experiments/prcxi_9320_with_res.json new file mode 100644 index 00000000..4804da2b --- /dev/null +++ b/unilabos/test/experiments/prcxi_9320_with_res.json @@ -0,0 +1,40337 @@ +{ + "nodes": [ + { + + + "id": "PRCXI", + "name": "PRCXI", + "type": "device", + "class": "liquid_handler.prcxi", + "parent": "", + "pose": { + "size": { + "width": 562, + "height": 394, + "depth": 0 + } + }, + "config": { + "axis": "Left", + "deck": { + "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", + "_resource_child_name": "PRCXI_Deck" + }, + "host": "10.20.30.184", + "port": 9999, + "debug": false, + "setup": true, + "is_9320": true, + "timeout": 10, + "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", + "simulator": false, + "channel_num": 2 + }, + "data": { + "reset_ok": true + }, + "schema": {}, + "description": "", + "model": null, + "position": { + "x": 0, + "y": 240, + "z": 0 + } + }, + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + + "children": [ + ], + "parent": "PRCXI", + "type": "deck", + "class": "", + "position": { + "x": 10 , + "y": 10, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 542, + "size_y": 374, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null, + "sites": [ + { + "label": "1", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "2", + "visible": true, + "position": {"x": 138, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "3", + "visible": true, + "position": {"x": 276, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "4", + "visible": true, + "position": {"x": 414, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "5", + "visible": true, + "position": {"x": 0, "y": 96, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "6", + "visible": true, + "position": {"x": 138, "y": 96, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "7", + "visible": true, + "position": {"x": 276, "y": 96, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "8", + "visible": true, + "position": {"x": 414, "y": 96, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "9", + "visible": true, + "position": {"x": 0, "y": 192, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "10", + "visible": true, + "position": {"x": 138, "y": 192, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "11", + "visible": true, + "position": {"x": 276, "y": 192, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "12", + "visible": true, + "position": {"x": 414, "y": 192, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "13", + "visible": true, + "position": {"x": 0, "y": 288, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "14", + "visible": true, + "position": {"x": 138, "y": 288, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "15", + "visible": true, + "position": {"x": 276, "y": 288, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + }, + { + "label": "16", + "visible": true, + "position": {"x": 414, "y": 288, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + } + , + { + "id": "RackT1", + "name": "RackT1", + + "children": [ + "RackT1_A1", + "RackT1_B1", + "RackT1_C1", + "RackT1_D1", + "RackT1_E1", + "RackT1_F1", + "RackT1_G1", + "RackT1_H1", + "RackT1_A2", + "RackT1_B2", + "RackT1_C2", + "RackT1_D2", + "RackT1_E2", + "RackT1_F2", + "RackT1_G2", + "RackT1_H2", + "RackT1_A3", + "RackT1_B3", + "RackT1_C3", + "RackT1_D3", + "RackT1_E3", + "RackT1_F3", + "RackT1_G3", + "RackT1_H3", + "RackT1_A4", + "RackT1_B4", + "RackT1_C4", + "RackT1_D4", + "RackT1_E4", + "RackT1_F4", + "RackT1_G4", + "RackT1_H4", + "RackT1_A5", + "RackT1_B5", + "RackT1_C5", + "RackT1_D5", + "RackT1_E5", + "RackT1_F5", + "RackT1_G5", + "RackT1_H5", + "RackT1_A6", + "RackT1_B6", + "RackT1_C6", + "RackT1_D6", + "RackT1_E6", + "RackT1_F6", + "RackT1_G6", + "RackT1_H6", + "RackT1_A7", + "RackT1_B7", + "RackT1_C7", + "RackT1_D7", + "RackT1_E7", + "RackT1_F7", + "RackT1_G7", + "RackT1_H7", + "RackT1_A8", + "RackT1_B8", + "RackT1_C8", + "RackT1_D8", + "RackT1_E8", + "RackT1_F8", + "RackT1_G8", + "RackT1_H8", + "RackT1_A9", + "RackT1_B9", + "RackT1_C9", + "RackT1_D9", + "RackT1_E9", + "RackT1_F9", + "RackT1_G9", + "RackT1_H9", + "RackT1_A10", + "RackT1_B10", + "RackT1_C10", + "RackT1_D10", + "RackT1_E10", + "RackT1_F10", + "RackT1_G10", + "RackT1_H10", + "RackT1_A11", + "RackT1_B11", + "RackT1_C11", + "RackT1_D11", + "RackT1_E11", + "RackT1_F11", + "RackT1_G11", + "RackT1_H11", + "RackT1_A12", + "RackT1_B12", + "RackT1_C12", + "RackT1_D12", + "RackT1_E12", + "RackT1_F12", + "RackT1_G12", + "RackT1_H12" + ], + "parent": "PRCXI_Deck", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "RackT1_A1", + "name": "RackT1_A1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B1", + "name": "RackT1_B1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C1", + "name": "RackT1_C1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D1", + "name": "RackT1_D1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E1", + "name": "RackT1_E1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F1", + "name": "RackT1_F1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G1", + "name": "RackT1_G1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H1", + "name": "RackT1_H1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A2", + "name": "RackT1_A2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B2", + "name": "RackT1_B2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C2", + "name": "RackT1_C2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D2", + "name": "RackT1_D2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E2", + "name": "RackT1_E2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F2", + "name": "RackT1_F2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G2", + "name": "RackT1_G2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H2", + "name": "RackT1_H2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A3", + "name": "RackT1_A3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B3", + "name": "RackT1_B3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C3", + "name": "RackT1_C3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D3", + "name": "RackT1_D3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E3", + "name": "RackT1_E3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F3", + "name": "RackT1_F3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G3", + "name": "RackT1_G3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H3", + "name": "RackT1_H3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A4", + "name": "RackT1_A4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B4", + "name": "RackT1_B4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C4", + "name": "RackT1_C4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D4", + "name": "RackT1_D4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E4", + "name": "RackT1_E4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F4", + "name": "RackT1_F4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G4", + "name": "RackT1_G4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H4", + "name": "RackT1_H4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A5", + "name": "RackT1_A5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B5", + "name": "RackT1_B5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C5", + "name": "RackT1_C5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D5", + "name": "RackT1_D5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E5", + "name": "RackT1_E5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F5", + "name": "RackT1_F5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G5", + "name": "RackT1_G5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H5", + "name": "RackT1_H5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A6", + "name": "RackT1_A6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B6", + "name": "RackT1_B6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C6", + "name": "RackT1_C6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D6", + "name": "RackT1_D6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E6", + "name": "RackT1_E6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F6", + "name": "RackT1_F6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G6", + "name": "RackT1_G6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H6", + "name": "RackT1_H6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A7", + "name": "RackT1_A7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B7", + "name": "RackT1_B7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C7", + "name": "RackT1_C7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D7", + "name": "RackT1_D7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E7", + "name": "RackT1_E7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F7", + "name": "RackT1_F7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G7", + "name": "RackT1_G7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H7", + "name": "RackT1_H7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A8", + "name": "RackT1_A8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B8", + "name": "RackT1_B8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C8", + "name": "RackT1_C8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D8", + "name": "RackT1_D8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E8", + "name": "RackT1_E8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F8", + "name": "RackT1_F8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G8", + "name": "RackT1_G8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H8", + "name": "RackT1_H8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A9", + "name": "RackT1_A9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B9", + "name": "RackT1_B9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C9", + "name": "RackT1_C9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D9", + "name": "RackT1_D9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E9", + "name": "RackT1_E9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F9", + "name": "RackT1_F9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G9", + "name": "RackT1_G9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H9", + "name": "RackT1_H9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A10", + "name": "RackT1_A10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B10", + "name": "RackT1_B10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C10", + "name": "RackT1_C10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D10", + "name": "RackT1_D10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E10", + "name": "RackT1_E10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F10", + "name": "RackT1_F10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G10", + "name": "RackT1_G10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H10", + "name": "RackT1_H10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A11", + "name": "RackT1_A11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B11", + "name": "RackT1_B11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C11", + "name": "RackT1_C11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D11", + "name": "RackT1_D11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E11", + "name": "RackT1_E11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F11", + "name": "RackT1_F11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G11", + "name": "RackT1_G11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H11", + "name": "RackT1_H11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A12", + "name": "RackT1_A12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B12", + "name": "RackT1_B12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C12", + "name": "RackT1_C12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D12", + "name": "RackT1_D12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E12", + "name": "RackT1_E12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F12", + "name": "RackT1_F12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G12", + "name": "RackT1_G12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H12", + "name": "RackT1_H12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT2", + "name": "PlateT2", + + "children": [ + "PlateT2_A1", + "PlateT2_B1", + "PlateT2_C1", + "PlateT2_D1", + "PlateT2_E1", + "PlateT2_F1", + "PlateT2_G1", + "PlateT2_H1", + "PlateT2_A2", + "PlateT2_B2", + "PlateT2_C2", + "PlateT2_D2", + "PlateT2_E2", + "PlateT2_F2", + "PlateT2_G2", + "PlateT2_H2", + "PlateT2_A3", + "PlateT2_B3", + "PlateT2_C3", + "PlateT2_D3", + "PlateT2_E3", + "PlateT2_F3", + "PlateT2_G3", + "PlateT2_H3", + "PlateT2_A4", + "PlateT2_B4", + "PlateT2_C4", + "PlateT2_D4", + "PlateT2_E4", + "PlateT2_F4", + "PlateT2_G4", + "PlateT2_H4", + "PlateT2_A5", + "PlateT2_B5", + "PlateT2_C5", + "PlateT2_D5", + "PlateT2_E5", + "PlateT2_F5", + "PlateT2_G5", + "PlateT2_H5", + "PlateT2_A6", + "PlateT2_B6", + "PlateT2_C6", + "PlateT2_D6", + "PlateT2_E6", + "PlateT2_F6", + "PlateT2_G6", + "PlateT2_H6", + "PlateT2_A7", + "PlateT2_B7", + "PlateT2_C7", + "PlateT2_D7", + "PlateT2_E7", + "PlateT2_F7", + "PlateT2_G7", + "PlateT2_H7", + "PlateT2_A8", + "PlateT2_B8", + "PlateT2_C8", + "PlateT2_D8", + "PlateT2_E8", + "PlateT2_F8", + "PlateT2_G8", + "PlateT2_H8", + "PlateT2_A9", + "PlateT2_B9", + "PlateT2_C9", + "PlateT2_D9", + "PlateT2_E9", + "PlateT2_F9", + "PlateT2_G9", + "PlateT2_H9", + "PlateT2_A10", + "PlateT2_B10", + "PlateT2_C10", + "PlateT2_D10", + "PlateT2_E10", + "PlateT2_F10", + "PlateT2_G10", + "PlateT2_H10", + "PlateT2_A11", + "PlateT2_B11", + "PlateT2_C11", + "PlateT2_D11", + "PlateT2_E11", + "PlateT2_F11", + "PlateT2_G11", + "PlateT2_H11", + "PlateT2_A12", + "PlateT2_B12", + "PlateT2_C12", + "PlateT2_D12", + "PlateT2_E12", + "PlateT2_F12", + "PlateT2_G12", + "PlateT2_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT2_A1", + "B1": "PlateT2_B1", + "C1": "PlateT2_C1", + "D1": "PlateT2_D1", + "E1": "PlateT2_E1", + "F1": "PlateT2_F1", + "G1": "PlateT2_G1", + "H1": "PlateT2_H1", + "A2": "PlateT2_A2", + "B2": "PlateT2_B2", + "C2": "PlateT2_C2", + "D2": "PlateT2_D2", + "E2": "PlateT2_E2", + "F2": "PlateT2_F2", + "G2": "PlateT2_G2", + "H2": "PlateT2_H2", + "A3": "PlateT2_A3", + "B3": "PlateT2_B3", + "C3": "PlateT2_C3", + "D3": "PlateT2_D3", + "E3": "PlateT2_E3", + "F3": "PlateT2_F3", + "G3": "PlateT2_G3", + "H3": "PlateT2_H3", + "A4": "PlateT2_A4", + "B4": "PlateT2_B4", + "C4": "PlateT2_C4", + "D4": "PlateT2_D4", + "E4": "PlateT2_E4", + "F4": "PlateT2_F4", + "G4": "PlateT2_G4", + "H4": "PlateT2_H4", + "A5": "PlateT2_A5", + "B5": "PlateT2_B5", + "C5": "PlateT2_C5", + "D5": "PlateT2_D5", + "E5": "PlateT2_E5", + "F5": "PlateT2_F5", + "G5": "PlateT2_G5", + "H5": "PlateT2_H5", + "A6": "PlateT2_A6", + "B6": "PlateT2_B6", + "C6": "PlateT2_C6", + "D6": "PlateT2_D6", + "E6": "PlateT2_E6", + "F6": "PlateT2_F6", + "G6": "PlateT2_G6", + "H6": "PlateT2_H6", + "A7": "PlateT2_A7", + "B7": "PlateT2_B7", + "C7": "PlateT2_C7", + "D7": "PlateT2_D7", + "E7": "PlateT2_E7", + "F7": "PlateT2_F7", + "G7": "PlateT2_G7", + "H7": "PlateT2_H7", + "A8": "PlateT2_A8", + "B8": "PlateT2_B8", + "C8": "PlateT2_C8", + "D8": "PlateT2_D8", + "E8": "PlateT2_E8", + "F8": "PlateT2_F8", + "G8": "PlateT2_G8", + "H8": "PlateT2_H8", + "A9": "PlateT2_A9", + "B9": "PlateT2_B9", + "C9": "PlateT2_C9", + "D9": "PlateT2_D9", + "E9": "PlateT2_E9", + "F9": "PlateT2_F9", + "G9": "PlateT2_G9", + "H9": "PlateT2_H9", + "A10": "PlateT2_A10", + "B10": "PlateT2_B10", + "C10": "PlateT2_C10", + "D10": "PlateT2_D10", + "E10": "PlateT2_E10", + "F10": "PlateT2_F10", + "G10": "PlateT2_G10", + "H10": "PlateT2_H10", + "A11": "PlateT2_A11", + "B11": "PlateT2_B11", + "C11": "PlateT2_C11", + "D11": "PlateT2_D11", + "E11": "PlateT2_E11", + "F11": "PlateT2_F11", + "G11": "PlateT2_G11", + "H11": "PlateT2_H11", + "A12": "PlateT2_A12", + "B12": "PlateT2_B12", + "C12": "PlateT2_C12", + "D12": "PlateT2_D12", + "E12": "PlateT2_E12", + "F12": "PlateT2_F12", + "G12": "PlateT2_G12", + "H12": "PlateT2_H12" + } + }, + "data": { + "Material": { + "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", + "Code": "ZX-78-096", + "Name": "细菌培养皿" + } + } + }, + { + "id": "PlateT2_A1", + "name": "PlateT2_A1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B1", + "name": "PlateT2_B1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C1", + "name": "PlateT2_C1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D1", + "name": "PlateT2_D1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E1", + "name": "PlateT2_E1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F1", + "name": "PlateT2_F1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G1", + "name": "PlateT2_G1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H1", + "name": "PlateT2_H1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A2", + "name": "PlateT2_A2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B2", + "name": "PlateT2_B2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C2", + "name": "PlateT2_C2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D2", + "name": "PlateT2_D2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E2", + "name": "PlateT2_E2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F2", + "name": "PlateT2_F2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G2", + "name": "PlateT2_G2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H2", + "name": "PlateT2_H2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A3", + "name": "PlateT2_A3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B3", + "name": "PlateT2_B3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C3", + "name": "PlateT2_C3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D3", + "name": "PlateT2_D3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E3", + "name": "PlateT2_E3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F3", + "name": "PlateT2_F3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G3", + "name": "PlateT2_G3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H3", + "name": "PlateT2_H3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A4", + "name": "PlateT2_A4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B4", + "name": "PlateT2_B4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C4", + "name": "PlateT2_C4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D4", + "name": "PlateT2_D4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E4", + "name": "PlateT2_E4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F4", + "name": "PlateT2_F4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G4", + "name": "PlateT2_G4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H4", + "name": "PlateT2_H4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A5", + "name": "PlateT2_A5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B5", + "name": "PlateT2_B5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C5", + "name": "PlateT2_C5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D5", + "name": "PlateT2_D5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E5", + "name": "PlateT2_E5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F5", + "name": "PlateT2_F5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G5", + "name": "PlateT2_G5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H5", + "name": "PlateT2_H5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A6", + "name": "PlateT2_A6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B6", + "name": "PlateT2_B6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C6", + "name": "PlateT2_C6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D6", + "name": "PlateT2_D6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E6", + "name": "PlateT2_E6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F6", + "name": "PlateT2_F6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G6", + "name": "PlateT2_G6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H6", + "name": "PlateT2_H6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A7", + "name": "PlateT2_A7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B7", + "name": "PlateT2_B7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C7", + "name": "PlateT2_C7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D7", + "name": "PlateT2_D7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E7", + "name": "PlateT2_E7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F7", + "name": "PlateT2_F7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G7", + "name": "PlateT2_G7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H7", + "name": "PlateT2_H7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A8", + "name": "PlateT2_A8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B8", + "name": "PlateT2_B8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C8", + "name": "PlateT2_C8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D8", + "name": "PlateT2_D8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E8", + "name": "PlateT2_E8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F8", + "name": "PlateT2_F8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G8", + "name": "PlateT2_G8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H8", + "name": "PlateT2_H8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A9", + "name": "PlateT2_A9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B9", + "name": "PlateT2_B9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C9", + "name": "PlateT2_C9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D9", + "name": "PlateT2_D9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E9", + "name": "PlateT2_E9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F9", + "name": "PlateT2_F9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G9", + "name": "PlateT2_G9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H9", + "name": "PlateT2_H9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A10", + "name": "PlateT2_A10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B10", + "name": "PlateT2_B10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C10", + "name": "PlateT2_C10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D10", + "name": "PlateT2_D10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E10", + "name": "PlateT2_E10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F10", + "name": "PlateT2_F10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G10", + "name": "PlateT2_G10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H10", + "name": "PlateT2_H10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A11", + "name": "PlateT2_A11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B11", + "name": "PlateT2_B11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C11", + "name": "PlateT2_C11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D11", + "name": "PlateT2_D11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E11", + "name": "PlateT2_E11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F11", + "name": "PlateT2_F11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G11", + "name": "PlateT2_G11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H11", + "name": "PlateT2_H11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A12", + "name": "PlateT2_A12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B12", + "name": "PlateT2_B12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C12", + "name": "PlateT2_C12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D12", + "name": "PlateT2_D12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E12", + "name": "PlateT2_E12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F12", + "name": "PlateT2_F12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G12", + "name": "PlateT2_G12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H12", + "name": "PlateT2_H12", + + "children": [], + "parent": "PlateT2", + "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": "emptyT3", + "name": "emptyT3", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + + { + "id": "emptyT4", + "name": "emptyT4", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + + { + "id": "RackT5", + "name": "RackT5", + + "children": [ + "RackT5_A1", + "RackT5_B1", + "RackT5_C1", + "RackT5_D1", + "RackT5_E1", + "RackT5_F1", + "RackT5_G1", + "RackT5_H1", + "RackT5_A2", + "RackT5_B2", + "RackT5_C2", + "RackT5_D2", + "RackT5_E2", + "RackT5_F2", + "RackT5_G2", + "RackT5_H2", + "RackT5_A3", + "RackT5_B3", + "RackT5_C3", + "RackT5_D3", + "RackT5_E3", + "RackT5_F3", + "RackT5_G3", + "RackT5_H3", + "RackT5_A4", + "RackT5_B4", + "RackT5_C4", + "RackT5_D4", + "RackT5_E4", + "RackT5_F4", + "RackT5_G4", + "RackT5_H4", + "RackT5_A5", + "RackT5_B5", + "RackT5_C5", + "RackT5_D5", + "RackT5_E5", + "RackT5_F5", + "RackT5_G5", + "RackT5_H5", + "RackT5_A6", + "RackT5_B6", + "RackT5_C6", + "RackT5_D6", + "RackT5_E6", + "RackT5_F6", + "RackT5_G6", + "RackT5_H6", + "RackT5_A7", + "RackT5_B7", + "RackT5_C7", + "RackT5_D7", + "RackT5_E7", + "RackT5_F7", + "RackT5_G7", + "RackT5_H7", + "RackT5_A8", + "RackT5_B8", + "RackT5_C8", + "RackT5_D8", + "RackT5_E8", + "RackT5_F8", + "RackT5_G8", + "RackT5_H8", + "RackT5_A9", + "RackT5_B9", + "RackT5_C9", + "RackT5_D9", + "RackT5_E9", + "RackT5_F9", + "RackT5_G9", + "RackT5_H9", + "RackT5_A10", + "RackT5_B10", + "RackT5_C10", + "RackT5_D10", + "RackT5_E10", + "RackT5_F10", + "RackT5_G10", + "RackT5_H10", + "RackT5_A11", + "RackT5_B11", + "RackT5_C11", + "RackT5_D11", + "RackT5_E11", + "RackT5_F11", + "RackT5_G11", + "RackT5_H11", + "RackT5_A12", + "RackT5_B12", + "RackT5_C12", + "RackT5_D12", + "RackT5_E12", + "RackT5_F12", + "RackT5_G12", + "RackT5_H12" + ], + "parent": "PRCXI_Deck", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "SupplyType": 1, + "Name": "300μL Tip头" + } + } + }, + { + "id": "RackT5_A1", + "name": "RackT5_A1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B1", + "name": "RackT5_B1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C1", + "name": "RackT5_C1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D1", + "name": "RackT5_D1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E1", + "name": "RackT5_E1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F1", + "name": "RackT5_F1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G1", + "name": "RackT5_G1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H1", + "name": "RackT5_H1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A2", + "name": "RackT5_A2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B2", + "name": "RackT5_B2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C2", + "name": "RackT5_C2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D2", + "name": "RackT5_D2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E2", + "name": "RackT5_E2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F2", + "name": "RackT5_F2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G2", + "name": "RackT5_G2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H2", + "name": "RackT5_H2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A3", + "name": "RackT5_A3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B3", + "name": "RackT5_B3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C3", + "name": "RackT5_C3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D3", + "name": "RackT5_D3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E3", + "name": "RackT5_E3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F3", + "name": "RackT5_F3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G3", + "name": "RackT5_G3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H3", + "name": "RackT5_H3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A4", + "name": "RackT5_A4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B4", + "name": "RackT5_B4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C4", + "name": "RackT5_C4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D4", + "name": "RackT5_D4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E4", + "name": "RackT5_E4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F4", + "name": "RackT5_F4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G4", + "name": "RackT5_G4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H4", + "name": "RackT5_H4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A5", + "name": "RackT5_A5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B5", + "name": "RackT5_B5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C5", + "name": "RackT5_C5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D5", + "name": "RackT5_D5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E5", + "name": "RackT5_E5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F5", + "name": "RackT5_F5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G5", + "name": "RackT5_G5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H5", + "name": "RackT5_H5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A6", + "name": "RackT5_A6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B6", + "name": "RackT5_B6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C6", + "name": "RackT5_C6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D6", + "name": "RackT5_D6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E6", + "name": "RackT5_E6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F6", + "name": "RackT5_F6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G6", + "name": "RackT5_G6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H6", + "name": "RackT5_H6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A7", + "name": "RackT5_A7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B7", + "name": "RackT5_B7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C7", + "name": "RackT5_C7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D7", + "name": "RackT5_D7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E7", + "name": "RackT5_E7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F7", + "name": "RackT5_F7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G7", + "name": "RackT5_G7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H7", + "name": "RackT5_H7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A8", + "name": "RackT5_A8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B8", + "name": "RackT5_B8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C8", + "name": "RackT5_C8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D8", + "name": "RackT5_D8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E8", + "name": "RackT5_E8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F8", + "name": "RackT5_F8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G8", + "name": "RackT5_G8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H8", + "name": "RackT5_H8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A9", + "name": "RackT5_A9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B9", + "name": "RackT5_B9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C9", + "name": "RackT5_C9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D9", + "name": "RackT5_D9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E9", + "name": "RackT5_E9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F9", + "name": "RackT5_F9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G9", + "name": "RackT5_G9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H9", + "name": "RackT5_H9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A10", + "name": "RackT5_A10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B10", + "name": "RackT5_B10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C10", + "name": "RackT5_C10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D10", + "name": "RackT5_D10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E10", + "name": "RackT5_E10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F10", + "name": "RackT5_F10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G10", + "name": "RackT5_G10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H10", + "name": "RackT5_H10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A11", + "name": "RackT5_A11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B11", + "name": "RackT5_B11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C11", + "name": "RackT5_C11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D11", + "name": "RackT5_D11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E11", + "name": "RackT5_E11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F11", + "name": "RackT5_F11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G11", + "name": "RackT5_G11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H11", + "name": "RackT5_H11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A12", + "name": "RackT5_A12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B12", + "name": "RackT5_B12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C12", + "name": "RackT5_C12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D12", + "name": "RackT5_D12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E12", + "name": "RackT5_E12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F12", + "name": "RackT5_F12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G12", + "name": "RackT5_G12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H12", + "name": "RackT5_H12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT6", + "name": "PlateT6", + + "children": [ + "PlateT6_A1", + "PlateT6_B1", + "PlateT6_C1", + "PlateT6_D1", + "PlateT6_E1", + "PlateT6_F1", + "PlateT6_G1", + "PlateT6_H1", + "PlateT6_A2", + "PlateT6_B2", + "PlateT6_C2", + "PlateT6_D2", + "PlateT6_E2", + "PlateT6_F2", + "PlateT6_G2", + "PlateT6_H2", + "PlateT6_A3", + "PlateT6_B3", + "PlateT6_C3", + "PlateT6_D3", + "PlateT6_E3", + "PlateT6_F3", + "PlateT6_G3", + "PlateT6_H3", + "PlateT6_A4", + "PlateT6_B4", + "PlateT6_C4", + "PlateT6_D4", + "PlateT6_E4", + "PlateT6_F4", + "PlateT6_G4", + "PlateT6_H4", + "PlateT6_A5", + "PlateT6_B5", + "PlateT6_C5", + "PlateT6_D5", + "PlateT6_E5", + "PlateT6_F5", + "PlateT6_G5", + "PlateT6_H5", + "PlateT6_A6", + "PlateT6_B6", + "PlateT6_C6", + "PlateT6_D6", + "PlateT6_E6", + "PlateT6_F6", + "PlateT6_G6", + "PlateT6_H6", + "PlateT6_A7", + "PlateT6_B7", + "PlateT6_C7", + "PlateT6_D7", + "PlateT6_E7", + "PlateT6_F7", + "PlateT6_G7", + "PlateT6_H7", + "PlateT6_A8", + "PlateT6_B8", + "PlateT6_C8", + "PlateT6_D8", + "PlateT6_E8", + "PlateT6_F8", + "PlateT6_G8", + "PlateT6_H8", + "PlateT6_A9", + "PlateT6_B9", + "PlateT6_C9", + "PlateT6_D9", + "PlateT6_E9", + "PlateT6_F9", + "PlateT6_G9", + "PlateT6_H9", + "PlateT6_A10", + "PlateT6_B10", + "PlateT6_C10", + "PlateT6_D10", + "PlateT6_E10", + "PlateT6_F10", + "PlateT6_G10", + "PlateT6_H10", + "PlateT6_A11", + "PlateT6_B11", + "PlateT6_C11", + "PlateT6_D11", + "PlateT6_E11", + "PlateT6_F11", + "PlateT6_G11", + "PlateT6_H11", + "PlateT6_A12", + "PlateT6_B12", + "PlateT6_C12", + "PlateT6_D12", + "PlateT6_E12", + "PlateT6_F12", + "PlateT6_G12", + "PlateT6_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT6_A1", + "B1": "PlateT6_B1", + "C1": "PlateT6_C1", + "D1": "PlateT6_D1", + "E1": "PlateT6_E1", + "F1": "PlateT6_F1", + "G1": "PlateT6_G1", + "H1": "PlateT6_H1", + "A2": "PlateT6_A2", + "B2": "PlateT6_B2", + "C2": "PlateT6_C2", + "D2": "PlateT6_D2", + "E2": "PlateT6_E2", + "F2": "PlateT6_F2", + "G2": "PlateT6_G2", + "H2": "PlateT6_H2", + "A3": "PlateT6_A3", + "B3": "PlateT6_B3", + "C3": "PlateT6_C3", + "D3": "PlateT6_D3", + "E3": "PlateT6_E3", + "F3": "PlateT6_F3", + "G3": "PlateT6_G3", + "H3": "PlateT6_H3", + "A4": "PlateT6_A4", + "B4": "PlateT6_B4", + "C4": "PlateT6_C4", + "D4": "PlateT6_D4", + "E4": "PlateT6_E4", + "F4": "PlateT6_F4", + "G4": "PlateT6_G4", + "H4": "PlateT6_H4", + "A5": "PlateT6_A5", + "B5": "PlateT6_B5", + "C5": "PlateT6_C5", + "D5": "PlateT6_D5", + "E5": "PlateT6_E5", + "F5": "PlateT6_F5", + "G5": "PlateT6_G5", + "H5": "PlateT6_H5", + "A6": "PlateT6_A6", + "B6": "PlateT6_B6", + "C6": "PlateT6_C6", + "D6": "PlateT6_D6", + "E6": "PlateT6_E6", + "F6": "PlateT6_F6", + "G6": "PlateT6_G6", + "H6": "PlateT6_H6", + "A7": "PlateT6_A7", + "B7": "PlateT6_B7", + "C7": "PlateT6_C7", + "D7": "PlateT6_D7", + "E7": "PlateT6_E7", + "F7": "PlateT6_F7", + "G7": "PlateT6_G7", + "H7": "PlateT6_H7", + "A8": "PlateT6_A8", + "B8": "PlateT6_B8", + "C8": "PlateT6_C8", + "D8": "PlateT6_D8", + "E8": "PlateT6_E8", + "F8": "PlateT6_F8", + "G8": "PlateT6_G8", + "H8": "PlateT6_H8", + "A9": "PlateT6_A9", + "B9": "PlateT6_B9", + "C9": "PlateT6_C9", + "D9": "PlateT6_D9", + "E9": "PlateT6_E9", + "F9": "PlateT6_F9", + "G9": "PlateT6_G9", + "H9": "PlateT6_H9", + "A10": "PlateT6_A10", + "B10": "PlateT6_B10", + "C10": "PlateT6_C10", + "D10": "PlateT6_D10", + "E10": "PlateT6_E10", + "F10": "PlateT6_F10", + "G10": "PlateT6_G10", + "H10": "PlateT6_H10", + "A11": "PlateT6_A11", + "B11": "PlateT6_B11", + "C11": "PlateT6_C11", + "D11": "PlateT6_D11", + "E11": "PlateT6_E11", + "F11": "PlateT6_F11", + "G11": "PlateT6_G11", + "H11": "PlateT6_H11", + "A12": "PlateT6_A12", + "B12": "PlateT6_B12", + "C12": "PlateT6_C12", + "D12": "PlateT6_D12", + "E12": "PlateT6_E12", + "F12": "PlateT6_F12", + "G12": "PlateT6_G12", + "H12": "PlateT6_H12" + } + }, + "data": { + "Material": { + "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", + "Code": "1", + "SupplyType": 1, + "Name": "ep适配器", + "SummaryName": "ep适配器" + } + } + }, + { + "id": "PlateT6_A1", + "name": "PlateT6_A1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B1", + "name": "PlateT6_B1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C1", + "name": "PlateT6_C1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D1", + "name": "PlateT6_D1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E1", + "name": "PlateT6_E1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F1", + "name": "PlateT6_F1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G1", + "name": "PlateT6_G1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H1", + "name": "PlateT6_H1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A2", + "name": "PlateT6_A2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B2", + "name": "PlateT6_B2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C2", + "name": "PlateT6_C2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D2", + "name": "PlateT6_D2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E2", + "name": "PlateT6_E2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F2", + "name": "PlateT6_F2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G2", + "name": "PlateT6_G2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H2", + "name": "PlateT6_H2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A3", + "name": "PlateT6_A3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B3", + "name": "PlateT6_B3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C3", + "name": "PlateT6_C3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D3", + "name": "PlateT6_D3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E3", + "name": "PlateT6_E3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F3", + "name": "PlateT6_F3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G3", + "name": "PlateT6_G3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H3", + "name": "PlateT6_H3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A4", + "name": "PlateT6_A4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B4", + "name": "PlateT6_B4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C4", + "name": "PlateT6_C4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D4", + "name": "PlateT6_D4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E4", + "name": "PlateT6_E4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F4", + "name": "PlateT6_F4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G4", + "name": "PlateT6_G4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H4", + "name": "PlateT6_H4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A5", + "name": "PlateT6_A5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B5", + "name": "PlateT6_B5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C5", + "name": "PlateT6_C5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D5", + "name": "PlateT6_D5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E5", + "name": "PlateT6_E5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F5", + "name": "PlateT6_F5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G5", + "name": "PlateT6_G5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H5", + "name": "PlateT6_H5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A6", + "name": "PlateT6_A6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B6", + "name": "PlateT6_B6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C6", + "name": "PlateT6_C6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D6", + "name": "PlateT6_D6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E6", + "name": "PlateT6_E6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F6", + "name": "PlateT6_F6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G6", + "name": "PlateT6_G6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H6", + "name": "PlateT6_H6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A7", + "name": "PlateT6_A7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B7", + "name": "PlateT6_B7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C7", + "name": "PlateT6_C7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D7", + "name": "PlateT6_D7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E7", + "name": "PlateT6_E7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F7", + "name": "PlateT6_F7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G7", + "name": "PlateT6_G7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H7", + "name": "PlateT6_H7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A8", + "name": "PlateT6_A8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B8", + "name": "PlateT6_B8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C8", + "name": "PlateT6_C8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D8", + "name": "PlateT6_D8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E8", + "name": "PlateT6_E8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F8", + "name": "PlateT6_F8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G8", + "name": "PlateT6_G8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H8", + "name": "PlateT6_H8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A9", + "name": "PlateT6_A9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B9", + "name": "PlateT6_B9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C9", + "name": "PlateT6_C9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D9", + "name": "PlateT6_D9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E9", + "name": "PlateT6_E9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F9", + "name": "PlateT6_F9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G9", + "name": "PlateT6_G9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H9", + "name": "PlateT6_H9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A10", + "name": "PlateT6_A10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B10", + "name": "PlateT6_B10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C10", + "name": "PlateT6_C10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D10", + "name": "PlateT6_D10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E10", + "name": "PlateT6_E10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F10", + "name": "PlateT6_F10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G10", + "name": "PlateT6_G10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H10", + "name": "PlateT6_H10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A11", + "name": "PlateT6_A11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B11", + "name": "PlateT6_B11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C11", + "name": "PlateT6_C11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D11", + "name": "PlateT6_D11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E11", + "name": "PlateT6_E11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F11", + "name": "PlateT6_F11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G11", + "name": "PlateT6_G11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H11", + "name": "PlateT6_H11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A12", + "name": "PlateT6_A12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B12", + "name": "PlateT6_B12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C12", + "name": "PlateT6_C12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D12", + "name": "PlateT6_D12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E12", + "name": "PlateT6_E12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F12", + "name": "PlateT6_F12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G12", + "name": "PlateT6_G12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H12", + "name": "PlateT6_H12", + + "children": [], + "parent": "PlateT6", + "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": "emptyT7", + "name": "emptyT7", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "emptyT8", + "name": "emptyT8", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT9", + "name": "PlateT9", + + "children": [ + "PlateT9_A1", + "PlateT9_B1", + "PlateT9_C1", + "PlateT9_D1", + "PlateT9_E1", + "PlateT9_F1", + "PlateT9_G1", + "PlateT9_H1", + "PlateT9_A2", + "PlateT9_B2", + "PlateT9_C2", + "PlateT9_D2", + "PlateT9_E2", + "PlateT9_F2", + "PlateT9_G2", + "PlateT9_H2", + "PlateT9_A3", + "PlateT9_B3", + "PlateT9_C3", + "PlateT9_D3", + "PlateT9_E3", + "PlateT9_F3", + "PlateT9_G3", + "PlateT9_H3", + "PlateT9_A4", + "PlateT9_B4", + "PlateT9_C4", + "PlateT9_D4", + "PlateT9_E4", + "PlateT9_F4", + "PlateT9_G4", + "PlateT9_H4", + "PlateT9_A5", + "PlateT9_B5", + "PlateT9_C5", + "PlateT9_D5", + "PlateT9_E5", + "PlateT9_F5", + "PlateT9_G5", + "PlateT9_H5", + "PlateT9_A6", + "PlateT9_B6", + "PlateT9_C6", + "PlateT9_D6", + "PlateT9_E6", + "PlateT9_F6", + "PlateT9_G6", + "PlateT9_H6", + "PlateT9_A7", + "PlateT9_B7", + "PlateT9_C7", + "PlateT9_D7", + "PlateT9_E7", + "PlateT9_F7", + "PlateT9_G7", + "PlateT9_H7", + "PlateT9_A8", + "PlateT9_B8", + "PlateT9_C8", + "PlateT9_D8", + "PlateT9_E8", + "PlateT9_F8", + "PlateT9_G8", + "PlateT9_H8", + "PlateT9_A9", + "PlateT9_B9", + "PlateT9_C9", + "PlateT9_D9", + "PlateT9_E9", + "PlateT9_F9", + "PlateT9_G9", + "PlateT9_H9", + "PlateT9_A10", + "PlateT9_B10", + "PlateT9_C10", + "PlateT9_D10", + "PlateT9_E10", + "PlateT9_F10", + "PlateT9_G10", + "PlateT9_H10", + "PlateT9_A11", + "PlateT9_B11", + "PlateT9_C11", + "PlateT9_D11", + "PlateT9_E11", + "PlateT9_F11", + "PlateT9_G11", + "PlateT9_H11", + "PlateT9_A12", + "PlateT9_B12", + "PlateT9_C12", + "PlateT9_D12", + "PlateT9_E12", + "PlateT9_F12", + "PlateT9_G12", + "PlateT9_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT9_A1", + "B1": "PlateT9_B1", + "C1": "PlateT9_C1", + "D1": "PlateT9_D1", + "E1": "PlateT9_E1", + "F1": "PlateT9_F1", + "G1": "PlateT9_G1", + "H1": "PlateT9_H1", + "A2": "PlateT9_A2", + "B2": "PlateT9_B2", + "C2": "PlateT9_C2", + "D2": "PlateT9_D2", + "E2": "PlateT9_E2", + "F2": "PlateT9_F2", + "G2": "PlateT9_G2", + "H2": "PlateT9_H2", + "A3": "PlateT9_A3", + "B3": "PlateT9_B3", + "C3": "PlateT9_C3", + "D3": "PlateT9_D3", + "E3": "PlateT9_E3", + "F3": "PlateT9_F3", + "G3": "PlateT9_G3", + "H3": "PlateT9_H3", + "A4": "PlateT9_A4", + "B4": "PlateT9_B4", + "C4": "PlateT9_C4", + "D4": "PlateT9_D4", + "E4": "PlateT9_E4", + "F4": "PlateT9_F4", + "G4": "PlateT9_G4", + "H4": "PlateT9_H4", + "A5": "PlateT9_A5", + "B5": "PlateT9_B5", + "C5": "PlateT9_C5", + "D5": "PlateT9_D5", + "E5": "PlateT9_E5", + "F5": "PlateT9_F5", + "G5": "PlateT9_G5", + "H5": "PlateT9_H5", + "A6": "PlateT9_A6", + "B6": "PlateT9_B6", + "C6": "PlateT9_C6", + "D6": "PlateT9_D6", + "E6": "PlateT9_E6", + "F6": "PlateT9_F6", + "G6": "PlateT9_G6", + "H6": "PlateT9_H6", + "A7": "PlateT9_A7", + "B7": "PlateT9_B7", + "C7": "PlateT9_C7", + "D7": "PlateT9_D7", + "E7": "PlateT9_E7", + "F7": "PlateT9_F7", + "G7": "PlateT9_G7", + "H7": "PlateT9_H7", + "A8": "PlateT9_A8", + "B8": "PlateT9_B8", + "C8": "PlateT9_C8", + "D8": "PlateT9_D8", + "E8": "PlateT9_E8", + "F8": "PlateT9_F8", + "G8": "PlateT9_G8", + "H8": "PlateT9_H8", + "A9": "PlateT9_A9", + "B9": "PlateT9_B9", + "C9": "PlateT9_C9", + "D9": "PlateT9_D9", + "E9": "PlateT9_E9", + "F9": "PlateT9_F9", + "G9": "PlateT9_G9", + "H9": "PlateT9_H9", + "A10": "PlateT9_A10", + "B10": "PlateT9_B10", + "C10": "PlateT9_C10", + "D10": "PlateT9_D10", + "E10": "PlateT9_E10", + "F10": "PlateT9_F10", + "G10": "PlateT9_G10", + "H10": "PlateT9_H10", + "A11": "PlateT9_A11", + "B11": "PlateT9_B11", + "C11": "PlateT9_C11", + "D11": "PlateT9_D11", + "E11": "PlateT9_E11", + "F11": "PlateT9_F11", + "G11": "PlateT9_G11", + "H11": "PlateT9_H11", + "A12": "PlateT9_A12", + "B12": "PlateT9_B12", + "C12": "PlateT9_C12", + "D12": "PlateT9_D12", + "E12": "PlateT9_E12", + "F12": "PlateT9_F12", + "G12": "PlateT9_G12", + "H12": "PlateT9_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT9_A1", + "name": "PlateT9_A1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B1", + "name": "PlateT9_B1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C1", + "name": "PlateT9_C1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D1", + "name": "PlateT9_D1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E1", + "name": "PlateT9_E1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F1", + "name": "PlateT9_F1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G1", + "name": "PlateT9_G1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H1", + "name": "PlateT9_H1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A2", + "name": "PlateT9_A2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B2", + "name": "PlateT9_B2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C2", + "name": "PlateT9_C2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D2", + "name": "PlateT9_D2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E2", + "name": "PlateT9_E2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F2", + "name": "PlateT9_F2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G2", + "name": "PlateT9_G2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H2", + "name": "PlateT9_H2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A3", + "name": "PlateT9_A3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B3", + "name": "PlateT9_B3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C3", + "name": "PlateT9_C3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D3", + "name": "PlateT9_D3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E3", + "name": "PlateT9_E3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F3", + "name": "PlateT9_F3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G3", + "name": "PlateT9_G3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H3", + "name": "PlateT9_H3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A4", + "name": "PlateT9_A4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B4", + "name": "PlateT9_B4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C4", + "name": "PlateT9_C4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D4", + "name": "PlateT9_D4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E4", + "name": "PlateT9_E4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F4", + "name": "PlateT9_F4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G4", + "name": "PlateT9_G4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H4", + "name": "PlateT9_H4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A5", + "name": "PlateT9_A5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B5", + "name": "PlateT9_B5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C5", + "name": "PlateT9_C5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D5", + "name": "PlateT9_D5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E5", + "name": "PlateT9_E5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F5", + "name": "PlateT9_F5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G5", + "name": "PlateT9_G5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H5", + "name": "PlateT9_H5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A6", + "name": "PlateT9_A6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B6", + "name": "PlateT9_B6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C6", + "name": "PlateT9_C6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D6", + "name": "PlateT9_D6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E6", + "name": "PlateT9_E6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F6", + "name": "PlateT9_F6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G6", + "name": "PlateT9_G6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H6", + "name": "PlateT9_H6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A7", + "name": "PlateT9_A7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B7", + "name": "PlateT9_B7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C7", + "name": "PlateT9_C7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D7", + "name": "PlateT9_D7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E7", + "name": "PlateT9_E7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F7", + "name": "PlateT9_F7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G7", + "name": "PlateT9_G7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H7", + "name": "PlateT9_H7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A8", + "name": "PlateT9_A8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B8", + "name": "PlateT9_B8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C8", + "name": "PlateT9_C8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D8", + "name": "PlateT9_D8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E8", + "name": "PlateT9_E8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F8", + "name": "PlateT9_F8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G8", + "name": "PlateT9_G8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H8", + "name": "PlateT9_H8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A9", + "name": "PlateT9_A9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B9", + "name": "PlateT9_B9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C9", + "name": "PlateT9_C9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D9", + "name": "PlateT9_D9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E9", + "name": "PlateT9_E9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F9", + "name": "PlateT9_F9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G9", + "name": "PlateT9_G9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H9", + "name": "PlateT9_H9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A10", + "name": "PlateT9_A10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B10", + "name": "PlateT9_B10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C10", + "name": "PlateT9_C10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D10", + "name": "PlateT9_D10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E10", + "name": "PlateT9_E10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F10", + "name": "PlateT9_F10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G10", + "name": "PlateT9_G10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H10", + "name": "PlateT9_H10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A11", + "name": "PlateT9_A11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B11", + "name": "PlateT9_B11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C11", + "name": "PlateT9_C11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D11", + "name": "PlateT9_D11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E11", + "name": "PlateT9_E11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F11", + "name": "PlateT9_F11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G11", + "name": "PlateT9_G11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H11", + "name": "PlateT9_H11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A12", + "name": "PlateT9_A12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B12", + "name": "PlateT9_B12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C12", + "name": "PlateT9_C12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D12", + "name": "PlateT9_D12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E12", + "name": "PlateT9_E12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F12", + "name": "PlateT9_F12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G12", + "name": "PlateT9_G12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H12", + "name": "PlateT9_H12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT10", + "name": "PlateT10", + + "children": [ + "PlateT10_A1", + "PlateT10_B1", + "PlateT10_C1", + "PlateT10_D1", + "PlateT10_E1", + "PlateT10_F1", + "PlateT10_G1", + "PlateT10_H1", + "PlateT10_A2", + "PlateT10_B2", + "PlateT10_C2", + "PlateT10_D2", + "PlateT10_E2", + "PlateT10_F2", + "PlateT10_G2", + "PlateT10_H2", + "PlateT10_A3", + "PlateT10_B3", + "PlateT10_C3", + "PlateT10_D3", + "PlateT10_E3", + "PlateT10_F3", + "PlateT10_G3", + "PlateT10_H3", + "PlateT10_A4", + "PlateT10_B4", + "PlateT10_C4", + "PlateT10_D4", + "PlateT10_E4", + "PlateT10_F4", + "PlateT10_G4", + "PlateT10_H4", + "PlateT10_A5", + "PlateT10_B5", + "PlateT10_C5", + "PlateT10_D5", + "PlateT10_E5", + "PlateT10_F5", + "PlateT10_G5", + "PlateT10_H5", + "PlateT10_A6", + "PlateT10_B6", + "PlateT10_C6", + "PlateT10_D6", + "PlateT10_E6", + "PlateT10_F6", + "PlateT10_G6", + "PlateT10_H6", + "PlateT10_A7", + "PlateT10_B7", + "PlateT10_C7", + "PlateT10_D7", + "PlateT10_E7", + "PlateT10_F7", + "PlateT10_G7", + "PlateT10_H7", + "PlateT10_A8", + "PlateT10_B8", + "PlateT10_C8", + "PlateT10_D8", + "PlateT10_E8", + "PlateT10_F8", + "PlateT10_G8", + "PlateT10_H8", + "PlateT10_A9", + "PlateT10_B9", + "PlateT10_C9", + "PlateT10_D9", + "PlateT10_E9", + "PlateT10_F9", + "PlateT10_G9", + "PlateT10_H9", + "PlateT10_A10", + "PlateT10_B10", + "PlateT10_C10", + "PlateT10_D10", + "PlateT10_E10", + "PlateT10_F10", + "PlateT10_G10", + "PlateT10_H10", + "PlateT10_A11", + "PlateT10_B11", + "PlateT10_C11", + "PlateT10_D11", + "PlateT10_E11", + "PlateT10_F11", + "PlateT10_G11", + "PlateT10_H11", + "PlateT10_A12", + "PlateT10_B12", + "PlateT10_C12", + "PlateT10_D12", + "PlateT10_E12", + "PlateT10_F12", + "PlateT10_G12", + "PlateT10_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT10_A1", + "B1": "PlateT10_B1", + "C1": "PlateT10_C1", + "D1": "PlateT10_D1", + "E1": "PlateT10_E1", + "F1": "PlateT10_F1", + "G1": "PlateT10_G1", + "H1": "PlateT10_H1", + "A2": "PlateT10_A2", + "B2": "PlateT10_B2", + "C2": "PlateT10_C2", + "D2": "PlateT10_D2", + "E2": "PlateT10_E2", + "F2": "PlateT10_F2", + "G2": "PlateT10_G2", + "H2": "PlateT10_H2", + "A3": "PlateT10_A3", + "B3": "PlateT10_B3", + "C3": "PlateT10_C3", + "D3": "PlateT10_D3", + "E3": "PlateT10_E3", + "F3": "PlateT10_F3", + "G3": "PlateT10_G3", + "H3": "PlateT10_H3", + "A4": "PlateT10_A4", + "B4": "PlateT10_B4", + "C4": "PlateT10_C4", + "D4": "PlateT10_D4", + "E4": "PlateT10_E4", + "F4": "PlateT10_F4", + "G4": "PlateT10_G4", + "H4": "PlateT10_H4", + "A5": "PlateT10_A5", + "B5": "PlateT10_B5", + "C5": "PlateT10_C5", + "D5": "PlateT10_D5", + "E5": "PlateT10_E5", + "F5": "PlateT10_F5", + "G5": "PlateT10_G5", + "H5": "PlateT10_H5", + "A6": "PlateT10_A6", + "B6": "PlateT10_B6", + "C6": "PlateT10_C6", + "D6": "PlateT10_D6", + "E6": "PlateT10_E6", + "F6": "PlateT10_F6", + "G6": "PlateT10_G6", + "H6": "PlateT10_H6", + "A7": "PlateT10_A7", + "B7": "PlateT10_B7", + "C7": "PlateT10_C7", + "D7": "PlateT10_D7", + "E7": "PlateT10_E7", + "F7": "PlateT10_F7", + "G7": "PlateT10_G7", + "H7": "PlateT10_H7", + "A8": "PlateT10_A8", + "B8": "PlateT10_B8", + "C8": "PlateT10_C8", + "D8": "PlateT10_D8", + "E8": "PlateT10_E8", + "F8": "PlateT10_F8", + "G8": "PlateT10_G8", + "H8": "PlateT10_H8", + "A9": "PlateT10_A9", + "B9": "PlateT10_B9", + "C9": "PlateT10_C9", + "D9": "PlateT10_D9", + "E9": "PlateT10_E9", + "F9": "PlateT10_F9", + "G9": "PlateT10_G9", + "H9": "PlateT10_H9", + "A10": "PlateT10_A10", + "B10": "PlateT10_B10", + "C10": "PlateT10_C10", + "D10": "PlateT10_D10", + "E10": "PlateT10_E10", + "F10": "PlateT10_F10", + "G10": "PlateT10_G10", + "H10": "PlateT10_H10", + "A11": "PlateT10_A11", + "B11": "PlateT10_B11", + "C11": "PlateT10_C11", + "D11": "PlateT10_D11", + "E11": "PlateT10_E11", + "F11": "PlateT10_F11", + "G11": "PlateT10_G11", + "H11": "PlateT10_H11", + "A12": "PlateT10_A12", + "B12": "PlateT10_B12", + "C12": "PlateT10_C12", + "D12": "PlateT10_D12", + "E12": "PlateT10_E12", + "F12": "PlateT10_F12", + "G12": "PlateT10_G12", + "H12": "PlateT10_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT10_A1", + "name": "PlateT10_A1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B1", + "name": "PlateT10_B1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C1", + "name": "PlateT10_C1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D1", + "name": "PlateT10_D1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E1", + "name": "PlateT10_E1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F1", + "name": "PlateT10_F1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G1", + "name": "PlateT10_G1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H1", + "name": "PlateT10_H1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A2", + "name": "PlateT10_A2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B2", + "name": "PlateT10_B2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C2", + "name": "PlateT10_C2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D2", + "name": "PlateT10_D2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E2", + "name": "PlateT10_E2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F2", + "name": "PlateT10_F2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G2", + "name": "PlateT10_G2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H2", + "name": "PlateT10_H2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A3", + "name": "PlateT10_A3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B3", + "name": "PlateT10_B3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C3", + "name": "PlateT10_C3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D3", + "name": "PlateT10_D3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E3", + "name": "PlateT10_E3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F3", + "name": "PlateT10_F3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G3", + "name": "PlateT10_G3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H3", + "name": "PlateT10_H3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A4", + "name": "PlateT10_A4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B4", + "name": "PlateT10_B4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C4", + "name": "PlateT10_C4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D4", + "name": "PlateT10_D4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E4", + "name": "PlateT10_E4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F4", + "name": "PlateT10_F4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G4", + "name": "PlateT10_G4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H4", + "name": "PlateT10_H4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A5", + "name": "PlateT10_A5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B5", + "name": "PlateT10_B5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C5", + "name": "PlateT10_C5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D5", + "name": "PlateT10_D5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E5", + "name": "PlateT10_E5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F5", + "name": "PlateT10_F5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G5", + "name": "PlateT10_G5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H5", + "name": "PlateT10_H5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A6", + "name": "PlateT10_A6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B6", + "name": "PlateT10_B6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C6", + "name": "PlateT10_C6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D6", + "name": "PlateT10_D6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E6", + "name": "PlateT10_E6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F6", + "name": "PlateT10_F6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G6", + "name": "PlateT10_G6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H6", + "name": "PlateT10_H6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A7", + "name": "PlateT10_A7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B7", + "name": "PlateT10_B7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C7", + "name": "PlateT10_C7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D7", + "name": "PlateT10_D7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E7", + "name": "PlateT10_E7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F7", + "name": "PlateT10_F7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G7", + "name": "PlateT10_G7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H7", + "name": "PlateT10_H7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A8", + "name": "PlateT10_A8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B8", + "name": "PlateT10_B8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C8", + "name": "PlateT10_C8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D8", + "name": "PlateT10_D8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E8", + "name": "PlateT10_E8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F8", + "name": "PlateT10_F8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G8", + "name": "PlateT10_G8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H8", + "name": "PlateT10_H8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A9", + "name": "PlateT10_A9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B9", + "name": "PlateT10_B9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C9", + "name": "PlateT10_C9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D9", + "name": "PlateT10_D9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E9", + "name": "PlateT10_E9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F9", + "name": "PlateT10_F9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G9", + "name": "PlateT10_G9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H9", + "name": "PlateT10_H9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A10", + "name": "PlateT10_A10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B10", + "name": "PlateT10_B10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C10", + "name": "PlateT10_C10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D10", + "name": "PlateT10_D10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E10", + "name": "PlateT10_E10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F10", + "name": "PlateT10_F10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G10", + "name": "PlateT10_G10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H10", + "name": "PlateT10_H10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A11", + "name": "PlateT10_A11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B11", + "name": "PlateT10_B11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C11", + "name": "PlateT10_C11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D11", + "name": "PlateT10_D11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E11", + "name": "PlateT10_E11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F11", + "name": "PlateT10_F11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G11", + "name": "PlateT10_G11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H11", + "name": "PlateT10_H11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A12", + "name": "PlateT10_A12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B12", + "name": "PlateT10_B12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C12", + "name": "PlateT10_C12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D12", + "name": "PlateT10_D12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E12", + "name": "PlateT10_E12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F12", + "name": "PlateT10_F12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G12", + "name": "PlateT10_G12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H12", + "name": "PlateT10_H12", + + "children": [], + "parent": "PlateT10", + "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": "emptyT11", + "name": "emptyT11", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "emptyT12", + "name": "emptyT12", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT13", + "name": "PlateT13", + + "children": [ + "PlateT13_A1", + "PlateT13_B1", + "PlateT13_C1", + "PlateT13_D1", + "PlateT13_E1", + "PlateT13_F1", + "PlateT13_G1", + "PlateT13_H1", + "PlateT13_A2", + "PlateT13_B2", + "PlateT13_C2", + "PlateT13_D2", + "PlateT13_E2", + "PlateT13_F2", + "PlateT13_G2", + "PlateT13_H2", + "PlateT13_A3", + "PlateT13_B3", + "PlateT13_C3", + "PlateT13_D3", + "PlateT13_E3", + "PlateT13_F3", + "PlateT13_G3", + "PlateT13_H3", + "PlateT13_A4", + "PlateT13_B4", + "PlateT13_C4", + "PlateT13_D4", + "PlateT13_E4", + "PlateT13_F4", + "PlateT13_G4", + "PlateT13_H4", + "PlateT13_A5", + "PlateT13_B5", + "PlateT13_C5", + "PlateT13_D5", + "PlateT13_E5", + "PlateT13_F5", + "PlateT13_G5", + "PlateT13_H5", + "PlateT13_A6", + "PlateT13_B6", + "PlateT13_C6", + "PlateT13_D6", + "PlateT13_E6", + "PlateT13_F6", + "PlateT13_G6", + "PlateT13_H6", + "PlateT13_A7", + "PlateT13_B7", + "PlateT13_C7", + "PlateT13_D7", + "PlateT13_E7", + "PlateT13_F7", + "PlateT13_G7", + "PlateT13_H7", + "PlateT13_A8", + "PlateT13_B8", + "PlateT13_C8", + "PlateT13_D8", + "PlateT13_E8", + "PlateT13_F8", + "PlateT13_G8", + "PlateT13_H8", + "PlateT13_A9", + "PlateT13_B9", + "PlateT13_C9", + "PlateT13_D9", + "PlateT13_E9", + "PlateT13_F9", + "PlateT13_G9", + "PlateT13_H9", + "PlateT13_A10", + "PlateT13_B10", + "PlateT13_C10", + "PlateT13_D10", + "PlateT13_E10", + "PlateT13_F10", + "PlateT13_G10", + "PlateT13_H10", + "PlateT13_A11", + "PlateT13_B11", + "PlateT13_C11", + "PlateT13_D11", + "PlateT13_E11", + "PlateT13_F11", + "PlateT13_G11", + "PlateT13_H11", + "PlateT13_A12", + "PlateT13_B12", + "PlateT13_C12", + "PlateT13_D12", + "PlateT13_E12", + "PlateT13_F12", + "PlateT13_G12", + "PlateT13_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT13_A1", + "B1": "PlateT13_B1", + "C1": "PlateT13_C1", + "D1": "PlateT13_D1", + "E1": "PlateT13_E1", + "F1": "PlateT13_F1", + "G1": "PlateT13_G1", + "H1": "PlateT13_H1", + "A2": "PlateT13_A2", + "B2": "PlateT13_B2", + "C2": "PlateT13_C2", + "D2": "PlateT13_D2", + "E2": "PlateT13_E2", + "F2": "PlateT13_F2", + "G2": "PlateT13_G2", + "H2": "PlateT13_H2", + "A3": "PlateT13_A3", + "B3": "PlateT13_B3", + "C3": "PlateT13_C3", + "D3": "PlateT13_D3", + "E3": "PlateT13_E3", + "F3": "PlateT13_F3", + "G3": "PlateT13_G3", + "H3": "PlateT13_H3", + "A4": "PlateT13_A4", + "B4": "PlateT13_B4", + "C4": "PlateT13_C4", + "D4": "PlateT13_D4", + "E4": "PlateT13_E4", + "F4": "PlateT13_F4", + "G4": "PlateT13_G4", + "H4": "PlateT13_H4", + "A5": "PlateT13_A5", + "B5": "PlateT13_B5", + "C5": "PlateT13_C5", + "D5": "PlateT13_D5", + "E5": "PlateT13_E5", + "F5": "PlateT13_F5", + "G5": "PlateT13_G5", + "H5": "PlateT13_H5", + "A6": "PlateT13_A6", + "B6": "PlateT13_B6", + "C6": "PlateT13_C6", + "D6": "PlateT13_D6", + "E6": "PlateT13_E6", + "F6": "PlateT13_F6", + "G6": "PlateT13_G6", + "H6": "PlateT13_H6", + "A7": "PlateT13_A7", + "B7": "PlateT13_B7", + "C7": "PlateT13_C7", + "D7": "PlateT13_D7", + "E7": "PlateT13_E7", + "F7": "PlateT13_F7", + "G7": "PlateT13_G7", + "H7": "PlateT13_H7", + "A8": "PlateT13_A8", + "B8": "PlateT13_B8", + "C8": "PlateT13_C8", + "D8": "PlateT13_D8", + "E8": "PlateT13_E8", + "F8": "PlateT13_F8", + "G8": "PlateT13_G8", + "H8": "PlateT13_H8", + "A9": "PlateT13_A9", + "B9": "PlateT13_B9", + "C9": "PlateT13_C9", + "D9": "PlateT13_D9", + "E9": "PlateT13_E9", + "F9": "PlateT13_F9", + "G9": "PlateT13_G9", + "H9": "PlateT13_H9", + "A10": "PlateT13_A10", + "B10": "PlateT13_B10", + "C10": "PlateT13_C10", + "D10": "PlateT13_D10", + "E10": "PlateT13_E10", + "F10": "PlateT13_F10", + "G10": "PlateT13_G10", + "H10": "PlateT13_H10", + "A11": "PlateT13_A11", + "B11": "PlateT13_B11", + "C11": "PlateT13_C11", + "D11": "PlateT13_D11", + "E11": "PlateT13_E11", + "F11": "PlateT13_F11", + "G11": "PlateT13_G11", + "H11": "PlateT13_H11", + "A12": "PlateT13_A12", + "B12": "PlateT13_B12", + "C12": "PlateT13_C12", + "D12": "PlateT13_D12", + "E12": "PlateT13_E12", + "F12": "PlateT13_F12", + "G12": "PlateT13_G12", + "H12": "PlateT13_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT13_A1", + "name": "PlateT13_A1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B1", + "name": "PlateT13_B1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C1", + "name": "PlateT13_C1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D1", + "name": "PlateT13_D1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E1", + "name": "PlateT13_E1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F1", + "name": "PlateT13_F1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G1", + "name": "PlateT13_G1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H1", + "name": "PlateT13_H1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A2", + "name": "PlateT13_A2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B2", + "name": "PlateT13_B2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C2", + "name": "PlateT13_C2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D2", + "name": "PlateT13_D2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E2", + "name": "PlateT13_E2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F2", + "name": "PlateT13_F2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G2", + "name": "PlateT13_G2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H2", + "name": "PlateT13_H2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A3", + "name": "PlateT13_A3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B3", + "name": "PlateT13_B3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C3", + "name": "PlateT13_C3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D3", + "name": "PlateT13_D3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E3", + "name": "PlateT13_E3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F3", + "name": "PlateT13_F3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G3", + "name": "PlateT13_G3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H3", + "name": "PlateT13_H3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A4", + "name": "PlateT13_A4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B4", + "name": "PlateT13_B4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C4", + "name": "PlateT13_C4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D4", + "name": "PlateT13_D4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E4", + "name": "PlateT13_E4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F4", + "name": "PlateT13_F4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G4", + "name": "PlateT13_G4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H4", + "name": "PlateT13_H4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A5", + "name": "PlateT13_A5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B5", + "name": "PlateT13_B5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C5", + "name": "PlateT13_C5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D5", + "name": "PlateT13_D5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E5", + "name": "PlateT13_E5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F5", + "name": "PlateT13_F5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G5", + "name": "PlateT13_G5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H5", + "name": "PlateT13_H5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A6", + "name": "PlateT13_A6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B6", + "name": "PlateT13_B6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C6", + "name": "PlateT13_C6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D6", + "name": "PlateT13_D6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E6", + "name": "PlateT13_E6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F6", + "name": "PlateT13_F6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G6", + "name": "PlateT13_G6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H6", + "name": "PlateT13_H6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A7", + "name": "PlateT13_A7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B7", + "name": "PlateT13_B7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C7", + "name": "PlateT13_C7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D7", + "name": "PlateT13_D7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E7", + "name": "PlateT13_E7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F7", + "name": "PlateT13_F7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G7", + "name": "PlateT13_G7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H7", + "name": "PlateT13_H7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A8", + "name": "PlateT13_A8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B8", + "name": "PlateT13_B8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C8", + "name": "PlateT13_C8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D8", + "name": "PlateT13_D8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E8", + "name": "PlateT13_E8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F8", + "name": "PlateT13_F8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G8", + "name": "PlateT13_G8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H8", + "name": "PlateT13_H8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A9", + "name": "PlateT13_A9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B9", + "name": "PlateT13_B9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C9", + "name": "PlateT13_C9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D9", + "name": "PlateT13_D9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E9", + "name": "PlateT13_E9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F9", + "name": "PlateT13_F9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G9", + "name": "PlateT13_G9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H9", + "name": "PlateT13_H9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A10", + "name": "PlateT13_A10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B10", + "name": "PlateT13_B10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C10", + "name": "PlateT13_C10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D10", + "name": "PlateT13_D10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E10", + "name": "PlateT13_E10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F10", + "name": "PlateT13_F10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G10", + "name": "PlateT13_G10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H10", + "name": "PlateT13_H10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A11", + "name": "PlateT13_A11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B11", + "name": "PlateT13_B11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C11", + "name": "PlateT13_C11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D11", + "name": "PlateT13_D11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E11", + "name": "PlateT13_E11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F11", + "name": "PlateT13_F11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G11", + "name": "PlateT13_G11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H11", + "name": "PlateT13_H11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A12", + "name": "PlateT13_A12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B12", + "name": "PlateT13_B12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C12", + "name": "PlateT13_C12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D12", + "name": "PlateT13_D12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E12", + "name": "PlateT13_E12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F12", + "name": "PlateT13_F12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G12", + "name": "PlateT13_G12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H12", + "name": "PlateT13_H12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT14", + "name": "PlateT14", + + "children": [ + "PlateT14_A1", + "PlateT14_B1", + "PlateT14_C1", + "PlateT14_D1", + "PlateT14_E1", + "PlateT14_F1", + "PlateT14_G1", + "PlateT14_H1", + "PlateT14_A2", + "PlateT14_B2", + "PlateT14_C2", + "PlateT14_D2", + "PlateT14_E2", + "PlateT14_F2", + "PlateT14_G2", + "PlateT14_H2", + "PlateT14_A3", + "PlateT14_B3", + "PlateT14_C3", + "PlateT14_D3", + "PlateT14_E3", + "PlateT14_F3", + "PlateT14_G3", + "PlateT14_H3", + "PlateT14_A4", + "PlateT14_B4", + "PlateT14_C4", + "PlateT14_D4", + "PlateT14_E4", + "PlateT14_F4", + "PlateT14_G4", + "PlateT14_H4", + "PlateT14_A5", + "PlateT14_B5", + "PlateT14_C5", + "PlateT14_D5", + "PlateT14_E5", + "PlateT14_F5", + "PlateT14_G5", + "PlateT14_H5", + "PlateT14_A6", + "PlateT14_B6", + "PlateT14_C6", + "PlateT14_D6", + "PlateT14_E6", + "PlateT14_F6", + "PlateT14_G6", + "PlateT14_H6", + "PlateT14_A7", + "PlateT14_B7", + "PlateT14_C7", + "PlateT14_D7", + "PlateT14_E7", + "PlateT14_F7", + "PlateT14_G7", + "PlateT14_H7", + "PlateT14_A8", + "PlateT14_B8", + "PlateT14_C8", + "PlateT14_D8", + "PlateT14_E8", + "PlateT14_F8", + "PlateT14_G8", + "PlateT14_H8", + "PlateT14_A9", + "PlateT14_B9", + "PlateT14_C9", + "PlateT14_D9", + "PlateT14_E9", + "PlateT14_F9", + "PlateT14_G9", + "PlateT14_H9", + "PlateT14_A10", + "PlateT14_B10", + "PlateT14_C10", + "PlateT14_D10", + "PlateT14_E10", + "PlateT14_F10", + "PlateT14_G10", + "PlateT14_H10", + "PlateT14_A11", + "PlateT14_B11", + "PlateT14_C11", + "PlateT14_D11", + "PlateT14_E11", + "PlateT14_F11", + "PlateT14_G11", + "PlateT14_H11", + "PlateT14_A12", + "PlateT14_B12", + "PlateT14_C12", + "PlateT14_D12", + "PlateT14_E12", + "PlateT14_F12", + "PlateT14_G12", + "PlateT14_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT14_A1", + "B1": "PlateT14_B1", + "C1": "PlateT14_C1", + "D1": "PlateT14_D1", + "E1": "PlateT14_E1", + "F1": "PlateT14_F1", + "G1": "PlateT14_G1", + "H1": "PlateT14_H1", + "A2": "PlateT14_A2", + "B2": "PlateT14_B2", + "C2": "PlateT14_C2", + "D2": "PlateT14_D2", + "E2": "PlateT14_E2", + "F2": "PlateT14_F2", + "G2": "PlateT14_G2", + "H2": "PlateT14_H2", + "A3": "PlateT14_A3", + "B3": "PlateT14_B3", + "C3": "PlateT14_C3", + "D3": "PlateT14_D3", + "E3": "PlateT14_E3", + "F3": "PlateT14_F3", + "G3": "PlateT14_G3", + "H3": "PlateT14_H3", + "A4": "PlateT14_A4", + "B4": "PlateT14_B4", + "C4": "PlateT14_C4", + "D4": "PlateT14_D4", + "E4": "PlateT14_E4", + "F4": "PlateT14_F4", + "G4": "PlateT14_G4", + "H4": "PlateT14_H4", + "A5": "PlateT14_A5", + "B5": "PlateT14_B5", + "C5": "PlateT14_C5", + "D5": "PlateT14_D5", + "E5": "PlateT14_E5", + "F5": "PlateT14_F5", + "G5": "PlateT14_G5", + "H5": "PlateT14_H5", + "A6": "PlateT14_A6", + "B6": "PlateT14_B6", + "C6": "PlateT14_C6", + "D6": "PlateT14_D6", + "E6": "PlateT14_E6", + "F6": "PlateT14_F6", + "G6": "PlateT14_G6", + "H6": "PlateT14_H6", + "A7": "PlateT14_A7", + "B7": "PlateT14_B7", + "C7": "PlateT14_C7", + "D7": "PlateT14_D7", + "E7": "PlateT14_E7", + "F7": "PlateT14_F7", + "G7": "PlateT14_G7", + "H7": "PlateT14_H7", + "A8": "PlateT14_A8", + "B8": "PlateT14_B8", + "C8": "PlateT14_C8", + "D8": "PlateT14_D8", + "E8": "PlateT14_E8", + "F8": "PlateT14_F8", + "G8": "PlateT14_G8", + "H8": "PlateT14_H8", + "A9": "PlateT14_A9", + "B9": "PlateT14_B9", + "C9": "PlateT14_C9", + "D9": "PlateT14_D9", + "E9": "PlateT14_E9", + "F9": "PlateT14_F9", + "G9": "PlateT14_G9", + "H9": "PlateT14_H9", + "A10": "PlateT14_A10", + "B10": "PlateT14_B10", + "C10": "PlateT14_C10", + "D10": "PlateT14_D10", + "E10": "PlateT14_E10", + "F10": "PlateT14_F10", + "G10": "PlateT14_G10", + "H10": "PlateT14_H10", + "A11": "PlateT14_A11", + "B11": "PlateT14_B11", + "C11": "PlateT14_C11", + "D11": "PlateT14_D11", + "E11": "PlateT14_E11", + "F11": "PlateT14_F11", + "G11": "PlateT14_G11", + "H11": "PlateT14_H11", + "A12": "PlateT14_A12", + "B12": "PlateT14_B12", + "C12": "PlateT14_C12", + "D12": "PlateT14_D12", + "E12": "PlateT14_E12", + "F12": "PlateT14_F12", + "G12": "PlateT14_G12", + "H12": "PlateT14_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT14_A1", + "name": "PlateT14_A1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B1", + "name": "PlateT14_B1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C1", + "name": "PlateT14_C1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D1", + "name": "PlateT14_D1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E1", + "name": "PlateT14_E1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F1", + "name": "PlateT14_F1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G1", + "name": "PlateT14_G1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H1", + "name": "PlateT14_H1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A2", + "name": "PlateT14_A2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B2", + "name": "PlateT14_B2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C2", + "name": "PlateT14_C2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D2", + "name": "PlateT14_D2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E2", + "name": "PlateT14_E2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F2", + "name": "PlateT14_F2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G2", + "name": "PlateT14_G2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H2", + "name": "PlateT14_H2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A3", + "name": "PlateT14_A3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B3", + "name": "PlateT14_B3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C3", + "name": "PlateT14_C3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D3", + "name": "PlateT14_D3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E3", + "name": "PlateT14_E3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F3", + "name": "PlateT14_F3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G3", + "name": "PlateT14_G3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H3", + "name": "PlateT14_H3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A4", + "name": "PlateT14_A4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B4", + "name": "PlateT14_B4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C4", + "name": "PlateT14_C4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D4", + "name": "PlateT14_D4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E4", + "name": "PlateT14_E4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F4", + "name": "PlateT14_F4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G4", + "name": "PlateT14_G4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H4", + "name": "PlateT14_H4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A5", + "name": "PlateT14_A5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B5", + "name": "PlateT14_B5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C5", + "name": "PlateT14_C5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D5", + "name": "PlateT14_D5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E5", + "name": "PlateT14_E5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F5", + "name": "PlateT14_F5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G5", + "name": "PlateT14_G5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H5", + "name": "PlateT14_H5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A6", + "name": "PlateT14_A6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B6", + "name": "PlateT14_B6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C6", + "name": "PlateT14_C6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D6", + "name": "PlateT14_D6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E6", + "name": "PlateT14_E6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F6", + "name": "PlateT14_F6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G6", + "name": "PlateT14_G6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H6", + "name": "PlateT14_H6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A7", + "name": "PlateT14_A7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B7", + "name": "PlateT14_B7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C7", + "name": "PlateT14_C7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D7", + "name": "PlateT14_D7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E7", + "name": "PlateT14_E7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F7", + "name": "PlateT14_F7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G7", + "name": "PlateT14_G7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H7", + "name": "PlateT14_H7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A8", + "name": "PlateT14_A8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B8", + "name": "PlateT14_B8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C8", + "name": "PlateT14_C8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D8", + "name": "PlateT14_D8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E8", + "name": "PlateT14_E8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F8", + "name": "PlateT14_F8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G8", + "name": "PlateT14_G8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H8", + "name": "PlateT14_H8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A9", + "name": "PlateT14_A9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B9", + "name": "PlateT14_B9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C9", + "name": "PlateT14_C9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D9", + "name": "PlateT14_D9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E9", + "name": "PlateT14_E9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F9", + "name": "PlateT14_F9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G9", + "name": "PlateT14_G9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H9", + "name": "PlateT14_H9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A10", + "name": "PlateT14_A10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B10", + "name": "PlateT14_B10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C10", + "name": "PlateT14_C10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D10", + "name": "PlateT14_D10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E10", + "name": "PlateT14_E10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F10", + "name": "PlateT14_F10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G10", + "name": "PlateT14_G10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H10", + "name": "PlateT14_H10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A11", + "name": "PlateT14_A11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B11", + "name": "PlateT14_B11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C11", + "name": "PlateT14_C11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D11", + "name": "PlateT14_D11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E11", + "name": "PlateT14_E11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F11", + "name": "PlateT14_F11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G11", + "name": "PlateT14_G11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H11", + "name": "PlateT14_H11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A12", + "name": "PlateT14_A12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B12", + "name": "PlateT14_B12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C12", + "name": "PlateT14_C12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D12", + "name": "PlateT14_D12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E12", + "name": "PlateT14_E12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F12", + "name": "PlateT14_F12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G12", + "name": "PlateT14_G12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H12", + "name": "PlateT14_H12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT15", + "name": "PlateT15", + + "children": [ + "PlateT15_A1", + "PlateT15_B1", + "PlateT15_C1", + "PlateT15_D1", + "PlateT15_E1", + "PlateT15_F1", + "PlateT15_G1", + "PlateT15_H1", + "PlateT15_A2", + "PlateT15_B2", + "PlateT15_C2", + "PlateT15_D2", + "PlateT15_E2", + "PlateT15_F2", + "PlateT15_G2", + "PlateT15_H2", + "PlateT15_A3", + "PlateT15_B3", + "PlateT15_C3", + "PlateT15_D3", + "PlateT15_E3", + "PlateT15_F3", + "PlateT15_G3", + "PlateT15_H3", + "PlateT15_A4", + "PlateT15_B4", + "PlateT15_C4", + "PlateT15_D4", + "PlateT15_E4", + "PlateT15_F4", + "PlateT15_G4", + "PlateT15_H4", + "PlateT15_A5", + "PlateT15_B5", + "PlateT15_C5", + "PlateT15_D5", + "PlateT15_E5", + "PlateT15_F5", + "PlateT15_G5", + "PlateT15_H5", + "PlateT15_A6", + "PlateT15_B6", + "PlateT15_C6", + "PlateT15_D6", + "PlateT15_E6", + "PlateT15_F6", + "PlateT15_G6", + "PlateT15_H6", + "PlateT15_A7", + "PlateT15_B7", + "PlateT15_C7", + "PlateT15_D7", + "PlateT15_E7", + "PlateT15_F7", + "PlateT15_G7", + "PlateT15_H7", + "PlateT15_A8", + "PlateT15_B8", + "PlateT15_C8", + "PlateT15_D8", + "PlateT15_E8", + "PlateT15_F8", + "PlateT15_G8", + "PlateT15_H8", + "PlateT15_A9", + "PlateT15_B9", + "PlateT15_C9", + "PlateT15_D9", + "PlateT15_E9", + "PlateT15_F9", + "PlateT15_G9", + "PlateT15_H9", + "PlateT15_A10", + "PlateT15_B10", + "PlateT15_C10", + "PlateT15_D10", + "PlateT15_E10", + "PlateT15_F10", + "PlateT15_G10", + "PlateT15_H10", + "PlateT15_A11", + "PlateT15_B11", + "PlateT15_C11", + "PlateT15_D11", + "PlateT15_E11", + "PlateT15_F11", + "PlateT15_G11", + "PlateT15_H11", + "PlateT15_A12", + "PlateT15_B12", + "PlateT15_C12", + "PlateT15_D12", + "PlateT15_E12", + "PlateT15_F12", + "PlateT15_G12", + "PlateT15_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT15_A1", + "B1": "PlateT15_B1", + "C1": "PlateT15_C1", + "D1": "PlateT15_D1", + "E1": "PlateT15_E1", + "F1": "PlateT15_F1", + "G1": "PlateT15_G1", + "H1": "PlateT15_H1", + "A2": "PlateT15_A2", + "B2": "PlateT15_B2", + "C2": "PlateT15_C2", + "D2": "PlateT15_D2", + "E2": "PlateT15_E2", + "F2": "PlateT15_F2", + "G2": "PlateT15_G2", + "H2": "PlateT15_H2", + "A3": "PlateT15_A3", + "B3": "PlateT15_B3", + "C3": "PlateT15_C3", + "D3": "PlateT15_D3", + "E3": "PlateT15_E3", + "F3": "PlateT15_F3", + "G3": "PlateT15_G3", + "H3": "PlateT15_H3", + "A4": "PlateT15_A4", + "B4": "PlateT15_B4", + "C4": "PlateT15_C4", + "D4": "PlateT15_D4", + "E4": "PlateT15_E4", + "F4": "PlateT15_F4", + "G4": "PlateT15_G4", + "H4": "PlateT15_H4", + "A5": "PlateT15_A5", + "B5": "PlateT15_B5", + "C5": "PlateT15_C5", + "D5": "PlateT15_D5", + "E5": "PlateT15_E5", + "F5": "PlateT15_F5", + "G5": "PlateT15_G5", + "H5": "PlateT15_H5", + "A6": "PlateT15_A6", + "B6": "PlateT15_B6", + "C6": "PlateT15_C6", + "D6": "PlateT15_D6", + "E6": "PlateT15_E6", + "F6": "PlateT15_F6", + "G6": "PlateT15_G6", + "H6": "PlateT15_H6", + "A7": "PlateT15_A7", + "B7": "PlateT15_B7", + "C7": "PlateT15_C7", + "D7": "PlateT15_D7", + "E7": "PlateT15_E7", + "F7": "PlateT15_F7", + "G7": "PlateT15_G7", + "H7": "PlateT15_H7", + "A8": "PlateT15_A8", + "B8": "PlateT15_B8", + "C8": "PlateT15_C8", + "D8": "PlateT15_D8", + "E8": "PlateT15_E8", + "F8": "PlateT15_F8", + "G8": "PlateT15_G8", + "H8": "PlateT15_H8", + "A9": "PlateT15_A9", + "B9": "PlateT15_B9", + "C9": "PlateT15_C9", + "D9": "PlateT15_D9", + "E9": "PlateT15_E9", + "F9": "PlateT15_F9", + "G9": "PlateT15_G9", + "H9": "PlateT15_H9", + "A10": "PlateT15_A10", + "B10": "PlateT15_B10", + "C10": "PlateT15_C10", + "D10": "PlateT15_D10", + "E10": "PlateT15_E10", + "F10": "PlateT15_F10", + "G10": "PlateT15_G10", + "H10": "PlateT15_H10", + "A11": "PlateT15_A11", + "B11": "PlateT15_B11", + "C11": "PlateT15_C11", + "D11": "PlateT15_D11", + "E11": "PlateT15_E11", + "F11": "PlateT15_F11", + "G11": "PlateT15_G11", + "H11": "PlateT15_H11", + "A12": "PlateT15_A12", + "B12": "PlateT15_B12", + "C12": "PlateT15_C12", + "D12": "PlateT15_D12", + "E12": "PlateT15_E12", + "F12": "PlateT15_F12", + "G12": "PlateT15_G12", + "H12": "PlateT15_H12" + } + }, + "data": { + "Material": { + "uuid": "04211a2dc93547fe9bf6121eac533650" + } + } + }, + { + "id": "PlateT15_A1", + "name": "PlateT15_A1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B1", + "name": "PlateT15_B1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C1", + "name": "PlateT15_C1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D1", + "name": "PlateT15_D1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E1", + "name": "PlateT15_E1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F1", + "name": "PlateT15_F1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G1", + "name": "PlateT15_G1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H1", + "name": "PlateT15_H1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A2", + "name": "PlateT15_A2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B2", + "name": "PlateT15_B2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C2", + "name": "PlateT15_C2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D2", + "name": "PlateT15_D2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E2", + "name": "PlateT15_E2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F2", + "name": "PlateT15_F2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G2", + "name": "PlateT15_G2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H2", + "name": "PlateT15_H2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A3", + "name": "PlateT15_A3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B3", + "name": "PlateT15_B3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C3", + "name": "PlateT15_C3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D3", + "name": "PlateT15_D3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E3", + "name": "PlateT15_E3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F3", + "name": "PlateT15_F3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G3", + "name": "PlateT15_G3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H3", + "name": "PlateT15_H3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A4", + "name": "PlateT15_A4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B4", + "name": "PlateT15_B4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C4", + "name": "PlateT15_C4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D4", + "name": "PlateT15_D4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E4", + "name": "PlateT15_E4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F4", + "name": "PlateT15_F4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G4", + "name": "PlateT15_G4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H4", + "name": "PlateT15_H4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A5", + "name": "PlateT15_A5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B5", + "name": "PlateT15_B5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C5", + "name": "PlateT15_C5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D5", + "name": "PlateT15_D5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E5", + "name": "PlateT15_E5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F5", + "name": "PlateT15_F5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G5", + "name": "PlateT15_G5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H5", + "name": "PlateT15_H5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A6", + "name": "PlateT15_A6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B6", + "name": "PlateT15_B6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C6", + "name": "PlateT15_C6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D6", + "name": "PlateT15_D6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E6", + "name": "PlateT15_E6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F6", + "name": "PlateT15_F6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G6", + "name": "PlateT15_G6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H6", + "name": "PlateT15_H6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A7", + "name": "PlateT15_A7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B7", + "name": "PlateT15_B7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C7", + "name": "PlateT15_C7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D7", + "name": "PlateT15_D7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E7", + "name": "PlateT15_E7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F7", + "name": "PlateT15_F7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G7", + "name": "PlateT15_G7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H7", + "name": "PlateT15_H7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A8", + "name": "PlateT15_A8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B8", + "name": "PlateT15_B8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C8", + "name": "PlateT15_C8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D8", + "name": "PlateT15_D8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E8", + "name": "PlateT15_E8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F8", + "name": "PlateT15_F8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G8", + "name": "PlateT15_G8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H8", + "name": "PlateT15_H8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A9", + "name": "PlateT15_A9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B9", + "name": "PlateT15_B9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C9", + "name": "PlateT15_C9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D9", + "name": "PlateT15_D9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E9", + "name": "PlateT15_E9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F9", + "name": "PlateT15_F9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G9", + "name": "PlateT15_G9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H9", + "name": "PlateT15_H9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A10", + "name": "PlateT15_A10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B10", + "name": "PlateT15_B10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C10", + "name": "PlateT15_C10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D10", + "name": "PlateT15_D10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E10", + "name": "PlateT15_E10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F10", + "name": "PlateT15_F10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G10", + "name": "PlateT15_G10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H10", + "name": "PlateT15_H10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A11", + "name": "PlateT15_A11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B11", + "name": "PlateT15_B11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C11", + "name": "PlateT15_C11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D11", + "name": "PlateT15_D11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E11", + "name": "PlateT15_E11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F11", + "name": "PlateT15_F11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G11", + "name": "PlateT15_G11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H11", + "name": "PlateT15_H11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A12", + "name": "PlateT15_A12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B12", + "name": "PlateT15_B12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C12", + "name": "PlateT15_C12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D12", + "name": "PlateT15_D12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E12", + "name": "PlateT15_E12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F12", + "name": "PlateT15_F12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G12", + "name": "PlateT15_G12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H12", + "name": "PlateT15_H12", + + "children": [], + "parent": "PlateT15", + "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": "trash", + "name": "trash", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 127, + "size_y": 85.5, + "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" + } + } + } + ], + "edges": [] +} \ No newline at end of file diff --git a/unilabos/test/experiments/prcxi_9320_with_res_test.json b/unilabos/test/experiments/prcxi_9320_with_res_test.json new file mode 100644 index 00000000..f842a2cd --- /dev/null +++ b/unilabos/test/experiments/prcxi_9320_with_res_test.json @@ -0,0 +1,40662 @@ +{ + "nodes": [ + { + + + "id": "PRCXI", + "name": "PRCXI", + "type": "device", + "class": "liquid_handler.prcxi", + "parent": "", + "pose": { + "size": { + "width": 562, + "height": 394, + "depth": 0 + } + }, + "config": { + "axis": "Left", + "deck": { + "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", + "_resource_child_name": "PRCXI_Deck" + }, + "host": "10.20.30.184", + "port": 9999, + "debug": false, + "setup": true, + "is_9320": true, + "timeout": 10, + "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", + "simulator": false, + "channel_num": 2 + }, + "data": { + "reset_ok": true + }, + "schema": {}, + "description": "", + "model": null, + "position": { + "x": 0, + "y": 240, + "z": 0 + } + }, + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + + "children": [ + ], + "parent": "PRCXI", + "type": "deck", + "class": "", + "position": { + "x": 10 , + "y": 10, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 542, + "size_y": 374, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null + }, + "data": {} + } + , + + { + "id": "T1", + "name": "T1", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T1", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T2", + "name": "T2", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T2", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T3", + "name": "T3", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T3", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T4", + "name": "T4", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T4", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T5", + "name": "T5", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T5", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T6", + "name": "T6", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T6", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T7", + "name": "T7", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T7", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T8", + "name": "T8", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T8", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T9", + "name": "T9", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T9", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T10", + "name": "T10", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T10", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T11", + "name": "T11", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T11", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T12", + "name": "T12", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T12", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T13", + "name": "T13", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T13", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T14", + "name": "T14", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T14", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T15", + "name": "T15", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T15", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + { + "id": "T16", + "name": "T16", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T16", + "visible": true, + "position": {"x": 0, "y": 0, "z": 0}, + "size": {"width": 128.0, "height": 86, "depth":0}, + "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] + } + ] + }, + "data": {} + }, + + + { + "id": "RackT1", + "name": "RackT1", + + "children": [ + "RackT1_A1", + "RackT1_B1", + "RackT1_C1", + "RackT1_D1", + "RackT1_E1", + "RackT1_F1", + "RackT1_G1", + "RackT1_H1", + "RackT1_A2", + "RackT1_B2", + "RackT1_C2", + "RackT1_D2", + "RackT1_E2", + "RackT1_F2", + "RackT1_G2", + "RackT1_H2", + "RackT1_A3", + "RackT1_B3", + "RackT1_C3", + "RackT1_D3", + "RackT1_E3", + "RackT1_F3", + "RackT1_G3", + "RackT1_H3", + "RackT1_A4", + "RackT1_B4", + "RackT1_C4", + "RackT1_D4", + "RackT1_E4", + "RackT1_F4", + "RackT1_G4", + "RackT1_H4", + "RackT1_A5", + "RackT1_B5", + "RackT1_C5", + "RackT1_D5", + "RackT1_E5", + "RackT1_F5", + "RackT1_G5", + "RackT1_H5", + "RackT1_A6", + "RackT1_B6", + "RackT1_C6", + "RackT1_D6", + "RackT1_E6", + "RackT1_F6", + "RackT1_G6", + "RackT1_H6", + "RackT1_A7", + "RackT1_B7", + "RackT1_C7", + "RackT1_D7", + "RackT1_E7", + "RackT1_F7", + "RackT1_G7", + "RackT1_H7", + "RackT1_A8", + "RackT1_B8", + "RackT1_C8", + "RackT1_D8", + "RackT1_E8", + "RackT1_F8", + "RackT1_G8", + "RackT1_H8", + "RackT1_A9", + "RackT1_B9", + "RackT1_C9", + "RackT1_D9", + "RackT1_E9", + "RackT1_F9", + "RackT1_G9", + "RackT1_H9", + "RackT1_A10", + "RackT1_B10", + "RackT1_C10", + "RackT1_D10", + "RackT1_E10", + "RackT1_F10", + "RackT1_G10", + "RackT1_H10", + "RackT1_A11", + "RackT1_B11", + "RackT1_C11", + "RackT1_D11", + "RackT1_E11", + "RackT1_F11", + "RackT1_G11", + "RackT1_H11", + "RackT1_A12", + "RackT1_B12", + "RackT1_C12", + "RackT1_D12", + "RackT1_E12", + "RackT1_F12", + "RackT1_G12", + "RackT1_H12" + ], + "parent": "T1", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300TipRack", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "RackT1_A1", + "name": "RackT1_A1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B1", + "name": "RackT1_B1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C1", + "name": "RackT1_C1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D1", + "name": "RackT1_D1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E1", + "name": "RackT1_E1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F1", + "name": "RackT1_F1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G1", + "name": "RackT1_G1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H1", + "name": "RackT1_H1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A2", + "name": "RackT1_A2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B2", + "name": "RackT1_B2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C2", + "name": "RackT1_C2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D2", + "name": "RackT1_D2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E2", + "name": "RackT1_E2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F2", + "name": "RackT1_F2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G2", + "name": "RackT1_G2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H2", + "name": "RackT1_H2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A3", + "name": "RackT1_A3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B3", + "name": "RackT1_B3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C3", + "name": "RackT1_C3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D3", + "name": "RackT1_D3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E3", + "name": "RackT1_E3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F3", + "name": "RackT1_F3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G3", + "name": "RackT1_G3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H3", + "name": "RackT1_H3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A4", + "name": "RackT1_A4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B4", + "name": "RackT1_B4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C4", + "name": "RackT1_C4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D4", + "name": "RackT1_D4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E4", + "name": "RackT1_E4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F4", + "name": "RackT1_F4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G4", + "name": "RackT1_G4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H4", + "name": "RackT1_H4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A5", + "name": "RackT1_A5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B5", + "name": "RackT1_B5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C5", + "name": "RackT1_C5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D5", + "name": "RackT1_D5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E5", + "name": "RackT1_E5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F5", + "name": "RackT1_F5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G5", + "name": "RackT1_G5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H5", + "name": "RackT1_H5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A6", + "name": "RackT1_A6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B6", + "name": "RackT1_B6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C6", + "name": "RackT1_C6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D6", + "name": "RackT1_D6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E6", + "name": "RackT1_E6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F6", + "name": "RackT1_F6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G6", + "name": "RackT1_G6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H6", + "name": "RackT1_H6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A7", + "name": "RackT1_A7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B7", + "name": "RackT1_B7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C7", + "name": "RackT1_C7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D7", + "name": "RackT1_D7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E7", + "name": "RackT1_E7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F7", + "name": "RackT1_F7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G7", + "name": "RackT1_G7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H7", + "name": "RackT1_H7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A8", + "name": "RackT1_A8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B8", + "name": "RackT1_B8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C8", + "name": "RackT1_C8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D8", + "name": "RackT1_D8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E8", + "name": "RackT1_E8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F8", + "name": "RackT1_F8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G8", + "name": "RackT1_G8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H8", + "name": "RackT1_H8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A9", + "name": "RackT1_A9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B9", + "name": "RackT1_B9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C9", + "name": "RackT1_C9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D9", + "name": "RackT1_D9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E9", + "name": "RackT1_E9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F9", + "name": "RackT1_F9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G9", + "name": "RackT1_G9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H9", + "name": "RackT1_H9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A10", + "name": "RackT1_A10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B10", + "name": "RackT1_B10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C10", + "name": "RackT1_C10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D10", + "name": "RackT1_D10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E10", + "name": "RackT1_E10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F10", + "name": "RackT1_F10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G10", + "name": "RackT1_G10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H10", + "name": "RackT1_H10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A11", + "name": "RackT1_A11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B11", + "name": "RackT1_B11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C11", + "name": "RackT1_C11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D11", + "name": "RackT1_D11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E11", + "name": "RackT1_E11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F11", + "name": "RackT1_F11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G11", + "name": "RackT1_G11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H11", + "name": "RackT1_H11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A12", + "name": "RackT1_A12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B12", + "name": "RackT1_B12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C12", + "name": "RackT1_C12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D12", + "name": "RackT1_D12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E12", + "name": "RackT1_E12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F12", + "name": "RackT1_F12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G12", + "name": "RackT1_G12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H12", + "name": "RackT1_H12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT2", + "name": "PlateT2", + + "children": [ + "PlateT2_A1", + "PlateT2_B1", + "PlateT2_C1", + "PlateT2_D1", + "PlateT2_E1", + "PlateT2_F1", + "PlateT2_G1", + "PlateT2_H1", + "PlateT2_A2", + "PlateT2_B2", + "PlateT2_C2", + "PlateT2_D2", + "PlateT2_E2", + "PlateT2_F2", + "PlateT2_G2", + "PlateT2_H2", + "PlateT2_A3", + "PlateT2_B3", + "PlateT2_C3", + "PlateT2_D3", + "PlateT2_E3", + "PlateT2_F3", + "PlateT2_G3", + "PlateT2_H3", + "PlateT2_A4", + "PlateT2_B4", + "PlateT2_C4", + "PlateT2_D4", + "PlateT2_E4", + "PlateT2_F4", + "PlateT2_G4", + "PlateT2_H4", + "PlateT2_A5", + "PlateT2_B5", + "PlateT2_C5", + "PlateT2_D5", + "PlateT2_E5", + "PlateT2_F5", + "PlateT2_G5", + "PlateT2_H5", + "PlateT2_A6", + "PlateT2_B6", + "PlateT2_C6", + "PlateT2_D6", + "PlateT2_E6", + "PlateT2_F6", + "PlateT2_G6", + "PlateT2_H6", + "PlateT2_A7", + "PlateT2_B7", + "PlateT2_C7", + "PlateT2_D7", + "PlateT2_E7", + "PlateT2_F7", + "PlateT2_G7", + "PlateT2_H7", + "PlateT2_A8", + "PlateT2_B8", + "PlateT2_C8", + "PlateT2_D8", + "PlateT2_E8", + "PlateT2_F8", + "PlateT2_G8", + "PlateT2_H8", + "PlateT2_A9", + "PlateT2_B9", + "PlateT2_C9", + "PlateT2_D9", + "PlateT2_E9", + "PlateT2_F9", + "PlateT2_G9", + "PlateT2_H9", + "PlateT2_A10", + "PlateT2_B10", + "PlateT2_C10", + "PlateT2_D10", + "PlateT2_E10", + "PlateT2_F10", + "PlateT2_G10", + "PlateT2_H10", + "PlateT2_A11", + "PlateT2_B11", + "PlateT2_C11", + "PlateT2_D11", + "PlateT2_E11", + "PlateT2_F11", + "PlateT2_G11", + "PlateT2_H11", + "PlateT2_A12", + "PlateT2_B12", + "PlateT2_C12", + "PlateT2_D12", + "PlateT2_E12", + "PlateT2_F12", + "PlateT2_G12", + "PlateT2_H12" + ], + "parent": "T2", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT2_A1", + "B1": "PlateT2_B1", + "C1": "PlateT2_C1", + "D1": "PlateT2_D1", + "E1": "PlateT2_E1", + "F1": "PlateT2_F1", + "G1": "PlateT2_G1", + "H1": "PlateT2_H1", + "A2": "PlateT2_A2", + "B2": "PlateT2_B2", + "C2": "PlateT2_C2", + "D2": "PlateT2_D2", + "E2": "PlateT2_E2", + "F2": "PlateT2_F2", + "G2": "PlateT2_G2", + "H2": "PlateT2_H2", + "A3": "PlateT2_A3", + "B3": "PlateT2_B3", + "C3": "PlateT2_C3", + "D3": "PlateT2_D3", + "E3": "PlateT2_E3", + "F3": "PlateT2_F3", + "G3": "PlateT2_G3", + "H3": "PlateT2_H3", + "A4": "PlateT2_A4", + "B4": "PlateT2_B4", + "C4": "PlateT2_C4", + "D4": "PlateT2_D4", + "E4": "PlateT2_E4", + "F4": "PlateT2_F4", + "G4": "PlateT2_G4", + "H4": "PlateT2_H4", + "A5": "PlateT2_A5", + "B5": "PlateT2_B5", + "C5": "PlateT2_C5", + "D5": "PlateT2_D5", + "E5": "PlateT2_E5", + "F5": "PlateT2_F5", + "G5": "PlateT2_G5", + "H5": "PlateT2_H5", + "A6": "PlateT2_A6", + "B6": "PlateT2_B6", + "C6": "PlateT2_C6", + "D6": "PlateT2_D6", + "E6": "PlateT2_E6", + "F6": "PlateT2_F6", + "G6": "PlateT2_G6", + "H6": "PlateT2_H6", + "A7": "PlateT2_A7", + "B7": "PlateT2_B7", + "C7": "PlateT2_C7", + "D7": "PlateT2_D7", + "E7": "PlateT2_E7", + "F7": "PlateT2_F7", + "G7": "PlateT2_G7", + "H7": "PlateT2_H7", + "A8": "PlateT2_A8", + "B8": "PlateT2_B8", + "C8": "PlateT2_C8", + "D8": "PlateT2_D8", + "E8": "PlateT2_E8", + "F8": "PlateT2_F8", + "G8": "PlateT2_G8", + "H8": "PlateT2_H8", + "A9": "PlateT2_A9", + "B9": "PlateT2_B9", + "C9": "PlateT2_C9", + "D9": "PlateT2_D9", + "E9": "PlateT2_E9", + "F9": "PlateT2_F9", + "G9": "PlateT2_G9", + "H9": "PlateT2_H9", + "A10": "PlateT2_A10", + "B10": "PlateT2_B10", + "C10": "PlateT2_C10", + "D10": "PlateT2_D10", + "E10": "PlateT2_E10", + "F10": "PlateT2_F10", + "G10": "PlateT2_G10", + "H10": "PlateT2_H10", + "A11": "PlateT2_A11", + "B11": "PlateT2_B11", + "C11": "PlateT2_C11", + "D11": "PlateT2_D11", + "E11": "PlateT2_E11", + "F11": "PlateT2_F11", + "G11": "PlateT2_G11", + "H11": "PlateT2_H11", + "A12": "PlateT2_A12", + "B12": "PlateT2_B12", + "C12": "PlateT2_C12", + "D12": "PlateT2_D12", + "E12": "PlateT2_E12", + "F12": "PlateT2_F12", + "G12": "PlateT2_G12", + "H12": "PlateT2_H12" + } + }, + "data": { + "Material": { + "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", + "Code": "ZX-78-096", + "Name": "细菌培养皿" + } + } + }, + { + "id": "PlateT2_A1", + "name": "PlateT2_A1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B1", + "name": "PlateT2_B1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C1", + "name": "PlateT2_C1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D1", + "name": "PlateT2_D1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E1", + "name": "PlateT2_E1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F1", + "name": "PlateT2_F1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G1", + "name": "PlateT2_G1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H1", + "name": "PlateT2_H1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A2", + "name": "PlateT2_A2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B2", + "name": "PlateT2_B2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C2", + "name": "PlateT2_C2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D2", + "name": "PlateT2_D2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E2", + "name": "PlateT2_E2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F2", + "name": "PlateT2_F2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G2", + "name": "PlateT2_G2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H2", + "name": "PlateT2_H2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A3", + "name": "PlateT2_A3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B3", + "name": "PlateT2_B3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C3", + "name": "PlateT2_C3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D3", + "name": "PlateT2_D3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E3", + "name": "PlateT2_E3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F3", + "name": "PlateT2_F3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G3", + "name": "PlateT2_G3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H3", + "name": "PlateT2_H3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A4", + "name": "PlateT2_A4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B4", + "name": "PlateT2_B4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C4", + "name": "PlateT2_C4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D4", + "name": "PlateT2_D4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E4", + "name": "PlateT2_E4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F4", + "name": "PlateT2_F4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G4", + "name": "PlateT2_G4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H4", + "name": "PlateT2_H4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A5", + "name": "PlateT2_A5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B5", + "name": "PlateT2_B5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C5", + "name": "PlateT2_C5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D5", + "name": "PlateT2_D5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E5", + "name": "PlateT2_E5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F5", + "name": "PlateT2_F5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G5", + "name": "PlateT2_G5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H5", + "name": "PlateT2_H5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A6", + "name": "PlateT2_A6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B6", + "name": "PlateT2_B6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C6", + "name": "PlateT2_C6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D6", + "name": "PlateT2_D6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E6", + "name": "PlateT2_E6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F6", + "name": "PlateT2_F6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G6", + "name": "PlateT2_G6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H6", + "name": "PlateT2_H6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A7", + "name": "PlateT2_A7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B7", + "name": "PlateT2_B7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C7", + "name": "PlateT2_C7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D7", + "name": "PlateT2_D7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E7", + "name": "PlateT2_E7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F7", + "name": "PlateT2_F7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G7", + "name": "PlateT2_G7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H7", + "name": "PlateT2_H7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A8", + "name": "PlateT2_A8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B8", + "name": "PlateT2_B8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C8", + "name": "PlateT2_C8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D8", + "name": "PlateT2_D8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E8", + "name": "PlateT2_E8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F8", + "name": "PlateT2_F8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G8", + "name": "PlateT2_G8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H8", + "name": "PlateT2_H8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A9", + "name": "PlateT2_A9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B9", + "name": "PlateT2_B9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C9", + "name": "PlateT2_C9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D9", + "name": "PlateT2_D9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E9", + "name": "PlateT2_E9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F9", + "name": "PlateT2_F9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G9", + "name": "PlateT2_G9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H9", + "name": "PlateT2_H9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A10", + "name": "PlateT2_A10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B10", + "name": "PlateT2_B10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C10", + "name": "PlateT2_C10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D10", + "name": "PlateT2_D10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E10", + "name": "PlateT2_E10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F10", + "name": "PlateT2_F10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G10", + "name": "PlateT2_G10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H10", + "name": "PlateT2_H10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A11", + "name": "PlateT2_A11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B11", + "name": "PlateT2_B11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C11", + "name": "PlateT2_C11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D11", + "name": "PlateT2_D11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E11", + "name": "PlateT2_E11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F11", + "name": "PlateT2_F11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G11", + "name": "PlateT2_G11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H11", + "name": "PlateT2_H11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A12", + "name": "PlateT2_A12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B12", + "name": "PlateT2_B12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C12", + "name": "PlateT2_C12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D12", + "name": "PlateT2_D12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E12", + "name": "PlateT2_E12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F12", + "name": "PlateT2_F12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G12", + "name": "PlateT2_G12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H12", + "name": "PlateT2_H12", + + "children": [], + "parent": "PlateT2", + "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": "RackT5", + "name": "RackT5", + + "children": [ + "RackT5_A1", + "RackT5_B1", + "RackT5_C1", + "RackT5_D1", + "RackT5_E1", + "RackT5_F1", + "RackT5_G1", + "RackT5_H1", + "RackT5_A2", + "RackT5_B2", + "RackT5_C2", + "RackT5_D2", + "RackT5_E2", + "RackT5_F2", + "RackT5_G2", + "RackT5_H2", + "RackT5_A3", + "RackT5_B3", + "RackT5_C3", + "RackT5_D3", + "RackT5_E3", + "RackT5_F3", + "RackT5_G3", + "RackT5_H3", + "RackT5_A4", + "RackT5_B4", + "RackT5_C4", + "RackT5_D4", + "RackT5_E4", + "RackT5_F4", + "RackT5_G4", + "RackT5_H4", + "RackT5_A5", + "RackT5_B5", + "RackT5_C5", + "RackT5_D5", + "RackT5_E5", + "RackT5_F5", + "RackT5_G5", + "RackT5_H5", + "RackT5_A6", + "RackT5_B6", + "RackT5_C6", + "RackT5_D6", + "RackT5_E6", + "RackT5_F6", + "RackT5_G6", + "RackT5_H6", + "RackT5_A7", + "RackT5_B7", + "RackT5_C7", + "RackT5_D7", + "RackT5_E7", + "RackT5_F7", + "RackT5_G7", + "RackT5_H7", + "RackT5_A8", + "RackT5_B8", + "RackT5_C8", + "RackT5_D8", + "RackT5_E8", + "RackT5_F8", + "RackT5_G8", + "RackT5_H8", + "RackT5_A9", + "RackT5_B9", + "RackT5_C9", + "RackT5_D9", + "RackT5_E9", + "RackT5_F9", + "RackT5_G9", + "RackT5_H9", + "RackT5_A10", + "RackT5_B10", + "RackT5_C10", + "RackT5_D10", + "RackT5_E10", + "RackT5_F10", + "RackT5_G10", + "RackT5_H10", + "RackT5_A11", + "RackT5_B11", + "RackT5_C11", + "RackT5_D11", + "RackT5_E11", + "RackT5_F11", + "RackT5_G11", + "RackT5_H11", + "RackT5_A12", + "RackT5_B12", + "RackT5_C12", + "RackT5_D12", + "RackT5_E12", + "RackT5_F12", + "RackT5_G12", + "RackT5_H12" + ], + "parent": "T5", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300TipRack", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "SupplyType": 1, + "Name": "300μL Tip头" + } + } + }, + { + "id": "RackT5_A1", + "name": "RackT5_A1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B1", + "name": "RackT5_B1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C1", + "name": "RackT5_C1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D1", + "name": "RackT5_D1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E1", + "name": "RackT5_E1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F1", + "name": "RackT5_F1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G1", + "name": "RackT5_G1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H1", + "name": "RackT5_H1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A2", + "name": "RackT5_A2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B2", + "name": "RackT5_B2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C2", + "name": "RackT5_C2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D2", + "name": "RackT5_D2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E2", + "name": "RackT5_E2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F2", + "name": "RackT5_F2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G2", + "name": "RackT5_G2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H2", + "name": "RackT5_H2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A3", + "name": "RackT5_A3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B3", + "name": "RackT5_B3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C3", + "name": "RackT5_C3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D3", + "name": "RackT5_D3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E3", + "name": "RackT5_E3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F3", + "name": "RackT5_F3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G3", + "name": "RackT5_G3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H3", + "name": "RackT5_H3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A4", + "name": "RackT5_A4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B4", + "name": "RackT5_B4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C4", + "name": "RackT5_C4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D4", + "name": "RackT5_D4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E4", + "name": "RackT5_E4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F4", + "name": "RackT5_F4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G4", + "name": "RackT5_G4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H4", + "name": "RackT5_H4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A5", + "name": "RackT5_A5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B5", + "name": "RackT5_B5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C5", + "name": "RackT5_C5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D5", + "name": "RackT5_D5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E5", + "name": "RackT5_E5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F5", + "name": "RackT5_F5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G5", + "name": "RackT5_G5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H5", + "name": "RackT5_H5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A6", + "name": "RackT5_A6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B6", + "name": "RackT5_B6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C6", + "name": "RackT5_C6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D6", + "name": "RackT5_D6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E6", + "name": "RackT5_E6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F6", + "name": "RackT5_F6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G6", + "name": "RackT5_G6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H6", + "name": "RackT5_H6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A7", + "name": "RackT5_A7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B7", + "name": "RackT5_B7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C7", + "name": "RackT5_C7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D7", + "name": "RackT5_D7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E7", + "name": "RackT5_E7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F7", + "name": "RackT5_F7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G7", + "name": "RackT5_G7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H7", + "name": "RackT5_H7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A8", + "name": "RackT5_A8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B8", + "name": "RackT5_B8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C8", + "name": "RackT5_C8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D8", + "name": "RackT5_D8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E8", + "name": "RackT5_E8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F8", + "name": "RackT5_F8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G8", + "name": "RackT5_G8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H8", + "name": "RackT5_H8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A9", + "name": "RackT5_A9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B9", + "name": "RackT5_B9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C9", + "name": "RackT5_C9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D9", + "name": "RackT5_D9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E9", + "name": "RackT5_E9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F9", + "name": "RackT5_F9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G9", + "name": "RackT5_G9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H9", + "name": "RackT5_H9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A10", + "name": "RackT5_A10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B10", + "name": "RackT5_B10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C10", + "name": "RackT5_C10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D10", + "name": "RackT5_D10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E10", + "name": "RackT5_E10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F10", + "name": "RackT5_F10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G10", + "name": "RackT5_G10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H10", + "name": "RackT5_H10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A11", + "name": "RackT5_A11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B11", + "name": "RackT5_B11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C11", + "name": "RackT5_C11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D11", + "name": "RackT5_D11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E11", + "name": "RackT5_E11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F11", + "name": "RackT5_F11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G11", + "name": "RackT5_G11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H11", + "name": "RackT5_H11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A12", + "name": "RackT5_A12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B12", + "name": "RackT5_B12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C12", + "name": "RackT5_C12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D12", + "name": "RackT5_D12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E12", + "name": "RackT5_E12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F12", + "name": "RackT5_F12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G12", + "name": "RackT5_G12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H12", + "name": "RackT5_H12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT6", + "name": "PlateT6", + + "children": [ + "PlateT6_A1", + "PlateT6_B1", + "PlateT6_C1", + "PlateT6_D1", + "PlateT6_E1", + "PlateT6_F1", + "PlateT6_G1", + "PlateT6_H1", + "PlateT6_A2", + "PlateT6_B2", + "PlateT6_C2", + "PlateT6_D2", + "PlateT6_E2", + "PlateT6_F2", + "PlateT6_G2", + "PlateT6_H2", + "PlateT6_A3", + "PlateT6_B3", + "PlateT6_C3", + "PlateT6_D3", + "PlateT6_E3", + "PlateT6_F3", + "PlateT6_G3", + "PlateT6_H3", + "PlateT6_A4", + "PlateT6_B4", + "PlateT6_C4", + "PlateT6_D4", + "PlateT6_E4", + "PlateT6_F4", + "PlateT6_G4", + "PlateT6_H4", + "PlateT6_A5", + "PlateT6_B5", + "PlateT6_C5", + "PlateT6_D5", + "PlateT6_E5", + "PlateT6_F5", + "PlateT6_G5", + "PlateT6_H5", + "PlateT6_A6", + "PlateT6_B6", + "PlateT6_C6", + "PlateT6_D6", + "PlateT6_E6", + "PlateT6_F6", + "PlateT6_G6", + "PlateT6_H6", + "PlateT6_A7", + "PlateT6_B7", + "PlateT6_C7", + "PlateT6_D7", + "PlateT6_E7", + "PlateT6_F7", + "PlateT6_G7", + "PlateT6_H7", + "PlateT6_A8", + "PlateT6_B8", + "PlateT6_C8", + "PlateT6_D8", + "PlateT6_E8", + "PlateT6_F8", + "PlateT6_G8", + "PlateT6_H8", + "PlateT6_A9", + "PlateT6_B9", + "PlateT6_C9", + "PlateT6_D9", + "PlateT6_E9", + "PlateT6_F9", + "PlateT6_G9", + "PlateT6_H9", + "PlateT6_A10", + "PlateT6_B10", + "PlateT6_C10", + "PlateT6_D10", + "PlateT6_E10", + "PlateT6_F10", + "PlateT6_G10", + "PlateT6_H10", + "PlateT6_A11", + "PlateT6_B11", + "PlateT6_C11", + "PlateT6_D11", + "PlateT6_E11", + "PlateT6_F11", + "PlateT6_G11", + "PlateT6_H11", + "PlateT6_A12", + "PlateT6_B12", + "PlateT6_C12", + "PlateT6_D12", + "PlateT6_E12", + "PlateT6_F12", + "PlateT6_G12", + "PlateT6_H12" + ], + "parent": "T6", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT6_A1", + "B1": "PlateT6_B1", + "C1": "PlateT6_C1", + "D1": "PlateT6_D1", + "E1": "PlateT6_E1", + "F1": "PlateT6_F1", + "G1": "PlateT6_G1", + "H1": "PlateT6_H1", + "A2": "PlateT6_A2", + "B2": "PlateT6_B2", + "C2": "PlateT6_C2", + "D2": "PlateT6_D2", + "E2": "PlateT6_E2", + "F2": "PlateT6_F2", + "G2": "PlateT6_G2", + "H2": "PlateT6_H2", + "A3": "PlateT6_A3", + "B3": "PlateT6_B3", + "C3": "PlateT6_C3", + "D3": "PlateT6_D3", + "E3": "PlateT6_E3", + "F3": "PlateT6_F3", + "G3": "PlateT6_G3", + "H3": "PlateT6_H3", + "A4": "PlateT6_A4", + "B4": "PlateT6_B4", + "C4": "PlateT6_C4", + "D4": "PlateT6_D4", + "E4": "PlateT6_E4", + "F4": "PlateT6_F4", + "G4": "PlateT6_G4", + "H4": "PlateT6_H4", + "A5": "PlateT6_A5", + "B5": "PlateT6_B5", + "C5": "PlateT6_C5", + "D5": "PlateT6_D5", + "E5": "PlateT6_E5", + "F5": "PlateT6_F5", + "G5": "PlateT6_G5", + "H5": "PlateT6_H5", + "A6": "PlateT6_A6", + "B6": "PlateT6_B6", + "C6": "PlateT6_C6", + "D6": "PlateT6_D6", + "E6": "PlateT6_E6", + "F6": "PlateT6_F6", + "G6": "PlateT6_G6", + "H6": "PlateT6_H6", + "A7": "PlateT6_A7", + "B7": "PlateT6_B7", + "C7": "PlateT6_C7", + "D7": "PlateT6_D7", + "E7": "PlateT6_E7", + "F7": "PlateT6_F7", + "G7": "PlateT6_G7", + "H7": "PlateT6_H7", + "A8": "PlateT6_A8", + "B8": "PlateT6_B8", + "C8": "PlateT6_C8", + "D8": "PlateT6_D8", + "E8": "PlateT6_E8", + "F8": "PlateT6_F8", + "G8": "PlateT6_G8", + "H8": "PlateT6_H8", + "A9": "PlateT6_A9", + "B9": "PlateT6_B9", + "C9": "PlateT6_C9", + "D9": "PlateT6_D9", + "E9": "PlateT6_E9", + "F9": "PlateT6_F9", + "G9": "PlateT6_G9", + "H9": "PlateT6_H9", + "A10": "PlateT6_A10", + "B10": "PlateT6_B10", + "C10": "PlateT6_C10", + "D10": "PlateT6_D10", + "E10": "PlateT6_E10", + "F10": "PlateT6_F10", + "G10": "PlateT6_G10", + "H10": "PlateT6_H10", + "A11": "PlateT6_A11", + "B11": "PlateT6_B11", + "C11": "PlateT6_C11", + "D11": "PlateT6_D11", + "E11": "PlateT6_E11", + "F11": "PlateT6_F11", + "G11": "PlateT6_G11", + "H11": "PlateT6_H11", + "A12": "PlateT6_A12", + "B12": "PlateT6_B12", + "C12": "PlateT6_C12", + "D12": "PlateT6_D12", + "E12": "PlateT6_E12", + "F12": "PlateT6_F12", + "G12": "PlateT6_G12", + "H12": "PlateT6_H12" + } + }, + "data": { + "Material": { + "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", + "Code": "1", + "SupplyType": 1, + "Name": "ep适配器", + "SummaryName": "ep适配器" + } + } + }, + { + "id": "PlateT6_A1", + "name": "PlateT6_A1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B1", + "name": "PlateT6_B1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C1", + "name": "PlateT6_C1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D1", + "name": "PlateT6_D1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E1", + "name": "PlateT6_E1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F1", + "name": "PlateT6_F1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G1", + "name": "PlateT6_G1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H1", + "name": "PlateT6_H1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A2", + "name": "PlateT6_A2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B2", + "name": "PlateT6_B2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C2", + "name": "PlateT6_C2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D2", + "name": "PlateT6_D2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E2", + "name": "PlateT6_E2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F2", + "name": "PlateT6_F2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G2", + "name": "PlateT6_G2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H2", + "name": "PlateT6_H2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A3", + "name": "PlateT6_A3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B3", + "name": "PlateT6_B3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C3", + "name": "PlateT6_C3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D3", + "name": "PlateT6_D3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E3", + "name": "PlateT6_E3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F3", + "name": "PlateT6_F3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G3", + "name": "PlateT6_G3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H3", + "name": "PlateT6_H3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A4", + "name": "PlateT6_A4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B4", + "name": "PlateT6_B4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C4", + "name": "PlateT6_C4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D4", + "name": "PlateT6_D4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E4", + "name": "PlateT6_E4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F4", + "name": "PlateT6_F4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G4", + "name": "PlateT6_G4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H4", + "name": "PlateT6_H4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A5", + "name": "PlateT6_A5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B5", + "name": "PlateT6_B5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C5", + "name": "PlateT6_C5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D5", + "name": "PlateT6_D5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E5", + "name": "PlateT6_E5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F5", + "name": "PlateT6_F5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G5", + "name": "PlateT6_G5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H5", + "name": "PlateT6_H5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A6", + "name": "PlateT6_A6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B6", + "name": "PlateT6_B6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C6", + "name": "PlateT6_C6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D6", + "name": "PlateT6_D6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E6", + "name": "PlateT6_E6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F6", + "name": "PlateT6_F6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G6", + "name": "PlateT6_G6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H6", + "name": "PlateT6_H6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A7", + "name": "PlateT6_A7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B7", + "name": "PlateT6_B7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C7", + "name": "PlateT6_C7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D7", + "name": "PlateT6_D7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E7", + "name": "PlateT6_E7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F7", + "name": "PlateT6_F7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G7", + "name": "PlateT6_G7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H7", + "name": "PlateT6_H7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A8", + "name": "PlateT6_A8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B8", + "name": "PlateT6_B8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C8", + "name": "PlateT6_C8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D8", + "name": "PlateT6_D8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E8", + "name": "PlateT6_E8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F8", + "name": "PlateT6_F8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G8", + "name": "PlateT6_G8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H8", + "name": "PlateT6_H8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A9", + "name": "PlateT6_A9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B9", + "name": "PlateT6_B9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C9", + "name": "PlateT6_C9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D9", + "name": "PlateT6_D9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E9", + "name": "PlateT6_E9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F9", + "name": "PlateT6_F9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G9", + "name": "PlateT6_G9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H9", + "name": "PlateT6_H9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A10", + "name": "PlateT6_A10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B10", + "name": "PlateT6_B10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C10", + "name": "PlateT6_C10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D10", + "name": "PlateT6_D10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E10", + "name": "PlateT6_E10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F10", + "name": "PlateT6_F10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G10", + "name": "PlateT6_G10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H10", + "name": "PlateT6_H10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A11", + "name": "PlateT6_A11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B11", + "name": "PlateT6_B11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C11", + "name": "PlateT6_C11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D11", + "name": "PlateT6_D11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E11", + "name": "PlateT6_E11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F11", + "name": "PlateT6_F11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G11", + "name": "PlateT6_G11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H11", + "name": "PlateT6_H11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A12", + "name": "PlateT6_A12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B12", + "name": "PlateT6_B12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C12", + "name": "PlateT6_C12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D12", + "name": "PlateT6_D12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E12", + "name": "PlateT6_E12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F12", + "name": "PlateT6_F12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G12", + "name": "PlateT6_G12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H12", + "name": "PlateT6_H12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT9", + "name": "PlateT9", + + "children": [ + "PlateT9_A1", + "PlateT9_B1", + "PlateT9_C1", + "PlateT9_D1", + "PlateT9_E1", + "PlateT9_F1", + "PlateT9_G1", + "PlateT9_H1", + "PlateT9_A2", + "PlateT9_B2", + "PlateT9_C2", + "PlateT9_D2", + "PlateT9_E2", + "PlateT9_F2", + "PlateT9_G2", + "PlateT9_H2", + "PlateT9_A3", + "PlateT9_B3", + "PlateT9_C3", + "PlateT9_D3", + "PlateT9_E3", + "PlateT9_F3", + "PlateT9_G3", + "PlateT9_H3", + "PlateT9_A4", + "PlateT9_B4", + "PlateT9_C4", + "PlateT9_D4", + "PlateT9_E4", + "PlateT9_F4", + "PlateT9_G4", + "PlateT9_H4", + "PlateT9_A5", + "PlateT9_B5", + "PlateT9_C5", + "PlateT9_D5", + "PlateT9_E5", + "PlateT9_F5", + "PlateT9_G5", + "PlateT9_H5", + "PlateT9_A6", + "PlateT9_B6", + "PlateT9_C6", + "PlateT9_D6", + "PlateT9_E6", + "PlateT9_F6", + "PlateT9_G6", + "PlateT9_H6", + "PlateT9_A7", + "PlateT9_B7", + "PlateT9_C7", + "PlateT9_D7", + "PlateT9_E7", + "PlateT9_F7", + "PlateT9_G7", + "PlateT9_H7", + "PlateT9_A8", + "PlateT9_B8", + "PlateT9_C8", + "PlateT9_D8", + "PlateT9_E8", + "PlateT9_F8", + "PlateT9_G8", + "PlateT9_H8", + "PlateT9_A9", + "PlateT9_B9", + "PlateT9_C9", + "PlateT9_D9", + "PlateT9_E9", + "PlateT9_F9", + "PlateT9_G9", + "PlateT9_H9", + "PlateT9_A10", + "PlateT9_B10", + "PlateT9_C10", + "PlateT9_D10", + "PlateT9_E10", + "PlateT9_F10", + "PlateT9_G10", + "PlateT9_H10", + "PlateT9_A11", + "PlateT9_B11", + "PlateT9_C11", + "PlateT9_D11", + "PlateT9_E11", + "PlateT9_F11", + "PlateT9_G11", + "PlateT9_H11", + "PlateT9_A12", + "PlateT9_B12", + "PlateT9_C12", + "PlateT9_D12", + "PlateT9_E12", + "PlateT9_F12", + "PlateT9_G12", + "PlateT9_H12" + ], + "parent": "T9", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT9_A1", + "B1": "PlateT9_B1", + "C1": "PlateT9_C1", + "D1": "PlateT9_D1", + "E1": "PlateT9_E1", + "F1": "PlateT9_F1", + "G1": "PlateT9_G1", + "H1": "PlateT9_H1", + "A2": "PlateT9_A2", + "B2": "PlateT9_B2", + "C2": "PlateT9_C2", + "D2": "PlateT9_D2", + "E2": "PlateT9_E2", + "F2": "PlateT9_F2", + "G2": "PlateT9_G2", + "H2": "PlateT9_H2", + "A3": "PlateT9_A3", + "B3": "PlateT9_B3", + "C3": "PlateT9_C3", + "D3": "PlateT9_D3", + "E3": "PlateT9_E3", + "F3": "PlateT9_F3", + "G3": "PlateT9_G3", + "H3": "PlateT9_H3", + "A4": "PlateT9_A4", + "B4": "PlateT9_B4", + "C4": "PlateT9_C4", + "D4": "PlateT9_D4", + "E4": "PlateT9_E4", + "F4": "PlateT9_F4", + "G4": "PlateT9_G4", + "H4": "PlateT9_H4", + "A5": "PlateT9_A5", + "B5": "PlateT9_B5", + "C5": "PlateT9_C5", + "D5": "PlateT9_D5", + "E5": "PlateT9_E5", + "F5": "PlateT9_F5", + "G5": "PlateT9_G5", + "H5": "PlateT9_H5", + "A6": "PlateT9_A6", + "B6": "PlateT9_B6", + "C6": "PlateT9_C6", + "D6": "PlateT9_D6", + "E6": "PlateT9_E6", + "F6": "PlateT9_F6", + "G6": "PlateT9_G6", + "H6": "PlateT9_H6", + "A7": "PlateT9_A7", + "B7": "PlateT9_B7", + "C7": "PlateT9_C7", + "D7": "PlateT9_D7", + "E7": "PlateT9_E7", + "F7": "PlateT9_F7", + "G7": "PlateT9_G7", + "H7": "PlateT9_H7", + "A8": "PlateT9_A8", + "B8": "PlateT9_B8", + "C8": "PlateT9_C8", + "D8": "PlateT9_D8", + "E8": "PlateT9_E8", + "F8": "PlateT9_F8", + "G8": "PlateT9_G8", + "H8": "PlateT9_H8", + "A9": "PlateT9_A9", + "B9": "PlateT9_B9", + "C9": "PlateT9_C9", + "D9": "PlateT9_D9", + "E9": "PlateT9_E9", + "F9": "PlateT9_F9", + "G9": "PlateT9_G9", + "H9": "PlateT9_H9", + "A10": "PlateT9_A10", + "B10": "PlateT9_B10", + "C10": "PlateT9_C10", + "D10": "PlateT9_D10", + "E10": "PlateT9_E10", + "F10": "PlateT9_F10", + "G10": "PlateT9_G10", + "H10": "PlateT9_H10", + "A11": "PlateT9_A11", + "B11": "PlateT9_B11", + "C11": "PlateT9_C11", + "D11": "PlateT9_D11", + "E11": "PlateT9_E11", + "F11": "PlateT9_F11", + "G11": "PlateT9_G11", + "H11": "PlateT9_H11", + "A12": "PlateT9_A12", + "B12": "PlateT9_B12", + "C12": "PlateT9_C12", + "D12": "PlateT9_D12", + "E12": "PlateT9_E12", + "F12": "PlateT9_F12", + "G12": "PlateT9_G12", + "H12": "PlateT9_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT9_A1", + "name": "PlateT9_A1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B1", + "name": "PlateT9_B1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C1", + "name": "PlateT9_C1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D1", + "name": "PlateT9_D1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E1", + "name": "PlateT9_E1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F1", + "name": "PlateT9_F1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G1", + "name": "PlateT9_G1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H1", + "name": "PlateT9_H1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A2", + "name": "PlateT9_A2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B2", + "name": "PlateT9_B2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C2", + "name": "PlateT9_C2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D2", + "name": "PlateT9_D2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E2", + "name": "PlateT9_E2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F2", + "name": "PlateT9_F2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G2", + "name": "PlateT9_G2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H2", + "name": "PlateT9_H2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A3", + "name": "PlateT9_A3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B3", + "name": "PlateT9_B3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C3", + "name": "PlateT9_C3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D3", + "name": "PlateT9_D3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E3", + "name": "PlateT9_E3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F3", + "name": "PlateT9_F3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G3", + "name": "PlateT9_G3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H3", + "name": "PlateT9_H3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A4", + "name": "PlateT9_A4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B4", + "name": "PlateT9_B4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C4", + "name": "PlateT9_C4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D4", + "name": "PlateT9_D4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E4", + "name": "PlateT9_E4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F4", + "name": "PlateT9_F4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G4", + "name": "PlateT9_G4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H4", + "name": "PlateT9_H4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A5", + "name": "PlateT9_A5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B5", + "name": "PlateT9_B5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C5", + "name": "PlateT9_C5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D5", + "name": "PlateT9_D5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E5", + "name": "PlateT9_E5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F5", + "name": "PlateT9_F5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G5", + "name": "PlateT9_G5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H5", + "name": "PlateT9_H5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A6", + "name": "PlateT9_A6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B6", + "name": "PlateT9_B6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C6", + "name": "PlateT9_C6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D6", + "name": "PlateT9_D6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E6", + "name": "PlateT9_E6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F6", + "name": "PlateT9_F6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G6", + "name": "PlateT9_G6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H6", + "name": "PlateT9_H6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A7", + "name": "PlateT9_A7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B7", + "name": "PlateT9_B7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C7", + "name": "PlateT9_C7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D7", + "name": "PlateT9_D7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E7", + "name": "PlateT9_E7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F7", + "name": "PlateT9_F7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G7", + "name": "PlateT9_G7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H7", + "name": "PlateT9_H7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A8", + "name": "PlateT9_A8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B8", + "name": "PlateT9_B8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C8", + "name": "PlateT9_C8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D8", + "name": "PlateT9_D8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E8", + "name": "PlateT9_E8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F8", + "name": "PlateT9_F8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G8", + "name": "PlateT9_G8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H8", + "name": "PlateT9_H8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A9", + "name": "PlateT9_A9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B9", + "name": "PlateT9_B9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C9", + "name": "PlateT9_C9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D9", + "name": "PlateT9_D9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E9", + "name": "PlateT9_E9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F9", + "name": "PlateT9_F9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G9", + "name": "PlateT9_G9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H9", + "name": "PlateT9_H9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A10", + "name": "PlateT9_A10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B10", + "name": "PlateT9_B10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C10", + "name": "PlateT9_C10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D10", + "name": "PlateT9_D10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E10", + "name": "PlateT9_E10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F10", + "name": "PlateT9_F10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G10", + "name": "PlateT9_G10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H10", + "name": "PlateT9_H10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A11", + "name": "PlateT9_A11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B11", + "name": "PlateT9_B11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C11", + "name": "PlateT9_C11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D11", + "name": "PlateT9_D11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E11", + "name": "PlateT9_E11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F11", + "name": "PlateT9_F11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G11", + "name": "PlateT9_G11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H11", + "name": "PlateT9_H11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A12", + "name": "PlateT9_A12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B12", + "name": "PlateT9_B12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C12", + "name": "PlateT9_C12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D12", + "name": "PlateT9_D12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E12", + "name": "PlateT9_E12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F12", + "name": "PlateT9_F12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G12", + "name": "PlateT9_G12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H12", + "name": "PlateT9_H12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT10", + "name": "PlateT10", + + "children": [ + "PlateT10_A1", + "PlateT10_B1", + "PlateT10_C1", + "PlateT10_D1", + "PlateT10_E1", + "PlateT10_F1", + "PlateT10_G1", + "PlateT10_H1", + "PlateT10_A2", + "PlateT10_B2", + "PlateT10_C2", + "PlateT10_D2", + "PlateT10_E2", + "PlateT10_F2", + "PlateT10_G2", + "PlateT10_H2", + "PlateT10_A3", + "PlateT10_B3", + "PlateT10_C3", + "PlateT10_D3", + "PlateT10_E3", + "PlateT10_F3", + "PlateT10_G3", + "PlateT10_H3", + "PlateT10_A4", + "PlateT10_B4", + "PlateT10_C4", + "PlateT10_D4", + "PlateT10_E4", + "PlateT10_F4", + "PlateT10_G4", + "PlateT10_H4", + "PlateT10_A5", + "PlateT10_B5", + "PlateT10_C5", + "PlateT10_D5", + "PlateT10_E5", + "PlateT10_F5", + "PlateT10_G5", + "PlateT10_H5", + "PlateT10_A6", + "PlateT10_B6", + "PlateT10_C6", + "PlateT10_D6", + "PlateT10_E6", + "PlateT10_F6", + "PlateT10_G6", + "PlateT10_H6", + "PlateT10_A7", + "PlateT10_B7", + "PlateT10_C7", + "PlateT10_D7", + "PlateT10_E7", + "PlateT10_F7", + "PlateT10_G7", + "PlateT10_H7", + "PlateT10_A8", + "PlateT10_B8", + "PlateT10_C8", + "PlateT10_D8", + "PlateT10_E8", + "PlateT10_F8", + "PlateT10_G8", + "PlateT10_H8", + "PlateT10_A9", + "PlateT10_B9", + "PlateT10_C9", + "PlateT10_D9", + "PlateT10_E9", + "PlateT10_F9", + "PlateT10_G9", + "PlateT10_H9", + "PlateT10_A10", + "PlateT10_B10", + "PlateT10_C10", + "PlateT10_D10", + "PlateT10_E10", + "PlateT10_F10", + "PlateT10_G10", + "PlateT10_H10", + "PlateT10_A11", + "PlateT10_B11", + "PlateT10_C11", + "PlateT10_D11", + "PlateT10_E11", + "PlateT10_F11", + "PlateT10_G11", + "PlateT10_H11", + "PlateT10_A12", + "PlateT10_B12", + "PlateT10_C12", + "PlateT10_D12", + "PlateT10_E12", + "PlateT10_F12", + "PlateT10_G12", + "PlateT10_H12" + ], + "parent": "T10", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT10_A1", + "B1": "PlateT10_B1", + "C1": "PlateT10_C1", + "D1": "PlateT10_D1", + "E1": "PlateT10_E1", + "F1": "PlateT10_F1", + "G1": "PlateT10_G1", + "H1": "PlateT10_H1", + "A2": "PlateT10_A2", + "B2": "PlateT10_B2", + "C2": "PlateT10_C2", + "D2": "PlateT10_D2", + "E2": "PlateT10_E2", + "F2": "PlateT10_F2", + "G2": "PlateT10_G2", + "H2": "PlateT10_H2", + "A3": "PlateT10_A3", + "B3": "PlateT10_B3", + "C3": "PlateT10_C3", + "D3": "PlateT10_D3", + "E3": "PlateT10_E3", + "F3": "PlateT10_F3", + "G3": "PlateT10_G3", + "H3": "PlateT10_H3", + "A4": "PlateT10_A4", + "B4": "PlateT10_B4", + "C4": "PlateT10_C4", + "D4": "PlateT10_D4", + "E4": "PlateT10_E4", + "F4": "PlateT10_F4", + "G4": "PlateT10_G4", + "H4": "PlateT10_H4", + "A5": "PlateT10_A5", + "B5": "PlateT10_B5", + "C5": "PlateT10_C5", + "D5": "PlateT10_D5", + "E5": "PlateT10_E5", + "F5": "PlateT10_F5", + "G5": "PlateT10_G5", + "H5": "PlateT10_H5", + "A6": "PlateT10_A6", + "B6": "PlateT10_B6", + "C6": "PlateT10_C6", + "D6": "PlateT10_D6", + "E6": "PlateT10_E6", + "F6": "PlateT10_F6", + "G6": "PlateT10_G6", + "H6": "PlateT10_H6", + "A7": "PlateT10_A7", + "B7": "PlateT10_B7", + "C7": "PlateT10_C7", + "D7": "PlateT10_D7", + "E7": "PlateT10_E7", + "F7": "PlateT10_F7", + "G7": "PlateT10_G7", + "H7": "PlateT10_H7", + "A8": "PlateT10_A8", + "B8": "PlateT10_B8", + "C8": "PlateT10_C8", + "D8": "PlateT10_D8", + "E8": "PlateT10_E8", + "F8": "PlateT10_F8", + "G8": "PlateT10_G8", + "H8": "PlateT10_H8", + "A9": "PlateT10_A9", + "B9": "PlateT10_B9", + "C9": "PlateT10_C9", + "D9": "PlateT10_D9", + "E9": "PlateT10_E9", + "F9": "PlateT10_F9", + "G9": "PlateT10_G9", + "H9": "PlateT10_H9", + "A10": "PlateT10_A10", + "B10": "PlateT10_B10", + "C10": "PlateT10_C10", + "D10": "PlateT10_D10", + "E10": "PlateT10_E10", + "F10": "PlateT10_F10", + "G10": "PlateT10_G10", + "H10": "PlateT10_H10", + "A11": "PlateT10_A11", + "B11": "PlateT10_B11", + "C11": "PlateT10_C11", + "D11": "PlateT10_D11", + "E11": "PlateT10_E11", + "F11": "PlateT10_F11", + "G11": "PlateT10_G11", + "H11": "PlateT10_H11", + "A12": "PlateT10_A12", + "B12": "PlateT10_B12", + "C12": "PlateT10_C12", + "D12": "PlateT10_D12", + "E12": "PlateT10_E12", + "F12": "PlateT10_F12", + "G12": "PlateT10_G12", + "H12": "PlateT10_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT10_A1", + "name": "PlateT10_A1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B1", + "name": "PlateT10_B1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C1", + "name": "PlateT10_C1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D1", + "name": "PlateT10_D1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E1", + "name": "PlateT10_E1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F1", + "name": "PlateT10_F1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G1", + "name": "PlateT10_G1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H1", + "name": "PlateT10_H1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A2", + "name": "PlateT10_A2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B2", + "name": "PlateT10_B2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C2", + "name": "PlateT10_C2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D2", + "name": "PlateT10_D2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E2", + "name": "PlateT10_E2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F2", + "name": "PlateT10_F2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G2", + "name": "PlateT10_G2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H2", + "name": "PlateT10_H2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A3", + "name": "PlateT10_A3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B3", + "name": "PlateT10_B3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C3", + "name": "PlateT10_C3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D3", + "name": "PlateT10_D3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E3", + "name": "PlateT10_E3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F3", + "name": "PlateT10_F3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G3", + "name": "PlateT10_G3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H3", + "name": "PlateT10_H3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A4", + "name": "PlateT10_A4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B4", + "name": "PlateT10_B4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C4", + "name": "PlateT10_C4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D4", + "name": "PlateT10_D4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E4", + "name": "PlateT10_E4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F4", + "name": "PlateT10_F4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G4", + "name": "PlateT10_G4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H4", + "name": "PlateT10_H4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A5", + "name": "PlateT10_A5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B5", + "name": "PlateT10_B5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C5", + "name": "PlateT10_C5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D5", + "name": "PlateT10_D5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E5", + "name": "PlateT10_E5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F5", + "name": "PlateT10_F5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G5", + "name": "PlateT10_G5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H5", + "name": "PlateT10_H5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A6", + "name": "PlateT10_A6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B6", + "name": "PlateT10_B6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C6", + "name": "PlateT10_C6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D6", + "name": "PlateT10_D6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E6", + "name": "PlateT10_E6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F6", + "name": "PlateT10_F6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G6", + "name": "PlateT10_G6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H6", + "name": "PlateT10_H6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A7", + "name": "PlateT10_A7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B7", + "name": "PlateT10_B7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C7", + "name": "PlateT10_C7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D7", + "name": "PlateT10_D7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E7", + "name": "PlateT10_E7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F7", + "name": "PlateT10_F7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G7", + "name": "PlateT10_G7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H7", + "name": "PlateT10_H7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A8", + "name": "PlateT10_A8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B8", + "name": "PlateT10_B8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C8", + "name": "PlateT10_C8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D8", + "name": "PlateT10_D8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E8", + "name": "PlateT10_E8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F8", + "name": "PlateT10_F8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G8", + "name": "PlateT10_G8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H8", + "name": "PlateT10_H8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A9", + "name": "PlateT10_A9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B9", + "name": "PlateT10_B9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C9", + "name": "PlateT10_C9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D9", + "name": "PlateT10_D9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E9", + "name": "PlateT10_E9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F9", + "name": "PlateT10_F9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G9", + "name": "PlateT10_G9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H9", + "name": "PlateT10_H9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A10", + "name": "PlateT10_A10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B10", + "name": "PlateT10_B10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C10", + "name": "PlateT10_C10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D10", + "name": "PlateT10_D10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E10", + "name": "PlateT10_E10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F10", + "name": "PlateT10_F10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G10", + "name": "PlateT10_G10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H10", + "name": "PlateT10_H10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A11", + "name": "PlateT10_A11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B11", + "name": "PlateT10_B11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C11", + "name": "PlateT10_C11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D11", + "name": "PlateT10_D11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E11", + "name": "PlateT10_E11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F11", + "name": "PlateT10_F11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G11", + "name": "PlateT10_G11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H11", + "name": "PlateT10_H11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A12", + "name": "PlateT10_A12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B12", + "name": "PlateT10_B12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C12", + "name": "PlateT10_C12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D12", + "name": "PlateT10_D12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E12", + "name": "PlateT10_E12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F12", + "name": "PlateT10_F12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G12", + "name": "PlateT10_G12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H12", + "name": "PlateT10_H12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT13", + "name": "PlateT13", + + "children": [ + "PlateT13_A1", + "PlateT13_B1", + "PlateT13_C1", + "PlateT13_D1", + "PlateT13_E1", + "PlateT13_F1", + "PlateT13_G1", + "PlateT13_H1", + "PlateT13_A2", + "PlateT13_B2", + "PlateT13_C2", + "PlateT13_D2", + "PlateT13_E2", + "PlateT13_F2", + "PlateT13_G2", + "PlateT13_H2", + "PlateT13_A3", + "PlateT13_B3", + "PlateT13_C3", + "PlateT13_D3", + "PlateT13_E3", + "PlateT13_F3", + "PlateT13_G3", + "PlateT13_H3", + "PlateT13_A4", + "PlateT13_B4", + "PlateT13_C4", + "PlateT13_D4", + "PlateT13_E4", + "PlateT13_F4", + "PlateT13_G4", + "PlateT13_H4", + "PlateT13_A5", + "PlateT13_B5", + "PlateT13_C5", + "PlateT13_D5", + "PlateT13_E5", + "PlateT13_F5", + "PlateT13_G5", + "PlateT13_H5", + "PlateT13_A6", + "PlateT13_B6", + "PlateT13_C6", + "PlateT13_D6", + "PlateT13_E6", + "PlateT13_F6", + "PlateT13_G6", + "PlateT13_H6", + "PlateT13_A7", + "PlateT13_B7", + "PlateT13_C7", + "PlateT13_D7", + "PlateT13_E7", + "PlateT13_F7", + "PlateT13_G7", + "PlateT13_H7", + "PlateT13_A8", + "PlateT13_B8", + "PlateT13_C8", + "PlateT13_D8", + "PlateT13_E8", + "PlateT13_F8", + "PlateT13_G8", + "PlateT13_H8", + "PlateT13_A9", + "PlateT13_B9", + "PlateT13_C9", + "PlateT13_D9", + "PlateT13_E9", + "PlateT13_F9", + "PlateT13_G9", + "PlateT13_H9", + "PlateT13_A10", + "PlateT13_B10", + "PlateT13_C10", + "PlateT13_D10", + "PlateT13_E10", + "PlateT13_F10", + "PlateT13_G10", + "PlateT13_H10", + "PlateT13_A11", + "PlateT13_B11", + "PlateT13_C11", + "PlateT13_D11", + "PlateT13_E11", + "PlateT13_F11", + "PlateT13_G11", + "PlateT13_H11", + "PlateT13_A12", + "PlateT13_B12", + "PlateT13_C12", + "PlateT13_D12", + "PlateT13_E12", + "PlateT13_F12", + "PlateT13_G12", + "PlateT13_H12" + ], + "parent": "T13", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT13_A1", + "B1": "PlateT13_B1", + "C1": "PlateT13_C1", + "D1": "PlateT13_D1", + "E1": "PlateT13_E1", + "F1": "PlateT13_F1", + "G1": "PlateT13_G1", + "H1": "PlateT13_H1", + "A2": "PlateT13_A2", + "B2": "PlateT13_B2", + "C2": "PlateT13_C2", + "D2": "PlateT13_D2", + "E2": "PlateT13_E2", + "F2": "PlateT13_F2", + "G2": "PlateT13_G2", + "H2": "PlateT13_H2", + "A3": "PlateT13_A3", + "B3": "PlateT13_B3", + "C3": "PlateT13_C3", + "D3": "PlateT13_D3", + "E3": "PlateT13_E3", + "F3": "PlateT13_F3", + "G3": "PlateT13_G3", + "H3": "PlateT13_H3", + "A4": "PlateT13_A4", + "B4": "PlateT13_B4", + "C4": "PlateT13_C4", + "D4": "PlateT13_D4", + "E4": "PlateT13_E4", + "F4": "PlateT13_F4", + "G4": "PlateT13_G4", + "H4": "PlateT13_H4", + "A5": "PlateT13_A5", + "B5": "PlateT13_B5", + "C5": "PlateT13_C5", + "D5": "PlateT13_D5", + "E5": "PlateT13_E5", + "F5": "PlateT13_F5", + "G5": "PlateT13_G5", + "H5": "PlateT13_H5", + "A6": "PlateT13_A6", + "B6": "PlateT13_B6", + "C6": "PlateT13_C6", + "D6": "PlateT13_D6", + "E6": "PlateT13_E6", + "F6": "PlateT13_F6", + "G6": "PlateT13_G6", + "H6": "PlateT13_H6", + "A7": "PlateT13_A7", + "B7": "PlateT13_B7", + "C7": "PlateT13_C7", + "D7": "PlateT13_D7", + "E7": "PlateT13_E7", + "F7": "PlateT13_F7", + "G7": "PlateT13_G7", + "H7": "PlateT13_H7", + "A8": "PlateT13_A8", + "B8": "PlateT13_B8", + "C8": "PlateT13_C8", + "D8": "PlateT13_D8", + "E8": "PlateT13_E8", + "F8": "PlateT13_F8", + "G8": "PlateT13_G8", + "H8": "PlateT13_H8", + "A9": "PlateT13_A9", + "B9": "PlateT13_B9", + "C9": "PlateT13_C9", + "D9": "PlateT13_D9", + "E9": "PlateT13_E9", + "F9": "PlateT13_F9", + "G9": "PlateT13_G9", + "H9": "PlateT13_H9", + "A10": "PlateT13_A10", + "B10": "PlateT13_B10", + "C10": "PlateT13_C10", + "D10": "PlateT13_D10", + "E10": "PlateT13_E10", + "F10": "PlateT13_F10", + "G10": "PlateT13_G10", + "H10": "PlateT13_H10", + "A11": "PlateT13_A11", + "B11": "PlateT13_B11", + "C11": "PlateT13_C11", + "D11": "PlateT13_D11", + "E11": "PlateT13_E11", + "F11": "PlateT13_F11", + "G11": "PlateT13_G11", + "H11": "PlateT13_H11", + "A12": "PlateT13_A12", + "B12": "PlateT13_B12", + "C12": "PlateT13_C12", + "D12": "PlateT13_D12", + "E12": "PlateT13_E12", + "F12": "PlateT13_F12", + "G12": "PlateT13_G12", + "H12": "PlateT13_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT13_A1", + "name": "PlateT13_A1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B1", + "name": "PlateT13_B1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C1", + "name": "PlateT13_C1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D1", + "name": "PlateT13_D1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E1", + "name": "PlateT13_E1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F1", + "name": "PlateT13_F1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G1", + "name": "PlateT13_G1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H1", + "name": "PlateT13_H1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A2", + "name": "PlateT13_A2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B2", + "name": "PlateT13_B2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C2", + "name": "PlateT13_C2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D2", + "name": "PlateT13_D2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E2", + "name": "PlateT13_E2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F2", + "name": "PlateT13_F2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G2", + "name": "PlateT13_G2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H2", + "name": "PlateT13_H2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A3", + "name": "PlateT13_A3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B3", + "name": "PlateT13_B3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C3", + "name": "PlateT13_C3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D3", + "name": "PlateT13_D3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E3", + "name": "PlateT13_E3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F3", + "name": "PlateT13_F3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G3", + "name": "PlateT13_G3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H3", + "name": "PlateT13_H3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A4", + "name": "PlateT13_A4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B4", + "name": "PlateT13_B4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C4", + "name": "PlateT13_C4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D4", + "name": "PlateT13_D4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E4", + "name": "PlateT13_E4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F4", + "name": "PlateT13_F4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G4", + "name": "PlateT13_G4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H4", + "name": "PlateT13_H4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A5", + "name": "PlateT13_A5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B5", + "name": "PlateT13_B5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C5", + "name": "PlateT13_C5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D5", + "name": "PlateT13_D5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E5", + "name": "PlateT13_E5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F5", + "name": "PlateT13_F5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G5", + "name": "PlateT13_G5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H5", + "name": "PlateT13_H5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A6", + "name": "PlateT13_A6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B6", + "name": "PlateT13_B6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C6", + "name": "PlateT13_C6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D6", + "name": "PlateT13_D6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E6", + "name": "PlateT13_E6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F6", + "name": "PlateT13_F6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G6", + "name": "PlateT13_G6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H6", + "name": "PlateT13_H6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A7", + "name": "PlateT13_A7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B7", + "name": "PlateT13_B7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C7", + "name": "PlateT13_C7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D7", + "name": "PlateT13_D7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E7", + "name": "PlateT13_E7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F7", + "name": "PlateT13_F7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G7", + "name": "PlateT13_G7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H7", + "name": "PlateT13_H7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A8", + "name": "PlateT13_A8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B8", + "name": "PlateT13_B8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C8", + "name": "PlateT13_C8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D8", + "name": "PlateT13_D8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E8", + "name": "PlateT13_E8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F8", + "name": "PlateT13_F8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G8", + "name": "PlateT13_G8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H8", + "name": "PlateT13_H8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A9", + "name": "PlateT13_A9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B9", + "name": "PlateT13_B9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C9", + "name": "PlateT13_C9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D9", + "name": "PlateT13_D9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E9", + "name": "PlateT13_E9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F9", + "name": "PlateT13_F9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G9", + "name": "PlateT13_G9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H9", + "name": "PlateT13_H9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A10", + "name": "PlateT13_A10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B10", + "name": "PlateT13_B10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C10", + "name": "PlateT13_C10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D10", + "name": "PlateT13_D10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E10", + "name": "PlateT13_E10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F10", + "name": "PlateT13_F10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G10", + "name": "PlateT13_G10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H10", + "name": "PlateT13_H10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A11", + "name": "PlateT13_A11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B11", + "name": "PlateT13_B11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C11", + "name": "PlateT13_C11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D11", + "name": "PlateT13_D11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E11", + "name": "PlateT13_E11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F11", + "name": "PlateT13_F11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G11", + "name": "PlateT13_G11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H11", + "name": "PlateT13_H11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A12", + "name": "PlateT13_A12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B12", + "name": "PlateT13_B12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C12", + "name": "PlateT13_C12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D12", + "name": "PlateT13_D12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E12", + "name": "PlateT13_E12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F12", + "name": "PlateT13_F12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G12", + "name": "PlateT13_G12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H12", + "name": "PlateT13_H12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT14", + "name": "PlateT14", + + "children": [ + "PlateT14_A1", + "PlateT14_B1", + "PlateT14_C1", + "PlateT14_D1", + "PlateT14_E1", + "PlateT14_F1", + "PlateT14_G1", + "PlateT14_H1", + "PlateT14_A2", + "PlateT14_B2", + "PlateT14_C2", + "PlateT14_D2", + "PlateT14_E2", + "PlateT14_F2", + "PlateT14_G2", + "PlateT14_H2", + "PlateT14_A3", + "PlateT14_B3", + "PlateT14_C3", + "PlateT14_D3", + "PlateT14_E3", + "PlateT14_F3", + "PlateT14_G3", + "PlateT14_H3", + "PlateT14_A4", + "PlateT14_B4", + "PlateT14_C4", + "PlateT14_D4", + "PlateT14_E4", + "PlateT14_F4", + "PlateT14_G4", + "PlateT14_H4", + "PlateT14_A5", + "PlateT14_B5", + "PlateT14_C5", + "PlateT14_D5", + "PlateT14_E5", + "PlateT14_F5", + "PlateT14_G5", + "PlateT14_H5", + "PlateT14_A6", + "PlateT14_B6", + "PlateT14_C6", + "PlateT14_D6", + "PlateT14_E6", + "PlateT14_F6", + "PlateT14_G6", + "PlateT14_H6", + "PlateT14_A7", + "PlateT14_B7", + "PlateT14_C7", + "PlateT14_D7", + "PlateT14_E7", + "PlateT14_F7", + "PlateT14_G7", + "PlateT14_H7", + "PlateT14_A8", + "PlateT14_B8", + "PlateT14_C8", + "PlateT14_D8", + "PlateT14_E8", + "PlateT14_F8", + "PlateT14_G8", + "PlateT14_H8", + "PlateT14_A9", + "PlateT14_B9", + "PlateT14_C9", + "PlateT14_D9", + "PlateT14_E9", + "PlateT14_F9", + "PlateT14_G9", + "PlateT14_H9", + "PlateT14_A10", + "PlateT14_B10", + "PlateT14_C10", + "PlateT14_D10", + "PlateT14_E10", + "PlateT14_F10", + "PlateT14_G10", + "PlateT14_H10", + "PlateT14_A11", + "PlateT14_B11", + "PlateT14_C11", + "PlateT14_D11", + "PlateT14_E11", + "PlateT14_F11", + "PlateT14_G11", + "PlateT14_H11", + "PlateT14_A12", + "PlateT14_B12", + "PlateT14_C12", + "PlateT14_D12", + "PlateT14_E12", + "PlateT14_F12", + "PlateT14_G12", + "PlateT14_H12" + ], + "parent": "T14", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT14_A1", + "B1": "PlateT14_B1", + "C1": "PlateT14_C1", + "D1": "PlateT14_D1", + "E1": "PlateT14_E1", + "F1": "PlateT14_F1", + "G1": "PlateT14_G1", + "H1": "PlateT14_H1", + "A2": "PlateT14_A2", + "B2": "PlateT14_B2", + "C2": "PlateT14_C2", + "D2": "PlateT14_D2", + "E2": "PlateT14_E2", + "F2": "PlateT14_F2", + "G2": "PlateT14_G2", + "H2": "PlateT14_H2", + "A3": "PlateT14_A3", + "B3": "PlateT14_B3", + "C3": "PlateT14_C3", + "D3": "PlateT14_D3", + "E3": "PlateT14_E3", + "F3": "PlateT14_F3", + "G3": "PlateT14_G3", + "H3": "PlateT14_H3", + "A4": "PlateT14_A4", + "B4": "PlateT14_B4", + "C4": "PlateT14_C4", + "D4": "PlateT14_D4", + "E4": "PlateT14_E4", + "F4": "PlateT14_F4", + "G4": "PlateT14_G4", + "H4": "PlateT14_H4", + "A5": "PlateT14_A5", + "B5": "PlateT14_B5", + "C5": "PlateT14_C5", + "D5": "PlateT14_D5", + "E5": "PlateT14_E5", + "F5": "PlateT14_F5", + "G5": "PlateT14_G5", + "H5": "PlateT14_H5", + "A6": "PlateT14_A6", + "B6": "PlateT14_B6", + "C6": "PlateT14_C6", + "D6": "PlateT14_D6", + "E6": "PlateT14_E6", + "F6": "PlateT14_F6", + "G6": "PlateT14_G6", + "H6": "PlateT14_H6", + "A7": "PlateT14_A7", + "B7": "PlateT14_B7", + "C7": "PlateT14_C7", + "D7": "PlateT14_D7", + "E7": "PlateT14_E7", + "F7": "PlateT14_F7", + "G7": "PlateT14_G7", + "H7": "PlateT14_H7", + "A8": "PlateT14_A8", + "B8": "PlateT14_B8", + "C8": "PlateT14_C8", + "D8": "PlateT14_D8", + "E8": "PlateT14_E8", + "F8": "PlateT14_F8", + "G8": "PlateT14_G8", + "H8": "PlateT14_H8", + "A9": "PlateT14_A9", + "B9": "PlateT14_B9", + "C9": "PlateT14_C9", + "D9": "PlateT14_D9", + "E9": "PlateT14_E9", + "F9": "PlateT14_F9", + "G9": "PlateT14_G9", + "H9": "PlateT14_H9", + "A10": "PlateT14_A10", + "B10": "PlateT14_B10", + "C10": "PlateT14_C10", + "D10": "PlateT14_D10", + "E10": "PlateT14_E10", + "F10": "PlateT14_F10", + "G10": "PlateT14_G10", + "H10": "PlateT14_H10", + "A11": "PlateT14_A11", + "B11": "PlateT14_B11", + "C11": "PlateT14_C11", + "D11": "PlateT14_D11", + "E11": "PlateT14_E11", + "F11": "PlateT14_F11", + "G11": "PlateT14_G11", + "H11": "PlateT14_H11", + "A12": "PlateT14_A12", + "B12": "PlateT14_B12", + "C12": "PlateT14_C12", + "D12": "PlateT14_D12", + "E12": "PlateT14_E12", + "F12": "PlateT14_F12", + "G12": "PlateT14_G12", + "H12": "PlateT14_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT14_A1", + "name": "PlateT14_A1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B1", + "name": "PlateT14_B1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C1", + "name": "PlateT14_C1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D1", + "name": "PlateT14_D1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E1", + "name": "PlateT14_E1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F1", + "name": "PlateT14_F1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G1", + "name": "PlateT14_G1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H1", + "name": "PlateT14_H1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A2", + "name": "PlateT14_A2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B2", + "name": "PlateT14_B2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C2", + "name": "PlateT14_C2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D2", + "name": "PlateT14_D2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E2", + "name": "PlateT14_E2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F2", + "name": "PlateT14_F2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G2", + "name": "PlateT14_G2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H2", + "name": "PlateT14_H2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A3", + "name": "PlateT14_A3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B3", + "name": "PlateT14_B3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C3", + "name": "PlateT14_C3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D3", + "name": "PlateT14_D3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E3", + "name": "PlateT14_E3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F3", + "name": "PlateT14_F3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G3", + "name": "PlateT14_G3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H3", + "name": "PlateT14_H3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A4", + "name": "PlateT14_A4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B4", + "name": "PlateT14_B4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C4", + "name": "PlateT14_C4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D4", + "name": "PlateT14_D4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E4", + "name": "PlateT14_E4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F4", + "name": "PlateT14_F4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G4", + "name": "PlateT14_G4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H4", + "name": "PlateT14_H4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A5", + "name": "PlateT14_A5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B5", + "name": "PlateT14_B5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C5", + "name": "PlateT14_C5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D5", + "name": "PlateT14_D5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E5", + "name": "PlateT14_E5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F5", + "name": "PlateT14_F5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G5", + "name": "PlateT14_G5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H5", + "name": "PlateT14_H5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A6", + "name": "PlateT14_A6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B6", + "name": "PlateT14_B6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C6", + "name": "PlateT14_C6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D6", + "name": "PlateT14_D6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E6", + "name": "PlateT14_E6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F6", + "name": "PlateT14_F6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G6", + "name": "PlateT14_G6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H6", + "name": "PlateT14_H6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A7", + "name": "PlateT14_A7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B7", + "name": "PlateT14_B7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C7", + "name": "PlateT14_C7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D7", + "name": "PlateT14_D7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E7", + "name": "PlateT14_E7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F7", + "name": "PlateT14_F7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G7", + "name": "PlateT14_G7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H7", + "name": "PlateT14_H7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A8", + "name": "PlateT14_A8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B8", + "name": "PlateT14_B8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C8", + "name": "PlateT14_C8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D8", + "name": "PlateT14_D8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E8", + "name": "PlateT14_E8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F8", + "name": "PlateT14_F8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G8", + "name": "PlateT14_G8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H8", + "name": "PlateT14_H8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A9", + "name": "PlateT14_A9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B9", + "name": "PlateT14_B9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C9", + "name": "PlateT14_C9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D9", + "name": "PlateT14_D9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E9", + "name": "PlateT14_E9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F9", + "name": "PlateT14_F9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G9", + "name": "PlateT14_G9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H9", + "name": "PlateT14_H9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A10", + "name": "PlateT14_A10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B10", + "name": "PlateT14_B10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C10", + "name": "PlateT14_C10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D10", + "name": "PlateT14_D10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E10", + "name": "PlateT14_E10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F10", + "name": "PlateT14_F10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G10", + "name": "PlateT14_G10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H10", + "name": "PlateT14_H10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A11", + "name": "PlateT14_A11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B11", + "name": "PlateT14_B11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C11", + "name": "PlateT14_C11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D11", + "name": "PlateT14_D11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E11", + "name": "PlateT14_E11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F11", + "name": "PlateT14_F11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G11", + "name": "PlateT14_G11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H11", + "name": "PlateT14_H11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A12", + "name": "PlateT14_A12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B12", + "name": "PlateT14_B12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C12", + "name": "PlateT14_C12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D12", + "name": "PlateT14_D12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E12", + "name": "PlateT14_E12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F12", + "name": "PlateT14_F12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G12", + "name": "PlateT14_G12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H12", + "name": "PlateT14_H12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT15", + "name": "PlateT15", + + "children": [ + "PlateT15_A1", + "PlateT15_B1", + "PlateT15_C1", + "PlateT15_D1", + "PlateT15_E1", + "PlateT15_F1", + "PlateT15_G1", + "PlateT15_H1", + "PlateT15_A2", + "PlateT15_B2", + "PlateT15_C2", + "PlateT15_D2", + "PlateT15_E2", + "PlateT15_F2", + "PlateT15_G2", + "PlateT15_H2", + "PlateT15_A3", + "PlateT15_B3", + "PlateT15_C3", + "PlateT15_D3", + "PlateT15_E3", + "PlateT15_F3", + "PlateT15_G3", + "PlateT15_H3", + "PlateT15_A4", + "PlateT15_B4", + "PlateT15_C4", + "PlateT15_D4", + "PlateT15_E4", + "PlateT15_F4", + "PlateT15_G4", + "PlateT15_H4", + "PlateT15_A5", + "PlateT15_B5", + "PlateT15_C5", + "PlateT15_D5", + "PlateT15_E5", + "PlateT15_F5", + "PlateT15_G5", + "PlateT15_H5", + "PlateT15_A6", + "PlateT15_B6", + "PlateT15_C6", + "PlateT15_D6", + "PlateT15_E6", + "PlateT15_F6", + "PlateT15_G6", + "PlateT15_H6", + "PlateT15_A7", + "PlateT15_B7", + "PlateT15_C7", + "PlateT15_D7", + "PlateT15_E7", + "PlateT15_F7", + "PlateT15_G7", + "PlateT15_H7", + "PlateT15_A8", + "PlateT15_B8", + "PlateT15_C8", + "PlateT15_D8", + "PlateT15_E8", + "PlateT15_F8", + "PlateT15_G8", + "PlateT15_H8", + "PlateT15_A9", + "PlateT15_B9", + "PlateT15_C9", + "PlateT15_D9", + "PlateT15_E9", + "PlateT15_F9", + "PlateT15_G9", + "PlateT15_H9", + "PlateT15_A10", + "PlateT15_B10", + "PlateT15_C10", + "PlateT15_D10", + "PlateT15_E10", + "PlateT15_F10", + "PlateT15_G10", + "PlateT15_H10", + "PlateT15_A11", + "PlateT15_B11", + "PlateT15_C11", + "PlateT15_D11", + "PlateT15_E11", + "PlateT15_F11", + "PlateT15_G11", + "PlateT15_H11", + "PlateT15_A12", + "PlateT15_B12", + "PlateT15_C12", + "PlateT15_D12", + "PlateT15_E12", + "PlateT15_F12", + "PlateT15_G12", + "PlateT15_H12" + ], + "parent": "T15", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT15_A1", + "B1": "PlateT15_B1", + "C1": "PlateT15_C1", + "D1": "PlateT15_D1", + "E1": "PlateT15_E1", + "F1": "PlateT15_F1", + "G1": "PlateT15_G1", + "H1": "PlateT15_H1", + "A2": "PlateT15_A2", + "B2": "PlateT15_B2", + "C2": "PlateT15_C2", + "D2": "PlateT15_D2", + "E2": "PlateT15_E2", + "F2": "PlateT15_F2", + "G2": "PlateT15_G2", + "H2": "PlateT15_H2", + "A3": "PlateT15_A3", + "B3": "PlateT15_B3", + "C3": "PlateT15_C3", + "D3": "PlateT15_D3", + "E3": "PlateT15_E3", + "F3": "PlateT15_F3", + "G3": "PlateT15_G3", + "H3": "PlateT15_H3", + "A4": "PlateT15_A4", + "B4": "PlateT15_B4", + "C4": "PlateT15_C4", + "D4": "PlateT15_D4", + "E4": "PlateT15_E4", + "F4": "PlateT15_F4", + "G4": "PlateT15_G4", + "H4": "PlateT15_H4", + "A5": "PlateT15_A5", + "B5": "PlateT15_B5", + "C5": "PlateT15_C5", + "D5": "PlateT15_D5", + "E5": "PlateT15_E5", + "F5": "PlateT15_F5", + "G5": "PlateT15_G5", + "H5": "PlateT15_H5", + "A6": "PlateT15_A6", + "B6": "PlateT15_B6", + "C6": "PlateT15_C6", + "D6": "PlateT15_D6", + "E6": "PlateT15_E6", + "F6": "PlateT15_F6", + "G6": "PlateT15_G6", + "H6": "PlateT15_H6", + "A7": "PlateT15_A7", + "B7": "PlateT15_B7", + "C7": "PlateT15_C7", + "D7": "PlateT15_D7", + "E7": "PlateT15_E7", + "F7": "PlateT15_F7", + "G7": "PlateT15_G7", + "H7": "PlateT15_H7", + "A8": "PlateT15_A8", + "B8": "PlateT15_B8", + "C8": "PlateT15_C8", + "D8": "PlateT15_D8", + "E8": "PlateT15_E8", + "F8": "PlateT15_F8", + "G8": "PlateT15_G8", + "H8": "PlateT15_H8", + "A9": "PlateT15_A9", + "B9": "PlateT15_B9", + "C9": "PlateT15_C9", + "D9": "PlateT15_D9", + "E9": "PlateT15_E9", + "F9": "PlateT15_F9", + "G9": "PlateT15_G9", + "H9": "PlateT15_H9", + "A10": "PlateT15_A10", + "B10": "PlateT15_B10", + "C10": "PlateT15_C10", + "D10": "PlateT15_D10", + "E10": "PlateT15_E10", + "F10": "PlateT15_F10", + "G10": "PlateT15_G10", + "H10": "PlateT15_H10", + "A11": "PlateT15_A11", + "B11": "PlateT15_B11", + "C11": "PlateT15_C11", + "D11": "PlateT15_D11", + "E11": "PlateT15_E11", + "F11": "PlateT15_F11", + "G11": "PlateT15_G11", + "H11": "PlateT15_H11", + "A12": "PlateT15_A12", + "B12": "PlateT15_B12", + "C12": "PlateT15_C12", + "D12": "PlateT15_D12", + "E12": "PlateT15_E12", + "F12": "PlateT15_F12", + "G12": "PlateT15_G12", + "H12": "PlateT15_H12" + } + }, + "data": { + "Material": { + "uuid": "04211a2dc93547fe9bf6121eac533650" + } + } + }, + { + "id": "PlateT15_A1", + "name": "PlateT15_A1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B1", + "name": "PlateT15_B1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C1", + "name": "PlateT15_C1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D1", + "name": "PlateT15_D1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E1", + "name": "PlateT15_E1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F1", + "name": "PlateT15_F1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G1", + "name": "PlateT15_G1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H1", + "name": "PlateT15_H1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A2", + "name": "PlateT15_A2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B2", + "name": "PlateT15_B2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C2", + "name": "PlateT15_C2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D2", + "name": "PlateT15_D2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E2", + "name": "PlateT15_E2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F2", + "name": "PlateT15_F2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G2", + "name": "PlateT15_G2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H2", + "name": "PlateT15_H2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A3", + "name": "PlateT15_A3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B3", + "name": "PlateT15_B3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C3", + "name": "PlateT15_C3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D3", + "name": "PlateT15_D3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E3", + "name": "PlateT15_E3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F3", + "name": "PlateT15_F3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G3", + "name": "PlateT15_G3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H3", + "name": "PlateT15_H3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A4", + "name": "PlateT15_A4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B4", + "name": "PlateT15_B4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C4", + "name": "PlateT15_C4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D4", + "name": "PlateT15_D4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E4", + "name": "PlateT15_E4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F4", + "name": "PlateT15_F4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G4", + "name": "PlateT15_G4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H4", + "name": "PlateT15_H4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A5", + "name": "PlateT15_A5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B5", + "name": "PlateT15_B5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C5", + "name": "PlateT15_C5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D5", + "name": "PlateT15_D5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E5", + "name": "PlateT15_E5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F5", + "name": "PlateT15_F5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G5", + "name": "PlateT15_G5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H5", + "name": "PlateT15_H5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A6", + "name": "PlateT15_A6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B6", + "name": "PlateT15_B6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C6", + "name": "PlateT15_C6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D6", + "name": "PlateT15_D6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E6", + "name": "PlateT15_E6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F6", + "name": "PlateT15_F6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G6", + "name": "PlateT15_G6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H6", + "name": "PlateT15_H6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A7", + "name": "PlateT15_A7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B7", + "name": "PlateT15_B7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C7", + "name": "PlateT15_C7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D7", + "name": "PlateT15_D7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E7", + "name": "PlateT15_E7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F7", + "name": "PlateT15_F7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G7", + "name": "PlateT15_G7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H7", + "name": "PlateT15_H7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A8", + "name": "PlateT15_A8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B8", + "name": "PlateT15_B8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C8", + "name": "PlateT15_C8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D8", + "name": "PlateT15_D8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E8", + "name": "PlateT15_E8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F8", + "name": "PlateT15_F8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G8", + "name": "PlateT15_G8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H8", + "name": "PlateT15_H8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A9", + "name": "PlateT15_A9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B9", + "name": "PlateT15_B9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C9", + "name": "PlateT15_C9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D9", + "name": "PlateT15_D9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E9", + "name": "PlateT15_E9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F9", + "name": "PlateT15_F9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G9", + "name": "PlateT15_G9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H9", + "name": "PlateT15_H9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A10", + "name": "PlateT15_A10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B10", + "name": "PlateT15_B10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C10", + "name": "PlateT15_C10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D10", + "name": "PlateT15_D10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E10", + "name": "PlateT15_E10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F10", + "name": "PlateT15_F10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G10", + "name": "PlateT15_G10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H10", + "name": "PlateT15_H10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A11", + "name": "PlateT15_A11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B11", + "name": "PlateT15_B11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C11", + "name": "PlateT15_C11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D11", + "name": "PlateT15_D11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E11", + "name": "PlateT15_E11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F11", + "name": "PlateT15_F11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G11", + "name": "PlateT15_G11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H11", + "name": "PlateT15_H11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A12", + "name": "PlateT15_A12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B12", + "name": "PlateT15_B12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C12", + "name": "PlateT15_C12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D12", + "name": "PlateT15_D12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E12", + "name": "PlateT15_E12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F12", + "name": "PlateT15_F12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G12", + "name": "PlateT15_G12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H12", + "name": "PlateT15_H12", + + "children": [], + "parent": "PlateT15", + "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": "trash", + "name": "trash", + + "children": [], + "parent": "T16", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 127, + "size_y": 85.5, + "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" + } + } + } + ], + "edges": [] +} \ No newline at end of file diff --git a/unilabos/utils/type_check.py b/unilabos/utils/type_check.py index cffb4465..64001e56 100644 --- a/unilabos/utils/type_check.py +++ b/unilabos/utils/type_check.py @@ -78,7 +78,11 @@ def get_result_info_str(error: str, suc: bool, return_value=None) -> str: Returns: JSON字符串格式的结果信息 """ - result_info = {"error": error, "suc": suc, "return_value": return_value} + samples = None + if isinstance(return_value, dict): + if "samples" in return_value: + samples = return_value.pop("samples") + result_info = {"error": error, "suc": suc, "return_value": return_value, "samples": samples} return json.dumps(result_info, ensure_ascii=False, cls=ResultInfoEncoder) From 3433766bc5a62b4ad0fcf6c014644bfd5229db40 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 02:31:23 +0800 Subject: [PATCH 03/40] do not modify globally --- unilabos/app/web/client.py | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/unilabos/app/web/client.py b/unilabos/app/web/client.py index b2fa5038..8968f033 100644 --- a/unilabos/app/web/client.py +++ b/unilabos/app/web/client.py @@ -4,7 +4,6 @@ HTTP客户端模块 提供与远程服务器通信的客户端功能,只有host需要用 """ -from copy import deepcopy import json import os import time @@ -76,26 +75,6 @@ class HTTPClient: Returns: Dict[str, str]: 旧UUID到新UUID的映射关系 {old_uuid: new_uuid} """ - # 遍历 resources 及其所有子节点,将 pose.position.y 全部变为 -y - def invert_x_position(resource_instance, size_y: float = 0): - # 处理当前节点 - pose = getattr(resource_instance.res_content, "pose", None) - if pose and hasattr(pose, "position"): - position = getattr(pose, "position", None) - pose_size = getattr(pose, "size", None) - if position and hasattr(position, "y") and pose_size and hasattr(pose_size, "height"): - position.y = size_y - position.y - pose_size.height - # 递归处理子节点 - for child in getattr(resource_instance, "children", []): - _size_y = 0 - if pose and hasattr(pose, "size"): - _size_y = pose.size.height - invert_x_position(child, _size_y) - - # 处理所有树的所有节点,从树的根节点递归 - resources_reversed = deepcopy(resources) - for tree in getattr(resources_reversed, "trees", []): - invert_x_position(getattr(tree, "root_node", tree)) with open(os.path.join(BasicConfig.working_dir, "req_resource_tree_add.json"), "w", encoding="utf-8") as f: payload = {"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid} f.write(json.dumps(payload, indent=4)) @@ -106,14 +85,14 @@ class HTTPClient: info(f"首次添加资源,当前远程地址: {self.remote_addr}") response = requests.post( f"{self.remote_addr}/edge/material", - json={"nodes": [x for xs in resources_reversed.dump() for x in xs], "mount_uuid": mount_uuid}, + json={"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid}, headers={"Authorization": f"Lab {self.auth}"}, timeout=60, ) else: response = requests.put( f"{self.remote_addr}/edge/material", - json={"nodes": [x for xs in resources_reversed.dump() for x in xs], "mount_uuid": mount_uuid}, + json={"nodes": [x for xs in resources.dump() for x in xs], "mount_uuid": mount_uuid}, headers={"Authorization": f"Lab {self.auth}"}, timeout=10, ) From a201d7c307d00342216326a98546efe16c078ed7 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 02:42:54 +0800 Subject: [PATCH 04/40] update registry --- {test => tests}/resources/__init__.py | 0 .../bioyond_materials_liquidhandling_1.json | 0 .../bioyond_materials_liquidhandling_2.json | 0 .../resources/bioyond_materials_reaction.json | 0 .../resources/test_bottle_carrier.py | 0 .../resources/test_converter_bioyond.py | 0 .../resources/test_itemized_carrier.py | 0 .../resources/test_resourcetreeset.py | 0 {test => tests}/ros/__init__.py | 0 {test => tests}/ros/msgs/__init__.py | 0 {test => tests}/ros/msgs/test_basic.py | 0 {test => tests}/ros/msgs/test_conversion.py | 0 {test => tests}/ros/msgs/test_mapping.py | 0 {test => tests}/ros/msgs/test_runner.py | 0 {test => tests}/workflow/__init__.py | 0 {test => tests}/workflow/example_bio.json | 0 .../workflow/example_bio_graph.png | Bin {test => tests}/workflow/example_prcxi.json | 0 .../workflow/example_prcxi_graph.png | Bin .../example_prcxi_graph_20251022_1359.png | Bin {test => tests}/workflow/merge_workflow.py | 0 .../devices/bioyond_dispensing_station.yaml | 29 + unilabos/registry/devices/cameraSII.yaml | 2 + unilabos/registry/devices/chinwe.yaml | 141 +- .../devices/neware_battery_test_system.yaml | 84 +- unilabos/registry/devices/opcua_example.yaml | 114 +- .../devices/post_process_station.yaml | 157 +- .../post_process/bottle_carriers.yaml | 1 - .../resources/post_process/bottles.yaml | 1 - .../registry/resources/post_process/deck.yaml | 1 + .../resources/prcxi/plate_adapters.yaml | 23 +- unilabos/registry/resources/prcxi/plates.yaml | 33 +- .../registry/resources/prcxi/tip_racks.yaml | 18 +- unilabos/registry/resources/prcxi/trash.yaml | 3 +- .../registry/resources/prcxi/tube_racks.yaml | 3 +- unilabos/ros/nodes/resource_tracker.py | 2 +- .../{ => deprecated}/prcxi_9300.json | 0 .../{ => deprecated}/prcxi_9320.json | 0 .../deprecated/prcxi_9320_with_res.json | 40429 ++++++++ .../test/experiments/prcxi_9320_with_res.json | 40337 -------- .../experiments/prcxi_9320_with_res_test.json | 81400 ++++++++-------- 41 files changed, 81645 insertions(+), 81133 deletions(-) rename {test => tests}/resources/__init__.py (100%) rename {test => tests}/resources/bioyond_materials_liquidhandling_1.json (100%) rename {test => tests}/resources/bioyond_materials_liquidhandling_2.json (100%) rename {test => tests}/resources/bioyond_materials_reaction.json (100%) rename {test => tests}/resources/test_bottle_carrier.py (100%) rename {test => tests}/resources/test_converter_bioyond.py (100%) rename {test => tests}/resources/test_itemized_carrier.py (100%) rename {test => tests}/resources/test_resourcetreeset.py (100%) rename {test => tests}/ros/__init__.py (100%) rename {test => tests}/ros/msgs/__init__.py (100%) rename {test => tests}/ros/msgs/test_basic.py (100%) rename {test => tests}/ros/msgs/test_conversion.py (100%) rename {test => tests}/ros/msgs/test_mapping.py (100%) rename {test => tests}/ros/msgs/test_runner.py (100%) rename {test => tests}/workflow/__init__.py (100%) rename {test => tests}/workflow/example_bio.json (100%) rename {test => tests}/workflow/example_bio_graph.png (100%) rename {test => tests}/workflow/example_prcxi.json (100%) rename {test => tests}/workflow/example_prcxi_graph.png (100%) rename {test => tests}/workflow/example_prcxi_graph_20251022_1359.png (100%) rename {test => tests}/workflow/merge_workflow.py (100%) rename unilabos/test/experiments/{ => deprecated}/prcxi_9300.json (100%) rename unilabos/test/experiments/{ => deprecated}/prcxi_9320.json (100%) create mode 100644 unilabos/test/experiments/deprecated/prcxi_9320_with_res.json delete mode 100644 unilabos/test/experiments/prcxi_9320_with_res.json diff --git a/test/resources/__init__.py b/tests/resources/__init__.py similarity index 100% rename from test/resources/__init__.py rename to tests/resources/__init__.py diff --git a/test/resources/bioyond_materials_liquidhandling_1.json b/tests/resources/bioyond_materials_liquidhandling_1.json similarity index 100% rename from test/resources/bioyond_materials_liquidhandling_1.json rename to tests/resources/bioyond_materials_liquidhandling_1.json diff --git a/test/resources/bioyond_materials_liquidhandling_2.json b/tests/resources/bioyond_materials_liquidhandling_2.json similarity index 100% rename from test/resources/bioyond_materials_liquidhandling_2.json rename to tests/resources/bioyond_materials_liquidhandling_2.json diff --git a/test/resources/bioyond_materials_reaction.json b/tests/resources/bioyond_materials_reaction.json similarity index 100% rename from test/resources/bioyond_materials_reaction.json rename to tests/resources/bioyond_materials_reaction.json diff --git a/test/resources/test_bottle_carrier.py b/tests/resources/test_bottle_carrier.py similarity index 100% rename from test/resources/test_bottle_carrier.py rename to tests/resources/test_bottle_carrier.py diff --git a/test/resources/test_converter_bioyond.py b/tests/resources/test_converter_bioyond.py similarity index 100% rename from test/resources/test_converter_bioyond.py rename to tests/resources/test_converter_bioyond.py diff --git a/test/resources/test_itemized_carrier.py b/tests/resources/test_itemized_carrier.py similarity index 100% rename from test/resources/test_itemized_carrier.py rename to tests/resources/test_itemized_carrier.py diff --git a/test/resources/test_resourcetreeset.py b/tests/resources/test_resourcetreeset.py similarity index 100% rename from test/resources/test_resourcetreeset.py rename to tests/resources/test_resourcetreeset.py diff --git a/test/ros/__init__.py b/tests/ros/__init__.py similarity index 100% rename from test/ros/__init__.py rename to tests/ros/__init__.py diff --git a/test/ros/msgs/__init__.py b/tests/ros/msgs/__init__.py similarity index 100% rename from test/ros/msgs/__init__.py rename to tests/ros/msgs/__init__.py diff --git a/test/ros/msgs/test_basic.py b/tests/ros/msgs/test_basic.py similarity index 100% rename from test/ros/msgs/test_basic.py rename to tests/ros/msgs/test_basic.py diff --git a/test/ros/msgs/test_conversion.py b/tests/ros/msgs/test_conversion.py similarity index 100% rename from test/ros/msgs/test_conversion.py rename to tests/ros/msgs/test_conversion.py diff --git a/test/ros/msgs/test_mapping.py b/tests/ros/msgs/test_mapping.py similarity index 100% rename from test/ros/msgs/test_mapping.py rename to tests/ros/msgs/test_mapping.py diff --git a/test/ros/msgs/test_runner.py b/tests/ros/msgs/test_runner.py similarity index 100% rename from test/ros/msgs/test_runner.py rename to tests/ros/msgs/test_runner.py diff --git a/test/workflow/__init__.py b/tests/workflow/__init__.py similarity index 100% rename from test/workflow/__init__.py rename to tests/workflow/__init__.py diff --git a/test/workflow/example_bio.json b/tests/workflow/example_bio.json similarity index 100% rename from test/workflow/example_bio.json rename to tests/workflow/example_bio.json diff --git a/test/workflow/example_bio_graph.png b/tests/workflow/example_bio_graph.png similarity index 100% rename from test/workflow/example_bio_graph.png rename to tests/workflow/example_bio_graph.png diff --git a/test/workflow/example_prcxi.json b/tests/workflow/example_prcxi.json similarity index 100% rename from test/workflow/example_prcxi.json rename to tests/workflow/example_prcxi.json diff --git a/test/workflow/example_prcxi_graph.png b/tests/workflow/example_prcxi_graph.png similarity index 100% rename from test/workflow/example_prcxi_graph.png rename to tests/workflow/example_prcxi_graph.png diff --git a/test/workflow/example_prcxi_graph_20251022_1359.png b/tests/workflow/example_prcxi_graph_20251022_1359.png similarity index 100% rename from test/workflow/example_prcxi_graph_20251022_1359.png rename to tests/workflow/example_prcxi_graph_20251022_1359.png diff --git a/test/workflow/merge_workflow.py b/tests/workflow/merge_workflow.py similarity index 100% rename from test/workflow/merge_workflow.py rename to tests/workflow/merge_workflow.py diff --git a/unilabos/registry/devices/bioyond_dispensing_station.yaml b/unilabos/registry/devices/bioyond_dispensing_station.yaml index 5f3e1dde..9ae76b7f 100644 --- a/unilabos/registry/devices/bioyond_dispensing_station.yaml +++ b/unilabos/registry/devices/bioyond_dispensing_station.yaml @@ -174,6 +174,35 @@ bioyond_dispensing_station: title: query_resource_by_name参数 type: object type: UniLabJsonCommand + auto-transfer_materials_to_reaction_station: + feedback: {} + goal: {} + goal_default: + target_device_id: null + transfer_groups: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + target_device_id: + type: string + transfer_groups: + type: array + required: + - target_device_id + - transfer_groups + type: object + result: {} + required: + - goal + title: transfer_materials_to_reaction_station参数 + type: object + type: UniLabJsonCommand auto-workflow_sample_locations: feedback: {} goal: {} diff --git a/unilabos/registry/devices/cameraSII.yaml b/unilabos/registry/devices/cameraSII.yaml index d817f48a..ad2df955 100644 --- a/unilabos/registry/devices/cameraSII.yaml +++ b/unilabos/registry/devices/cameraSII.yaml @@ -9,6 +9,7 @@ cameracontroller_device: goal_default: config: null handles: {} + placeholder_keys: {} result: {} schema: description: '' @@ -31,6 +32,7 @@ cameracontroller_device: goal: {} goal_default: {} handles: {} + placeholder_keys: {} result: {} schema: description: '' diff --git a/unilabos/registry/devices/chinwe.yaml b/unilabos/registry/devices/chinwe.yaml index a9f352e4..2078d0f0 100644 --- a/unilabos/registry/devices/chinwe.yaml +++ b/unilabos/registry/devices/chinwe.yaml @@ -4,6 +4,73 @@ separator.chinwe: - chinwe class: action_value_mappings: + auto-connect: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: connect参数 + type: object + type: UniLabJsonCommand + auto-disconnect: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: disconnect参数 + type: object + type: UniLabJsonCommand + auto-execute_command_from_outer: + feedback: {} + goal: {} + goal_default: + command_dict: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + command_dict: + type: object + required: + - command_dict + type: object + result: {} + required: + - goal + title: execute_command_from_outer参数 + type: object + type: UniLabJsonCommand motor_rotate_quarter: goal: direction: 顺时针 @@ -303,42 +370,44 @@ separator.chinwe: handles: [] icon: '' init_param_schema: - goal: - baudrate: - default: 9600 - description: 串口波特率 - type: integer - motor_ids: - default: - - 4 - - 5 - description: 步进电机ID列表 - items: + config: + properties: + baudrate: + default: 9600 type: integer - type: array - port: - default: 192.168.1.200:8899 - description: 串口号或 IP:Port - type: string - pump_ids: - default: - - 1 - - 2 - - 3 - description: 注射泵ID列表 - items: + motor_ids: + items: + type: integer + type: array + port: + default: 192.168.1.200:8899 + type: string + pump_ids: + items: + type: integer + type: array + sensor_id: + default: 6 type: integer - type: array - sensor_id: - default: 6 - description: XKC传感器ID - type: integer - sensor_threshold: - default: 300 - description: 传感器液位判定阈值 - type: integer - timeout: - default: 10 - description: 通信超时时间 (秒) - type: integer + sensor_threshold: + default: 300 + type: integer + timeout: + default: 10.0 + type: number + required: [] + type: object + data: + properties: + is_connected: + type: boolean + sensor_level: + type: boolean + sensor_rssi: + type: integer + required: + - sensor_level + - sensor_rssi + - is_connected + type: object version: 2.1.0 diff --git a/unilabos/registry/devices/neware_battery_test_system.yaml b/unilabos/registry/devices/neware_battery_test_system.yaml index 0157819a..ea6bedc4 100644 --- a/unilabos/registry/devices/neware_battery_test_system.yaml +++ b/unilabos/registry/devices/neware_battery_test_system.yaml @@ -5,6 +5,73 @@ neware_battery_test_system: - battery_test class: action_value_mappings: + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + ros_node: + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-print_status_summary: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: print_status_summary参数 + type: object + type: UniLabJsonCommand + auto-test_connection: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: test_connection参数 + type: object + type: UniLabJsonCommand debug_resource_names: feedback: {} goal: {} @@ -407,6 +474,8 @@ neware_battery_test_system: status_types: channel_status: dict connection_info: dict + device_summary: dict + plate_status: dict status: str total_channels: int type: python @@ -418,36 +487,30 @@ neware_battery_test_system: config: properties: devtype: - default: '27' type: string ip: - default: 127.0.0.1 type: string machine_id: default: 1 type: integer oss_prefix: default: neware_backup - description: OSS对象路径前缀 type: string oss_upload_enabled: default: false - description: 是否启用OSS上传功能 type: boolean port: - default: 502 type: integer size_x: - default: 500.0 + default: 50 type: number size_y: - default: 500.0 + default: 50 type: number size_z: - default: 2000.0 + default: 20 type: number timeout: - default: 20 type: integer required: [] type: object @@ -459,6 +522,8 @@ neware_battery_test_system: type: object device_summary: type: object + plate_status: + type: object status: type: string total_channels: @@ -468,6 +533,7 @@ neware_battery_test_system: - channel_status - connection_info - total_channels + - plate_status - device_summary type: object version: 1.0.0 diff --git a/unilabos/registry/devices/opcua_example.yaml b/unilabos/registry/devices/opcua_example.yaml index a7e6b4e3..0f500cfa 100644 --- a/unilabos/registry/devices/opcua_example.yaml +++ b/unilabos/registry/devices/opcua_example.yaml @@ -49,7 +49,32 @@ opcua_example: title: load_config参数 type: object type: UniLabJsonCommand - auto-refresh_node_values: + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + ros_node: + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-print_cache_stats: feedback: {} goal: {} goal_default: {} @@ -67,7 +92,32 @@ opcua_example: result: {} required: - goal - title: refresh_node_values参数 + title: print_cache_stats参数 + type: object + type: UniLabJsonCommand + auto-read_node: + feedback: {} + goal: {} + goal_default: + node_name: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + node_name: + type: string + required: + - node_name + type: object + result: {} + required: + - goal + title: read_node参数 type: object type: UniLabJsonCommand auto-set_node_value: @@ -99,50 +149,9 @@ opcua_example: title: set_node_value参数 type: object type: UniLabJsonCommand - auto-start_node_refresh: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: start_node_refresh参数 - type: object - type: UniLabJsonCommand - auto-stop_node_refresh: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: stop_node_refresh参数 - type: object - type: UniLabJsonCommand module: unilabos.device_comms.opcua_client.client:OpcUaClient status_types: + cache_stats: dict node_value: String type: python config_info: [] @@ -152,15 +161,23 @@ opcua_example: init_param_schema: config: properties: + cache_timeout: + default: 5.0 + type: number config_path: type: string + deck: + type: string password: type: string - refresh_interval: - default: 1.0 - type: number + subscription_interval: + default: 500 + type: integer url: type: string + use_subscription: + default: true + type: boolean username: type: string required: @@ -168,9 +185,12 @@ opcua_example: type: object data: properties: + cache_stats: + type: object node_value: type: string required: - node_value + - cache_stats type: object version: 1.0.0 diff --git a/unilabos/registry/devices/post_process_station.yaml b/unilabos/registry/devices/post_process_station.yaml index cf4a11b0..be42bad4 100644 --- a/unilabos/registry/devices/post_process_station.yaml +++ b/unilabos/registry/devices/post_process_station.yaml @@ -3,6 +3,106 @@ post_process_station: - post_process_station class: action_value_mappings: + auto-load_config: + feedback: {} + goal: {} + goal_default: + config_path: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + config_path: + type: string + required: + - config_path + type: object + result: {} + required: + - goal + title: load_config参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + ros_node: + type: string + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-print_cache_stats: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: print_cache_stats参数 + type: object + type: UniLabJsonCommand + auto-set_node_value: + feedback: {} + goal: {} + goal_default: + name: null + value: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + result: {} + required: + - goal + title: set_node_value参数 + type: object + type: UniLabJsonCommand disconnect: feedback: {} goal: @@ -602,29 +702,46 @@ post_process_station: type: SendCmd module: unilabos.devices.workstation.post_process.post_process:OpcUaClient status_types: - acetone_tank_empty_alarm: Bool - atomization_fast_speed: Float64 - atomization_pressure_kpa: Int32 - cleaning_complete: Bool - device_ready: Bool - door_open_alarm: Bool - grab_complete: Bool - grab_trigger: Bool - injection_pump_push_speed: Int32 - injection_pump_suction_speed: Int32 - nmp_tank_empty_alarm: Bool - post_process_complete: Bool - post_process_trigger: Bool - raw_tank_number: Int32 - reaction_tank_number: Int32 - remote_mode: Bool - wash_slow_speed: Float64 - waste_tank_full_alarm: Bool - water_tank_empty_alarm: Bool + cache_stats: dict + node_value: String type: python config_info: [] description: 后处理站 handles: [] icon: post_process_station.webp - init_param_schema: {} + init_param_schema: + config: + properties: + cache_timeout: + default: 5.0 + type: number + config_path: + type: string + deck: + type: string + password: + type: string + subscription_interval: + default: 500 + type: integer + url: + type: string + use_subscription: + default: true + type: boolean + username: + type: string + required: + - url + type: object + data: + properties: + cache_stats: + type: object + node_value: + type: string + required: + - node_value + - cache_stats + type: object version: 1.0.0 diff --git a/unilabos/registry/resources/post_process/bottle_carriers.yaml b/unilabos/registry/resources/post_process/bottle_carriers.yaml index df0391a1..ea30cb7d 100644 --- a/unilabos/registry/resources/post_process/bottle_carriers.yaml +++ b/unilabos/registry/resources/post_process/bottle_carriers.yaml @@ -10,7 +10,6 @@ POST_PROCESS_Raw_1BottleCarrier: init_param_schema: {} registry_type: resource version: 1.0.0 - POST_PROCESS_Reaction_1BottleCarrier: category: - bottle_carriers diff --git a/unilabos/registry/resources/post_process/bottles.yaml b/unilabos/registry/resources/post_process/bottles.yaml index 4243a216..25fc3977 100644 --- a/unilabos/registry/resources/post_process/bottles.yaml +++ b/unilabos/registry/resources/post_process/bottles.yaml @@ -8,4 +8,3 @@ POST_PROCESS_PolymerStation_Reagent_Bottle: icon: '' init_param_schema: {} version: 1.0.0 - diff --git a/unilabos/registry/resources/post_process/deck.yaml b/unilabos/registry/resources/post_process/deck.yaml index 7c1f49de..621cafc6 100644 --- a/unilabos/registry/resources/post_process/deck.yaml +++ b/unilabos/registry/resources/post_process/deck.yaml @@ -1,6 +1,7 @@ post_process_deck: category: - post_process_deck + - deck class: module: unilabos.devices.workstation.post_process.decks:post_process_deck type: pylabrobot diff --git a/unilabos/registry/resources/prcxi/plate_adapters.yaml b/unilabos/registry/resources/prcxi/plate_adapters.yaml index 027b932b..a769fee3 100644 --- a/unilabos/registry/resources/prcxi/plate_adapters.yaml +++ b/unilabos/registry/resources/prcxi/plate_adapters.yaml @@ -1,6 +1,7 @@ PRCXI_30mm_Adapter: - category: + category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_30mm_Adapter type: pylabrobot @@ -11,8 +12,9 @@ PRCXI_30mm_Adapter: registry_type: resource version: 1.0.0 PRCXI_Adapter: - category: - - prcxi + category: + - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Adapter type: pylabrobot @@ -23,8 +25,9 @@ PRCXI_Adapter: registry_type: resource version: 1.0.0 PRCXI_Deep10_Adapter: - category: + category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Deep10_Adapter type: pylabrobot @@ -35,8 +38,9 @@ PRCXI_Deep10_Adapter: registry_type: resource version: 1.0.0 PRCXI_Deep300_Adapter: - category: + category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Deep300_Adapter type: pylabrobot @@ -47,8 +51,9 @@ PRCXI_Deep300_Adapter: registry_type: resource version: 1.0.0 PRCXI_PCR_Adapter: - category: + category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_PCR_Adapter type: pylabrobot @@ -59,8 +64,9 @@ PRCXI_PCR_Adapter: registry_type: resource version: 1.0.0 PRCXI_Reservoir_Adapter: - category: + category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Reservoir_Adapter type: pylabrobot @@ -73,6 +79,7 @@ PRCXI_Reservoir_Adapter: PRCXI_Tip10_Adapter: category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Tip10_Adapter type: pylabrobot @@ -85,6 +92,7 @@ PRCXI_Tip10_Adapter: PRCXI_Tip1250_Adapter: category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Tip1250_Adapter type: pylabrobot @@ -97,6 +105,7 @@ PRCXI_Tip1250_Adapter: PRCXI_Tip300_Adapter: category: - prcxi + - plate_adapters class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_Tip300_Adapter type: pylabrobot diff --git a/unilabos/registry/resources/prcxi/plates.yaml b/unilabos/registry/resources/prcxi/plates.yaml index 68bae485..81e2ae96 100644 --- a/unilabos/registry/resources/prcxi/plates.yaml +++ b/unilabos/registry/resources/prcxi/plates.yaml @@ -1,6 +1,7 @@ PRCXI_48_DeepWell: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_48_DeepWell type: pylabrobot @@ -11,8 +12,9 @@ PRCXI_48_DeepWell: registry_type: resource version: 1.0.0 PRCXI_96_DeepWell: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_96_DeepWell type: pylabrobot @@ -23,8 +25,9 @@ PRCXI_96_DeepWell: registry_type: resource version: 1.0.0 PRCXI_AGenBio_4_troughplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_AGenBio_4_troughplate type: pylabrobot @@ -35,8 +38,9 @@ PRCXI_AGenBio_4_troughplate: registry_type: resource version: 1.0.0 PRCXI_BioER_96_wellplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_BioER_96_wellplate type: pylabrobot @@ -47,8 +51,9 @@ PRCXI_BioER_96_wellplate: registry_type: resource version: 1.0.0 PRCXI_BioRad_384_wellplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_BioRad_384_wellplate type: pylabrobot @@ -59,8 +64,9 @@ PRCXI_BioRad_384_wellplate: registry_type: resource version: 1.0.0 PRCXI_CellTreat_96_wellplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_CellTreat_96_wellplate type: pylabrobot @@ -71,8 +77,9 @@ PRCXI_CellTreat_96_wellplate: registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_nonskirted: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_PCR_Plate_200uL_nonskirted type: pylabrobot @@ -83,8 +90,9 @@ PRCXI_PCR_Plate_200uL_nonskirted: registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_semiskirted: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_PCR_Plate_200uL_semiskirted type: pylabrobot @@ -95,8 +103,9 @@ PRCXI_PCR_Plate_200uL_semiskirted: registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_skirted: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_PCR_Plate_200uL_skirted type: pylabrobot @@ -107,8 +116,9 @@ PRCXI_PCR_Plate_200uL_skirted: registry_type: resource version: 1.0.0 PRCXI_nest_12_troughplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_nest_12_troughplate type: pylabrobot @@ -119,8 +129,9 @@ PRCXI_nest_12_troughplate: registry_type: resource version: 1.0.0 PRCXI_nest_1_troughplate: - category: + category: - prcxi + - plates class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_nest_1_troughplate type: pylabrobot diff --git a/unilabos/registry/resources/prcxi/tip_racks.yaml b/unilabos/registry/resources/prcxi/tip_racks.yaml index ef2c5995..56a16db8 100644 --- a/unilabos/registry/resources/prcxi/tip_racks.yaml +++ b/unilabos/registry/resources/prcxi/tip_racks.yaml @@ -1,6 +1,7 @@ PRCXI_1000uL_Tips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_1000uL_Tips type: pylabrobot @@ -11,8 +12,9 @@ PRCXI_1000uL_Tips: registry_type: resource version: 1.0.0 PRCXI_10uL_Tips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_10uL_Tips type: pylabrobot @@ -23,8 +25,9 @@ PRCXI_10uL_Tips: registry_type: resource version: 1.0.0 PRCXI_10ul_eTips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_10ul_eTips type: pylabrobot @@ -35,8 +38,9 @@ PRCXI_10ul_eTips: registry_type: resource version: 1.0.0 PRCXI_1250uL_Tips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_1250uL_Tips type: pylabrobot @@ -47,8 +51,9 @@ PRCXI_1250uL_Tips: registry_type: resource version: 1.0.0 PRCXI_200uL_Tips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_200uL_Tips type: pylabrobot @@ -59,8 +64,9 @@ PRCXI_200uL_Tips: registry_type: resource version: 1.0.0 PRCXI_300ul_Tips: - category: + category: - prcxi + - tip_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_300ul_Tips type: pylabrobot diff --git a/unilabos/registry/resources/prcxi/trash.yaml b/unilabos/registry/resources/prcxi/trash.yaml index b71d1cf1..f87a7624 100644 --- a/unilabos/registry/resources/prcxi/trash.yaml +++ b/unilabos/registry/resources/prcxi/trash.yaml @@ -1,6 +1,7 @@ PRCXI_trash: - category: + category: - prcxi + - trash class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_trash type: pylabrobot diff --git a/unilabos/registry/resources/prcxi/tube_racks.yaml b/unilabos/registry/resources/prcxi/tube_racks.yaml index 4aa7e95e..0b1e07c6 100644 --- a/unilabos/registry/resources/prcxi/tube_racks.yaml +++ b/unilabos/registry/resources/prcxi/tube_racks.yaml @@ -1,6 +1,7 @@ PRCXI_EP_Adapter: - category: + category: - prcxi + - tube_racks class: module: unilabos.devices.liquid_handling.prcxi.prcxi_labware:PRCXI_EP_Adapter type: pylabrobot diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index e3491d09..aaa80799 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -448,7 +448,7 @@ class ResourceTreeSet(object): from pylabrobot.utils.object_parsing import find_subclass # 类型映射 - TYPE_MAP = {"plate": "Plate", "well": "Well", "deck": "Deck", "container": "RegularContainer"} + TYPE_MAP = {"plate": "Plate", "well": "Well", "deck": "Deck", "container": "RegularContainer", "tip_spot": "TipSpot"} def collect_node_data(node: ResourceDictInstance, name_to_uuid: dict, all_states: dict, name_to_extra: dict): """一次遍历收集 name_to_uuid, all_states 和 name_to_extra""" diff --git a/unilabos/test/experiments/prcxi_9300.json b/unilabos/test/experiments/deprecated/prcxi_9300.json similarity index 100% rename from unilabos/test/experiments/prcxi_9300.json rename to unilabos/test/experiments/deprecated/prcxi_9300.json diff --git a/unilabos/test/experiments/prcxi_9320.json b/unilabos/test/experiments/deprecated/prcxi_9320.json similarity index 100% rename from unilabos/test/experiments/prcxi_9320.json rename to unilabos/test/experiments/deprecated/prcxi_9320.json diff --git a/unilabos/test/experiments/deprecated/prcxi_9320_with_res.json b/unilabos/test/experiments/deprecated/prcxi_9320_with_res.json new file mode 100644 index 00000000..3bb8eea5 --- /dev/null +++ b/unilabos/test/experiments/deprecated/prcxi_9320_with_res.json @@ -0,0 +1,40429 @@ +{ + "nodes": [ + { + "id": "PRCXI", + "name": "PRCXI", + "type": "device", + "class": "liquid_handler.prcxi", + "parent": "", + "pose": { + "size": { + "width": 562, + "height": 394, + "depth": 0 + } + }, + "config": { + "axis": "Left", + "deck": { + "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", + "_resource_child_name": "PRCXI_Deck" + }, + "host": "10.20.30.184", + "port": 9999, + "debug": false, + "setup": true, + "is_9320": true, + "timeout": 10, + "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", + "simulator": false, + "channel_num": 2 + }, + "data": { + "reset_ok": true + }, + "schema": {}, + "description": "", + "model": null, + "position": { + "x": 0, + "y": 240, + "z": 0 + } + }, + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", + + "children": [], + "parent": "PRCXI", + "type": "deck", + "class": "", + "position": { + "x": 10, + "y": 10, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 542, + "size_y": 374, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null, + "sites": [ + { + "label": "1", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "2", + "visible": true, + "position": { "x": 138, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "3", + "visible": true, + "position": { "x": 276, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "4", + "visible": true, + "position": { "x": 414, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "5", + "visible": true, + "position": { "x": 0, "y": 96, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "6", + "visible": true, + "position": { "x": 138, "y": 96, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "7", + "visible": true, + "position": { "x": 276, "y": 96, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "8", + "visible": true, + "position": { "x": 414, "y": 96, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "9", + "visible": true, + "position": { "x": 0, "y": 192, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "10", + "visible": true, + "position": { "x": 138, "y": 192, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "11", + "visible": true, + "position": { "x": 276, "y": 192, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "12", + "visible": true, + "position": { "x": 414, "y": 192, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "13", + "visible": true, + "position": { "x": 0, "y": 288, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "14", + "visible": true, + "position": { "x": 138, "y": 288, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "15", + "visible": true, + "position": { "x": 276, "y": 288, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + }, + { + "label": "16", + "visible": true, + "position": { "x": 414, "y": 288, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "RackT1", + "name": "RackT1", + + "children": [ + "RackT1_A1", + "RackT1_B1", + "RackT1_C1", + "RackT1_D1", + "RackT1_E1", + "RackT1_F1", + "RackT1_G1", + "RackT1_H1", + "RackT1_A2", + "RackT1_B2", + "RackT1_C2", + "RackT1_D2", + "RackT1_E2", + "RackT1_F2", + "RackT1_G2", + "RackT1_H2", + "RackT1_A3", + "RackT1_B3", + "RackT1_C3", + "RackT1_D3", + "RackT1_E3", + "RackT1_F3", + "RackT1_G3", + "RackT1_H3", + "RackT1_A4", + "RackT1_B4", + "RackT1_C4", + "RackT1_D4", + "RackT1_E4", + "RackT1_F4", + "RackT1_G4", + "RackT1_H4", + "RackT1_A5", + "RackT1_B5", + "RackT1_C5", + "RackT1_D5", + "RackT1_E5", + "RackT1_F5", + "RackT1_G5", + "RackT1_H5", + "RackT1_A6", + "RackT1_B6", + "RackT1_C6", + "RackT1_D6", + "RackT1_E6", + "RackT1_F6", + "RackT1_G6", + "RackT1_H6", + "RackT1_A7", + "RackT1_B7", + "RackT1_C7", + "RackT1_D7", + "RackT1_E7", + "RackT1_F7", + "RackT1_G7", + "RackT1_H7", + "RackT1_A8", + "RackT1_B8", + "RackT1_C8", + "RackT1_D8", + "RackT1_E8", + "RackT1_F8", + "RackT1_G8", + "RackT1_H8", + "RackT1_A9", + "RackT1_B9", + "RackT1_C9", + "RackT1_D9", + "RackT1_E9", + "RackT1_F9", + "RackT1_G9", + "RackT1_H9", + "RackT1_A10", + "RackT1_B10", + "RackT1_C10", + "RackT1_D10", + "RackT1_E10", + "RackT1_F10", + "RackT1_G10", + "RackT1_H10", + "RackT1_A11", + "RackT1_B11", + "RackT1_C11", + "RackT1_D11", + "RackT1_E11", + "RackT1_F11", + "RackT1_G11", + "RackT1_H11", + "RackT1_A12", + "RackT1_B12", + "RackT1_C12", + "RackT1_D12", + "RackT1_E12", + "RackT1_F12", + "RackT1_G12", + "RackT1_H12" + ], + "parent": "PRCXI_Deck", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "RackT1_A1", + "name": "RackT1_A1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B1", + "name": "RackT1_B1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C1", + "name": "RackT1_C1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D1", + "name": "RackT1_D1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E1", + "name": "RackT1_E1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F1", + "name": "RackT1_F1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G1", + "name": "RackT1_G1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H1", + "name": "RackT1_H1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A2", + "name": "RackT1_A2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B2", + "name": "RackT1_B2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C2", + "name": "RackT1_C2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D2", + "name": "RackT1_D2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E2", + "name": "RackT1_E2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F2", + "name": "RackT1_F2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G2", + "name": "RackT1_G2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H2", + "name": "RackT1_H2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A3", + "name": "RackT1_A3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B3", + "name": "RackT1_B3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C3", + "name": "RackT1_C3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D3", + "name": "RackT1_D3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E3", + "name": "RackT1_E3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F3", + "name": "RackT1_F3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G3", + "name": "RackT1_G3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H3", + "name": "RackT1_H3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A4", + "name": "RackT1_A4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B4", + "name": "RackT1_B4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C4", + "name": "RackT1_C4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D4", + "name": "RackT1_D4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E4", + "name": "RackT1_E4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F4", + "name": "RackT1_F4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G4", + "name": "RackT1_G4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H4", + "name": "RackT1_H4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A5", + "name": "RackT1_A5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B5", + "name": "RackT1_B5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C5", + "name": "RackT1_C5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D5", + "name": "RackT1_D5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E5", + "name": "RackT1_E5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F5", + "name": "RackT1_F5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G5", + "name": "RackT1_G5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H5", + "name": "RackT1_H5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A6", + "name": "RackT1_A6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B6", + "name": "RackT1_B6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C6", + "name": "RackT1_C6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D6", + "name": "RackT1_D6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E6", + "name": "RackT1_E6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F6", + "name": "RackT1_F6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G6", + "name": "RackT1_G6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H6", + "name": "RackT1_H6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A7", + "name": "RackT1_A7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B7", + "name": "RackT1_B7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C7", + "name": "RackT1_C7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D7", + "name": "RackT1_D7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E7", + "name": "RackT1_E7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F7", + "name": "RackT1_F7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G7", + "name": "RackT1_G7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H7", + "name": "RackT1_H7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A8", + "name": "RackT1_A8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B8", + "name": "RackT1_B8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C8", + "name": "RackT1_C8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D8", + "name": "RackT1_D8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E8", + "name": "RackT1_E8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F8", + "name": "RackT1_F8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G8", + "name": "RackT1_G8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H8", + "name": "RackT1_H8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A9", + "name": "RackT1_A9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B9", + "name": "RackT1_B9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C9", + "name": "RackT1_C9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D9", + "name": "RackT1_D9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E9", + "name": "RackT1_E9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F9", + "name": "RackT1_F9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G9", + "name": "RackT1_G9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H9", + "name": "RackT1_H9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A10", + "name": "RackT1_A10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B10", + "name": "RackT1_B10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C10", + "name": "RackT1_C10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D10", + "name": "RackT1_D10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E10", + "name": "RackT1_E10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F10", + "name": "RackT1_F10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G10", + "name": "RackT1_G10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H10", + "name": "RackT1_H10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A11", + "name": "RackT1_A11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B11", + "name": "RackT1_B11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C11", + "name": "RackT1_C11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D11", + "name": "RackT1_D11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E11", + "name": "RackT1_E11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F11", + "name": "RackT1_F11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G11", + "name": "RackT1_G11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H11", + "name": "RackT1_H11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A12", + "name": "RackT1_A12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B12", + "name": "RackT1_B12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C12", + "name": "RackT1_C12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D12", + "name": "RackT1_D12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E12", + "name": "RackT1_E12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F12", + "name": "RackT1_F12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G12", + "name": "RackT1_G12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H12", + "name": "RackT1_H12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT2", + "name": "PlateT2", + + "children": [ + "PlateT2_A1", + "PlateT2_B1", + "PlateT2_C1", + "PlateT2_D1", + "PlateT2_E1", + "PlateT2_F1", + "PlateT2_G1", + "PlateT2_H1", + "PlateT2_A2", + "PlateT2_B2", + "PlateT2_C2", + "PlateT2_D2", + "PlateT2_E2", + "PlateT2_F2", + "PlateT2_G2", + "PlateT2_H2", + "PlateT2_A3", + "PlateT2_B3", + "PlateT2_C3", + "PlateT2_D3", + "PlateT2_E3", + "PlateT2_F3", + "PlateT2_G3", + "PlateT2_H3", + "PlateT2_A4", + "PlateT2_B4", + "PlateT2_C4", + "PlateT2_D4", + "PlateT2_E4", + "PlateT2_F4", + "PlateT2_G4", + "PlateT2_H4", + "PlateT2_A5", + "PlateT2_B5", + "PlateT2_C5", + "PlateT2_D5", + "PlateT2_E5", + "PlateT2_F5", + "PlateT2_G5", + "PlateT2_H5", + "PlateT2_A6", + "PlateT2_B6", + "PlateT2_C6", + "PlateT2_D6", + "PlateT2_E6", + "PlateT2_F6", + "PlateT2_G6", + "PlateT2_H6", + "PlateT2_A7", + "PlateT2_B7", + "PlateT2_C7", + "PlateT2_D7", + "PlateT2_E7", + "PlateT2_F7", + "PlateT2_G7", + "PlateT2_H7", + "PlateT2_A8", + "PlateT2_B8", + "PlateT2_C8", + "PlateT2_D8", + "PlateT2_E8", + "PlateT2_F8", + "PlateT2_G8", + "PlateT2_H8", + "PlateT2_A9", + "PlateT2_B9", + "PlateT2_C9", + "PlateT2_D9", + "PlateT2_E9", + "PlateT2_F9", + "PlateT2_G9", + "PlateT2_H9", + "PlateT2_A10", + "PlateT2_B10", + "PlateT2_C10", + "PlateT2_D10", + "PlateT2_E10", + "PlateT2_F10", + "PlateT2_G10", + "PlateT2_H10", + "PlateT2_A11", + "PlateT2_B11", + "PlateT2_C11", + "PlateT2_D11", + "PlateT2_E11", + "PlateT2_F11", + "PlateT2_G11", + "PlateT2_H11", + "PlateT2_A12", + "PlateT2_B12", + "PlateT2_C12", + "PlateT2_D12", + "PlateT2_E12", + "PlateT2_F12", + "PlateT2_G12", + "PlateT2_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT2_A1", + "B1": "PlateT2_B1", + "C1": "PlateT2_C1", + "D1": "PlateT2_D1", + "E1": "PlateT2_E1", + "F1": "PlateT2_F1", + "G1": "PlateT2_G1", + "H1": "PlateT2_H1", + "A2": "PlateT2_A2", + "B2": "PlateT2_B2", + "C2": "PlateT2_C2", + "D2": "PlateT2_D2", + "E2": "PlateT2_E2", + "F2": "PlateT2_F2", + "G2": "PlateT2_G2", + "H2": "PlateT2_H2", + "A3": "PlateT2_A3", + "B3": "PlateT2_B3", + "C3": "PlateT2_C3", + "D3": "PlateT2_D3", + "E3": "PlateT2_E3", + "F3": "PlateT2_F3", + "G3": "PlateT2_G3", + "H3": "PlateT2_H3", + "A4": "PlateT2_A4", + "B4": "PlateT2_B4", + "C4": "PlateT2_C4", + "D4": "PlateT2_D4", + "E4": "PlateT2_E4", + "F4": "PlateT2_F4", + "G4": "PlateT2_G4", + "H4": "PlateT2_H4", + "A5": "PlateT2_A5", + "B5": "PlateT2_B5", + "C5": "PlateT2_C5", + "D5": "PlateT2_D5", + "E5": "PlateT2_E5", + "F5": "PlateT2_F5", + "G5": "PlateT2_G5", + "H5": "PlateT2_H5", + "A6": "PlateT2_A6", + "B6": "PlateT2_B6", + "C6": "PlateT2_C6", + "D6": "PlateT2_D6", + "E6": "PlateT2_E6", + "F6": "PlateT2_F6", + "G6": "PlateT2_G6", + "H6": "PlateT2_H6", + "A7": "PlateT2_A7", + "B7": "PlateT2_B7", + "C7": "PlateT2_C7", + "D7": "PlateT2_D7", + "E7": "PlateT2_E7", + "F7": "PlateT2_F7", + "G7": "PlateT2_G7", + "H7": "PlateT2_H7", + "A8": "PlateT2_A8", + "B8": "PlateT2_B8", + "C8": "PlateT2_C8", + "D8": "PlateT2_D8", + "E8": "PlateT2_E8", + "F8": "PlateT2_F8", + "G8": "PlateT2_G8", + "H8": "PlateT2_H8", + "A9": "PlateT2_A9", + "B9": "PlateT2_B9", + "C9": "PlateT2_C9", + "D9": "PlateT2_D9", + "E9": "PlateT2_E9", + "F9": "PlateT2_F9", + "G9": "PlateT2_G9", + "H9": "PlateT2_H9", + "A10": "PlateT2_A10", + "B10": "PlateT2_B10", + "C10": "PlateT2_C10", + "D10": "PlateT2_D10", + "E10": "PlateT2_E10", + "F10": "PlateT2_F10", + "G10": "PlateT2_G10", + "H10": "PlateT2_H10", + "A11": "PlateT2_A11", + "B11": "PlateT2_B11", + "C11": "PlateT2_C11", + "D11": "PlateT2_D11", + "E11": "PlateT2_E11", + "F11": "PlateT2_F11", + "G11": "PlateT2_G11", + "H11": "PlateT2_H11", + "A12": "PlateT2_A12", + "B12": "PlateT2_B12", + "C12": "PlateT2_C12", + "D12": "PlateT2_D12", + "E12": "PlateT2_E12", + "F12": "PlateT2_F12", + "G12": "PlateT2_G12", + "H12": "PlateT2_H12" + } + }, + "data": { + "Material": { + "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", + "Code": "ZX-78-096", + "Name": "细菌培养皿" + } + } + }, + { + "id": "PlateT2_A1", + "name": "PlateT2_A1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B1", + "name": "PlateT2_B1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C1", + "name": "PlateT2_C1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D1", + "name": "PlateT2_D1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E1", + "name": "PlateT2_E1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F1", + "name": "PlateT2_F1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G1", + "name": "PlateT2_G1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H1", + "name": "PlateT2_H1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A2", + "name": "PlateT2_A2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B2", + "name": "PlateT2_B2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C2", + "name": "PlateT2_C2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D2", + "name": "PlateT2_D2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E2", + "name": "PlateT2_E2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F2", + "name": "PlateT2_F2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G2", + "name": "PlateT2_G2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H2", + "name": "PlateT2_H2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A3", + "name": "PlateT2_A3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B3", + "name": "PlateT2_B3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C3", + "name": "PlateT2_C3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D3", + "name": "PlateT2_D3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E3", + "name": "PlateT2_E3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F3", + "name": "PlateT2_F3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G3", + "name": "PlateT2_G3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H3", + "name": "PlateT2_H3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A4", + "name": "PlateT2_A4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B4", + "name": "PlateT2_B4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C4", + "name": "PlateT2_C4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D4", + "name": "PlateT2_D4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E4", + "name": "PlateT2_E4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F4", + "name": "PlateT2_F4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G4", + "name": "PlateT2_G4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H4", + "name": "PlateT2_H4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A5", + "name": "PlateT2_A5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B5", + "name": "PlateT2_B5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C5", + "name": "PlateT2_C5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D5", + "name": "PlateT2_D5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E5", + "name": "PlateT2_E5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F5", + "name": "PlateT2_F5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G5", + "name": "PlateT2_G5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H5", + "name": "PlateT2_H5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A6", + "name": "PlateT2_A6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B6", + "name": "PlateT2_B6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C6", + "name": "PlateT2_C6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D6", + "name": "PlateT2_D6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E6", + "name": "PlateT2_E6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F6", + "name": "PlateT2_F6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G6", + "name": "PlateT2_G6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H6", + "name": "PlateT2_H6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A7", + "name": "PlateT2_A7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B7", + "name": "PlateT2_B7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C7", + "name": "PlateT2_C7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D7", + "name": "PlateT2_D7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E7", + "name": "PlateT2_E7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F7", + "name": "PlateT2_F7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G7", + "name": "PlateT2_G7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H7", + "name": "PlateT2_H7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A8", + "name": "PlateT2_A8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B8", + "name": "PlateT2_B8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C8", + "name": "PlateT2_C8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D8", + "name": "PlateT2_D8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E8", + "name": "PlateT2_E8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F8", + "name": "PlateT2_F8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G8", + "name": "PlateT2_G8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H8", + "name": "PlateT2_H8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A9", + "name": "PlateT2_A9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B9", + "name": "PlateT2_B9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C9", + "name": "PlateT2_C9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D9", + "name": "PlateT2_D9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E9", + "name": "PlateT2_E9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F9", + "name": "PlateT2_F9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G9", + "name": "PlateT2_G9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H9", + "name": "PlateT2_H9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A10", + "name": "PlateT2_A10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B10", + "name": "PlateT2_B10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C10", + "name": "PlateT2_C10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D10", + "name": "PlateT2_D10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E10", + "name": "PlateT2_E10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F10", + "name": "PlateT2_F10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G10", + "name": "PlateT2_G10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H10", + "name": "PlateT2_H10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A11", + "name": "PlateT2_A11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B11", + "name": "PlateT2_B11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C11", + "name": "PlateT2_C11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D11", + "name": "PlateT2_D11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E11", + "name": "PlateT2_E11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F11", + "name": "PlateT2_F11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G11", + "name": "PlateT2_G11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H11", + "name": "PlateT2_H11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A12", + "name": "PlateT2_A12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B12", + "name": "PlateT2_B12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C12", + "name": "PlateT2_C12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D12", + "name": "PlateT2_D12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E12", + "name": "PlateT2_E12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F12", + "name": "PlateT2_F12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G12", + "name": "PlateT2_G12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H12", + "name": "PlateT2_H12", + + "children": [], + "parent": "PlateT2", + "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": "emptyT3", + "name": "emptyT3", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + + { + "id": "emptyT4", + "name": "emptyT4", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + + { + "id": "RackT5", + "name": "RackT5", + + "children": [ + "RackT5_A1", + "RackT5_B1", + "RackT5_C1", + "RackT5_D1", + "RackT5_E1", + "RackT5_F1", + "RackT5_G1", + "RackT5_H1", + "RackT5_A2", + "RackT5_B2", + "RackT5_C2", + "RackT5_D2", + "RackT5_E2", + "RackT5_F2", + "RackT5_G2", + "RackT5_H2", + "RackT5_A3", + "RackT5_B3", + "RackT5_C3", + "RackT5_D3", + "RackT5_E3", + "RackT5_F3", + "RackT5_G3", + "RackT5_H3", + "RackT5_A4", + "RackT5_B4", + "RackT5_C4", + "RackT5_D4", + "RackT5_E4", + "RackT5_F4", + "RackT5_G4", + "RackT5_H4", + "RackT5_A5", + "RackT5_B5", + "RackT5_C5", + "RackT5_D5", + "RackT5_E5", + "RackT5_F5", + "RackT5_G5", + "RackT5_H5", + "RackT5_A6", + "RackT5_B6", + "RackT5_C6", + "RackT5_D6", + "RackT5_E6", + "RackT5_F6", + "RackT5_G6", + "RackT5_H6", + "RackT5_A7", + "RackT5_B7", + "RackT5_C7", + "RackT5_D7", + "RackT5_E7", + "RackT5_F7", + "RackT5_G7", + "RackT5_H7", + "RackT5_A8", + "RackT5_B8", + "RackT5_C8", + "RackT5_D8", + "RackT5_E8", + "RackT5_F8", + "RackT5_G8", + "RackT5_H8", + "RackT5_A9", + "RackT5_B9", + "RackT5_C9", + "RackT5_D9", + "RackT5_E9", + "RackT5_F9", + "RackT5_G9", + "RackT5_H9", + "RackT5_A10", + "RackT5_B10", + "RackT5_C10", + "RackT5_D10", + "RackT5_E10", + "RackT5_F10", + "RackT5_G10", + "RackT5_H10", + "RackT5_A11", + "RackT5_B11", + "RackT5_C11", + "RackT5_D11", + "RackT5_E11", + "RackT5_F11", + "RackT5_G11", + "RackT5_H11", + "RackT5_A12", + "RackT5_B12", + "RackT5_C12", + "RackT5_D12", + "RackT5_E12", + "RackT5_F12", + "RackT5_G12", + "RackT5_H12" + ], + "parent": "PRCXI_Deck", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "SupplyType": 1, + "Name": "300μL Tip头" + } + } + }, + { + "id": "RackT5_A1", + "name": "RackT5_A1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B1", + "name": "RackT5_B1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C1", + "name": "RackT5_C1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D1", + "name": "RackT5_D1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E1", + "name": "RackT5_E1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F1", + "name": "RackT5_F1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G1", + "name": "RackT5_G1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H1", + "name": "RackT5_H1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A2", + "name": "RackT5_A2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B2", + "name": "RackT5_B2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C2", + "name": "RackT5_C2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D2", + "name": "RackT5_D2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E2", + "name": "RackT5_E2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F2", + "name": "RackT5_F2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G2", + "name": "RackT5_G2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H2", + "name": "RackT5_H2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A3", + "name": "RackT5_A3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B3", + "name": "RackT5_B3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C3", + "name": "RackT5_C3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D3", + "name": "RackT5_D3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E3", + "name": "RackT5_E3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F3", + "name": "RackT5_F3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G3", + "name": "RackT5_G3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H3", + "name": "RackT5_H3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A4", + "name": "RackT5_A4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B4", + "name": "RackT5_B4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C4", + "name": "RackT5_C4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D4", + "name": "RackT5_D4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E4", + "name": "RackT5_E4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F4", + "name": "RackT5_F4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G4", + "name": "RackT5_G4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H4", + "name": "RackT5_H4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A5", + "name": "RackT5_A5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B5", + "name": "RackT5_B5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C5", + "name": "RackT5_C5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D5", + "name": "RackT5_D5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E5", + "name": "RackT5_E5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F5", + "name": "RackT5_F5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G5", + "name": "RackT5_G5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H5", + "name": "RackT5_H5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A6", + "name": "RackT5_A6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B6", + "name": "RackT5_B6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C6", + "name": "RackT5_C6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D6", + "name": "RackT5_D6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E6", + "name": "RackT5_E6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F6", + "name": "RackT5_F6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G6", + "name": "RackT5_G6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H6", + "name": "RackT5_H6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A7", + "name": "RackT5_A7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B7", + "name": "RackT5_B7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C7", + "name": "RackT5_C7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D7", + "name": "RackT5_D7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E7", + "name": "RackT5_E7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F7", + "name": "RackT5_F7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G7", + "name": "RackT5_G7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H7", + "name": "RackT5_H7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A8", + "name": "RackT5_A8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B8", + "name": "RackT5_B8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C8", + "name": "RackT5_C8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D8", + "name": "RackT5_D8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E8", + "name": "RackT5_E8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F8", + "name": "RackT5_F8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G8", + "name": "RackT5_G8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H8", + "name": "RackT5_H8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A9", + "name": "RackT5_A9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B9", + "name": "RackT5_B9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C9", + "name": "RackT5_C9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D9", + "name": "RackT5_D9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E9", + "name": "RackT5_E9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F9", + "name": "RackT5_F9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G9", + "name": "RackT5_G9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H9", + "name": "RackT5_H9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A10", + "name": "RackT5_A10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B10", + "name": "RackT5_B10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C10", + "name": "RackT5_C10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D10", + "name": "RackT5_D10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E10", + "name": "RackT5_E10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F10", + "name": "RackT5_F10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G10", + "name": "RackT5_G10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H10", + "name": "RackT5_H10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A11", + "name": "RackT5_A11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B11", + "name": "RackT5_B11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C11", + "name": "RackT5_C11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D11", + "name": "RackT5_D11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E11", + "name": "RackT5_E11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F11", + "name": "RackT5_F11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G11", + "name": "RackT5_G11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H11", + "name": "RackT5_H11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A12", + "name": "RackT5_A12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B12", + "name": "RackT5_B12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C12", + "name": "RackT5_C12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D12", + "name": "RackT5_D12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E12", + "name": "RackT5_E12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F12", + "name": "RackT5_F12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G12", + "name": "RackT5_G12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H12", + "name": "RackT5_H12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT6", + "name": "PlateT6", + + "children": [ + "PlateT6_A1", + "PlateT6_B1", + "PlateT6_C1", + "PlateT6_D1", + "PlateT6_E1", + "PlateT6_F1", + "PlateT6_G1", + "PlateT6_H1", + "PlateT6_A2", + "PlateT6_B2", + "PlateT6_C2", + "PlateT6_D2", + "PlateT6_E2", + "PlateT6_F2", + "PlateT6_G2", + "PlateT6_H2", + "PlateT6_A3", + "PlateT6_B3", + "PlateT6_C3", + "PlateT6_D3", + "PlateT6_E3", + "PlateT6_F3", + "PlateT6_G3", + "PlateT6_H3", + "PlateT6_A4", + "PlateT6_B4", + "PlateT6_C4", + "PlateT6_D4", + "PlateT6_E4", + "PlateT6_F4", + "PlateT6_G4", + "PlateT6_H4", + "PlateT6_A5", + "PlateT6_B5", + "PlateT6_C5", + "PlateT6_D5", + "PlateT6_E5", + "PlateT6_F5", + "PlateT6_G5", + "PlateT6_H5", + "PlateT6_A6", + "PlateT6_B6", + "PlateT6_C6", + "PlateT6_D6", + "PlateT6_E6", + "PlateT6_F6", + "PlateT6_G6", + "PlateT6_H6", + "PlateT6_A7", + "PlateT6_B7", + "PlateT6_C7", + "PlateT6_D7", + "PlateT6_E7", + "PlateT6_F7", + "PlateT6_G7", + "PlateT6_H7", + "PlateT6_A8", + "PlateT6_B8", + "PlateT6_C8", + "PlateT6_D8", + "PlateT6_E8", + "PlateT6_F8", + "PlateT6_G8", + "PlateT6_H8", + "PlateT6_A9", + "PlateT6_B9", + "PlateT6_C9", + "PlateT6_D9", + "PlateT6_E9", + "PlateT6_F9", + "PlateT6_G9", + "PlateT6_H9", + "PlateT6_A10", + "PlateT6_B10", + "PlateT6_C10", + "PlateT6_D10", + "PlateT6_E10", + "PlateT6_F10", + "PlateT6_G10", + "PlateT6_H10", + "PlateT6_A11", + "PlateT6_B11", + "PlateT6_C11", + "PlateT6_D11", + "PlateT6_E11", + "PlateT6_F11", + "PlateT6_G11", + "PlateT6_H11", + "PlateT6_A12", + "PlateT6_B12", + "PlateT6_C12", + "PlateT6_D12", + "PlateT6_E12", + "PlateT6_F12", + "PlateT6_G12", + "PlateT6_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT6_A1", + "B1": "PlateT6_B1", + "C1": "PlateT6_C1", + "D1": "PlateT6_D1", + "E1": "PlateT6_E1", + "F1": "PlateT6_F1", + "G1": "PlateT6_G1", + "H1": "PlateT6_H1", + "A2": "PlateT6_A2", + "B2": "PlateT6_B2", + "C2": "PlateT6_C2", + "D2": "PlateT6_D2", + "E2": "PlateT6_E2", + "F2": "PlateT6_F2", + "G2": "PlateT6_G2", + "H2": "PlateT6_H2", + "A3": "PlateT6_A3", + "B3": "PlateT6_B3", + "C3": "PlateT6_C3", + "D3": "PlateT6_D3", + "E3": "PlateT6_E3", + "F3": "PlateT6_F3", + "G3": "PlateT6_G3", + "H3": "PlateT6_H3", + "A4": "PlateT6_A4", + "B4": "PlateT6_B4", + "C4": "PlateT6_C4", + "D4": "PlateT6_D4", + "E4": "PlateT6_E4", + "F4": "PlateT6_F4", + "G4": "PlateT6_G4", + "H4": "PlateT6_H4", + "A5": "PlateT6_A5", + "B5": "PlateT6_B5", + "C5": "PlateT6_C5", + "D5": "PlateT6_D5", + "E5": "PlateT6_E5", + "F5": "PlateT6_F5", + "G5": "PlateT6_G5", + "H5": "PlateT6_H5", + "A6": "PlateT6_A6", + "B6": "PlateT6_B6", + "C6": "PlateT6_C6", + "D6": "PlateT6_D6", + "E6": "PlateT6_E6", + "F6": "PlateT6_F6", + "G6": "PlateT6_G6", + "H6": "PlateT6_H6", + "A7": "PlateT6_A7", + "B7": "PlateT6_B7", + "C7": "PlateT6_C7", + "D7": "PlateT6_D7", + "E7": "PlateT6_E7", + "F7": "PlateT6_F7", + "G7": "PlateT6_G7", + "H7": "PlateT6_H7", + "A8": "PlateT6_A8", + "B8": "PlateT6_B8", + "C8": "PlateT6_C8", + "D8": "PlateT6_D8", + "E8": "PlateT6_E8", + "F8": "PlateT6_F8", + "G8": "PlateT6_G8", + "H8": "PlateT6_H8", + "A9": "PlateT6_A9", + "B9": "PlateT6_B9", + "C9": "PlateT6_C9", + "D9": "PlateT6_D9", + "E9": "PlateT6_E9", + "F9": "PlateT6_F9", + "G9": "PlateT6_G9", + "H9": "PlateT6_H9", + "A10": "PlateT6_A10", + "B10": "PlateT6_B10", + "C10": "PlateT6_C10", + "D10": "PlateT6_D10", + "E10": "PlateT6_E10", + "F10": "PlateT6_F10", + "G10": "PlateT6_G10", + "H10": "PlateT6_H10", + "A11": "PlateT6_A11", + "B11": "PlateT6_B11", + "C11": "PlateT6_C11", + "D11": "PlateT6_D11", + "E11": "PlateT6_E11", + "F11": "PlateT6_F11", + "G11": "PlateT6_G11", + "H11": "PlateT6_H11", + "A12": "PlateT6_A12", + "B12": "PlateT6_B12", + "C12": "PlateT6_C12", + "D12": "PlateT6_D12", + "E12": "PlateT6_E12", + "F12": "PlateT6_F12", + "G12": "PlateT6_G12", + "H12": "PlateT6_H12" + } + }, + "data": { + "Material": { + "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", + "Code": "1", + "SupplyType": 1, + "Name": "ep适配器", + "SummaryName": "ep适配器" + } + } + }, + { + "id": "PlateT6_A1", + "name": "PlateT6_A1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B1", + "name": "PlateT6_B1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C1", + "name": "PlateT6_C1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D1", + "name": "PlateT6_D1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E1", + "name": "PlateT6_E1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F1", + "name": "PlateT6_F1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G1", + "name": "PlateT6_G1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H1", + "name": "PlateT6_H1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A2", + "name": "PlateT6_A2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B2", + "name": "PlateT6_B2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C2", + "name": "PlateT6_C2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D2", + "name": "PlateT6_D2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E2", + "name": "PlateT6_E2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F2", + "name": "PlateT6_F2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G2", + "name": "PlateT6_G2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H2", + "name": "PlateT6_H2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A3", + "name": "PlateT6_A3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B3", + "name": "PlateT6_B3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C3", + "name": "PlateT6_C3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D3", + "name": "PlateT6_D3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E3", + "name": "PlateT6_E3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F3", + "name": "PlateT6_F3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G3", + "name": "PlateT6_G3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H3", + "name": "PlateT6_H3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A4", + "name": "PlateT6_A4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B4", + "name": "PlateT6_B4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C4", + "name": "PlateT6_C4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D4", + "name": "PlateT6_D4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E4", + "name": "PlateT6_E4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F4", + "name": "PlateT6_F4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G4", + "name": "PlateT6_G4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H4", + "name": "PlateT6_H4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A5", + "name": "PlateT6_A5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B5", + "name": "PlateT6_B5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C5", + "name": "PlateT6_C5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D5", + "name": "PlateT6_D5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E5", + "name": "PlateT6_E5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F5", + "name": "PlateT6_F5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G5", + "name": "PlateT6_G5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H5", + "name": "PlateT6_H5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A6", + "name": "PlateT6_A6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B6", + "name": "PlateT6_B6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C6", + "name": "PlateT6_C6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D6", + "name": "PlateT6_D6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E6", + "name": "PlateT6_E6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F6", + "name": "PlateT6_F6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G6", + "name": "PlateT6_G6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H6", + "name": "PlateT6_H6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A7", + "name": "PlateT6_A7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B7", + "name": "PlateT6_B7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C7", + "name": "PlateT6_C7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D7", + "name": "PlateT6_D7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E7", + "name": "PlateT6_E7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F7", + "name": "PlateT6_F7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G7", + "name": "PlateT6_G7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H7", + "name": "PlateT6_H7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A8", + "name": "PlateT6_A8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B8", + "name": "PlateT6_B8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C8", + "name": "PlateT6_C8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D8", + "name": "PlateT6_D8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E8", + "name": "PlateT6_E8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F8", + "name": "PlateT6_F8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G8", + "name": "PlateT6_G8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H8", + "name": "PlateT6_H8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A9", + "name": "PlateT6_A9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B9", + "name": "PlateT6_B9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C9", + "name": "PlateT6_C9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D9", + "name": "PlateT6_D9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E9", + "name": "PlateT6_E9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F9", + "name": "PlateT6_F9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G9", + "name": "PlateT6_G9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H9", + "name": "PlateT6_H9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A10", + "name": "PlateT6_A10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B10", + "name": "PlateT6_B10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C10", + "name": "PlateT6_C10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D10", + "name": "PlateT6_D10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E10", + "name": "PlateT6_E10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F10", + "name": "PlateT6_F10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G10", + "name": "PlateT6_G10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H10", + "name": "PlateT6_H10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A11", + "name": "PlateT6_A11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B11", + "name": "PlateT6_B11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C11", + "name": "PlateT6_C11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D11", + "name": "PlateT6_D11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E11", + "name": "PlateT6_E11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F11", + "name": "PlateT6_F11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G11", + "name": "PlateT6_G11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H11", + "name": "PlateT6_H11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A12", + "name": "PlateT6_A12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B12", + "name": "PlateT6_B12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C12", + "name": "PlateT6_C12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D12", + "name": "PlateT6_D12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E12", + "name": "PlateT6_E12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F12", + "name": "PlateT6_F12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G12", + "name": "PlateT6_G12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H12", + "name": "PlateT6_H12", + + "children": [], + "parent": "PlateT6", + "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": "emptyT7", + "name": "emptyT7", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "emptyT8", + "name": "emptyT8", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT9", + "name": "PlateT9", + + "children": [ + "PlateT9_A1", + "PlateT9_B1", + "PlateT9_C1", + "PlateT9_D1", + "PlateT9_E1", + "PlateT9_F1", + "PlateT9_G1", + "PlateT9_H1", + "PlateT9_A2", + "PlateT9_B2", + "PlateT9_C2", + "PlateT9_D2", + "PlateT9_E2", + "PlateT9_F2", + "PlateT9_G2", + "PlateT9_H2", + "PlateT9_A3", + "PlateT9_B3", + "PlateT9_C3", + "PlateT9_D3", + "PlateT9_E3", + "PlateT9_F3", + "PlateT9_G3", + "PlateT9_H3", + "PlateT9_A4", + "PlateT9_B4", + "PlateT9_C4", + "PlateT9_D4", + "PlateT9_E4", + "PlateT9_F4", + "PlateT9_G4", + "PlateT9_H4", + "PlateT9_A5", + "PlateT9_B5", + "PlateT9_C5", + "PlateT9_D5", + "PlateT9_E5", + "PlateT9_F5", + "PlateT9_G5", + "PlateT9_H5", + "PlateT9_A6", + "PlateT9_B6", + "PlateT9_C6", + "PlateT9_D6", + "PlateT9_E6", + "PlateT9_F6", + "PlateT9_G6", + "PlateT9_H6", + "PlateT9_A7", + "PlateT9_B7", + "PlateT9_C7", + "PlateT9_D7", + "PlateT9_E7", + "PlateT9_F7", + "PlateT9_G7", + "PlateT9_H7", + "PlateT9_A8", + "PlateT9_B8", + "PlateT9_C8", + "PlateT9_D8", + "PlateT9_E8", + "PlateT9_F8", + "PlateT9_G8", + "PlateT9_H8", + "PlateT9_A9", + "PlateT9_B9", + "PlateT9_C9", + "PlateT9_D9", + "PlateT9_E9", + "PlateT9_F9", + "PlateT9_G9", + "PlateT9_H9", + "PlateT9_A10", + "PlateT9_B10", + "PlateT9_C10", + "PlateT9_D10", + "PlateT9_E10", + "PlateT9_F10", + "PlateT9_G10", + "PlateT9_H10", + "PlateT9_A11", + "PlateT9_B11", + "PlateT9_C11", + "PlateT9_D11", + "PlateT9_E11", + "PlateT9_F11", + "PlateT9_G11", + "PlateT9_H11", + "PlateT9_A12", + "PlateT9_B12", + "PlateT9_C12", + "PlateT9_D12", + "PlateT9_E12", + "PlateT9_F12", + "PlateT9_G12", + "PlateT9_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT9_A1", + "B1": "PlateT9_B1", + "C1": "PlateT9_C1", + "D1": "PlateT9_D1", + "E1": "PlateT9_E1", + "F1": "PlateT9_F1", + "G1": "PlateT9_G1", + "H1": "PlateT9_H1", + "A2": "PlateT9_A2", + "B2": "PlateT9_B2", + "C2": "PlateT9_C2", + "D2": "PlateT9_D2", + "E2": "PlateT9_E2", + "F2": "PlateT9_F2", + "G2": "PlateT9_G2", + "H2": "PlateT9_H2", + "A3": "PlateT9_A3", + "B3": "PlateT9_B3", + "C3": "PlateT9_C3", + "D3": "PlateT9_D3", + "E3": "PlateT9_E3", + "F3": "PlateT9_F3", + "G3": "PlateT9_G3", + "H3": "PlateT9_H3", + "A4": "PlateT9_A4", + "B4": "PlateT9_B4", + "C4": "PlateT9_C4", + "D4": "PlateT9_D4", + "E4": "PlateT9_E4", + "F4": "PlateT9_F4", + "G4": "PlateT9_G4", + "H4": "PlateT9_H4", + "A5": "PlateT9_A5", + "B5": "PlateT9_B5", + "C5": "PlateT9_C5", + "D5": "PlateT9_D5", + "E5": "PlateT9_E5", + "F5": "PlateT9_F5", + "G5": "PlateT9_G5", + "H5": "PlateT9_H5", + "A6": "PlateT9_A6", + "B6": "PlateT9_B6", + "C6": "PlateT9_C6", + "D6": "PlateT9_D6", + "E6": "PlateT9_E6", + "F6": "PlateT9_F6", + "G6": "PlateT9_G6", + "H6": "PlateT9_H6", + "A7": "PlateT9_A7", + "B7": "PlateT9_B7", + "C7": "PlateT9_C7", + "D7": "PlateT9_D7", + "E7": "PlateT9_E7", + "F7": "PlateT9_F7", + "G7": "PlateT9_G7", + "H7": "PlateT9_H7", + "A8": "PlateT9_A8", + "B8": "PlateT9_B8", + "C8": "PlateT9_C8", + "D8": "PlateT9_D8", + "E8": "PlateT9_E8", + "F8": "PlateT9_F8", + "G8": "PlateT9_G8", + "H8": "PlateT9_H8", + "A9": "PlateT9_A9", + "B9": "PlateT9_B9", + "C9": "PlateT9_C9", + "D9": "PlateT9_D9", + "E9": "PlateT9_E9", + "F9": "PlateT9_F9", + "G9": "PlateT9_G9", + "H9": "PlateT9_H9", + "A10": "PlateT9_A10", + "B10": "PlateT9_B10", + "C10": "PlateT9_C10", + "D10": "PlateT9_D10", + "E10": "PlateT9_E10", + "F10": "PlateT9_F10", + "G10": "PlateT9_G10", + "H10": "PlateT9_H10", + "A11": "PlateT9_A11", + "B11": "PlateT9_B11", + "C11": "PlateT9_C11", + "D11": "PlateT9_D11", + "E11": "PlateT9_E11", + "F11": "PlateT9_F11", + "G11": "PlateT9_G11", + "H11": "PlateT9_H11", + "A12": "PlateT9_A12", + "B12": "PlateT9_B12", + "C12": "PlateT9_C12", + "D12": "PlateT9_D12", + "E12": "PlateT9_E12", + "F12": "PlateT9_F12", + "G12": "PlateT9_G12", + "H12": "PlateT9_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT9_A1", + "name": "PlateT9_A1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B1", + "name": "PlateT9_B1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C1", + "name": "PlateT9_C1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D1", + "name": "PlateT9_D1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E1", + "name": "PlateT9_E1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F1", + "name": "PlateT9_F1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G1", + "name": "PlateT9_G1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H1", + "name": "PlateT9_H1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A2", + "name": "PlateT9_A2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B2", + "name": "PlateT9_B2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C2", + "name": "PlateT9_C2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D2", + "name": "PlateT9_D2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E2", + "name": "PlateT9_E2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F2", + "name": "PlateT9_F2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G2", + "name": "PlateT9_G2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H2", + "name": "PlateT9_H2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A3", + "name": "PlateT9_A3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B3", + "name": "PlateT9_B3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C3", + "name": "PlateT9_C3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D3", + "name": "PlateT9_D3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E3", + "name": "PlateT9_E3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F3", + "name": "PlateT9_F3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G3", + "name": "PlateT9_G3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H3", + "name": "PlateT9_H3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A4", + "name": "PlateT9_A4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B4", + "name": "PlateT9_B4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C4", + "name": "PlateT9_C4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D4", + "name": "PlateT9_D4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E4", + "name": "PlateT9_E4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F4", + "name": "PlateT9_F4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G4", + "name": "PlateT9_G4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H4", + "name": "PlateT9_H4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A5", + "name": "PlateT9_A5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B5", + "name": "PlateT9_B5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C5", + "name": "PlateT9_C5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D5", + "name": "PlateT9_D5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E5", + "name": "PlateT9_E5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F5", + "name": "PlateT9_F5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G5", + "name": "PlateT9_G5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H5", + "name": "PlateT9_H5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A6", + "name": "PlateT9_A6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B6", + "name": "PlateT9_B6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C6", + "name": "PlateT9_C6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D6", + "name": "PlateT9_D6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E6", + "name": "PlateT9_E6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F6", + "name": "PlateT9_F6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G6", + "name": "PlateT9_G6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H6", + "name": "PlateT9_H6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A7", + "name": "PlateT9_A7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B7", + "name": "PlateT9_B7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C7", + "name": "PlateT9_C7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D7", + "name": "PlateT9_D7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E7", + "name": "PlateT9_E7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F7", + "name": "PlateT9_F7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G7", + "name": "PlateT9_G7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H7", + "name": "PlateT9_H7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A8", + "name": "PlateT9_A8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B8", + "name": "PlateT9_B8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C8", + "name": "PlateT9_C8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D8", + "name": "PlateT9_D8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E8", + "name": "PlateT9_E8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F8", + "name": "PlateT9_F8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G8", + "name": "PlateT9_G8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H8", + "name": "PlateT9_H8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A9", + "name": "PlateT9_A9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B9", + "name": "PlateT9_B9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C9", + "name": "PlateT9_C9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D9", + "name": "PlateT9_D9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E9", + "name": "PlateT9_E9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F9", + "name": "PlateT9_F9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G9", + "name": "PlateT9_G9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H9", + "name": "PlateT9_H9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A10", + "name": "PlateT9_A10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B10", + "name": "PlateT9_B10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C10", + "name": "PlateT9_C10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D10", + "name": "PlateT9_D10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E10", + "name": "PlateT9_E10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F10", + "name": "PlateT9_F10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G10", + "name": "PlateT9_G10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H10", + "name": "PlateT9_H10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A11", + "name": "PlateT9_A11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B11", + "name": "PlateT9_B11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C11", + "name": "PlateT9_C11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D11", + "name": "PlateT9_D11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E11", + "name": "PlateT9_E11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F11", + "name": "PlateT9_F11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G11", + "name": "PlateT9_G11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H11", + "name": "PlateT9_H11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A12", + "name": "PlateT9_A12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B12", + "name": "PlateT9_B12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C12", + "name": "PlateT9_C12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D12", + "name": "PlateT9_D12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E12", + "name": "PlateT9_E12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F12", + "name": "PlateT9_F12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G12", + "name": "PlateT9_G12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H12", + "name": "PlateT9_H12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT10", + "name": "PlateT10", + + "children": [ + "PlateT10_A1", + "PlateT10_B1", + "PlateT10_C1", + "PlateT10_D1", + "PlateT10_E1", + "PlateT10_F1", + "PlateT10_G1", + "PlateT10_H1", + "PlateT10_A2", + "PlateT10_B2", + "PlateT10_C2", + "PlateT10_D2", + "PlateT10_E2", + "PlateT10_F2", + "PlateT10_G2", + "PlateT10_H2", + "PlateT10_A3", + "PlateT10_B3", + "PlateT10_C3", + "PlateT10_D3", + "PlateT10_E3", + "PlateT10_F3", + "PlateT10_G3", + "PlateT10_H3", + "PlateT10_A4", + "PlateT10_B4", + "PlateT10_C4", + "PlateT10_D4", + "PlateT10_E4", + "PlateT10_F4", + "PlateT10_G4", + "PlateT10_H4", + "PlateT10_A5", + "PlateT10_B5", + "PlateT10_C5", + "PlateT10_D5", + "PlateT10_E5", + "PlateT10_F5", + "PlateT10_G5", + "PlateT10_H5", + "PlateT10_A6", + "PlateT10_B6", + "PlateT10_C6", + "PlateT10_D6", + "PlateT10_E6", + "PlateT10_F6", + "PlateT10_G6", + "PlateT10_H6", + "PlateT10_A7", + "PlateT10_B7", + "PlateT10_C7", + "PlateT10_D7", + "PlateT10_E7", + "PlateT10_F7", + "PlateT10_G7", + "PlateT10_H7", + "PlateT10_A8", + "PlateT10_B8", + "PlateT10_C8", + "PlateT10_D8", + "PlateT10_E8", + "PlateT10_F8", + "PlateT10_G8", + "PlateT10_H8", + "PlateT10_A9", + "PlateT10_B9", + "PlateT10_C9", + "PlateT10_D9", + "PlateT10_E9", + "PlateT10_F9", + "PlateT10_G9", + "PlateT10_H9", + "PlateT10_A10", + "PlateT10_B10", + "PlateT10_C10", + "PlateT10_D10", + "PlateT10_E10", + "PlateT10_F10", + "PlateT10_G10", + "PlateT10_H10", + "PlateT10_A11", + "PlateT10_B11", + "PlateT10_C11", + "PlateT10_D11", + "PlateT10_E11", + "PlateT10_F11", + "PlateT10_G11", + "PlateT10_H11", + "PlateT10_A12", + "PlateT10_B12", + "PlateT10_C12", + "PlateT10_D12", + "PlateT10_E12", + "PlateT10_F12", + "PlateT10_G12", + "PlateT10_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT10_A1", + "B1": "PlateT10_B1", + "C1": "PlateT10_C1", + "D1": "PlateT10_D1", + "E1": "PlateT10_E1", + "F1": "PlateT10_F1", + "G1": "PlateT10_G1", + "H1": "PlateT10_H1", + "A2": "PlateT10_A2", + "B2": "PlateT10_B2", + "C2": "PlateT10_C2", + "D2": "PlateT10_D2", + "E2": "PlateT10_E2", + "F2": "PlateT10_F2", + "G2": "PlateT10_G2", + "H2": "PlateT10_H2", + "A3": "PlateT10_A3", + "B3": "PlateT10_B3", + "C3": "PlateT10_C3", + "D3": "PlateT10_D3", + "E3": "PlateT10_E3", + "F3": "PlateT10_F3", + "G3": "PlateT10_G3", + "H3": "PlateT10_H3", + "A4": "PlateT10_A4", + "B4": "PlateT10_B4", + "C4": "PlateT10_C4", + "D4": "PlateT10_D4", + "E4": "PlateT10_E4", + "F4": "PlateT10_F4", + "G4": "PlateT10_G4", + "H4": "PlateT10_H4", + "A5": "PlateT10_A5", + "B5": "PlateT10_B5", + "C5": "PlateT10_C5", + "D5": "PlateT10_D5", + "E5": "PlateT10_E5", + "F5": "PlateT10_F5", + "G5": "PlateT10_G5", + "H5": "PlateT10_H5", + "A6": "PlateT10_A6", + "B6": "PlateT10_B6", + "C6": "PlateT10_C6", + "D6": "PlateT10_D6", + "E6": "PlateT10_E6", + "F6": "PlateT10_F6", + "G6": "PlateT10_G6", + "H6": "PlateT10_H6", + "A7": "PlateT10_A7", + "B7": "PlateT10_B7", + "C7": "PlateT10_C7", + "D7": "PlateT10_D7", + "E7": "PlateT10_E7", + "F7": "PlateT10_F7", + "G7": "PlateT10_G7", + "H7": "PlateT10_H7", + "A8": "PlateT10_A8", + "B8": "PlateT10_B8", + "C8": "PlateT10_C8", + "D8": "PlateT10_D8", + "E8": "PlateT10_E8", + "F8": "PlateT10_F8", + "G8": "PlateT10_G8", + "H8": "PlateT10_H8", + "A9": "PlateT10_A9", + "B9": "PlateT10_B9", + "C9": "PlateT10_C9", + "D9": "PlateT10_D9", + "E9": "PlateT10_E9", + "F9": "PlateT10_F9", + "G9": "PlateT10_G9", + "H9": "PlateT10_H9", + "A10": "PlateT10_A10", + "B10": "PlateT10_B10", + "C10": "PlateT10_C10", + "D10": "PlateT10_D10", + "E10": "PlateT10_E10", + "F10": "PlateT10_F10", + "G10": "PlateT10_G10", + "H10": "PlateT10_H10", + "A11": "PlateT10_A11", + "B11": "PlateT10_B11", + "C11": "PlateT10_C11", + "D11": "PlateT10_D11", + "E11": "PlateT10_E11", + "F11": "PlateT10_F11", + "G11": "PlateT10_G11", + "H11": "PlateT10_H11", + "A12": "PlateT10_A12", + "B12": "PlateT10_B12", + "C12": "PlateT10_C12", + "D12": "PlateT10_D12", + "E12": "PlateT10_E12", + "F12": "PlateT10_F12", + "G12": "PlateT10_G12", + "H12": "PlateT10_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT10_A1", + "name": "PlateT10_A1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B1", + "name": "PlateT10_B1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C1", + "name": "PlateT10_C1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D1", + "name": "PlateT10_D1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E1", + "name": "PlateT10_E1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F1", + "name": "PlateT10_F1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G1", + "name": "PlateT10_G1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H1", + "name": "PlateT10_H1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A2", + "name": "PlateT10_A2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B2", + "name": "PlateT10_B2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C2", + "name": "PlateT10_C2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D2", + "name": "PlateT10_D2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E2", + "name": "PlateT10_E2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F2", + "name": "PlateT10_F2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G2", + "name": "PlateT10_G2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H2", + "name": "PlateT10_H2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A3", + "name": "PlateT10_A3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B3", + "name": "PlateT10_B3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C3", + "name": "PlateT10_C3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D3", + "name": "PlateT10_D3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E3", + "name": "PlateT10_E3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F3", + "name": "PlateT10_F3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G3", + "name": "PlateT10_G3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H3", + "name": "PlateT10_H3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A4", + "name": "PlateT10_A4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B4", + "name": "PlateT10_B4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C4", + "name": "PlateT10_C4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D4", + "name": "PlateT10_D4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E4", + "name": "PlateT10_E4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F4", + "name": "PlateT10_F4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G4", + "name": "PlateT10_G4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H4", + "name": "PlateT10_H4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A5", + "name": "PlateT10_A5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B5", + "name": "PlateT10_B5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C5", + "name": "PlateT10_C5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D5", + "name": "PlateT10_D5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E5", + "name": "PlateT10_E5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F5", + "name": "PlateT10_F5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G5", + "name": "PlateT10_G5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H5", + "name": "PlateT10_H5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A6", + "name": "PlateT10_A6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B6", + "name": "PlateT10_B6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C6", + "name": "PlateT10_C6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D6", + "name": "PlateT10_D6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E6", + "name": "PlateT10_E6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F6", + "name": "PlateT10_F6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G6", + "name": "PlateT10_G6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H6", + "name": "PlateT10_H6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A7", + "name": "PlateT10_A7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B7", + "name": "PlateT10_B7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C7", + "name": "PlateT10_C7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D7", + "name": "PlateT10_D7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E7", + "name": "PlateT10_E7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F7", + "name": "PlateT10_F7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G7", + "name": "PlateT10_G7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H7", + "name": "PlateT10_H7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A8", + "name": "PlateT10_A8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B8", + "name": "PlateT10_B8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C8", + "name": "PlateT10_C8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D8", + "name": "PlateT10_D8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E8", + "name": "PlateT10_E8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F8", + "name": "PlateT10_F8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G8", + "name": "PlateT10_G8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H8", + "name": "PlateT10_H8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A9", + "name": "PlateT10_A9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B9", + "name": "PlateT10_B9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C9", + "name": "PlateT10_C9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D9", + "name": "PlateT10_D9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E9", + "name": "PlateT10_E9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F9", + "name": "PlateT10_F9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G9", + "name": "PlateT10_G9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H9", + "name": "PlateT10_H9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A10", + "name": "PlateT10_A10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B10", + "name": "PlateT10_B10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C10", + "name": "PlateT10_C10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D10", + "name": "PlateT10_D10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E10", + "name": "PlateT10_E10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F10", + "name": "PlateT10_F10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G10", + "name": "PlateT10_G10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H10", + "name": "PlateT10_H10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A11", + "name": "PlateT10_A11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B11", + "name": "PlateT10_B11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C11", + "name": "PlateT10_C11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D11", + "name": "PlateT10_D11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E11", + "name": "PlateT10_E11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F11", + "name": "PlateT10_F11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G11", + "name": "PlateT10_G11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H11", + "name": "PlateT10_H11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A12", + "name": "PlateT10_A12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B12", + "name": "PlateT10_B12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C12", + "name": "PlateT10_C12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D12", + "name": "PlateT10_D12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E12", + "name": "PlateT10_E12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F12", + "name": "PlateT10_F12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G12", + "name": "PlateT10_G12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H12", + "name": "PlateT10_H12", + + "children": [], + "parent": "PlateT10", + "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": "emptyT11", + "name": "emptyT11", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "emptyT12", + "name": "emptyT12", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {} + }, + "data": {} + }, + { + "id": "PlateT13", + "name": "PlateT13", + + "children": [ + "PlateT13_A1", + "PlateT13_B1", + "PlateT13_C1", + "PlateT13_D1", + "PlateT13_E1", + "PlateT13_F1", + "PlateT13_G1", + "PlateT13_H1", + "PlateT13_A2", + "PlateT13_B2", + "PlateT13_C2", + "PlateT13_D2", + "PlateT13_E2", + "PlateT13_F2", + "PlateT13_G2", + "PlateT13_H2", + "PlateT13_A3", + "PlateT13_B3", + "PlateT13_C3", + "PlateT13_D3", + "PlateT13_E3", + "PlateT13_F3", + "PlateT13_G3", + "PlateT13_H3", + "PlateT13_A4", + "PlateT13_B4", + "PlateT13_C4", + "PlateT13_D4", + "PlateT13_E4", + "PlateT13_F4", + "PlateT13_G4", + "PlateT13_H4", + "PlateT13_A5", + "PlateT13_B5", + "PlateT13_C5", + "PlateT13_D5", + "PlateT13_E5", + "PlateT13_F5", + "PlateT13_G5", + "PlateT13_H5", + "PlateT13_A6", + "PlateT13_B6", + "PlateT13_C6", + "PlateT13_D6", + "PlateT13_E6", + "PlateT13_F6", + "PlateT13_G6", + "PlateT13_H6", + "PlateT13_A7", + "PlateT13_B7", + "PlateT13_C7", + "PlateT13_D7", + "PlateT13_E7", + "PlateT13_F7", + "PlateT13_G7", + "PlateT13_H7", + "PlateT13_A8", + "PlateT13_B8", + "PlateT13_C8", + "PlateT13_D8", + "PlateT13_E8", + "PlateT13_F8", + "PlateT13_G8", + "PlateT13_H8", + "PlateT13_A9", + "PlateT13_B9", + "PlateT13_C9", + "PlateT13_D9", + "PlateT13_E9", + "PlateT13_F9", + "PlateT13_G9", + "PlateT13_H9", + "PlateT13_A10", + "PlateT13_B10", + "PlateT13_C10", + "PlateT13_D10", + "PlateT13_E10", + "PlateT13_F10", + "PlateT13_G10", + "PlateT13_H10", + "PlateT13_A11", + "PlateT13_B11", + "PlateT13_C11", + "PlateT13_D11", + "PlateT13_E11", + "PlateT13_F11", + "PlateT13_G11", + "PlateT13_H11", + "PlateT13_A12", + "PlateT13_B12", + "PlateT13_C12", + "PlateT13_D12", + "PlateT13_E12", + "PlateT13_F12", + "PlateT13_G12", + "PlateT13_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT13_A1", + "B1": "PlateT13_B1", + "C1": "PlateT13_C1", + "D1": "PlateT13_D1", + "E1": "PlateT13_E1", + "F1": "PlateT13_F1", + "G1": "PlateT13_G1", + "H1": "PlateT13_H1", + "A2": "PlateT13_A2", + "B2": "PlateT13_B2", + "C2": "PlateT13_C2", + "D2": "PlateT13_D2", + "E2": "PlateT13_E2", + "F2": "PlateT13_F2", + "G2": "PlateT13_G2", + "H2": "PlateT13_H2", + "A3": "PlateT13_A3", + "B3": "PlateT13_B3", + "C3": "PlateT13_C3", + "D3": "PlateT13_D3", + "E3": "PlateT13_E3", + "F3": "PlateT13_F3", + "G3": "PlateT13_G3", + "H3": "PlateT13_H3", + "A4": "PlateT13_A4", + "B4": "PlateT13_B4", + "C4": "PlateT13_C4", + "D4": "PlateT13_D4", + "E4": "PlateT13_E4", + "F4": "PlateT13_F4", + "G4": "PlateT13_G4", + "H4": "PlateT13_H4", + "A5": "PlateT13_A5", + "B5": "PlateT13_B5", + "C5": "PlateT13_C5", + "D5": "PlateT13_D5", + "E5": "PlateT13_E5", + "F5": "PlateT13_F5", + "G5": "PlateT13_G5", + "H5": "PlateT13_H5", + "A6": "PlateT13_A6", + "B6": "PlateT13_B6", + "C6": "PlateT13_C6", + "D6": "PlateT13_D6", + "E6": "PlateT13_E6", + "F6": "PlateT13_F6", + "G6": "PlateT13_G6", + "H6": "PlateT13_H6", + "A7": "PlateT13_A7", + "B7": "PlateT13_B7", + "C7": "PlateT13_C7", + "D7": "PlateT13_D7", + "E7": "PlateT13_E7", + "F7": "PlateT13_F7", + "G7": "PlateT13_G7", + "H7": "PlateT13_H7", + "A8": "PlateT13_A8", + "B8": "PlateT13_B8", + "C8": "PlateT13_C8", + "D8": "PlateT13_D8", + "E8": "PlateT13_E8", + "F8": "PlateT13_F8", + "G8": "PlateT13_G8", + "H8": "PlateT13_H8", + "A9": "PlateT13_A9", + "B9": "PlateT13_B9", + "C9": "PlateT13_C9", + "D9": "PlateT13_D9", + "E9": "PlateT13_E9", + "F9": "PlateT13_F9", + "G9": "PlateT13_G9", + "H9": "PlateT13_H9", + "A10": "PlateT13_A10", + "B10": "PlateT13_B10", + "C10": "PlateT13_C10", + "D10": "PlateT13_D10", + "E10": "PlateT13_E10", + "F10": "PlateT13_F10", + "G10": "PlateT13_G10", + "H10": "PlateT13_H10", + "A11": "PlateT13_A11", + "B11": "PlateT13_B11", + "C11": "PlateT13_C11", + "D11": "PlateT13_D11", + "E11": "PlateT13_E11", + "F11": "PlateT13_F11", + "G11": "PlateT13_G11", + "H11": "PlateT13_H11", + "A12": "PlateT13_A12", + "B12": "PlateT13_B12", + "C12": "PlateT13_C12", + "D12": "PlateT13_D12", + "E12": "PlateT13_E12", + "F12": "PlateT13_F12", + "G12": "PlateT13_G12", + "H12": "PlateT13_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT13_A1", + "name": "PlateT13_A1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B1", + "name": "PlateT13_B1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C1", + "name": "PlateT13_C1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D1", + "name": "PlateT13_D1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E1", + "name": "PlateT13_E1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F1", + "name": "PlateT13_F1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G1", + "name": "PlateT13_G1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H1", + "name": "PlateT13_H1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A2", + "name": "PlateT13_A2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B2", + "name": "PlateT13_B2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C2", + "name": "PlateT13_C2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D2", + "name": "PlateT13_D2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E2", + "name": "PlateT13_E2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F2", + "name": "PlateT13_F2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G2", + "name": "PlateT13_G2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H2", + "name": "PlateT13_H2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A3", + "name": "PlateT13_A3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B3", + "name": "PlateT13_B3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C3", + "name": "PlateT13_C3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D3", + "name": "PlateT13_D3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E3", + "name": "PlateT13_E3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F3", + "name": "PlateT13_F3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G3", + "name": "PlateT13_G3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H3", + "name": "PlateT13_H3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A4", + "name": "PlateT13_A4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B4", + "name": "PlateT13_B4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C4", + "name": "PlateT13_C4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D4", + "name": "PlateT13_D4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E4", + "name": "PlateT13_E4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F4", + "name": "PlateT13_F4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G4", + "name": "PlateT13_G4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H4", + "name": "PlateT13_H4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A5", + "name": "PlateT13_A5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B5", + "name": "PlateT13_B5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C5", + "name": "PlateT13_C5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D5", + "name": "PlateT13_D5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E5", + "name": "PlateT13_E5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F5", + "name": "PlateT13_F5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G5", + "name": "PlateT13_G5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H5", + "name": "PlateT13_H5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A6", + "name": "PlateT13_A6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B6", + "name": "PlateT13_B6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C6", + "name": "PlateT13_C6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D6", + "name": "PlateT13_D6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E6", + "name": "PlateT13_E6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F6", + "name": "PlateT13_F6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G6", + "name": "PlateT13_G6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H6", + "name": "PlateT13_H6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A7", + "name": "PlateT13_A7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B7", + "name": "PlateT13_B7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C7", + "name": "PlateT13_C7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D7", + "name": "PlateT13_D7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E7", + "name": "PlateT13_E7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F7", + "name": "PlateT13_F7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G7", + "name": "PlateT13_G7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H7", + "name": "PlateT13_H7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A8", + "name": "PlateT13_A8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B8", + "name": "PlateT13_B8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C8", + "name": "PlateT13_C8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D8", + "name": "PlateT13_D8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E8", + "name": "PlateT13_E8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F8", + "name": "PlateT13_F8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G8", + "name": "PlateT13_G8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H8", + "name": "PlateT13_H8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A9", + "name": "PlateT13_A9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B9", + "name": "PlateT13_B9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C9", + "name": "PlateT13_C9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D9", + "name": "PlateT13_D9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E9", + "name": "PlateT13_E9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F9", + "name": "PlateT13_F9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G9", + "name": "PlateT13_G9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H9", + "name": "PlateT13_H9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A10", + "name": "PlateT13_A10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B10", + "name": "PlateT13_B10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C10", + "name": "PlateT13_C10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D10", + "name": "PlateT13_D10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E10", + "name": "PlateT13_E10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F10", + "name": "PlateT13_F10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G10", + "name": "PlateT13_G10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H10", + "name": "PlateT13_H10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A11", + "name": "PlateT13_A11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B11", + "name": "PlateT13_B11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C11", + "name": "PlateT13_C11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D11", + "name": "PlateT13_D11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E11", + "name": "PlateT13_E11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F11", + "name": "PlateT13_F11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G11", + "name": "PlateT13_G11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H11", + "name": "PlateT13_H11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A12", + "name": "PlateT13_A12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B12", + "name": "PlateT13_B12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C12", + "name": "PlateT13_C12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D12", + "name": "PlateT13_D12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E12", + "name": "PlateT13_E12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F12", + "name": "PlateT13_F12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G12", + "name": "PlateT13_G12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H12", + "name": "PlateT13_H12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT14", + "name": "PlateT14", + + "children": [ + "PlateT14_A1", + "PlateT14_B1", + "PlateT14_C1", + "PlateT14_D1", + "PlateT14_E1", + "PlateT14_F1", + "PlateT14_G1", + "PlateT14_H1", + "PlateT14_A2", + "PlateT14_B2", + "PlateT14_C2", + "PlateT14_D2", + "PlateT14_E2", + "PlateT14_F2", + "PlateT14_G2", + "PlateT14_H2", + "PlateT14_A3", + "PlateT14_B3", + "PlateT14_C3", + "PlateT14_D3", + "PlateT14_E3", + "PlateT14_F3", + "PlateT14_G3", + "PlateT14_H3", + "PlateT14_A4", + "PlateT14_B4", + "PlateT14_C4", + "PlateT14_D4", + "PlateT14_E4", + "PlateT14_F4", + "PlateT14_G4", + "PlateT14_H4", + "PlateT14_A5", + "PlateT14_B5", + "PlateT14_C5", + "PlateT14_D5", + "PlateT14_E5", + "PlateT14_F5", + "PlateT14_G5", + "PlateT14_H5", + "PlateT14_A6", + "PlateT14_B6", + "PlateT14_C6", + "PlateT14_D6", + "PlateT14_E6", + "PlateT14_F6", + "PlateT14_G6", + "PlateT14_H6", + "PlateT14_A7", + "PlateT14_B7", + "PlateT14_C7", + "PlateT14_D7", + "PlateT14_E7", + "PlateT14_F7", + "PlateT14_G7", + "PlateT14_H7", + "PlateT14_A8", + "PlateT14_B8", + "PlateT14_C8", + "PlateT14_D8", + "PlateT14_E8", + "PlateT14_F8", + "PlateT14_G8", + "PlateT14_H8", + "PlateT14_A9", + "PlateT14_B9", + "PlateT14_C9", + "PlateT14_D9", + "PlateT14_E9", + "PlateT14_F9", + "PlateT14_G9", + "PlateT14_H9", + "PlateT14_A10", + "PlateT14_B10", + "PlateT14_C10", + "PlateT14_D10", + "PlateT14_E10", + "PlateT14_F10", + "PlateT14_G10", + "PlateT14_H10", + "PlateT14_A11", + "PlateT14_B11", + "PlateT14_C11", + "PlateT14_D11", + "PlateT14_E11", + "PlateT14_F11", + "PlateT14_G11", + "PlateT14_H11", + "PlateT14_A12", + "PlateT14_B12", + "PlateT14_C12", + "PlateT14_D12", + "PlateT14_E12", + "PlateT14_F12", + "PlateT14_G12", + "PlateT14_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT14_A1", + "B1": "PlateT14_B1", + "C1": "PlateT14_C1", + "D1": "PlateT14_D1", + "E1": "PlateT14_E1", + "F1": "PlateT14_F1", + "G1": "PlateT14_G1", + "H1": "PlateT14_H1", + "A2": "PlateT14_A2", + "B2": "PlateT14_B2", + "C2": "PlateT14_C2", + "D2": "PlateT14_D2", + "E2": "PlateT14_E2", + "F2": "PlateT14_F2", + "G2": "PlateT14_G2", + "H2": "PlateT14_H2", + "A3": "PlateT14_A3", + "B3": "PlateT14_B3", + "C3": "PlateT14_C3", + "D3": "PlateT14_D3", + "E3": "PlateT14_E3", + "F3": "PlateT14_F3", + "G3": "PlateT14_G3", + "H3": "PlateT14_H3", + "A4": "PlateT14_A4", + "B4": "PlateT14_B4", + "C4": "PlateT14_C4", + "D4": "PlateT14_D4", + "E4": "PlateT14_E4", + "F4": "PlateT14_F4", + "G4": "PlateT14_G4", + "H4": "PlateT14_H4", + "A5": "PlateT14_A5", + "B5": "PlateT14_B5", + "C5": "PlateT14_C5", + "D5": "PlateT14_D5", + "E5": "PlateT14_E5", + "F5": "PlateT14_F5", + "G5": "PlateT14_G5", + "H5": "PlateT14_H5", + "A6": "PlateT14_A6", + "B6": "PlateT14_B6", + "C6": "PlateT14_C6", + "D6": "PlateT14_D6", + "E6": "PlateT14_E6", + "F6": "PlateT14_F6", + "G6": "PlateT14_G6", + "H6": "PlateT14_H6", + "A7": "PlateT14_A7", + "B7": "PlateT14_B7", + "C7": "PlateT14_C7", + "D7": "PlateT14_D7", + "E7": "PlateT14_E7", + "F7": "PlateT14_F7", + "G7": "PlateT14_G7", + "H7": "PlateT14_H7", + "A8": "PlateT14_A8", + "B8": "PlateT14_B8", + "C8": "PlateT14_C8", + "D8": "PlateT14_D8", + "E8": "PlateT14_E8", + "F8": "PlateT14_F8", + "G8": "PlateT14_G8", + "H8": "PlateT14_H8", + "A9": "PlateT14_A9", + "B9": "PlateT14_B9", + "C9": "PlateT14_C9", + "D9": "PlateT14_D9", + "E9": "PlateT14_E9", + "F9": "PlateT14_F9", + "G9": "PlateT14_G9", + "H9": "PlateT14_H9", + "A10": "PlateT14_A10", + "B10": "PlateT14_B10", + "C10": "PlateT14_C10", + "D10": "PlateT14_D10", + "E10": "PlateT14_E10", + "F10": "PlateT14_F10", + "G10": "PlateT14_G10", + "H10": "PlateT14_H10", + "A11": "PlateT14_A11", + "B11": "PlateT14_B11", + "C11": "PlateT14_C11", + "D11": "PlateT14_D11", + "E11": "PlateT14_E11", + "F11": "PlateT14_F11", + "G11": "PlateT14_G11", + "H11": "PlateT14_H11", + "A12": "PlateT14_A12", + "B12": "PlateT14_B12", + "C12": "PlateT14_C12", + "D12": "PlateT14_D12", + "E12": "PlateT14_E12", + "F12": "PlateT14_F12", + "G12": "PlateT14_G12", + "H12": "PlateT14_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT14_A1", + "name": "PlateT14_A1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B1", + "name": "PlateT14_B1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C1", + "name": "PlateT14_C1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D1", + "name": "PlateT14_D1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E1", + "name": "PlateT14_E1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F1", + "name": "PlateT14_F1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G1", + "name": "PlateT14_G1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H1", + "name": "PlateT14_H1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A2", + "name": "PlateT14_A2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B2", + "name": "PlateT14_B2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C2", + "name": "PlateT14_C2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D2", + "name": "PlateT14_D2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E2", + "name": "PlateT14_E2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F2", + "name": "PlateT14_F2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G2", + "name": "PlateT14_G2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H2", + "name": "PlateT14_H2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A3", + "name": "PlateT14_A3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B3", + "name": "PlateT14_B3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C3", + "name": "PlateT14_C3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D3", + "name": "PlateT14_D3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E3", + "name": "PlateT14_E3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F3", + "name": "PlateT14_F3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G3", + "name": "PlateT14_G3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H3", + "name": "PlateT14_H3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A4", + "name": "PlateT14_A4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B4", + "name": "PlateT14_B4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C4", + "name": "PlateT14_C4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D4", + "name": "PlateT14_D4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E4", + "name": "PlateT14_E4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F4", + "name": "PlateT14_F4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G4", + "name": "PlateT14_G4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H4", + "name": "PlateT14_H4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A5", + "name": "PlateT14_A5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B5", + "name": "PlateT14_B5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C5", + "name": "PlateT14_C5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D5", + "name": "PlateT14_D5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E5", + "name": "PlateT14_E5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F5", + "name": "PlateT14_F5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G5", + "name": "PlateT14_G5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H5", + "name": "PlateT14_H5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A6", + "name": "PlateT14_A6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B6", + "name": "PlateT14_B6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C6", + "name": "PlateT14_C6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D6", + "name": "PlateT14_D6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E6", + "name": "PlateT14_E6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F6", + "name": "PlateT14_F6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G6", + "name": "PlateT14_G6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H6", + "name": "PlateT14_H6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A7", + "name": "PlateT14_A7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B7", + "name": "PlateT14_B7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C7", + "name": "PlateT14_C7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D7", + "name": "PlateT14_D7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E7", + "name": "PlateT14_E7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F7", + "name": "PlateT14_F7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G7", + "name": "PlateT14_G7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H7", + "name": "PlateT14_H7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A8", + "name": "PlateT14_A8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B8", + "name": "PlateT14_B8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C8", + "name": "PlateT14_C8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D8", + "name": "PlateT14_D8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E8", + "name": "PlateT14_E8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F8", + "name": "PlateT14_F8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G8", + "name": "PlateT14_G8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H8", + "name": "PlateT14_H8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A9", + "name": "PlateT14_A9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B9", + "name": "PlateT14_B9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C9", + "name": "PlateT14_C9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D9", + "name": "PlateT14_D9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E9", + "name": "PlateT14_E9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F9", + "name": "PlateT14_F9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G9", + "name": "PlateT14_G9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H9", + "name": "PlateT14_H9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A10", + "name": "PlateT14_A10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B10", + "name": "PlateT14_B10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C10", + "name": "PlateT14_C10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D10", + "name": "PlateT14_D10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E10", + "name": "PlateT14_E10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F10", + "name": "PlateT14_F10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G10", + "name": "PlateT14_G10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H10", + "name": "PlateT14_H10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A11", + "name": "PlateT14_A11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B11", + "name": "PlateT14_B11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C11", + "name": "PlateT14_C11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D11", + "name": "PlateT14_D11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E11", + "name": "PlateT14_E11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F11", + "name": "PlateT14_F11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G11", + "name": "PlateT14_G11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H11", + "name": "PlateT14_H11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A12", + "name": "PlateT14_A12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B12", + "name": "PlateT14_B12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C12", + "name": "PlateT14_C12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D12", + "name": "PlateT14_D12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E12", + "name": "PlateT14_E12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F12", + "name": "PlateT14_F12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G12", + "name": "PlateT14_G12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H12", + "name": "PlateT14_H12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT15", + "name": "PlateT15", + + "children": [ + "PlateT15_A1", + "PlateT15_B1", + "PlateT15_C1", + "PlateT15_D1", + "PlateT15_E1", + "PlateT15_F1", + "PlateT15_G1", + "PlateT15_H1", + "PlateT15_A2", + "PlateT15_B2", + "PlateT15_C2", + "PlateT15_D2", + "PlateT15_E2", + "PlateT15_F2", + "PlateT15_G2", + "PlateT15_H2", + "PlateT15_A3", + "PlateT15_B3", + "PlateT15_C3", + "PlateT15_D3", + "PlateT15_E3", + "PlateT15_F3", + "PlateT15_G3", + "PlateT15_H3", + "PlateT15_A4", + "PlateT15_B4", + "PlateT15_C4", + "PlateT15_D4", + "PlateT15_E4", + "PlateT15_F4", + "PlateT15_G4", + "PlateT15_H4", + "PlateT15_A5", + "PlateT15_B5", + "PlateT15_C5", + "PlateT15_D5", + "PlateT15_E5", + "PlateT15_F5", + "PlateT15_G5", + "PlateT15_H5", + "PlateT15_A6", + "PlateT15_B6", + "PlateT15_C6", + "PlateT15_D6", + "PlateT15_E6", + "PlateT15_F6", + "PlateT15_G6", + "PlateT15_H6", + "PlateT15_A7", + "PlateT15_B7", + "PlateT15_C7", + "PlateT15_D7", + "PlateT15_E7", + "PlateT15_F7", + "PlateT15_G7", + "PlateT15_H7", + "PlateT15_A8", + "PlateT15_B8", + "PlateT15_C8", + "PlateT15_D8", + "PlateT15_E8", + "PlateT15_F8", + "PlateT15_G8", + "PlateT15_H8", + "PlateT15_A9", + "PlateT15_B9", + "PlateT15_C9", + "PlateT15_D9", + "PlateT15_E9", + "PlateT15_F9", + "PlateT15_G9", + "PlateT15_H9", + "PlateT15_A10", + "PlateT15_B10", + "PlateT15_C10", + "PlateT15_D10", + "PlateT15_E10", + "PlateT15_F10", + "PlateT15_G10", + "PlateT15_H10", + "PlateT15_A11", + "PlateT15_B11", + "PlateT15_C11", + "PlateT15_D11", + "PlateT15_E11", + "PlateT15_F11", + "PlateT15_G11", + "PlateT15_H11", + "PlateT15_A12", + "PlateT15_B12", + "PlateT15_C12", + "PlateT15_D12", + "PlateT15_E12", + "PlateT15_F12", + "PlateT15_G12", + "PlateT15_H12" + ], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT15_A1", + "B1": "PlateT15_B1", + "C1": "PlateT15_C1", + "D1": "PlateT15_D1", + "E1": "PlateT15_E1", + "F1": "PlateT15_F1", + "G1": "PlateT15_G1", + "H1": "PlateT15_H1", + "A2": "PlateT15_A2", + "B2": "PlateT15_B2", + "C2": "PlateT15_C2", + "D2": "PlateT15_D2", + "E2": "PlateT15_E2", + "F2": "PlateT15_F2", + "G2": "PlateT15_G2", + "H2": "PlateT15_H2", + "A3": "PlateT15_A3", + "B3": "PlateT15_B3", + "C3": "PlateT15_C3", + "D3": "PlateT15_D3", + "E3": "PlateT15_E3", + "F3": "PlateT15_F3", + "G3": "PlateT15_G3", + "H3": "PlateT15_H3", + "A4": "PlateT15_A4", + "B4": "PlateT15_B4", + "C4": "PlateT15_C4", + "D4": "PlateT15_D4", + "E4": "PlateT15_E4", + "F4": "PlateT15_F4", + "G4": "PlateT15_G4", + "H4": "PlateT15_H4", + "A5": "PlateT15_A5", + "B5": "PlateT15_B5", + "C5": "PlateT15_C5", + "D5": "PlateT15_D5", + "E5": "PlateT15_E5", + "F5": "PlateT15_F5", + "G5": "PlateT15_G5", + "H5": "PlateT15_H5", + "A6": "PlateT15_A6", + "B6": "PlateT15_B6", + "C6": "PlateT15_C6", + "D6": "PlateT15_D6", + "E6": "PlateT15_E6", + "F6": "PlateT15_F6", + "G6": "PlateT15_G6", + "H6": "PlateT15_H6", + "A7": "PlateT15_A7", + "B7": "PlateT15_B7", + "C7": "PlateT15_C7", + "D7": "PlateT15_D7", + "E7": "PlateT15_E7", + "F7": "PlateT15_F7", + "G7": "PlateT15_G7", + "H7": "PlateT15_H7", + "A8": "PlateT15_A8", + "B8": "PlateT15_B8", + "C8": "PlateT15_C8", + "D8": "PlateT15_D8", + "E8": "PlateT15_E8", + "F8": "PlateT15_F8", + "G8": "PlateT15_G8", + "H8": "PlateT15_H8", + "A9": "PlateT15_A9", + "B9": "PlateT15_B9", + "C9": "PlateT15_C9", + "D9": "PlateT15_D9", + "E9": "PlateT15_E9", + "F9": "PlateT15_F9", + "G9": "PlateT15_G9", + "H9": "PlateT15_H9", + "A10": "PlateT15_A10", + "B10": "PlateT15_B10", + "C10": "PlateT15_C10", + "D10": "PlateT15_D10", + "E10": "PlateT15_E10", + "F10": "PlateT15_F10", + "G10": "PlateT15_G10", + "H10": "PlateT15_H10", + "A11": "PlateT15_A11", + "B11": "PlateT15_B11", + "C11": "PlateT15_C11", + "D11": "PlateT15_D11", + "E11": "PlateT15_E11", + "F11": "PlateT15_F11", + "G11": "PlateT15_G11", + "H11": "PlateT15_H11", + "A12": "PlateT15_A12", + "B12": "PlateT15_B12", + "C12": "PlateT15_C12", + "D12": "PlateT15_D12", + "E12": "PlateT15_E12", + "F12": "PlateT15_F12", + "G12": "PlateT15_G12", + "H12": "PlateT15_H12" + } + }, + "data": { + "Material": { + "uuid": "04211a2dc93547fe9bf6121eac533650" + } + } + }, + { + "id": "PlateT15_A1", + "name": "PlateT15_A1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B1", + "name": "PlateT15_B1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C1", + "name": "PlateT15_C1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D1", + "name": "PlateT15_D1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E1", + "name": "PlateT15_E1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F1", + "name": "PlateT15_F1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G1", + "name": "PlateT15_G1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H1", + "name": "PlateT15_H1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A2", + "name": "PlateT15_A2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B2", + "name": "PlateT15_B2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C2", + "name": "PlateT15_C2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D2", + "name": "PlateT15_D2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E2", + "name": "PlateT15_E2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F2", + "name": "PlateT15_F2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G2", + "name": "PlateT15_G2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H2", + "name": "PlateT15_H2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A3", + "name": "PlateT15_A3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B3", + "name": "PlateT15_B3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C3", + "name": "PlateT15_C3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D3", + "name": "PlateT15_D3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E3", + "name": "PlateT15_E3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F3", + "name": "PlateT15_F3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G3", + "name": "PlateT15_G3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H3", + "name": "PlateT15_H3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A4", + "name": "PlateT15_A4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B4", + "name": "PlateT15_B4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C4", + "name": "PlateT15_C4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D4", + "name": "PlateT15_D4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E4", + "name": "PlateT15_E4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F4", + "name": "PlateT15_F4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G4", + "name": "PlateT15_G4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H4", + "name": "PlateT15_H4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A5", + "name": "PlateT15_A5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B5", + "name": "PlateT15_B5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C5", + "name": "PlateT15_C5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D5", + "name": "PlateT15_D5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E5", + "name": "PlateT15_E5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F5", + "name": "PlateT15_F5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G5", + "name": "PlateT15_G5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H5", + "name": "PlateT15_H5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A6", + "name": "PlateT15_A6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B6", + "name": "PlateT15_B6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C6", + "name": "PlateT15_C6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D6", + "name": "PlateT15_D6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E6", + "name": "PlateT15_E6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F6", + "name": "PlateT15_F6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G6", + "name": "PlateT15_G6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H6", + "name": "PlateT15_H6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A7", + "name": "PlateT15_A7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B7", + "name": "PlateT15_B7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C7", + "name": "PlateT15_C7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D7", + "name": "PlateT15_D7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E7", + "name": "PlateT15_E7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F7", + "name": "PlateT15_F7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G7", + "name": "PlateT15_G7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H7", + "name": "PlateT15_H7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A8", + "name": "PlateT15_A8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B8", + "name": "PlateT15_B8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C8", + "name": "PlateT15_C8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D8", + "name": "PlateT15_D8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E8", + "name": "PlateT15_E8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F8", + "name": "PlateT15_F8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G8", + "name": "PlateT15_G8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H8", + "name": "PlateT15_H8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A9", + "name": "PlateT15_A9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B9", + "name": "PlateT15_B9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C9", + "name": "PlateT15_C9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D9", + "name": "PlateT15_D9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E9", + "name": "PlateT15_E9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F9", + "name": "PlateT15_F9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G9", + "name": "PlateT15_G9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H9", + "name": "PlateT15_H9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A10", + "name": "PlateT15_A10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B10", + "name": "PlateT15_B10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C10", + "name": "PlateT15_C10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D10", + "name": "PlateT15_D10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E10", + "name": "PlateT15_E10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F10", + "name": "PlateT15_F10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G10", + "name": "PlateT15_G10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H10", + "name": "PlateT15_H10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A11", + "name": "PlateT15_A11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B11", + "name": "PlateT15_B11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C11", + "name": "PlateT15_C11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D11", + "name": "PlateT15_D11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E11", + "name": "PlateT15_E11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F11", + "name": "PlateT15_F11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G11", + "name": "PlateT15_G11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H11", + "name": "PlateT15_H11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A12", + "name": "PlateT15_A12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B12", + "name": "PlateT15_B12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C12", + "name": "PlateT15_C12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D12", + "name": "PlateT15_D12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E12", + "name": "PlateT15_E12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F12", + "name": "PlateT15_F12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G12", + "name": "PlateT15_G12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H12", + "name": "PlateT15_H12", + + "children": [], + "parent": "PlateT15", + "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": "trash", + "name": "trash", + + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 127, + "size_y": 85.5, + "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" + } + } + } + ], + "edges": [] +} diff --git a/unilabos/test/experiments/prcxi_9320_with_res.json b/unilabos/test/experiments/prcxi_9320_with_res.json deleted file mode 100644 index 4804da2b..00000000 --- a/unilabos/test/experiments/prcxi_9320_with_res.json +++ /dev/null @@ -1,40337 +0,0 @@ -{ - "nodes": [ - { - - - "id": "PRCXI", - "name": "PRCXI", - "type": "device", - "class": "liquid_handler.prcxi", - "parent": "", - "pose": { - "size": { - "width": 562, - "height": 394, - "depth": 0 - } - }, - "config": { - "axis": "Left", - "deck": { - "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", - "_resource_child_name": "PRCXI_Deck" - }, - "host": "10.20.30.184", - "port": 9999, - "debug": false, - "setup": true, - "is_9320": true, - "timeout": 10, - "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", - "simulator": false, - "channel_num": 2 - }, - "data": { - "reset_ok": true - }, - "schema": {}, - "description": "", - "model": null, - "position": { - "x": 0, - "y": 240, - "z": 0 - } - }, - { - "id": "PRCXI_Deck", - "name": "PRCXI_Deck", - - "children": [ - ], - "parent": "PRCXI", - "type": "deck", - "class": "", - "position": { - "x": 10 , - "y": 10, - "z": 0 - }, - "config": { - "type": "PRCXI9300Deck", - "size_x": 542, - "size_y": 374, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "deck", - "barcode": null, - "sites": [ - { - "label": "1", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "2", - "visible": true, - "position": {"x": 138, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "3", - "visible": true, - "position": {"x": 276, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "4", - "visible": true, - "position": {"x": 414, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "5", - "visible": true, - "position": {"x": 0, "y": 96, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "6", - "visible": true, - "position": {"x": 138, "y": 96, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "7", - "visible": true, - "position": {"x": 276, "y": 96, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "8", - "visible": true, - "position": {"x": 414, "y": 96, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "9", - "visible": true, - "position": {"x": 0, "y": 192, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "10", - "visible": true, - "position": {"x": 138, "y": 192, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "11", - "visible": true, - "position": {"x": 276, "y": 192, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "12", - "visible": true, - "position": {"x": 414, "y": 192, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "13", - "visible": true, - "position": {"x": 0, "y": 288, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "14", - "visible": true, - "position": {"x": 138, "y": 288, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "15", - "visible": true, - "position": {"x": 276, "y": 288, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - }, - { - "label": "16", - "visible": true, - "position": {"x": 414, "y": 288, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - } - , - { - "id": "RackT1", - "name": "RackT1", - - "children": [ - "RackT1_A1", - "RackT1_B1", - "RackT1_C1", - "RackT1_D1", - "RackT1_E1", - "RackT1_F1", - "RackT1_G1", - "RackT1_H1", - "RackT1_A2", - "RackT1_B2", - "RackT1_C2", - "RackT1_D2", - "RackT1_E2", - "RackT1_F2", - "RackT1_G2", - "RackT1_H2", - "RackT1_A3", - "RackT1_B3", - "RackT1_C3", - "RackT1_D3", - "RackT1_E3", - "RackT1_F3", - "RackT1_G3", - "RackT1_H3", - "RackT1_A4", - "RackT1_B4", - "RackT1_C4", - "RackT1_D4", - "RackT1_E4", - "RackT1_F4", - "RackT1_G4", - "RackT1_H4", - "RackT1_A5", - "RackT1_B5", - "RackT1_C5", - "RackT1_D5", - "RackT1_E5", - "RackT1_F5", - "RackT1_G5", - "RackT1_H5", - "RackT1_A6", - "RackT1_B6", - "RackT1_C6", - "RackT1_D6", - "RackT1_E6", - "RackT1_F6", - "RackT1_G6", - "RackT1_H6", - "RackT1_A7", - "RackT1_B7", - "RackT1_C7", - "RackT1_D7", - "RackT1_E7", - "RackT1_F7", - "RackT1_G7", - "RackT1_H7", - "RackT1_A8", - "RackT1_B8", - "RackT1_C8", - "RackT1_D8", - "RackT1_E8", - "RackT1_F8", - "RackT1_G8", - "RackT1_H8", - "RackT1_A9", - "RackT1_B9", - "RackT1_C9", - "RackT1_D9", - "RackT1_E9", - "RackT1_F9", - "RackT1_G9", - "RackT1_H9", - "RackT1_A10", - "RackT1_B10", - "RackT1_C10", - "RackT1_D10", - "RackT1_E10", - "RackT1_F10", - "RackT1_G10", - "RackT1_H10", - "RackT1_A11", - "RackT1_B11", - "RackT1_C11", - "RackT1_D11", - "RackT1_E11", - "RackT1_F11", - "RackT1_G11", - "RackT1_H11", - "RackT1_A12", - "RackT1_B12", - "RackT1_C12", - "RackT1_D12", - "RackT1_E12", - "RackT1_F12", - "RackT1_G12", - "RackT1_H12" - ], - "parent": "PRCXI_Deck", - "type": "tip_rack", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_rack", - "model": null, - "barcode": null, - "ordering": { - "A1": "tip_A1", - "B1": "tip_B1", - "C1": "tip_C1", - "D1": "tip_D1", - "E1": "tip_E1", - "F1": "tip_F1", - "G1": "tip_G1", - "H1": "tip_H1", - "A2": "tip_A2", - "B2": "tip_B2", - "C2": "tip_C2", - "D2": "tip_D2", - "E2": "tip_E2", - "F2": "tip_F2", - "G2": "tip_G2", - "H2": "tip_H2", - "A3": "tip_A3", - "B3": "tip_B3", - "C3": "tip_C3", - "D3": "tip_D3", - "E3": "tip_E3", - "F3": "tip_F3", - "G3": "tip_G3", - "H3": "tip_H3", - "A4": "tip_A4", - "B4": "tip_B4", - "C4": "tip_C4", - "D4": "tip_D4", - "E4": "tip_E4", - "F4": "tip_F4", - "G4": "tip_G4", - "H4": "tip_H4", - "A5": "tip_A5", - "B5": "tip_B5", - "C5": "tip_C5", - "D5": "tip_D5", - "E5": "tip_E5", - "F5": "tip_F5", - "G5": "tip_G5", - "H5": "tip_H5", - "A6": "tip_A6", - "B6": "tip_B6", - "C6": "tip_C6", - "D6": "tip_D6", - "E6": "tip_E6", - "F6": "tip_F6", - "G6": "tip_G6", - "H6": "tip_H6", - "A7": "tip_A7", - "B7": "tip_B7", - "C7": "tip_C7", - "D7": "tip_D7", - "E7": "tip_E7", - "F7": "tip_F7", - "G7": "tip_G7", - "H7": "tip_H7", - "A8": "tip_A8", - "B8": "tip_B8", - "C8": "tip_C8", - "D8": "tip_D8", - "E8": "tip_E8", - "F8": "tip_F8", - "G8": "tip_G8", - "H8": "tip_H8", - "A9": "tip_A9", - "B9": "tip_B9", - "C9": "tip_C9", - "D9": "tip_D9", - "E9": "tip_E9", - "F9": "tip_F9", - "G9": "tip_G9", - "H9": "tip_H9", - "A10": "tip_A10", - "B10": "tip_B10", - "C10": "tip_C10", - "D10": "tip_D10", - "E10": "tip_E10", - "F10": "tip_F10", - "G10": "tip_G10", - "H10": "tip_H10", - "A11": "tip_A11", - "B11": "tip_B11", - "C11": "tip_C11", - "D11": "tip_D11", - "E11": "tip_E11", - "F11": "tip_F11", - "G11": "tip_G11", - "H11": "tip_H11", - "A12": "tip_A12", - "B12": "tip_B12", - "C12": "tip_C12", - "D12": "tip_D12", - "E12": "tip_E12", - "F12": "tip_F12", - "G12": "tip_G12", - "H12": "tip_H12" - } - }, - "data": { - "Material": { - "uuid": "068b3815e36b4a72a59bae017011b29f", - "Code": "ZX-001-10+", - "Name": "10μL加长 Tip头" - } - } - }, - { - "id": "RackT1_A1", - "name": "RackT1_A1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B1", - "name": "RackT1_B1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C1", - "name": "RackT1_C1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D1", - "name": "RackT1_D1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E1", - "name": "RackT1_E1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F1", - "name": "RackT1_F1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G1", - "name": "RackT1_G1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H1", - "name": "RackT1_H1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A2", - "name": "RackT1_A2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B2", - "name": "RackT1_B2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C2", - "name": "RackT1_C2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D2", - "name": "RackT1_D2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E2", - "name": "RackT1_E2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F2", - "name": "RackT1_F2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G2", - "name": "RackT1_G2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H2", - "name": "RackT1_H2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A3", - "name": "RackT1_A3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B3", - "name": "RackT1_B3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C3", - "name": "RackT1_C3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D3", - "name": "RackT1_D3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E3", - "name": "RackT1_E3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F3", - "name": "RackT1_F3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G3", - "name": "RackT1_G3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H3", - "name": "RackT1_H3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A4", - "name": "RackT1_A4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B4", - "name": "RackT1_B4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C4", - "name": "RackT1_C4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D4", - "name": "RackT1_D4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E4", - "name": "RackT1_E4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F4", - "name": "RackT1_F4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G4", - "name": "RackT1_G4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H4", - "name": "RackT1_H4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A5", - "name": "RackT1_A5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B5", - "name": "RackT1_B5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C5", - "name": "RackT1_C5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D5", - "name": "RackT1_D5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E5", - "name": "RackT1_E5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F5", - "name": "RackT1_F5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G5", - "name": "RackT1_G5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H5", - "name": "RackT1_H5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A6", - "name": "RackT1_A6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B6", - "name": "RackT1_B6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C6", - "name": "RackT1_C6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D6", - "name": "RackT1_D6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E6", - "name": "RackT1_E6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F6", - "name": "RackT1_F6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G6", - "name": "RackT1_G6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H6", - "name": "RackT1_H6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A7", - "name": "RackT1_A7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B7", - "name": "RackT1_B7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C7", - "name": "RackT1_C7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D7", - "name": "RackT1_D7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E7", - "name": "RackT1_E7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F7", - "name": "RackT1_F7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G7", - "name": "RackT1_G7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H7", - "name": "RackT1_H7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A8", - "name": "RackT1_A8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B8", - "name": "RackT1_B8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C8", - "name": "RackT1_C8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D8", - "name": "RackT1_D8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E8", - "name": "RackT1_E8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F8", - "name": "RackT1_F8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G8", - "name": "RackT1_G8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H8", - "name": "RackT1_H8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A9", - "name": "RackT1_A9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B9", - "name": "RackT1_B9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C9", - "name": "RackT1_C9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D9", - "name": "RackT1_D9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E9", - "name": "RackT1_E9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F9", - "name": "RackT1_F9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G9", - "name": "RackT1_G9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H9", - "name": "RackT1_H9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A10", - "name": "RackT1_A10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B10", - "name": "RackT1_B10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C10", - "name": "RackT1_C10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D10", - "name": "RackT1_D10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E10", - "name": "RackT1_E10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F10", - "name": "RackT1_F10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G10", - "name": "RackT1_G10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H10", - "name": "RackT1_H10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A11", - "name": "RackT1_A11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B11", - "name": "RackT1_B11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C11", - "name": "RackT1_C11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D11", - "name": "RackT1_D11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E11", - "name": "RackT1_E11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F11", - "name": "RackT1_F11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G11", - "name": "RackT1_G11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H11", - "name": "RackT1_H11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A12", - "name": "RackT1_A12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B12", - "name": "RackT1_B12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C12", - "name": "RackT1_C12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D12", - "name": "RackT1_D12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E12", - "name": "RackT1_E12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F12", - "name": "RackT1_F12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G12", - "name": "RackT1_G12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H12", - "name": "RackT1_H12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "PlateT2", - "name": "PlateT2", - - "children": [ - "PlateT2_A1", - "PlateT2_B1", - "PlateT2_C1", - "PlateT2_D1", - "PlateT2_E1", - "PlateT2_F1", - "PlateT2_G1", - "PlateT2_H1", - "PlateT2_A2", - "PlateT2_B2", - "PlateT2_C2", - "PlateT2_D2", - "PlateT2_E2", - "PlateT2_F2", - "PlateT2_G2", - "PlateT2_H2", - "PlateT2_A3", - "PlateT2_B3", - "PlateT2_C3", - "PlateT2_D3", - "PlateT2_E3", - "PlateT2_F3", - "PlateT2_G3", - "PlateT2_H3", - "PlateT2_A4", - "PlateT2_B4", - "PlateT2_C4", - "PlateT2_D4", - "PlateT2_E4", - "PlateT2_F4", - "PlateT2_G4", - "PlateT2_H4", - "PlateT2_A5", - "PlateT2_B5", - "PlateT2_C5", - "PlateT2_D5", - "PlateT2_E5", - "PlateT2_F5", - "PlateT2_G5", - "PlateT2_H5", - "PlateT2_A6", - "PlateT2_B6", - "PlateT2_C6", - "PlateT2_D6", - "PlateT2_E6", - "PlateT2_F6", - "PlateT2_G6", - "PlateT2_H6", - "PlateT2_A7", - "PlateT2_B7", - "PlateT2_C7", - "PlateT2_D7", - "PlateT2_E7", - "PlateT2_F7", - "PlateT2_G7", - "PlateT2_H7", - "PlateT2_A8", - "PlateT2_B8", - "PlateT2_C8", - "PlateT2_D8", - "PlateT2_E8", - "PlateT2_F8", - "PlateT2_G8", - "PlateT2_H8", - "PlateT2_A9", - "PlateT2_B9", - "PlateT2_C9", - "PlateT2_D9", - "PlateT2_E9", - "PlateT2_F9", - "PlateT2_G9", - "PlateT2_H9", - "PlateT2_A10", - "PlateT2_B10", - "PlateT2_C10", - "PlateT2_D10", - "PlateT2_E10", - "PlateT2_F10", - "PlateT2_G10", - "PlateT2_H10", - "PlateT2_A11", - "PlateT2_B11", - "PlateT2_C11", - "PlateT2_D11", - "PlateT2_E11", - "PlateT2_F11", - "PlateT2_G11", - "PlateT2_H11", - "PlateT2_A12", - "PlateT2_B12", - "PlateT2_C12", - "PlateT2_D12", - "PlateT2_E12", - "PlateT2_F12", - "PlateT2_G12", - "PlateT2_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT2_A1", - "B1": "PlateT2_B1", - "C1": "PlateT2_C1", - "D1": "PlateT2_D1", - "E1": "PlateT2_E1", - "F1": "PlateT2_F1", - "G1": "PlateT2_G1", - "H1": "PlateT2_H1", - "A2": "PlateT2_A2", - "B2": "PlateT2_B2", - "C2": "PlateT2_C2", - "D2": "PlateT2_D2", - "E2": "PlateT2_E2", - "F2": "PlateT2_F2", - "G2": "PlateT2_G2", - "H2": "PlateT2_H2", - "A3": "PlateT2_A3", - "B3": "PlateT2_B3", - "C3": "PlateT2_C3", - "D3": "PlateT2_D3", - "E3": "PlateT2_E3", - "F3": "PlateT2_F3", - "G3": "PlateT2_G3", - "H3": "PlateT2_H3", - "A4": "PlateT2_A4", - "B4": "PlateT2_B4", - "C4": "PlateT2_C4", - "D4": "PlateT2_D4", - "E4": "PlateT2_E4", - "F4": "PlateT2_F4", - "G4": "PlateT2_G4", - "H4": "PlateT2_H4", - "A5": "PlateT2_A5", - "B5": "PlateT2_B5", - "C5": "PlateT2_C5", - "D5": "PlateT2_D5", - "E5": "PlateT2_E5", - "F5": "PlateT2_F5", - "G5": "PlateT2_G5", - "H5": "PlateT2_H5", - "A6": "PlateT2_A6", - "B6": "PlateT2_B6", - "C6": "PlateT2_C6", - "D6": "PlateT2_D6", - "E6": "PlateT2_E6", - "F6": "PlateT2_F6", - "G6": "PlateT2_G6", - "H6": "PlateT2_H6", - "A7": "PlateT2_A7", - "B7": "PlateT2_B7", - "C7": "PlateT2_C7", - "D7": "PlateT2_D7", - "E7": "PlateT2_E7", - "F7": "PlateT2_F7", - "G7": "PlateT2_G7", - "H7": "PlateT2_H7", - "A8": "PlateT2_A8", - "B8": "PlateT2_B8", - "C8": "PlateT2_C8", - "D8": "PlateT2_D8", - "E8": "PlateT2_E8", - "F8": "PlateT2_F8", - "G8": "PlateT2_G8", - "H8": "PlateT2_H8", - "A9": "PlateT2_A9", - "B9": "PlateT2_B9", - "C9": "PlateT2_C9", - "D9": "PlateT2_D9", - "E9": "PlateT2_E9", - "F9": "PlateT2_F9", - "G9": "PlateT2_G9", - "H9": "PlateT2_H9", - "A10": "PlateT2_A10", - "B10": "PlateT2_B10", - "C10": "PlateT2_C10", - "D10": "PlateT2_D10", - "E10": "PlateT2_E10", - "F10": "PlateT2_F10", - "G10": "PlateT2_G10", - "H10": "PlateT2_H10", - "A11": "PlateT2_A11", - "B11": "PlateT2_B11", - "C11": "PlateT2_C11", - "D11": "PlateT2_D11", - "E11": "PlateT2_E11", - "F11": "PlateT2_F11", - "G11": "PlateT2_G11", - "H11": "PlateT2_H11", - "A12": "PlateT2_A12", - "B12": "PlateT2_B12", - "C12": "PlateT2_C12", - "D12": "PlateT2_D12", - "E12": "PlateT2_E12", - "F12": "PlateT2_F12", - "G12": "PlateT2_G12", - "H12": "PlateT2_H12" - } - }, - "data": { - "Material": { - "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", - "Code": "ZX-78-096", - "Name": "细菌培养皿" - } - } - }, - { - "id": "PlateT2_A1", - "name": "PlateT2_A1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B1", - "name": "PlateT2_B1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C1", - "name": "PlateT2_C1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D1", - "name": "PlateT2_D1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E1", - "name": "PlateT2_E1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F1", - "name": "PlateT2_F1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G1", - "name": "PlateT2_G1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H1", - "name": "PlateT2_H1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A2", - "name": "PlateT2_A2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B2", - "name": "PlateT2_B2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C2", - "name": "PlateT2_C2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D2", - "name": "PlateT2_D2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E2", - "name": "PlateT2_E2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F2", - "name": "PlateT2_F2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G2", - "name": "PlateT2_G2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H2", - "name": "PlateT2_H2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A3", - "name": "PlateT2_A3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B3", - "name": "PlateT2_B3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C3", - "name": "PlateT2_C3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D3", - "name": "PlateT2_D3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E3", - "name": "PlateT2_E3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F3", - "name": "PlateT2_F3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G3", - "name": "PlateT2_G3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H3", - "name": "PlateT2_H3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A4", - "name": "PlateT2_A4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B4", - "name": "PlateT2_B4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C4", - "name": "PlateT2_C4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D4", - "name": "PlateT2_D4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E4", - "name": "PlateT2_E4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F4", - "name": "PlateT2_F4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G4", - "name": "PlateT2_G4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H4", - "name": "PlateT2_H4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A5", - "name": "PlateT2_A5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B5", - "name": "PlateT2_B5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C5", - "name": "PlateT2_C5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D5", - "name": "PlateT2_D5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E5", - "name": "PlateT2_E5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F5", - "name": "PlateT2_F5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G5", - "name": "PlateT2_G5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H5", - "name": "PlateT2_H5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A6", - "name": "PlateT2_A6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B6", - "name": "PlateT2_B6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C6", - "name": "PlateT2_C6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D6", - "name": "PlateT2_D6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E6", - "name": "PlateT2_E6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F6", - "name": "PlateT2_F6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G6", - "name": "PlateT2_G6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H6", - "name": "PlateT2_H6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A7", - "name": "PlateT2_A7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B7", - "name": "PlateT2_B7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C7", - "name": "PlateT2_C7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D7", - "name": "PlateT2_D7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E7", - "name": "PlateT2_E7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F7", - "name": "PlateT2_F7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G7", - "name": "PlateT2_G7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H7", - "name": "PlateT2_H7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A8", - "name": "PlateT2_A8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B8", - "name": "PlateT2_B8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C8", - "name": "PlateT2_C8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D8", - "name": "PlateT2_D8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E8", - "name": "PlateT2_E8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F8", - "name": "PlateT2_F8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G8", - "name": "PlateT2_G8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H8", - "name": "PlateT2_H8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A9", - "name": "PlateT2_A9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B9", - "name": "PlateT2_B9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C9", - "name": "PlateT2_C9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D9", - "name": "PlateT2_D9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E9", - "name": "PlateT2_E9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F9", - "name": "PlateT2_F9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G9", - "name": "PlateT2_G9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H9", - "name": "PlateT2_H9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A10", - "name": "PlateT2_A10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B10", - "name": "PlateT2_B10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C10", - "name": "PlateT2_C10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D10", - "name": "PlateT2_D10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E10", - "name": "PlateT2_E10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F10", - "name": "PlateT2_F10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G10", - "name": "PlateT2_G10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H10", - "name": "PlateT2_H10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A11", - "name": "PlateT2_A11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B11", - "name": "PlateT2_B11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C11", - "name": "PlateT2_C11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D11", - "name": "PlateT2_D11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E11", - "name": "PlateT2_E11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F11", - "name": "PlateT2_F11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G11", - "name": "PlateT2_G11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H11", - "name": "PlateT2_H11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A12", - "name": "PlateT2_A12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B12", - "name": "PlateT2_B12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C12", - "name": "PlateT2_C12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D12", - "name": "PlateT2_D12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E12", - "name": "PlateT2_E12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F12", - "name": "PlateT2_F12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G12", - "name": "PlateT2_G12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H12", - "name": "PlateT2_H12", - - "children": [], - "parent": "PlateT2", - "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": "emptyT3", - "name": "emptyT3", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - - { - "id": "emptyT4", - "name": "emptyT4", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - - { - "id": "RackT5", - "name": "RackT5", - - "children": [ - "RackT5_A1", - "RackT5_B1", - "RackT5_C1", - "RackT5_D1", - "RackT5_E1", - "RackT5_F1", - "RackT5_G1", - "RackT5_H1", - "RackT5_A2", - "RackT5_B2", - "RackT5_C2", - "RackT5_D2", - "RackT5_E2", - "RackT5_F2", - "RackT5_G2", - "RackT5_H2", - "RackT5_A3", - "RackT5_B3", - "RackT5_C3", - "RackT5_D3", - "RackT5_E3", - "RackT5_F3", - "RackT5_G3", - "RackT5_H3", - "RackT5_A4", - "RackT5_B4", - "RackT5_C4", - "RackT5_D4", - "RackT5_E4", - "RackT5_F4", - "RackT5_G4", - "RackT5_H4", - "RackT5_A5", - "RackT5_B5", - "RackT5_C5", - "RackT5_D5", - "RackT5_E5", - "RackT5_F5", - "RackT5_G5", - "RackT5_H5", - "RackT5_A6", - "RackT5_B6", - "RackT5_C6", - "RackT5_D6", - "RackT5_E6", - "RackT5_F6", - "RackT5_G6", - "RackT5_H6", - "RackT5_A7", - "RackT5_B7", - "RackT5_C7", - "RackT5_D7", - "RackT5_E7", - "RackT5_F7", - "RackT5_G7", - "RackT5_H7", - "RackT5_A8", - "RackT5_B8", - "RackT5_C8", - "RackT5_D8", - "RackT5_E8", - "RackT5_F8", - "RackT5_G8", - "RackT5_H8", - "RackT5_A9", - "RackT5_B9", - "RackT5_C9", - "RackT5_D9", - "RackT5_E9", - "RackT5_F9", - "RackT5_G9", - "RackT5_H9", - "RackT5_A10", - "RackT5_B10", - "RackT5_C10", - "RackT5_D10", - "RackT5_E10", - "RackT5_F10", - "RackT5_G10", - "RackT5_H10", - "RackT5_A11", - "RackT5_B11", - "RackT5_C11", - "RackT5_D11", - "RackT5_E11", - "RackT5_F11", - "RackT5_G11", - "RackT5_H11", - "RackT5_A12", - "RackT5_B12", - "RackT5_C12", - "RackT5_D12", - "RackT5_E12", - "RackT5_F12", - "RackT5_G12", - "RackT5_H12" - ], - "parent": "PRCXI_Deck", - "type": "tip_rack", - "class": "", - "position": { - "x": 0, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_rack", - "model": null, - "barcode": null, - "ordering": { - "A1": "tip_A1", - "B1": "tip_B1", - "C1": "tip_C1", - "D1": "tip_D1", - "E1": "tip_E1", - "F1": "tip_F1", - "G1": "tip_G1", - "H1": "tip_H1", - "A2": "tip_A2", - "B2": "tip_B2", - "C2": "tip_C2", - "D2": "tip_D2", - "E2": "tip_E2", - "F2": "tip_F2", - "G2": "tip_G2", - "H2": "tip_H2", - "A3": "tip_A3", - "B3": "tip_B3", - "C3": "tip_C3", - "D3": "tip_D3", - "E3": "tip_E3", - "F3": "tip_F3", - "G3": "tip_G3", - "H3": "tip_H3", - "A4": "tip_A4", - "B4": "tip_B4", - "C4": "tip_C4", - "D4": "tip_D4", - "E4": "tip_E4", - "F4": "tip_F4", - "G4": "tip_G4", - "H4": "tip_H4", - "A5": "tip_A5", - "B5": "tip_B5", - "C5": "tip_C5", - "D5": "tip_D5", - "E5": "tip_E5", - "F5": "tip_F5", - "G5": "tip_G5", - "H5": "tip_H5", - "A6": "tip_A6", - "B6": "tip_B6", - "C6": "tip_C6", - "D6": "tip_D6", - "E6": "tip_E6", - "F6": "tip_F6", - "G6": "tip_G6", - "H6": "tip_H6", - "A7": "tip_A7", - "B7": "tip_B7", - "C7": "tip_C7", - "D7": "tip_D7", - "E7": "tip_E7", - "F7": "tip_F7", - "G7": "tip_G7", - "H7": "tip_H7", - "A8": "tip_A8", - "B8": "tip_B8", - "C8": "tip_C8", - "D8": "tip_D8", - "E8": "tip_E8", - "F8": "tip_F8", - "G8": "tip_G8", - "H8": "tip_H8", - "A9": "tip_A9", - "B9": "tip_B9", - "C9": "tip_C9", - "D9": "tip_D9", - "E9": "tip_E9", - "F9": "tip_F9", - "G9": "tip_G9", - "H9": "tip_H9", - "A10": "tip_A10", - "B10": "tip_B10", - "C10": "tip_C10", - "D10": "tip_D10", - "E10": "tip_E10", - "F10": "tip_F10", - "G10": "tip_G10", - "H10": "tip_H10", - "A11": "tip_A11", - "B11": "tip_B11", - "C11": "tip_C11", - "D11": "tip_D11", - "E11": "tip_E11", - "F11": "tip_F11", - "G11": "tip_G11", - "H11": "tip_H11", - "A12": "tip_A12", - "B12": "tip_B12", - "C12": "tip_C12", - "D12": "tip_D12", - "E12": "tip_E12", - "F12": "tip_F12", - "G12": "tip_G12", - "H12": "tip_H12" - } - }, - "data": { - "Material": { - "uuid": "076250742950465b9d6ea29a225dfb00", - "Code": "ZX-001-300", - "SupplyType": 1, - "Name": "300μL Tip头" - } - } - }, - { - "id": "RackT5_A1", - "name": "RackT5_A1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B1", - "name": "RackT5_B1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C1", - "name": "RackT5_C1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D1", - "name": "RackT5_D1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E1", - "name": "RackT5_E1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F1", - "name": "RackT5_F1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G1", - "name": "RackT5_G1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H1", - "name": "RackT5_H1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A2", - "name": "RackT5_A2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B2", - "name": "RackT5_B2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C2", - "name": "RackT5_C2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D2", - "name": "RackT5_D2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E2", - "name": "RackT5_E2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F2", - "name": "RackT5_F2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G2", - "name": "RackT5_G2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H2", - "name": "RackT5_H2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A3", - "name": "RackT5_A3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B3", - "name": "RackT5_B3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C3", - "name": "RackT5_C3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D3", - "name": "RackT5_D3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E3", - "name": "RackT5_E3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F3", - "name": "RackT5_F3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G3", - "name": "RackT5_G3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H3", - "name": "RackT5_H3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A4", - "name": "RackT5_A4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B4", - "name": "RackT5_B4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C4", - "name": "RackT5_C4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D4", - "name": "RackT5_D4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E4", - "name": "RackT5_E4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F4", - "name": "RackT5_F4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G4", - "name": "RackT5_G4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H4", - "name": "RackT5_H4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A5", - "name": "RackT5_A5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B5", - "name": "RackT5_B5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C5", - "name": "RackT5_C5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D5", - "name": "RackT5_D5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E5", - "name": "RackT5_E5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F5", - "name": "RackT5_F5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G5", - "name": "RackT5_G5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H5", - "name": "RackT5_H5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A6", - "name": "RackT5_A6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B6", - "name": "RackT5_B6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C6", - "name": "RackT5_C6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D6", - "name": "RackT5_D6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E6", - "name": "RackT5_E6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F6", - "name": "RackT5_F6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G6", - "name": "RackT5_G6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H6", - "name": "RackT5_H6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A7", - "name": "RackT5_A7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B7", - "name": "RackT5_B7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C7", - "name": "RackT5_C7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D7", - "name": "RackT5_D7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E7", - "name": "RackT5_E7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F7", - "name": "RackT5_F7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G7", - "name": "RackT5_G7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H7", - "name": "RackT5_H7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A8", - "name": "RackT5_A8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B8", - "name": "RackT5_B8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C8", - "name": "RackT5_C8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D8", - "name": "RackT5_D8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E8", - "name": "RackT5_E8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F8", - "name": "RackT5_F8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G8", - "name": "RackT5_G8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H8", - "name": "RackT5_H8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A9", - "name": "RackT5_A9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B9", - "name": "RackT5_B9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C9", - "name": "RackT5_C9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D9", - "name": "RackT5_D9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E9", - "name": "RackT5_E9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F9", - "name": "RackT5_F9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G9", - "name": "RackT5_G9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H9", - "name": "RackT5_H9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A10", - "name": "RackT5_A10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B10", - "name": "RackT5_B10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C10", - "name": "RackT5_C10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D10", - "name": "RackT5_D10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E10", - "name": "RackT5_E10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F10", - "name": "RackT5_F10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G10", - "name": "RackT5_G10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H10", - "name": "RackT5_H10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A11", - "name": "RackT5_A11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B11", - "name": "RackT5_B11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C11", - "name": "RackT5_C11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D11", - "name": "RackT5_D11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E11", - "name": "RackT5_E11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F11", - "name": "RackT5_F11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G11", - "name": "RackT5_G11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H11", - "name": "RackT5_H11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A12", - "name": "RackT5_A12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B12", - "name": "RackT5_B12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C12", - "name": "RackT5_C12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D12", - "name": "RackT5_D12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E12", - "name": "RackT5_E12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F12", - "name": "RackT5_F12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G12", - "name": "RackT5_G12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H12", - "name": "RackT5_H12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "PlateT6", - "name": "PlateT6", - - "children": [ - "PlateT6_A1", - "PlateT6_B1", - "PlateT6_C1", - "PlateT6_D1", - "PlateT6_E1", - "PlateT6_F1", - "PlateT6_G1", - "PlateT6_H1", - "PlateT6_A2", - "PlateT6_B2", - "PlateT6_C2", - "PlateT6_D2", - "PlateT6_E2", - "PlateT6_F2", - "PlateT6_G2", - "PlateT6_H2", - "PlateT6_A3", - "PlateT6_B3", - "PlateT6_C3", - "PlateT6_D3", - "PlateT6_E3", - "PlateT6_F3", - "PlateT6_G3", - "PlateT6_H3", - "PlateT6_A4", - "PlateT6_B4", - "PlateT6_C4", - "PlateT6_D4", - "PlateT6_E4", - "PlateT6_F4", - "PlateT6_G4", - "PlateT6_H4", - "PlateT6_A5", - "PlateT6_B5", - "PlateT6_C5", - "PlateT6_D5", - "PlateT6_E5", - "PlateT6_F5", - "PlateT6_G5", - "PlateT6_H5", - "PlateT6_A6", - "PlateT6_B6", - "PlateT6_C6", - "PlateT6_D6", - "PlateT6_E6", - "PlateT6_F6", - "PlateT6_G6", - "PlateT6_H6", - "PlateT6_A7", - "PlateT6_B7", - "PlateT6_C7", - "PlateT6_D7", - "PlateT6_E7", - "PlateT6_F7", - "PlateT6_G7", - "PlateT6_H7", - "PlateT6_A8", - "PlateT6_B8", - "PlateT6_C8", - "PlateT6_D8", - "PlateT6_E8", - "PlateT6_F8", - "PlateT6_G8", - "PlateT6_H8", - "PlateT6_A9", - "PlateT6_B9", - "PlateT6_C9", - "PlateT6_D9", - "PlateT6_E9", - "PlateT6_F9", - "PlateT6_G9", - "PlateT6_H9", - "PlateT6_A10", - "PlateT6_B10", - "PlateT6_C10", - "PlateT6_D10", - "PlateT6_E10", - "PlateT6_F10", - "PlateT6_G10", - "PlateT6_H10", - "PlateT6_A11", - "PlateT6_B11", - "PlateT6_C11", - "PlateT6_D11", - "PlateT6_E11", - "PlateT6_F11", - "PlateT6_G11", - "PlateT6_H11", - "PlateT6_A12", - "PlateT6_B12", - "PlateT6_C12", - "PlateT6_D12", - "PlateT6_E12", - "PlateT6_F12", - "PlateT6_G12", - "PlateT6_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT6_A1", - "B1": "PlateT6_B1", - "C1": "PlateT6_C1", - "D1": "PlateT6_D1", - "E1": "PlateT6_E1", - "F1": "PlateT6_F1", - "G1": "PlateT6_G1", - "H1": "PlateT6_H1", - "A2": "PlateT6_A2", - "B2": "PlateT6_B2", - "C2": "PlateT6_C2", - "D2": "PlateT6_D2", - "E2": "PlateT6_E2", - "F2": "PlateT6_F2", - "G2": "PlateT6_G2", - "H2": "PlateT6_H2", - "A3": "PlateT6_A3", - "B3": "PlateT6_B3", - "C3": "PlateT6_C3", - "D3": "PlateT6_D3", - "E3": "PlateT6_E3", - "F3": "PlateT6_F3", - "G3": "PlateT6_G3", - "H3": "PlateT6_H3", - "A4": "PlateT6_A4", - "B4": "PlateT6_B4", - "C4": "PlateT6_C4", - "D4": "PlateT6_D4", - "E4": "PlateT6_E4", - "F4": "PlateT6_F4", - "G4": "PlateT6_G4", - "H4": "PlateT6_H4", - "A5": "PlateT6_A5", - "B5": "PlateT6_B5", - "C5": "PlateT6_C5", - "D5": "PlateT6_D5", - "E5": "PlateT6_E5", - "F5": "PlateT6_F5", - "G5": "PlateT6_G5", - "H5": "PlateT6_H5", - "A6": "PlateT6_A6", - "B6": "PlateT6_B6", - "C6": "PlateT6_C6", - "D6": "PlateT6_D6", - "E6": "PlateT6_E6", - "F6": "PlateT6_F6", - "G6": "PlateT6_G6", - "H6": "PlateT6_H6", - "A7": "PlateT6_A7", - "B7": "PlateT6_B7", - "C7": "PlateT6_C7", - "D7": "PlateT6_D7", - "E7": "PlateT6_E7", - "F7": "PlateT6_F7", - "G7": "PlateT6_G7", - "H7": "PlateT6_H7", - "A8": "PlateT6_A8", - "B8": "PlateT6_B8", - "C8": "PlateT6_C8", - "D8": "PlateT6_D8", - "E8": "PlateT6_E8", - "F8": "PlateT6_F8", - "G8": "PlateT6_G8", - "H8": "PlateT6_H8", - "A9": "PlateT6_A9", - "B9": "PlateT6_B9", - "C9": "PlateT6_C9", - "D9": "PlateT6_D9", - "E9": "PlateT6_E9", - "F9": "PlateT6_F9", - "G9": "PlateT6_G9", - "H9": "PlateT6_H9", - "A10": "PlateT6_A10", - "B10": "PlateT6_B10", - "C10": "PlateT6_C10", - "D10": "PlateT6_D10", - "E10": "PlateT6_E10", - "F10": "PlateT6_F10", - "G10": "PlateT6_G10", - "H10": "PlateT6_H10", - "A11": "PlateT6_A11", - "B11": "PlateT6_B11", - "C11": "PlateT6_C11", - "D11": "PlateT6_D11", - "E11": "PlateT6_E11", - "F11": "PlateT6_F11", - "G11": "PlateT6_G11", - "H11": "PlateT6_H11", - "A12": "PlateT6_A12", - "B12": "PlateT6_B12", - "C12": "PlateT6_C12", - "D12": "PlateT6_D12", - "E12": "PlateT6_E12", - "F12": "PlateT6_F12", - "G12": "PlateT6_G12", - "H12": "PlateT6_H12" - } - }, - "data": { - "Material": { - "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", - "Code": "1", - "SupplyType": 1, - "Name": "ep适配器", - "SummaryName": "ep适配器" - } - } - }, - { - "id": "PlateT6_A1", - "name": "PlateT6_A1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B1", - "name": "PlateT6_B1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C1", - "name": "PlateT6_C1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D1", - "name": "PlateT6_D1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E1", - "name": "PlateT6_E1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F1", - "name": "PlateT6_F1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G1", - "name": "PlateT6_G1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H1", - "name": "PlateT6_H1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A2", - "name": "PlateT6_A2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B2", - "name": "PlateT6_B2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C2", - "name": "PlateT6_C2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D2", - "name": "PlateT6_D2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E2", - "name": "PlateT6_E2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F2", - "name": "PlateT6_F2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G2", - "name": "PlateT6_G2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H2", - "name": "PlateT6_H2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A3", - "name": "PlateT6_A3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B3", - "name": "PlateT6_B3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C3", - "name": "PlateT6_C3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D3", - "name": "PlateT6_D3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E3", - "name": "PlateT6_E3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F3", - "name": "PlateT6_F3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G3", - "name": "PlateT6_G3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H3", - "name": "PlateT6_H3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A4", - "name": "PlateT6_A4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B4", - "name": "PlateT6_B4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C4", - "name": "PlateT6_C4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D4", - "name": "PlateT6_D4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E4", - "name": "PlateT6_E4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F4", - "name": "PlateT6_F4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G4", - "name": "PlateT6_G4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H4", - "name": "PlateT6_H4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A5", - "name": "PlateT6_A5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B5", - "name": "PlateT6_B5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C5", - "name": "PlateT6_C5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D5", - "name": "PlateT6_D5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E5", - "name": "PlateT6_E5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F5", - "name": "PlateT6_F5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G5", - "name": "PlateT6_G5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H5", - "name": "PlateT6_H5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A6", - "name": "PlateT6_A6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B6", - "name": "PlateT6_B6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C6", - "name": "PlateT6_C6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D6", - "name": "PlateT6_D6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E6", - "name": "PlateT6_E6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F6", - "name": "PlateT6_F6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G6", - "name": "PlateT6_G6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H6", - "name": "PlateT6_H6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A7", - "name": "PlateT6_A7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B7", - "name": "PlateT6_B7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C7", - "name": "PlateT6_C7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D7", - "name": "PlateT6_D7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E7", - "name": "PlateT6_E7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F7", - "name": "PlateT6_F7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G7", - "name": "PlateT6_G7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H7", - "name": "PlateT6_H7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A8", - "name": "PlateT6_A8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B8", - "name": "PlateT6_B8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C8", - "name": "PlateT6_C8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D8", - "name": "PlateT6_D8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E8", - "name": "PlateT6_E8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F8", - "name": "PlateT6_F8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G8", - "name": "PlateT6_G8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H8", - "name": "PlateT6_H8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A9", - "name": "PlateT6_A9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B9", - "name": "PlateT6_B9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C9", - "name": "PlateT6_C9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D9", - "name": "PlateT6_D9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E9", - "name": "PlateT6_E9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F9", - "name": "PlateT6_F9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G9", - "name": "PlateT6_G9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H9", - "name": "PlateT6_H9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A10", - "name": "PlateT6_A10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B10", - "name": "PlateT6_B10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C10", - "name": "PlateT6_C10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D10", - "name": "PlateT6_D10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E10", - "name": "PlateT6_E10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F10", - "name": "PlateT6_F10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G10", - "name": "PlateT6_G10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H10", - "name": "PlateT6_H10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A11", - "name": "PlateT6_A11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B11", - "name": "PlateT6_B11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C11", - "name": "PlateT6_C11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D11", - "name": "PlateT6_D11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E11", - "name": "PlateT6_E11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F11", - "name": "PlateT6_F11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G11", - "name": "PlateT6_G11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H11", - "name": "PlateT6_H11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A12", - "name": "PlateT6_A12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B12", - "name": "PlateT6_B12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C12", - "name": "PlateT6_C12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D12", - "name": "PlateT6_D12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E12", - "name": "PlateT6_E12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F12", - "name": "PlateT6_F12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G12", - "name": "PlateT6_G12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H12", - "name": "PlateT6_H12", - - "children": [], - "parent": "PlateT6", - "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": "emptyT7", - "name": "emptyT7", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - { - "id": "emptyT8", - "name": "emptyT8", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - { - "id": "PlateT9", - "name": "PlateT9", - - "children": [ - "PlateT9_A1", - "PlateT9_B1", - "PlateT9_C1", - "PlateT9_D1", - "PlateT9_E1", - "PlateT9_F1", - "PlateT9_G1", - "PlateT9_H1", - "PlateT9_A2", - "PlateT9_B2", - "PlateT9_C2", - "PlateT9_D2", - "PlateT9_E2", - "PlateT9_F2", - "PlateT9_G2", - "PlateT9_H2", - "PlateT9_A3", - "PlateT9_B3", - "PlateT9_C3", - "PlateT9_D3", - "PlateT9_E3", - "PlateT9_F3", - "PlateT9_G3", - "PlateT9_H3", - "PlateT9_A4", - "PlateT9_B4", - "PlateT9_C4", - "PlateT9_D4", - "PlateT9_E4", - "PlateT9_F4", - "PlateT9_G4", - "PlateT9_H4", - "PlateT9_A5", - "PlateT9_B5", - "PlateT9_C5", - "PlateT9_D5", - "PlateT9_E5", - "PlateT9_F5", - "PlateT9_G5", - "PlateT9_H5", - "PlateT9_A6", - "PlateT9_B6", - "PlateT9_C6", - "PlateT9_D6", - "PlateT9_E6", - "PlateT9_F6", - "PlateT9_G6", - "PlateT9_H6", - "PlateT9_A7", - "PlateT9_B7", - "PlateT9_C7", - "PlateT9_D7", - "PlateT9_E7", - "PlateT9_F7", - "PlateT9_G7", - "PlateT9_H7", - "PlateT9_A8", - "PlateT9_B8", - "PlateT9_C8", - "PlateT9_D8", - "PlateT9_E8", - "PlateT9_F8", - "PlateT9_G8", - "PlateT9_H8", - "PlateT9_A9", - "PlateT9_B9", - "PlateT9_C9", - "PlateT9_D9", - "PlateT9_E9", - "PlateT9_F9", - "PlateT9_G9", - "PlateT9_H9", - "PlateT9_A10", - "PlateT9_B10", - "PlateT9_C10", - "PlateT9_D10", - "PlateT9_E10", - "PlateT9_F10", - "PlateT9_G10", - "PlateT9_H10", - "PlateT9_A11", - "PlateT9_B11", - "PlateT9_C11", - "PlateT9_D11", - "PlateT9_E11", - "PlateT9_F11", - "PlateT9_G11", - "PlateT9_H11", - "PlateT9_A12", - "PlateT9_B12", - "PlateT9_C12", - "PlateT9_D12", - "PlateT9_E12", - "PlateT9_F12", - "PlateT9_G12", - "PlateT9_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT9_A1", - "B1": "PlateT9_B1", - "C1": "PlateT9_C1", - "D1": "PlateT9_D1", - "E1": "PlateT9_E1", - "F1": "PlateT9_F1", - "G1": "PlateT9_G1", - "H1": "PlateT9_H1", - "A2": "PlateT9_A2", - "B2": "PlateT9_B2", - "C2": "PlateT9_C2", - "D2": "PlateT9_D2", - "E2": "PlateT9_E2", - "F2": "PlateT9_F2", - "G2": "PlateT9_G2", - "H2": "PlateT9_H2", - "A3": "PlateT9_A3", - "B3": "PlateT9_B3", - "C3": "PlateT9_C3", - "D3": "PlateT9_D3", - "E3": "PlateT9_E3", - "F3": "PlateT9_F3", - "G3": "PlateT9_G3", - "H3": "PlateT9_H3", - "A4": "PlateT9_A4", - "B4": "PlateT9_B4", - "C4": "PlateT9_C4", - "D4": "PlateT9_D4", - "E4": "PlateT9_E4", - "F4": "PlateT9_F4", - "G4": "PlateT9_G4", - "H4": "PlateT9_H4", - "A5": "PlateT9_A5", - "B5": "PlateT9_B5", - "C5": "PlateT9_C5", - "D5": "PlateT9_D5", - "E5": "PlateT9_E5", - "F5": "PlateT9_F5", - "G5": "PlateT9_G5", - "H5": "PlateT9_H5", - "A6": "PlateT9_A6", - "B6": "PlateT9_B6", - "C6": "PlateT9_C6", - "D6": "PlateT9_D6", - "E6": "PlateT9_E6", - "F6": "PlateT9_F6", - "G6": "PlateT9_G6", - "H6": "PlateT9_H6", - "A7": "PlateT9_A7", - "B7": "PlateT9_B7", - "C7": "PlateT9_C7", - "D7": "PlateT9_D7", - "E7": "PlateT9_E7", - "F7": "PlateT9_F7", - "G7": "PlateT9_G7", - "H7": "PlateT9_H7", - "A8": "PlateT9_A8", - "B8": "PlateT9_B8", - "C8": "PlateT9_C8", - "D8": "PlateT9_D8", - "E8": "PlateT9_E8", - "F8": "PlateT9_F8", - "G8": "PlateT9_G8", - "H8": "PlateT9_H8", - "A9": "PlateT9_A9", - "B9": "PlateT9_B9", - "C9": "PlateT9_C9", - "D9": "PlateT9_D9", - "E9": "PlateT9_E9", - "F9": "PlateT9_F9", - "G9": "PlateT9_G9", - "H9": "PlateT9_H9", - "A10": "PlateT9_A10", - "B10": "PlateT9_B10", - "C10": "PlateT9_C10", - "D10": "PlateT9_D10", - "E10": "PlateT9_E10", - "F10": "PlateT9_F10", - "G10": "PlateT9_G10", - "H10": "PlateT9_H10", - "A11": "PlateT9_A11", - "B11": "PlateT9_B11", - "C11": "PlateT9_C11", - "D11": "PlateT9_D11", - "E11": "PlateT9_E11", - "F11": "PlateT9_F11", - "G11": "PlateT9_G11", - "H11": "PlateT9_H11", - "A12": "PlateT9_A12", - "B12": "PlateT9_B12", - "C12": "PlateT9_C12", - "D12": "PlateT9_D12", - "E12": "PlateT9_E12", - "F12": "PlateT9_F12", - "G12": "PlateT9_G12", - "H12": "PlateT9_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT9_A1", - "name": "PlateT9_A1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B1", - "name": "PlateT9_B1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C1", - "name": "PlateT9_C1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D1", - "name": "PlateT9_D1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E1", - "name": "PlateT9_E1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F1", - "name": "PlateT9_F1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G1", - "name": "PlateT9_G1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H1", - "name": "PlateT9_H1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A2", - "name": "PlateT9_A2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B2", - "name": "PlateT9_B2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C2", - "name": "PlateT9_C2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D2", - "name": "PlateT9_D2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E2", - "name": "PlateT9_E2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F2", - "name": "PlateT9_F2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G2", - "name": "PlateT9_G2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H2", - "name": "PlateT9_H2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A3", - "name": "PlateT9_A3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B3", - "name": "PlateT9_B3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C3", - "name": "PlateT9_C3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D3", - "name": "PlateT9_D3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E3", - "name": "PlateT9_E3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F3", - "name": "PlateT9_F3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G3", - "name": "PlateT9_G3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H3", - "name": "PlateT9_H3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A4", - "name": "PlateT9_A4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B4", - "name": "PlateT9_B4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C4", - "name": "PlateT9_C4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D4", - "name": "PlateT9_D4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E4", - "name": "PlateT9_E4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F4", - "name": "PlateT9_F4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G4", - "name": "PlateT9_G4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H4", - "name": "PlateT9_H4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A5", - "name": "PlateT9_A5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B5", - "name": "PlateT9_B5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C5", - "name": "PlateT9_C5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D5", - "name": "PlateT9_D5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E5", - "name": "PlateT9_E5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F5", - "name": "PlateT9_F5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G5", - "name": "PlateT9_G5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H5", - "name": "PlateT9_H5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A6", - "name": "PlateT9_A6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B6", - "name": "PlateT9_B6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C6", - "name": "PlateT9_C6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D6", - "name": "PlateT9_D6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E6", - "name": "PlateT9_E6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F6", - "name": "PlateT9_F6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G6", - "name": "PlateT9_G6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H6", - "name": "PlateT9_H6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A7", - "name": "PlateT9_A7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B7", - "name": "PlateT9_B7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C7", - "name": "PlateT9_C7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D7", - "name": "PlateT9_D7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E7", - "name": "PlateT9_E7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F7", - "name": "PlateT9_F7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G7", - "name": "PlateT9_G7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H7", - "name": "PlateT9_H7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A8", - "name": "PlateT9_A8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B8", - "name": "PlateT9_B8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C8", - "name": "PlateT9_C8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D8", - "name": "PlateT9_D8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E8", - "name": "PlateT9_E8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F8", - "name": "PlateT9_F8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G8", - "name": "PlateT9_G8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H8", - "name": "PlateT9_H8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A9", - "name": "PlateT9_A9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B9", - "name": "PlateT9_B9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C9", - "name": "PlateT9_C9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D9", - "name": "PlateT9_D9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E9", - "name": "PlateT9_E9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F9", - "name": "PlateT9_F9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G9", - "name": "PlateT9_G9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H9", - "name": "PlateT9_H9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A10", - "name": "PlateT9_A10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B10", - "name": "PlateT9_B10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C10", - "name": "PlateT9_C10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D10", - "name": "PlateT9_D10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E10", - "name": "PlateT9_E10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F10", - "name": "PlateT9_F10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G10", - "name": "PlateT9_G10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H10", - "name": "PlateT9_H10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A11", - "name": "PlateT9_A11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B11", - "name": "PlateT9_B11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C11", - "name": "PlateT9_C11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D11", - "name": "PlateT9_D11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E11", - "name": "PlateT9_E11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F11", - "name": "PlateT9_F11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G11", - "name": "PlateT9_G11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H11", - "name": "PlateT9_H11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A12", - "name": "PlateT9_A12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B12", - "name": "PlateT9_B12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C12", - "name": "PlateT9_C12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D12", - "name": "PlateT9_D12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E12", - "name": "PlateT9_E12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F12", - "name": "PlateT9_F12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G12", - "name": "PlateT9_G12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H12", - "name": "PlateT9_H12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT10", - "name": "PlateT10", - - "children": [ - "PlateT10_A1", - "PlateT10_B1", - "PlateT10_C1", - "PlateT10_D1", - "PlateT10_E1", - "PlateT10_F1", - "PlateT10_G1", - "PlateT10_H1", - "PlateT10_A2", - "PlateT10_B2", - "PlateT10_C2", - "PlateT10_D2", - "PlateT10_E2", - "PlateT10_F2", - "PlateT10_G2", - "PlateT10_H2", - "PlateT10_A3", - "PlateT10_B3", - "PlateT10_C3", - "PlateT10_D3", - "PlateT10_E3", - "PlateT10_F3", - "PlateT10_G3", - "PlateT10_H3", - "PlateT10_A4", - "PlateT10_B4", - "PlateT10_C4", - "PlateT10_D4", - "PlateT10_E4", - "PlateT10_F4", - "PlateT10_G4", - "PlateT10_H4", - "PlateT10_A5", - "PlateT10_B5", - "PlateT10_C5", - "PlateT10_D5", - "PlateT10_E5", - "PlateT10_F5", - "PlateT10_G5", - "PlateT10_H5", - "PlateT10_A6", - "PlateT10_B6", - "PlateT10_C6", - "PlateT10_D6", - "PlateT10_E6", - "PlateT10_F6", - "PlateT10_G6", - "PlateT10_H6", - "PlateT10_A7", - "PlateT10_B7", - "PlateT10_C7", - "PlateT10_D7", - "PlateT10_E7", - "PlateT10_F7", - "PlateT10_G7", - "PlateT10_H7", - "PlateT10_A8", - "PlateT10_B8", - "PlateT10_C8", - "PlateT10_D8", - "PlateT10_E8", - "PlateT10_F8", - "PlateT10_G8", - "PlateT10_H8", - "PlateT10_A9", - "PlateT10_B9", - "PlateT10_C9", - "PlateT10_D9", - "PlateT10_E9", - "PlateT10_F9", - "PlateT10_G9", - "PlateT10_H9", - "PlateT10_A10", - "PlateT10_B10", - "PlateT10_C10", - "PlateT10_D10", - "PlateT10_E10", - "PlateT10_F10", - "PlateT10_G10", - "PlateT10_H10", - "PlateT10_A11", - "PlateT10_B11", - "PlateT10_C11", - "PlateT10_D11", - "PlateT10_E11", - "PlateT10_F11", - "PlateT10_G11", - "PlateT10_H11", - "PlateT10_A12", - "PlateT10_B12", - "PlateT10_C12", - "PlateT10_D12", - "PlateT10_E12", - "PlateT10_F12", - "PlateT10_G12", - "PlateT10_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT10_A1", - "B1": "PlateT10_B1", - "C1": "PlateT10_C1", - "D1": "PlateT10_D1", - "E1": "PlateT10_E1", - "F1": "PlateT10_F1", - "G1": "PlateT10_G1", - "H1": "PlateT10_H1", - "A2": "PlateT10_A2", - "B2": "PlateT10_B2", - "C2": "PlateT10_C2", - "D2": "PlateT10_D2", - "E2": "PlateT10_E2", - "F2": "PlateT10_F2", - "G2": "PlateT10_G2", - "H2": "PlateT10_H2", - "A3": "PlateT10_A3", - "B3": "PlateT10_B3", - "C3": "PlateT10_C3", - "D3": "PlateT10_D3", - "E3": "PlateT10_E3", - "F3": "PlateT10_F3", - "G3": "PlateT10_G3", - "H3": "PlateT10_H3", - "A4": "PlateT10_A4", - "B4": "PlateT10_B4", - "C4": "PlateT10_C4", - "D4": "PlateT10_D4", - "E4": "PlateT10_E4", - "F4": "PlateT10_F4", - "G4": "PlateT10_G4", - "H4": "PlateT10_H4", - "A5": "PlateT10_A5", - "B5": "PlateT10_B5", - "C5": "PlateT10_C5", - "D5": "PlateT10_D5", - "E5": "PlateT10_E5", - "F5": "PlateT10_F5", - "G5": "PlateT10_G5", - "H5": "PlateT10_H5", - "A6": "PlateT10_A6", - "B6": "PlateT10_B6", - "C6": "PlateT10_C6", - "D6": "PlateT10_D6", - "E6": "PlateT10_E6", - "F6": "PlateT10_F6", - "G6": "PlateT10_G6", - "H6": "PlateT10_H6", - "A7": "PlateT10_A7", - "B7": "PlateT10_B7", - "C7": "PlateT10_C7", - "D7": "PlateT10_D7", - "E7": "PlateT10_E7", - "F7": "PlateT10_F7", - "G7": "PlateT10_G7", - "H7": "PlateT10_H7", - "A8": "PlateT10_A8", - "B8": "PlateT10_B8", - "C8": "PlateT10_C8", - "D8": "PlateT10_D8", - "E8": "PlateT10_E8", - "F8": "PlateT10_F8", - "G8": "PlateT10_G8", - "H8": "PlateT10_H8", - "A9": "PlateT10_A9", - "B9": "PlateT10_B9", - "C9": "PlateT10_C9", - "D9": "PlateT10_D9", - "E9": "PlateT10_E9", - "F9": "PlateT10_F9", - "G9": "PlateT10_G9", - "H9": "PlateT10_H9", - "A10": "PlateT10_A10", - "B10": "PlateT10_B10", - "C10": "PlateT10_C10", - "D10": "PlateT10_D10", - "E10": "PlateT10_E10", - "F10": "PlateT10_F10", - "G10": "PlateT10_G10", - "H10": "PlateT10_H10", - "A11": "PlateT10_A11", - "B11": "PlateT10_B11", - "C11": "PlateT10_C11", - "D11": "PlateT10_D11", - "E11": "PlateT10_E11", - "F11": "PlateT10_F11", - "G11": "PlateT10_G11", - "H11": "PlateT10_H11", - "A12": "PlateT10_A12", - "B12": "PlateT10_B12", - "C12": "PlateT10_C12", - "D12": "PlateT10_D12", - "E12": "PlateT10_E12", - "F12": "PlateT10_F12", - "G12": "PlateT10_G12", - "H12": "PlateT10_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT10_A1", - "name": "PlateT10_A1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B1", - "name": "PlateT10_B1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C1", - "name": "PlateT10_C1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D1", - "name": "PlateT10_D1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E1", - "name": "PlateT10_E1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F1", - "name": "PlateT10_F1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G1", - "name": "PlateT10_G1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H1", - "name": "PlateT10_H1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A2", - "name": "PlateT10_A2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B2", - "name": "PlateT10_B2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C2", - "name": "PlateT10_C2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D2", - "name": "PlateT10_D2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E2", - "name": "PlateT10_E2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F2", - "name": "PlateT10_F2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G2", - "name": "PlateT10_G2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H2", - "name": "PlateT10_H2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A3", - "name": "PlateT10_A3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B3", - "name": "PlateT10_B3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C3", - "name": "PlateT10_C3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D3", - "name": "PlateT10_D3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E3", - "name": "PlateT10_E3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F3", - "name": "PlateT10_F3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G3", - "name": "PlateT10_G3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H3", - "name": "PlateT10_H3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A4", - "name": "PlateT10_A4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B4", - "name": "PlateT10_B4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C4", - "name": "PlateT10_C4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D4", - "name": "PlateT10_D4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E4", - "name": "PlateT10_E4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F4", - "name": "PlateT10_F4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G4", - "name": "PlateT10_G4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H4", - "name": "PlateT10_H4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A5", - "name": "PlateT10_A5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B5", - "name": "PlateT10_B5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C5", - "name": "PlateT10_C5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D5", - "name": "PlateT10_D5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E5", - "name": "PlateT10_E5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F5", - "name": "PlateT10_F5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G5", - "name": "PlateT10_G5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H5", - "name": "PlateT10_H5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A6", - "name": "PlateT10_A6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B6", - "name": "PlateT10_B6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C6", - "name": "PlateT10_C6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D6", - "name": "PlateT10_D6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E6", - "name": "PlateT10_E6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F6", - "name": "PlateT10_F6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G6", - "name": "PlateT10_G6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H6", - "name": "PlateT10_H6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A7", - "name": "PlateT10_A7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B7", - "name": "PlateT10_B7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C7", - "name": "PlateT10_C7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D7", - "name": "PlateT10_D7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E7", - "name": "PlateT10_E7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F7", - "name": "PlateT10_F7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G7", - "name": "PlateT10_G7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H7", - "name": "PlateT10_H7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A8", - "name": "PlateT10_A8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B8", - "name": "PlateT10_B8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C8", - "name": "PlateT10_C8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D8", - "name": "PlateT10_D8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E8", - "name": "PlateT10_E8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F8", - "name": "PlateT10_F8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G8", - "name": "PlateT10_G8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H8", - "name": "PlateT10_H8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A9", - "name": "PlateT10_A9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B9", - "name": "PlateT10_B9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C9", - "name": "PlateT10_C9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D9", - "name": "PlateT10_D9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E9", - "name": "PlateT10_E9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F9", - "name": "PlateT10_F9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G9", - "name": "PlateT10_G9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H9", - "name": "PlateT10_H9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A10", - "name": "PlateT10_A10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B10", - "name": "PlateT10_B10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C10", - "name": "PlateT10_C10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D10", - "name": "PlateT10_D10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E10", - "name": "PlateT10_E10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F10", - "name": "PlateT10_F10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G10", - "name": "PlateT10_G10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H10", - "name": "PlateT10_H10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A11", - "name": "PlateT10_A11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B11", - "name": "PlateT10_B11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C11", - "name": "PlateT10_C11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D11", - "name": "PlateT10_D11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E11", - "name": "PlateT10_E11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F11", - "name": "PlateT10_F11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G11", - "name": "PlateT10_G11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H11", - "name": "PlateT10_H11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A12", - "name": "PlateT10_A12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B12", - "name": "PlateT10_B12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C12", - "name": "PlateT10_C12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D12", - "name": "PlateT10_D12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E12", - "name": "PlateT10_E12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F12", - "name": "PlateT10_F12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G12", - "name": "PlateT10_G12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H12", - "name": "PlateT10_H12", - - "children": [], - "parent": "PlateT10", - "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": "emptyT11", - "name": "emptyT11", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - { - "id": "emptyT12", - "name": "emptyT12", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {} - }, - "data": {} - }, - { - "id": "PlateT13", - "name": "PlateT13", - - "children": [ - "PlateT13_A1", - "PlateT13_B1", - "PlateT13_C1", - "PlateT13_D1", - "PlateT13_E1", - "PlateT13_F1", - "PlateT13_G1", - "PlateT13_H1", - "PlateT13_A2", - "PlateT13_B2", - "PlateT13_C2", - "PlateT13_D2", - "PlateT13_E2", - "PlateT13_F2", - "PlateT13_G2", - "PlateT13_H2", - "PlateT13_A3", - "PlateT13_B3", - "PlateT13_C3", - "PlateT13_D3", - "PlateT13_E3", - "PlateT13_F3", - "PlateT13_G3", - "PlateT13_H3", - "PlateT13_A4", - "PlateT13_B4", - "PlateT13_C4", - "PlateT13_D4", - "PlateT13_E4", - "PlateT13_F4", - "PlateT13_G4", - "PlateT13_H4", - "PlateT13_A5", - "PlateT13_B5", - "PlateT13_C5", - "PlateT13_D5", - "PlateT13_E5", - "PlateT13_F5", - "PlateT13_G5", - "PlateT13_H5", - "PlateT13_A6", - "PlateT13_B6", - "PlateT13_C6", - "PlateT13_D6", - "PlateT13_E6", - "PlateT13_F6", - "PlateT13_G6", - "PlateT13_H6", - "PlateT13_A7", - "PlateT13_B7", - "PlateT13_C7", - "PlateT13_D7", - "PlateT13_E7", - "PlateT13_F7", - "PlateT13_G7", - "PlateT13_H7", - "PlateT13_A8", - "PlateT13_B8", - "PlateT13_C8", - "PlateT13_D8", - "PlateT13_E8", - "PlateT13_F8", - "PlateT13_G8", - "PlateT13_H8", - "PlateT13_A9", - "PlateT13_B9", - "PlateT13_C9", - "PlateT13_D9", - "PlateT13_E9", - "PlateT13_F9", - "PlateT13_G9", - "PlateT13_H9", - "PlateT13_A10", - "PlateT13_B10", - "PlateT13_C10", - "PlateT13_D10", - "PlateT13_E10", - "PlateT13_F10", - "PlateT13_G10", - "PlateT13_H10", - "PlateT13_A11", - "PlateT13_B11", - "PlateT13_C11", - "PlateT13_D11", - "PlateT13_E11", - "PlateT13_F11", - "PlateT13_G11", - "PlateT13_H11", - "PlateT13_A12", - "PlateT13_B12", - "PlateT13_C12", - "PlateT13_D12", - "PlateT13_E12", - "PlateT13_F12", - "PlateT13_G12", - "PlateT13_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT13_A1", - "B1": "PlateT13_B1", - "C1": "PlateT13_C1", - "D1": "PlateT13_D1", - "E1": "PlateT13_E1", - "F1": "PlateT13_F1", - "G1": "PlateT13_G1", - "H1": "PlateT13_H1", - "A2": "PlateT13_A2", - "B2": "PlateT13_B2", - "C2": "PlateT13_C2", - "D2": "PlateT13_D2", - "E2": "PlateT13_E2", - "F2": "PlateT13_F2", - "G2": "PlateT13_G2", - "H2": "PlateT13_H2", - "A3": "PlateT13_A3", - "B3": "PlateT13_B3", - "C3": "PlateT13_C3", - "D3": "PlateT13_D3", - "E3": "PlateT13_E3", - "F3": "PlateT13_F3", - "G3": "PlateT13_G3", - "H3": "PlateT13_H3", - "A4": "PlateT13_A4", - "B4": "PlateT13_B4", - "C4": "PlateT13_C4", - "D4": "PlateT13_D4", - "E4": "PlateT13_E4", - "F4": "PlateT13_F4", - "G4": "PlateT13_G4", - "H4": "PlateT13_H4", - "A5": "PlateT13_A5", - "B5": "PlateT13_B5", - "C5": "PlateT13_C5", - "D5": "PlateT13_D5", - "E5": "PlateT13_E5", - "F5": "PlateT13_F5", - "G5": "PlateT13_G5", - "H5": "PlateT13_H5", - "A6": "PlateT13_A6", - "B6": "PlateT13_B6", - "C6": "PlateT13_C6", - "D6": "PlateT13_D6", - "E6": "PlateT13_E6", - "F6": "PlateT13_F6", - "G6": "PlateT13_G6", - "H6": "PlateT13_H6", - "A7": "PlateT13_A7", - "B7": "PlateT13_B7", - "C7": "PlateT13_C7", - "D7": "PlateT13_D7", - "E7": "PlateT13_E7", - "F7": "PlateT13_F7", - "G7": "PlateT13_G7", - "H7": "PlateT13_H7", - "A8": "PlateT13_A8", - "B8": "PlateT13_B8", - "C8": "PlateT13_C8", - "D8": "PlateT13_D8", - "E8": "PlateT13_E8", - "F8": "PlateT13_F8", - "G8": "PlateT13_G8", - "H8": "PlateT13_H8", - "A9": "PlateT13_A9", - "B9": "PlateT13_B9", - "C9": "PlateT13_C9", - "D9": "PlateT13_D9", - "E9": "PlateT13_E9", - "F9": "PlateT13_F9", - "G9": "PlateT13_G9", - "H9": "PlateT13_H9", - "A10": "PlateT13_A10", - "B10": "PlateT13_B10", - "C10": "PlateT13_C10", - "D10": "PlateT13_D10", - "E10": "PlateT13_E10", - "F10": "PlateT13_F10", - "G10": "PlateT13_G10", - "H10": "PlateT13_H10", - "A11": "PlateT13_A11", - "B11": "PlateT13_B11", - "C11": "PlateT13_C11", - "D11": "PlateT13_D11", - "E11": "PlateT13_E11", - "F11": "PlateT13_F11", - "G11": "PlateT13_G11", - "H11": "PlateT13_H11", - "A12": "PlateT13_A12", - "B12": "PlateT13_B12", - "C12": "PlateT13_C12", - "D12": "PlateT13_D12", - "E12": "PlateT13_E12", - "F12": "PlateT13_F12", - "G12": "PlateT13_G12", - "H12": "PlateT13_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT13_A1", - "name": "PlateT13_A1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B1", - "name": "PlateT13_B1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C1", - "name": "PlateT13_C1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D1", - "name": "PlateT13_D1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E1", - "name": "PlateT13_E1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F1", - "name": "PlateT13_F1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G1", - "name": "PlateT13_G1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H1", - "name": "PlateT13_H1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A2", - "name": "PlateT13_A2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B2", - "name": "PlateT13_B2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C2", - "name": "PlateT13_C2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D2", - "name": "PlateT13_D2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E2", - "name": "PlateT13_E2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F2", - "name": "PlateT13_F2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G2", - "name": "PlateT13_G2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H2", - "name": "PlateT13_H2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A3", - "name": "PlateT13_A3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B3", - "name": "PlateT13_B3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C3", - "name": "PlateT13_C3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D3", - "name": "PlateT13_D3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E3", - "name": "PlateT13_E3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F3", - "name": "PlateT13_F3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G3", - "name": "PlateT13_G3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H3", - "name": "PlateT13_H3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A4", - "name": "PlateT13_A4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B4", - "name": "PlateT13_B4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C4", - "name": "PlateT13_C4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D4", - "name": "PlateT13_D4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E4", - "name": "PlateT13_E4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F4", - "name": "PlateT13_F4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G4", - "name": "PlateT13_G4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H4", - "name": "PlateT13_H4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A5", - "name": "PlateT13_A5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B5", - "name": "PlateT13_B5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C5", - "name": "PlateT13_C5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D5", - "name": "PlateT13_D5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E5", - "name": "PlateT13_E5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F5", - "name": "PlateT13_F5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G5", - "name": "PlateT13_G5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H5", - "name": "PlateT13_H5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A6", - "name": "PlateT13_A6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B6", - "name": "PlateT13_B6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C6", - "name": "PlateT13_C6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D6", - "name": "PlateT13_D6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E6", - "name": "PlateT13_E6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F6", - "name": "PlateT13_F6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G6", - "name": "PlateT13_G6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H6", - "name": "PlateT13_H6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A7", - "name": "PlateT13_A7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B7", - "name": "PlateT13_B7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C7", - "name": "PlateT13_C7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D7", - "name": "PlateT13_D7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E7", - "name": "PlateT13_E7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F7", - "name": "PlateT13_F7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G7", - "name": "PlateT13_G7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H7", - "name": "PlateT13_H7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A8", - "name": "PlateT13_A8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B8", - "name": "PlateT13_B8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C8", - "name": "PlateT13_C8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D8", - "name": "PlateT13_D8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E8", - "name": "PlateT13_E8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F8", - "name": "PlateT13_F8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G8", - "name": "PlateT13_G8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H8", - "name": "PlateT13_H8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A9", - "name": "PlateT13_A9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B9", - "name": "PlateT13_B9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C9", - "name": "PlateT13_C9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D9", - "name": "PlateT13_D9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E9", - "name": "PlateT13_E9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F9", - "name": "PlateT13_F9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G9", - "name": "PlateT13_G9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H9", - "name": "PlateT13_H9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A10", - "name": "PlateT13_A10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B10", - "name": "PlateT13_B10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C10", - "name": "PlateT13_C10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D10", - "name": "PlateT13_D10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E10", - "name": "PlateT13_E10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F10", - "name": "PlateT13_F10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G10", - "name": "PlateT13_G10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H10", - "name": "PlateT13_H10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A11", - "name": "PlateT13_A11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B11", - "name": "PlateT13_B11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C11", - "name": "PlateT13_C11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D11", - "name": "PlateT13_D11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E11", - "name": "PlateT13_E11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F11", - "name": "PlateT13_F11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G11", - "name": "PlateT13_G11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H11", - "name": "PlateT13_H11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A12", - "name": "PlateT13_A12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B12", - "name": "PlateT13_B12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C12", - "name": "PlateT13_C12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D12", - "name": "PlateT13_D12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E12", - "name": "PlateT13_E12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F12", - "name": "PlateT13_F12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G12", - "name": "PlateT13_G12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H12", - "name": "PlateT13_H12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT14", - "name": "PlateT14", - - "children": [ - "PlateT14_A1", - "PlateT14_B1", - "PlateT14_C1", - "PlateT14_D1", - "PlateT14_E1", - "PlateT14_F1", - "PlateT14_G1", - "PlateT14_H1", - "PlateT14_A2", - "PlateT14_B2", - "PlateT14_C2", - "PlateT14_D2", - "PlateT14_E2", - "PlateT14_F2", - "PlateT14_G2", - "PlateT14_H2", - "PlateT14_A3", - "PlateT14_B3", - "PlateT14_C3", - "PlateT14_D3", - "PlateT14_E3", - "PlateT14_F3", - "PlateT14_G3", - "PlateT14_H3", - "PlateT14_A4", - "PlateT14_B4", - "PlateT14_C4", - "PlateT14_D4", - "PlateT14_E4", - "PlateT14_F4", - "PlateT14_G4", - "PlateT14_H4", - "PlateT14_A5", - "PlateT14_B5", - "PlateT14_C5", - "PlateT14_D5", - "PlateT14_E5", - "PlateT14_F5", - "PlateT14_G5", - "PlateT14_H5", - "PlateT14_A6", - "PlateT14_B6", - "PlateT14_C6", - "PlateT14_D6", - "PlateT14_E6", - "PlateT14_F6", - "PlateT14_G6", - "PlateT14_H6", - "PlateT14_A7", - "PlateT14_B7", - "PlateT14_C7", - "PlateT14_D7", - "PlateT14_E7", - "PlateT14_F7", - "PlateT14_G7", - "PlateT14_H7", - "PlateT14_A8", - "PlateT14_B8", - "PlateT14_C8", - "PlateT14_D8", - "PlateT14_E8", - "PlateT14_F8", - "PlateT14_G8", - "PlateT14_H8", - "PlateT14_A9", - "PlateT14_B9", - "PlateT14_C9", - "PlateT14_D9", - "PlateT14_E9", - "PlateT14_F9", - "PlateT14_G9", - "PlateT14_H9", - "PlateT14_A10", - "PlateT14_B10", - "PlateT14_C10", - "PlateT14_D10", - "PlateT14_E10", - "PlateT14_F10", - "PlateT14_G10", - "PlateT14_H10", - "PlateT14_A11", - "PlateT14_B11", - "PlateT14_C11", - "PlateT14_D11", - "PlateT14_E11", - "PlateT14_F11", - "PlateT14_G11", - "PlateT14_H11", - "PlateT14_A12", - "PlateT14_B12", - "PlateT14_C12", - "PlateT14_D12", - "PlateT14_E12", - "PlateT14_F12", - "PlateT14_G12", - "PlateT14_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT14_A1", - "B1": "PlateT14_B1", - "C1": "PlateT14_C1", - "D1": "PlateT14_D1", - "E1": "PlateT14_E1", - "F1": "PlateT14_F1", - "G1": "PlateT14_G1", - "H1": "PlateT14_H1", - "A2": "PlateT14_A2", - "B2": "PlateT14_B2", - "C2": "PlateT14_C2", - "D2": "PlateT14_D2", - "E2": "PlateT14_E2", - "F2": "PlateT14_F2", - "G2": "PlateT14_G2", - "H2": "PlateT14_H2", - "A3": "PlateT14_A3", - "B3": "PlateT14_B3", - "C3": "PlateT14_C3", - "D3": "PlateT14_D3", - "E3": "PlateT14_E3", - "F3": "PlateT14_F3", - "G3": "PlateT14_G3", - "H3": "PlateT14_H3", - "A4": "PlateT14_A4", - "B4": "PlateT14_B4", - "C4": "PlateT14_C4", - "D4": "PlateT14_D4", - "E4": "PlateT14_E4", - "F4": "PlateT14_F4", - "G4": "PlateT14_G4", - "H4": "PlateT14_H4", - "A5": "PlateT14_A5", - "B5": "PlateT14_B5", - "C5": "PlateT14_C5", - "D5": "PlateT14_D5", - "E5": "PlateT14_E5", - "F5": "PlateT14_F5", - "G5": "PlateT14_G5", - "H5": "PlateT14_H5", - "A6": "PlateT14_A6", - "B6": "PlateT14_B6", - "C6": "PlateT14_C6", - "D6": "PlateT14_D6", - "E6": "PlateT14_E6", - "F6": "PlateT14_F6", - "G6": "PlateT14_G6", - "H6": "PlateT14_H6", - "A7": "PlateT14_A7", - "B7": "PlateT14_B7", - "C7": "PlateT14_C7", - "D7": "PlateT14_D7", - "E7": "PlateT14_E7", - "F7": "PlateT14_F7", - "G7": "PlateT14_G7", - "H7": "PlateT14_H7", - "A8": "PlateT14_A8", - "B8": "PlateT14_B8", - "C8": "PlateT14_C8", - "D8": "PlateT14_D8", - "E8": "PlateT14_E8", - "F8": "PlateT14_F8", - "G8": "PlateT14_G8", - "H8": "PlateT14_H8", - "A9": "PlateT14_A9", - "B9": "PlateT14_B9", - "C9": "PlateT14_C9", - "D9": "PlateT14_D9", - "E9": "PlateT14_E9", - "F9": "PlateT14_F9", - "G9": "PlateT14_G9", - "H9": "PlateT14_H9", - "A10": "PlateT14_A10", - "B10": "PlateT14_B10", - "C10": "PlateT14_C10", - "D10": "PlateT14_D10", - "E10": "PlateT14_E10", - "F10": "PlateT14_F10", - "G10": "PlateT14_G10", - "H10": "PlateT14_H10", - "A11": "PlateT14_A11", - "B11": "PlateT14_B11", - "C11": "PlateT14_C11", - "D11": "PlateT14_D11", - "E11": "PlateT14_E11", - "F11": "PlateT14_F11", - "G11": "PlateT14_G11", - "H11": "PlateT14_H11", - "A12": "PlateT14_A12", - "B12": "PlateT14_B12", - "C12": "PlateT14_C12", - "D12": "PlateT14_D12", - "E12": "PlateT14_E12", - "F12": "PlateT14_F12", - "G12": "PlateT14_G12", - "H12": "PlateT14_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT14_A1", - "name": "PlateT14_A1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B1", - "name": "PlateT14_B1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C1", - "name": "PlateT14_C1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D1", - "name": "PlateT14_D1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E1", - "name": "PlateT14_E1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F1", - "name": "PlateT14_F1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G1", - "name": "PlateT14_G1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H1", - "name": "PlateT14_H1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A2", - "name": "PlateT14_A2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B2", - "name": "PlateT14_B2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C2", - "name": "PlateT14_C2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D2", - "name": "PlateT14_D2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E2", - "name": "PlateT14_E2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F2", - "name": "PlateT14_F2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G2", - "name": "PlateT14_G2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H2", - "name": "PlateT14_H2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A3", - "name": "PlateT14_A3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B3", - "name": "PlateT14_B3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C3", - "name": "PlateT14_C3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D3", - "name": "PlateT14_D3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E3", - "name": "PlateT14_E3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F3", - "name": "PlateT14_F3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G3", - "name": "PlateT14_G3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H3", - "name": "PlateT14_H3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A4", - "name": "PlateT14_A4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B4", - "name": "PlateT14_B4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C4", - "name": "PlateT14_C4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D4", - "name": "PlateT14_D4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E4", - "name": "PlateT14_E4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F4", - "name": "PlateT14_F4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G4", - "name": "PlateT14_G4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H4", - "name": "PlateT14_H4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A5", - "name": "PlateT14_A5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B5", - "name": "PlateT14_B5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C5", - "name": "PlateT14_C5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D5", - "name": "PlateT14_D5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E5", - "name": "PlateT14_E5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F5", - "name": "PlateT14_F5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G5", - "name": "PlateT14_G5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H5", - "name": "PlateT14_H5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A6", - "name": "PlateT14_A6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B6", - "name": "PlateT14_B6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C6", - "name": "PlateT14_C6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D6", - "name": "PlateT14_D6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E6", - "name": "PlateT14_E6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F6", - "name": "PlateT14_F6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G6", - "name": "PlateT14_G6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H6", - "name": "PlateT14_H6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A7", - "name": "PlateT14_A7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B7", - "name": "PlateT14_B7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C7", - "name": "PlateT14_C7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D7", - "name": "PlateT14_D7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E7", - "name": "PlateT14_E7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F7", - "name": "PlateT14_F7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G7", - "name": "PlateT14_G7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H7", - "name": "PlateT14_H7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A8", - "name": "PlateT14_A8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B8", - "name": "PlateT14_B8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C8", - "name": "PlateT14_C8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D8", - "name": "PlateT14_D8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E8", - "name": "PlateT14_E8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F8", - "name": "PlateT14_F8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G8", - "name": "PlateT14_G8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H8", - "name": "PlateT14_H8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A9", - "name": "PlateT14_A9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B9", - "name": "PlateT14_B9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C9", - "name": "PlateT14_C9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D9", - "name": "PlateT14_D9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E9", - "name": "PlateT14_E9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F9", - "name": "PlateT14_F9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G9", - "name": "PlateT14_G9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H9", - "name": "PlateT14_H9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A10", - "name": "PlateT14_A10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B10", - "name": "PlateT14_B10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C10", - "name": "PlateT14_C10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D10", - "name": "PlateT14_D10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E10", - "name": "PlateT14_E10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F10", - "name": "PlateT14_F10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G10", - "name": "PlateT14_G10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H10", - "name": "PlateT14_H10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A11", - "name": "PlateT14_A11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B11", - "name": "PlateT14_B11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C11", - "name": "PlateT14_C11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D11", - "name": "PlateT14_D11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E11", - "name": "PlateT14_E11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F11", - "name": "PlateT14_F11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G11", - "name": "PlateT14_G11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H11", - "name": "PlateT14_H11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A12", - "name": "PlateT14_A12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B12", - "name": "PlateT14_B12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C12", - "name": "PlateT14_C12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D12", - "name": "PlateT14_D12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E12", - "name": "PlateT14_E12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F12", - "name": "PlateT14_F12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G12", - "name": "PlateT14_G12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H12", - "name": "PlateT14_H12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT15", - "name": "PlateT15", - - "children": [ - "PlateT15_A1", - "PlateT15_B1", - "PlateT15_C1", - "PlateT15_D1", - "PlateT15_E1", - "PlateT15_F1", - "PlateT15_G1", - "PlateT15_H1", - "PlateT15_A2", - "PlateT15_B2", - "PlateT15_C2", - "PlateT15_D2", - "PlateT15_E2", - "PlateT15_F2", - "PlateT15_G2", - "PlateT15_H2", - "PlateT15_A3", - "PlateT15_B3", - "PlateT15_C3", - "PlateT15_D3", - "PlateT15_E3", - "PlateT15_F3", - "PlateT15_G3", - "PlateT15_H3", - "PlateT15_A4", - "PlateT15_B4", - "PlateT15_C4", - "PlateT15_D4", - "PlateT15_E4", - "PlateT15_F4", - "PlateT15_G4", - "PlateT15_H4", - "PlateT15_A5", - "PlateT15_B5", - "PlateT15_C5", - "PlateT15_D5", - "PlateT15_E5", - "PlateT15_F5", - "PlateT15_G5", - "PlateT15_H5", - "PlateT15_A6", - "PlateT15_B6", - "PlateT15_C6", - "PlateT15_D6", - "PlateT15_E6", - "PlateT15_F6", - "PlateT15_G6", - "PlateT15_H6", - "PlateT15_A7", - "PlateT15_B7", - "PlateT15_C7", - "PlateT15_D7", - "PlateT15_E7", - "PlateT15_F7", - "PlateT15_G7", - "PlateT15_H7", - "PlateT15_A8", - "PlateT15_B8", - "PlateT15_C8", - "PlateT15_D8", - "PlateT15_E8", - "PlateT15_F8", - "PlateT15_G8", - "PlateT15_H8", - "PlateT15_A9", - "PlateT15_B9", - "PlateT15_C9", - "PlateT15_D9", - "PlateT15_E9", - "PlateT15_F9", - "PlateT15_G9", - "PlateT15_H9", - "PlateT15_A10", - "PlateT15_B10", - "PlateT15_C10", - "PlateT15_D10", - "PlateT15_E10", - "PlateT15_F10", - "PlateT15_G10", - "PlateT15_H10", - "PlateT15_A11", - "PlateT15_B11", - "PlateT15_C11", - "PlateT15_D11", - "PlateT15_E11", - "PlateT15_F11", - "PlateT15_G11", - "PlateT15_H11", - "PlateT15_A12", - "PlateT15_B12", - "PlateT15_C12", - "PlateT15_D12", - "PlateT15_E12", - "PlateT15_F12", - "PlateT15_G12", - "PlateT15_H12" - ], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT15_A1", - "B1": "PlateT15_B1", - "C1": "PlateT15_C1", - "D1": "PlateT15_D1", - "E1": "PlateT15_E1", - "F1": "PlateT15_F1", - "G1": "PlateT15_G1", - "H1": "PlateT15_H1", - "A2": "PlateT15_A2", - "B2": "PlateT15_B2", - "C2": "PlateT15_C2", - "D2": "PlateT15_D2", - "E2": "PlateT15_E2", - "F2": "PlateT15_F2", - "G2": "PlateT15_G2", - "H2": "PlateT15_H2", - "A3": "PlateT15_A3", - "B3": "PlateT15_B3", - "C3": "PlateT15_C3", - "D3": "PlateT15_D3", - "E3": "PlateT15_E3", - "F3": "PlateT15_F3", - "G3": "PlateT15_G3", - "H3": "PlateT15_H3", - "A4": "PlateT15_A4", - "B4": "PlateT15_B4", - "C4": "PlateT15_C4", - "D4": "PlateT15_D4", - "E4": "PlateT15_E4", - "F4": "PlateT15_F4", - "G4": "PlateT15_G4", - "H4": "PlateT15_H4", - "A5": "PlateT15_A5", - "B5": "PlateT15_B5", - "C5": "PlateT15_C5", - "D5": "PlateT15_D5", - "E5": "PlateT15_E5", - "F5": "PlateT15_F5", - "G5": "PlateT15_G5", - "H5": "PlateT15_H5", - "A6": "PlateT15_A6", - "B6": "PlateT15_B6", - "C6": "PlateT15_C6", - "D6": "PlateT15_D6", - "E6": "PlateT15_E6", - "F6": "PlateT15_F6", - "G6": "PlateT15_G6", - "H6": "PlateT15_H6", - "A7": "PlateT15_A7", - "B7": "PlateT15_B7", - "C7": "PlateT15_C7", - "D7": "PlateT15_D7", - "E7": "PlateT15_E7", - "F7": "PlateT15_F7", - "G7": "PlateT15_G7", - "H7": "PlateT15_H7", - "A8": "PlateT15_A8", - "B8": "PlateT15_B8", - "C8": "PlateT15_C8", - "D8": "PlateT15_D8", - "E8": "PlateT15_E8", - "F8": "PlateT15_F8", - "G8": "PlateT15_G8", - "H8": "PlateT15_H8", - "A9": "PlateT15_A9", - "B9": "PlateT15_B9", - "C9": "PlateT15_C9", - "D9": "PlateT15_D9", - "E9": "PlateT15_E9", - "F9": "PlateT15_F9", - "G9": "PlateT15_G9", - "H9": "PlateT15_H9", - "A10": "PlateT15_A10", - "B10": "PlateT15_B10", - "C10": "PlateT15_C10", - "D10": "PlateT15_D10", - "E10": "PlateT15_E10", - "F10": "PlateT15_F10", - "G10": "PlateT15_G10", - "H10": "PlateT15_H10", - "A11": "PlateT15_A11", - "B11": "PlateT15_B11", - "C11": "PlateT15_C11", - "D11": "PlateT15_D11", - "E11": "PlateT15_E11", - "F11": "PlateT15_F11", - "G11": "PlateT15_G11", - "H11": "PlateT15_H11", - "A12": "PlateT15_A12", - "B12": "PlateT15_B12", - "C12": "PlateT15_C12", - "D12": "PlateT15_D12", - "E12": "PlateT15_E12", - "F12": "PlateT15_F12", - "G12": "PlateT15_G12", - "H12": "PlateT15_H12" - } - }, - "data": { - "Material": { - "uuid": "04211a2dc93547fe9bf6121eac533650" - } - } - }, - { - "id": "PlateT15_A1", - "name": "PlateT15_A1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B1", - "name": "PlateT15_B1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C1", - "name": "PlateT15_C1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D1", - "name": "PlateT15_D1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E1", - "name": "PlateT15_E1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F1", - "name": "PlateT15_F1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G1", - "name": "PlateT15_G1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H1", - "name": "PlateT15_H1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A2", - "name": "PlateT15_A2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B2", - "name": "PlateT15_B2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C2", - "name": "PlateT15_C2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D2", - "name": "PlateT15_D2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E2", - "name": "PlateT15_E2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F2", - "name": "PlateT15_F2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G2", - "name": "PlateT15_G2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H2", - "name": "PlateT15_H2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A3", - "name": "PlateT15_A3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B3", - "name": "PlateT15_B3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C3", - "name": "PlateT15_C3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D3", - "name": "PlateT15_D3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E3", - "name": "PlateT15_E3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F3", - "name": "PlateT15_F3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G3", - "name": "PlateT15_G3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H3", - "name": "PlateT15_H3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A4", - "name": "PlateT15_A4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B4", - "name": "PlateT15_B4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C4", - "name": "PlateT15_C4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D4", - "name": "PlateT15_D4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E4", - "name": "PlateT15_E4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F4", - "name": "PlateT15_F4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G4", - "name": "PlateT15_G4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H4", - "name": "PlateT15_H4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A5", - "name": "PlateT15_A5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B5", - "name": "PlateT15_B5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C5", - "name": "PlateT15_C5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D5", - "name": "PlateT15_D5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E5", - "name": "PlateT15_E5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F5", - "name": "PlateT15_F5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G5", - "name": "PlateT15_G5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H5", - "name": "PlateT15_H5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A6", - "name": "PlateT15_A6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B6", - "name": "PlateT15_B6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C6", - "name": "PlateT15_C6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D6", - "name": "PlateT15_D6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E6", - "name": "PlateT15_E6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F6", - "name": "PlateT15_F6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G6", - "name": "PlateT15_G6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H6", - "name": "PlateT15_H6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A7", - "name": "PlateT15_A7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B7", - "name": "PlateT15_B7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C7", - "name": "PlateT15_C7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D7", - "name": "PlateT15_D7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E7", - "name": "PlateT15_E7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F7", - "name": "PlateT15_F7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G7", - "name": "PlateT15_G7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H7", - "name": "PlateT15_H7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A8", - "name": "PlateT15_A8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B8", - "name": "PlateT15_B8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C8", - "name": "PlateT15_C8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D8", - "name": "PlateT15_D8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E8", - "name": "PlateT15_E8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F8", - "name": "PlateT15_F8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G8", - "name": "PlateT15_G8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H8", - "name": "PlateT15_H8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A9", - "name": "PlateT15_A9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B9", - "name": "PlateT15_B9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C9", - "name": "PlateT15_C9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D9", - "name": "PlateT15_D9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E9", - "name": "PlateT15_E9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F9", - "name": "PlateT15_F9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G9", - "name": "PlateT15_G9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H9", - "name": "PlateT15_H9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A10", - "name": "PlateT15_A10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B10", - "name": "PlateT15_B10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C10", - "name": "PlateT15_C10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D10", - "name": "PlateT15_D10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E10", - "name": "PlateT15_E10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F10", - "name": "PlateT15_F10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G10", - "name": "PlateT15_G10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H10", - "name": "PlateT15_H10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A11", - "name": "PlateT15_A11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B11", - "name": "PlateT15_B11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C11", - "name": "PlateT15_C11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D11", - "name": "PlateT15_D11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E11", - "name": "PlateT15_E11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F11", - "name": "PlateT15_F11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G11", - "name": "PlateT15_G11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H11", - "name": "PlateT15_H11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A12", - "name": "PlateT15_A12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B12", - "name": "PlateT15_B12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C12", - "name": "PlateT15_C12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D12", - "name": "PlateT15_D12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E12", - "name": "PlateT15_E12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F12", - "name": "PlateT15_F12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G12", - "name": "PlateT15_G12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H12", - "name": "PlateT15_H12", - - "children": [], - "parent": "PlateT15", - "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": "trash", - "name": "trash", - - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Trash", - "size_x": 127, - "size_y": 85.5, - "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" - } - } - } - ], - "edges": [] -} \ No newline at end of file diff --git a/unilabos/test/experiments/prcxi_9320_with_res_test.json b/unilabos/test/experiments/prcxi_9320_with_res_test.json index f842a2cd..d29918cd 100644 --- a/unilabos/test/experiments/prcxi_9320_with_res_test.json +++ b/unilabos/test/experiments/prcxi_9320_with_res_test.json @@ -1,40662 +1,40752 @@ { - "nodes": [ - { - - - "id": "PRCXI", - "name": "PRCXI", - "type": "device", - "class": "liquid_handler.prcxi", - "parent": "", - "pose": { - "size": { - "width": 562, - "height": 394, - "depth": 0 - } - }, - "config": { - "axis": "Left", - "deck": { - "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", - "_resource_child_name": "PRCXI_Deck" - }, - "host": "10.20.30.184", - "port": 9999, - "debug": false, - "setup": true, - "is_9320": true, - "timeout": 10, - "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", - "simulator": false, - "channel_num": 2 - }, - "data": { - "reset_ok": true - }, - "schema": {}, - "description": "", - "model": null, - "position": { - "x": 0, - "y": 240, - "z": 0 - } - }, - { - "id": "PRCXI_Deck", - "name": "PRCXI_Deck", - - "children": [ - ], - "parent": "PRCXI", - "type": "deck", - "class": "", - "position": { - "x": 10 , - "y": 10, - "z": 0 - }, - "config": { - "type": "PRCXI9300Deck", - "size_x": 542, - "size_y": 374, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "deck", - "barcode": null - }, - "data": {} + "nodes": [ + { + "id": "PRCXI", + "name": "PRCXI", + "type": "device", + "class": "liquid_handler.prcxi", + "parent": "", + "pose": { + "size": { + "width": 562, + "height": 394, + "depth": 0 } - , - - { - "id": "T1", - "name": "T1", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T1", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} + }, + "config": { + "axis": "Left", + "deck": { + "_resource_type": "unilabos.devices.liquid_handling.prcxi.prcxi:PRCXI9300Deck", + "_resource_child_name": "PRCXI_Deck" }, - { - "id": "T2", - "name": "T2", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T2", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T3", - "name": "T3", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T3", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T4", - "name": "T4", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 288, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T4", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T5", - "name": "T5", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T5", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T6", - "name": "T6", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T6", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T7", - "name": "T7", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T7", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T8", - "name": "T8", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 192, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T8", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T9", - "name": "T9", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T9", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T10", - "name": "T10", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T10", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T11", - "name": "T11", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T11", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T12", - "name": "T12", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 96, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T12", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T13", - "name": "T13", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T13", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T14", - "name": "T14", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 138, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T14", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T15", - "name": "T15", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 276, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T15", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - { - "id": "T16", - "name": "T16", - "children": [], - "parent": "PRCXI_Deck", - "type": "plate", - "class": "", - "position": { - "x": 414, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Container", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": {}, - "sites": [ - { - "label": "T16", - "visible": true, - "position": {"x": 0, "y": 0, "z": 0}, - "size": {"width": 128.0, "height": 86, "depth":0}, - "content_type": ["plate", "tip_rack", "plates", "tip_racks", "tube_rack"] - } - ] - }, - "data": {} - }, - + "host": "10.20.30.184", + "port": 9999, + "debug": false, + "setup": true, + "is_9320": true, + "timeout": 10, + "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", + "simulator": false, + "channel_num": 2 + }, + "data": { + "reset_ok": true + }, + "schema": {}, + "description": "", + "model": null, + "position": { + "x": 0, + "y": 240, + "z": 0 + } + }, + { + "id": "PRCXI_Deck", + "name": "PRCXI_Deck", - { - "id": "RackT1", - "name": "RackT1", - - "children": [ - "RackT1_A1", - "RackT1_B1", - "RackT1_C1", - "RackT1_D1", - "RackT1_E1", - "RackT1_F1", - "RackT1_G1", - "RackT1_H1", - "RackT1_A2", - "RackT1_B2", - "RackT1_C2", - "RackT1_D2", - "RackT1_E2", - "RackT1_F2", - "RackT1_G2", - "RackT1_H2", - "RackT1_A3", - "RackT1_B3", - "RackT1_C3", - "RackT1_D3", - "RackT1_E3", - "RackT1_F3", - "RackT1_G3", - "RackT1_H3", - "RackT1_A4", - "RackT1_B4", - "RackT1_C4", - "RackT1_D4", - "RackT1_E4", - "RackT1_F4", - "RackT1_G4", - "RackT1_H4", - "RackT1_A5", - "RackT1_B5", - "RackT1_C5", - "RackT1_D5", - "RackT1_E5", - "RackT1_F5", - "RackT1_G5", - "RackT1_H5", - "RackT1_A6", - "RackT1_B6", - "RackT1_C6", - "RackT1_D6", - "RackT1_E6", - "RackT1_F6", - "RackT1_G6", - "RackT1_H6", - "RackT1_A7", - "RackT1_B7", - "RackT1_C7", - "RackT1_D7", - "RackT1_E7", - "RackT1_F7", - "RackT1_G7", - "RackT1_H7", - "RackT1_A8", - "RackT1_B8", - "RackT1_C8", - "RackT1_D8", - "RackT1_E8", - "RackT1_F8", - "RackT1_G8", - "RackT1_H8", - "RackT1_A9", - "RackT1_B9", - "RackT1_C9", - "RackT1_D9", - "RackT1_E9", - "RackT1_F9", - "RackT1_G9", - "RackT1_H9", - "RackT1_A10", - "RackT1_B10", - "RackT1_C10", - "RackT1_D10", - "RackT1_E10", - "RackT1_F10", - "RackT1_G10", - "RackT1_H10", - "RackT1_A11", - "RackT1_B11", - "RackT1_C11", - "RackT1_D11", - "RackT1_E11", - "RackT1_F11", - "RackT1_G11", - "RackT1_H11", - "RackT1_A12", - "RackT1_B12", - "RackT1_C12", - "RackT1_D12", - "RackT1_E12", - "RackT1_F12", - "RackT1_G12", - "RackT1_H12" - ], - "parent": "T1", - "type": "tip_rack", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300TipRack", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_rack", - "model": null, - "barcode": null, - "ordering": { - "A1": "tip_A1", - "B1": "tip_B1", - "C1": "tip_C1", - "D1": "tip_D1", - "E1": "tip_E1", - "F1": "tip_F1", - "G1": "tip_G1", - "H1": "tip_H1", - "A2": "tip_A2", - "B2": "tip_B2", - "C2": "tip_C2", - "D2": "tip_D2", - "E2": "tip_E2", - "F2": "tip_F2", - "G2": "tip_G2", - "H2": "tip_H2", - "A3": "tip_A3", - "B3": "tip_B3", - "C3": "tip_C3", - "D3": "tip_D3", - "E3": "tip_E3", - "F3": "tip_F3", - "G3": "tip_G3", - "H3": "tip_H3", - "A4": "tip_A4", - "B4": "tip_B4", - "C4": "tip_C4", - "D4": "tip_D4", - "E4": "tip_E4", - "F4": "tip_F4", - "G4": "tip_G4", - "H4": "tip_H4", - "A5": "tip_A5", - "B5": "tip_B5", - "C5": "tip_C5", - "D5": "tip_D5", - "E5": "tip_E5", - "F5": "tip_F5", - "G5": "tip_G5", - "H5": "tip_H5", - "A6": "tip_A6", - "B6": "tip_B6", - "C6": "tip_C6", - "D6": "tip_D6", - "E6": "tip_E6", - "F6": "tip_F6", - "G6": "tip_G6", - "H6": "tip_H6", - "A7": "tip_A7", - "B7": "tip_B7", - "C7": "tip_C7", - "D7": "tip_D7", - "E7": "tip_E7", - "F7": "tip_F7", - "G7": "tip_G7", - "H7": "tip_H7", - "A8": "tip_A8", - "B8": "tip_B8", - "C8": "tip_C8", - "D8": "tip_D8", - "E8": "tip_E8", - "F8": "tip_F8", - "G8": "tip_G8", - "H8": "tip_H8", - "A9": "tip_A9", - "B9": "tip_B9", - "C9": "tip_C9", - "D9": "tip_D9", - "E9": "tip_E9", - "F9": "tip_F9", - "G9": "tip_G9", - "H9": "tip_H9", - "A10": "tip_A10", - "B10": "tip_B10", - "C10": "tip_C10", - "D10": "tip_D10", - "E10": "tip_E10", - "F10": "tip_F10", - "G10": "tip_G10", - "H10": "tip_H10", - "A11": "tip_A11", - "B11": "tip_B11", - "C11": "tip_C11", - "D11": "tip_D11", - "E11": "tip_E11", - "F11": "tip_F11", - "G11": "tip_G11", - "H11": "tip_H11", - "A12": "tip_A12", - "B12": "tip_B12", - "C12": "tip_C12", - "D12": "tip_D12", - "E12": "tip_E12", - "F12": "tip_F12", - "G12": "tip_G12", - "H12": "tip_H12" - } - }, - "data": { - "Material": { - "uuid": "068b3815e36b4a72a59bae017011b29f", - "Code": "ZX-001-10+", - "Name": "10μL加长 Tip头" - } - } - }, - { - "id": "RackT1_A1", - "name": "RackT1_A1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B1", - "name": "RackT1_B1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C1", - "name": "RackT1_C1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D1", - "name": "RackT1_D1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E1", - "name": "RackT1_E1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F1", - "name": "RackT1_F1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G1", - "name": "RackT1_G1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H1", - "name": "RackT1_H1", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A2", - "name": "RackT1_A2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B2", - "name": "RackT1_B2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C2", - "name": "RackT1_C2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D2", - "name": "RackT1_D2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E2", - "name": "RackT1_E2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F2", - "name": "RackT1_F2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G2", - "name": "RackT1_G2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H2", - "name": "RackT1_H2", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A3", - "name": "RackT1_A3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B3", - "name": "RackT1_B3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C3", - "name": "RackT1_C3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D3", - "name": "RackT1_D3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E3", - "name": "RackT1_E3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F3", - "name": "RackT1_F3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G3", - "name": "RackT1_G3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H3", - "name": "RackT1_H3", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A4", - "name": "RackT1_A4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B4", - "name": "RackT1_B4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C4", - "name": "RackT1_C4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D4", - "name": "RackT1_D4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E4", - "name": "RackT1_E4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F4", - "name": "RackT1_F4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G4", - "name": "RackT1_G4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H4", - "name": "RackT1_H4", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A5", - "name": "RackT1_A5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B5", - "name": "RackT1_B5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C5", - "name": "RackT1_C5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D5", - "name": "RackT1_D5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E5", - "name": "RackT1_E5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F5", - "name": "RackT1_F5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G5", - "name": "RackT1_G5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H5", - "name": "RackT1_H5", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A6", - "name": "RackT1_A6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B6", - "name": "RackT1_B6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C6", - "name": "RackT1_C6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D6", - "name": "RackT1_D6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E6", - "name": "RackT1_E6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F6", - "name": "RackT1_F6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G6", - "name": "RackT1_G6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H6", - "name": "RackT1_H6", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A7", - "name": "RackT1_A7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B7", - "name": "RackT1_B7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C7", - "name": "RackT1_C7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D7", - "name": "RackT1_D7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E7", - "name": "RackT1_E7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F7", - "name": "RackT1_F7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G7", - "name": "RackT1_G7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H7", - "name": "RackT1_H7", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A8", - "name": "RackT1_A8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B8", - "name": "RackT1_B8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C8", - "name": "RackT1_C8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D8", - "name": "RackT1_D8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E8", - "name": "RackT1_E8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F8", - "name": "RackT1_F8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G8", - "name": "RackT1_G8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H8", - "name": "RackT1_H8", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A9", - "name": "RackT1_A9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B9", - "name": "RackT1_B9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C9", - "name": "RackT1_C9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D9", - "name": "RackT1_D9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E9", - "name": "RackT1_E9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F9", - "name": "RackT1_F9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G9", - "name": "RackT1_G9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H9", - "name": "RackT1_H9", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A10", - "name": "RackT1_A10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B10", - "name": "RackT1_B10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C10", - "name": "RackT1_C10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D10", - "name": "RackT1_D10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E10", - "name": "RackT1_E10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F10", - "name": "RackT1_F10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G10", - "name": "RackT1_G10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H10", - "name": "RackT1_H10", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A11", - "name": "RackT1_A11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B11", - "name": "RackT1_B11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C11", - "name": "RackT1_C11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D11", - "name": "RackT1_D11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E11", - "name": "RackT1_E11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F11", - "name": "RackT1_F11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G11", - "name": "RackT1_G11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H11", - "name": "RackT1_H11", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_A12", - "name": "RackT1_A12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_B12", - "name": "RackT1_B12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_C12", - "name": "RackT1_C12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_D12", - "name": "RackT1_D12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_E12", - "name": "RackT1_E12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_F12", - "name": "RackT1_F12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_G12", - "name": "RackT1_G12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT1_H12", - "name": "RackT1_H12", - - "children": [], - "parent": "RackT1", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "PlateT2", - "name": "PlateT2", - - "children": [ - "PlateT2_A1", - "PlateT2_B1", - "PlateT2_C1", - "PlateT2_D1", - "PlateT2_E1", - "PlateT2_F1", - "PlateT2_G1", - "PlateT2_H1", - "PlateT2_A2", - "PlateT2_B2", - "PlateT2_C2", - "PlateT2_D2", - "PlateT2_E2", - "PlateT2_F2", - "PlateT2_G2", - "PlateT2_H2", - "PlateT2_A3", - "PlateT2_B3", - "PlateT2_C3", - "PlateT2_D3", - "PlateT2_E3", - "PlateT2_F3", - "PlateT2_G3", - "PlateT2_H3", - "PlateT2_A4", - "PlateT2_B4", - "PlateT2_C4", - "PlateT2_D4", - "PlateT2_E4", - "PlateT2_F4", - "PlateT2_G4", - "PlateT2_H4", - "PlateT2_A5", - "PlateT2_B5", - "PlateT2_C5", - "PlateT2_D5", - "PlateT2_E5", - "PlateT2_F5", - "PlateT2_G5", - "PlateT2_H5", - "PlateT2_A6", - "PlateT2_B6", - "PlateT2_C6", - "PlateT2_D6", - "PlateT2_E6", - "PlateT2_F6", - "PlateT2_G6", - "PlateT2_H6", - "PlateT2_A7", - "PlateT2_B7", - "PlateT2_C7", - "PlateT2_D7", - "PlateT2_E7", - "PlateT2_F7", - "PlateT2_G7", - "PlateT2_H7", - "PlateT2_A8", - "PlateT2_B8", - "PlateT2_C8", - "PlateT2_D8", - "PlateT2_E8", - "PlateT2_F8", - "PlateT2_G8", - "PlateT2_H8", - "PlateT2_A9", - "PlateT2_B9", - "PlateT2_C9", - "PlateT2_D9", - "PlateT2_E9", - "PlateT2_F9", - "PlateT2_G9", - "PlateT2_H9", - "PlateT2_A10", - "PlateT2_B10", - "PlateT2_C10", - "PlateT2_D10", - "PlateT2_E10", - "PlateT2_F10", - "PlateT2_G10", - "PlateT2_H10", - "PlateT2_A11", - "PlateT2_B11", - "PlateT2_C11", - "PlateT2_D11", - "PlateT2_E11", - "PlateT2_F11", - "PlateT2_G11", - "PlateT2_H11", - "PlateT2_A12", - "PlateT2_B12", - "PlateT2_C12", - "PlateT2_D12", - "PlateT2_E12", - "PlateT2_F12", - "PlateT2_G12", - "PlateT2_H12" - ], - "parent": "T2", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT2_A1", - "B1": "PlateT2_B1", - "C1": "PlateT2_C1", - "D1": "PlateT2_D1", - "E1": "PlateT2_E1", - "F1": "PlateT2_F1", - "G1": "PlateT2_G1", - "H1": "PlateT2_H1", - "A2": "PlateT2_A2", - "B2": "PlateT2_B2", - "C2": "PlateT2_C2", - "D2": "PlateT2_D2", - "E2": "PlateT2_E2", - "F2": "PlateT2_F2", - "G2": "PlateT2_G2", - "H2": "PlateT2_H2", - "A3": "PlateT2_A3", - "B3": "PlateT2_B3", - "C3": "PlateT2_C3", - "D3": "PlateT2_D3", - "E3": "PlateT2_E3", - "F3": "PlateT2_F3", - "G3": "PlateT2_G3", - "H3": "PlateT2_H3", - "A4": "PlateT2_A4", - "B4": "PlateT2_B4", - "C4": "PlateT2_C4", - "D4": "PlateT2_D4", - "E4": "PlateT2_E4", - "F4": "PlateT2_F4", - "G4": "PlateT2_G4", - "H4": "PlateT2_H4", - "A5": "PlateT2_A5", - "B5": "PlateT2_B5", - "C5": "PlateT2_C5", - "D5": "PlateT2_D5", - "E5": "PlateT2_E5", - "F5": "PlateT2_F5", - "G5": "PlateT2_G5", - "H5": "PlateT2_H5", - "A6": "PlateT2_A6", - "B6": "PlateT2_B6", - "C6": "PlateT2_C6", - "D6": "PlateT2_D6", - "E6": "PlateT2_E6", - "F6": "PlateT2_F6", - "G6": "PlateT2_G6", - "H6": "PlateT2_H6", - "A7": "PlateT2_A7", - "B7": "PlateT2_B7", - "C7": "PlateT2_C7", - "D7": "PlateT2_D7", - "E7": "PlateT2_E7", - "F7": "PlateT2_F7", - "G7": "PlateT2_G7", - "H7": "PlateT2_H7", - "A8": "PlateT2_A8", - "B8": "PlateT2_B8", - "C8": "PlateT2_C8", - "D8": "PlateT2_D8", - "E8": "PlateT2_E8", - "F8": "PlateT2_F8", - "G8": "PlateT2_G8", - "H8": "PlateT2_H8", - "A9": "PlateT2_A9", - "B9": "PlateT2_B9", - "C9": "PlateT2_C9", - "D9": "PlateT2_D9", - "E9": "PlateT2_E9", - "F9": "PlateT2_F9", - "G9": "PlateT2_G9", - "H9": "PlateT2_H9", - "A10": "PlateT2_A10", - "B10": "PlateT2_B10", - "C10": "PlateT2_C10", - "D10": "PlateT2_D10", - "E10": "PlateT2_E10", - "F10": "PlateT2_F10", - "G10": "PlateT2_G10", - "H10": "PlateT2_H10", - "A11": "PlateT2_A11", - "B11": "PlateT2_B11", - "C11": "PlateT2_C11", - "D11": "PlateT2_D11", - "E11": "PlateT2_E11", - "F11": "PlateT2_F11", - "G11": "PlateT2_G11", - "H11": "PlateT2_H11", - "A12": "PlateT2_A12", - "B12": "PlateT2_B12", - "C12": "PlateT2_C12", - "D12": "PlateT2_D12", - "E12": "PlateT2_E12", - "F12": "PlateT2_F12", - "G12": "PlateT2_G12", - "H12": "PlateT2_H12" - } - }, - "data": { - "Material": { - "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", - "Code": "ZX-78-096", - "Name": "细菌培养皿" - } - } - }, - { - "id": "PlateT2_A1", - "name": "PlateT2_A1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B1", - "name": "PlateT2_B1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C1", - "name": "PlateT2_C1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D1", - "name": "PlateT2_D1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E1", - "name": "PlateT2_E1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F1", - "name": "PlateT2_F1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G1", - "name": "PlateT2_G1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H1", - "name": "PlateT2_H1", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A2", - "name": "PlateT2_A2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B2", - "name": "PlateT2_B2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C2", - "name": "PlateT2_C2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D2", - "name": "PlateT2_D2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E2", - "name": "PlateT2_E2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F2", - "name": "PlateT2_F2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G2", - "name": "PlateT2_G2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H2", - "name": "PlateT2_H2", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A3", - "name": "PlateT2_A3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B3", - "name": "PlateT2_B3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C3", - "name": "PlateT2_C3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D3", - "name": "PlateT2_D3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E3", - "name": "PlateT2_E3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F3", - "name": "PlateT2_F3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G3", - "name": "PlateT2_G3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H3", - "name": "PlateT2_H3", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A4", - "name": "PlateT2_A4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B4", - "name": "PlateT2_B4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C4", - "name": "PlateT2_C4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D4", - "name": "PlateT2_D4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E4", - "name": "PlateT2_E4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F4", - "name": "PlateT2_F4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G4", - "name": "PlateT2_G4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H4", - "name": "PlateT2_H4", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A5", - "name": "PlateT2_A5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B5", - "name": "PlateT2_B5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C5", - "name": "PlateT2_C5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D5", - "name": "PlateT2_D5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E5", - "name": "PlateT2_E5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F5", - "name": "PlateT2_F5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G5", - "name": "PlateT2_G5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H5", - "name": "PlateT2_H5", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A6", - "name": "PlateT2_A6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B6", - "name": "PlateT2_B6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C6", - "name": "PlateT2_C6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D6", - "name": "PlateT2_D6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E6", - "name": "PlateT2_E6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F6", - "name": "PlateT2_F6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G6", - "name": "PlateT2_G6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H6", - "name": "PlateT2_H6", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A7", - "name": "PlateT2_A7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B7", - "name": "PlateT2_B7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C7", - "name": "PlateT2_C7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D7", - "name": "PlateT2_D7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E7", - "name": "PlateT2_E7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F7", - "name": "PlateT2_F7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G7", - "name": "PlateT2_G7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H7", - "name": "PlateT2_H7", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A8", - "name": "PlateT2_A8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B8", - "name": "PlateT2_B8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C8", - "name": "PlateT2_C8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D8", - "name": "PlateT2_D8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E8", - "name": "PlateT2_E8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F8", - "name": "PlateT2_F8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G8", - "name": "PlateT2_G8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H8", - "name": "PlateT2_H8", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A9", - "name": "PlateT2_A9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B9", - "name": "PlateT2_B9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C9", - "name": "PlateT2_C9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D9", - "name": "PlateT2_D9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E9", - "name": "PlateT2_E9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F9", - "name": "PlateT2_F9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G9", - "name": "PlateT2_G9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H9", - "name": "PlateT2_H9", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A10", - "name": "PlateT2_A10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B10", - "name": "PlateT2_B10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C10", - "name": "PlateT2_C10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D10", - "name": "PlateT2_D10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E10", - "name": "PlateT2_E10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F10", - "name": "PlateT2_F10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G10", - "name": "PlateT2_G10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H10", - "name": "PlateT2_H10", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A11", - "name": "PlateT2_A11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B11", - "name": "PlateT2_B11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C11", - "name": "PlateT2_C11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D11", - "name": "PlateT2_D11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E11", - "name": "PlateT2_E11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F11", - "name": "PlateT2_F11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G11", - "name": "PlateT2_G11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H11", - "name": "PlateT2_H11", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_A12", - "name": "PlateT2_A12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_B12", - "name": "PlateT2_B12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_C12", - "name": "PlateT2_C12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_D12", - "name": "PlateT2_D12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_E12", - "name": "PlateT2_E12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_F12", - "name": "PlateT2_F12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_G12", - "name": "PlateT2_G12", - - "children": [], - "parent": "PlateT2", - "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": "PlateT2_H12", - "name": "PlateT2_H12", - - "children": [], - "parent": "PlateT2", - "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": [] - } - }, + "children": [], + "parent": "PRCXI", + "type": "deck", + "class": "", + "position": { + "x": 10, + "y": 10, + "z": 0 + }, + "config": { + "type": "PRCXI9300Deck", + "size_x": 542, + "size_y": 374, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "deck", + "barcode": null + }, + "data": {} + }, + { + "id": "T1", + "name": "T1", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T1", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T2", + "name": "T2", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T2", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T3", + "name": "T3", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T3", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T4", + "name": "T4", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 288, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T4", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T5", + "name": "T5", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T5", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T6", + "name": "T6", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T6", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T7", + "name": "T7", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T7", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T8", + "name": "T8", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 192, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T8", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T9", + "name": "T9", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T9", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T10", + "name": "T10", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T10", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T11", + "name": "T11", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T11", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T12", + "name": "T12", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 96, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T12", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T13", + "name": "T13", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T13", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T14", + "name": "T14", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 138, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T14", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T15", + "name": "T15", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 276, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T15", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, + { + "id": "T16", + "name": "T16", + "children": [], + "parent": "PRCXI_Deck", + "type": "plate", + "class": "", + "position": { + "x": 414, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Container", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": {}, + "sites": [ + { + "label": "T16", + "visible": true, + "position": { "x": 0, "y": 0, "z": 0 }, + "size": { "width": 128.0, "height": 86, "depth": 0 }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack" + ] + } + ] + }, + "data": {} + }, - { - "id": "RackT5", - "name": "RackT5", - - "children": [ - "RackT5_A1", - "RackT5_B1", - "RackT5_C1", - "RackT5_D1", - "RackT5_E1", - "RackT5_F1", - "RackT5_G1", - "RackT5_H1", - "RackT5_A2", - "RackT5_B2", - "RackT5_C2", - "RackT5_D2", - "RackT5_E2", - "RackT5_F2", - "RackT5_G2", - "RackT5_H2", - "RackT5_A3", - "RackT5_B3", - "RackT5_C3", - "RackT5_D3", - "RackT5_E3", - "RackT5_F3", - "RackT5_G3", - "RackT5_H3", - "RackT5_A4", - "RackT5_B4", - "RackT5_C4", - "RackT5_D4", - "RackT5_E4", - "RackT5_F4", - "RackT5_G4", - "RackT5_H4", - "RackT5_A5", - "RackT5_B5", - "RackT5_C5", - "RackT5_D5", - "RackT5_E5", - "RackT5_F5", - "RackT5_G5", - "RackT5_H5", - "RackT5_A6", - "RackT5_B6", - "RackT5_C6", - "RackT5_D6", - "RackT5_E6", - "RackT5_F6", - "RackT5_G6", - "RackT5_H6", - "RackT5_A7", - "RackT5_B7", - "RackT5_C7", - "RackT5_D7", - "RackT5_E7", - "RackT5_F7", - "RackT5_G7", - "RackT5_H7", - "RackT5_A8", - "RackT5_B8", - "RackT5_C8", - "RackT5_D8", - "RackT5_E8", - "RackT5_F8", - "RackT5_G8", - "RackT5_H8", - "RackT5_A9", - "RackT5_B9", - "RackT5_C9", - "RackT5_D9", - "RackT5_E9", - "RackT5_F9", - "RackT5_G9", - "RackT5_H9", - "RackT5_A10", - "RackT5_B10", - "RackT5_C10", - "RackT5_D10", - "RackT5_E10", - "RackT5_F10", - "RackT5_G10", - "RackT5_H10", - "RackT5_A11", - "RackT5_B11", - "RackT5_C11", - "RackT5_D11", - "RackT5_E11", - "RackT5_F11", - "RackT5_G11", - "RackT5_H11", - "RackT5_A12", - "RackT5_B12", - "RackT5_C12", - "RackT5_D12", - "RackT5_E12", - "RackT5_F12", - "RackT5_G12", - "RackT5_H12" - ], - "parent": "T5", - "type": "tip_rack", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300TipRack", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_rack", - "model": null, - "barcode": null, - "ordering": { - "A1": "tip_A1", - "B1": "tip_B1", - "C1": "tip_C1", - "D1": "tip_D1", - "E1": "tip_E1", - "F1": "tip_F1", - "G1": "tip_G1", - "H1": "tip_H1", - "A2": "tip_A2", - "B2": "tip_B2", - "C2": "tip_C2", - "D2": "tip_D2", - "E2": "tip_E2", - "F2": "tip_F2", - "G2": "tip_G2", - "H2": "tip_H2", - "A3": "tip_A3", - "B3": "tip_B3", - "C3": "tip_C3", - "D3": "tip_D3", - "E3": "tip_E3", - "F3": "tip_F3", - "G3": "tip_G3", - "H3": "tip_H3", - "A4": "tip_A4", - "B4": "tip_B4", - "C4": "tip_C4", - "D4": "tip_D4", - "E4": "tip_E4", - "F4": "tip_F4", - "G4": "tip_G4", - "H4": "tip_H4", - "A5": "tip_A5", - "B5": "tip_B5", - "C5": "tip_C5", - "D5": "tip_D5", - "E5": "tip_E5", - "F5": "tip_F5", - "G5": "tip_G5", - "H5": "tip_H5", - "A6": "tip_A6", - "B6": "tip_B6", - "C6": "tip_C6", - "D6": "tip_D6", - "E6": "tip_E6", - "F6": "tip_F6", - "G6": "tip_G6", - "H6": "tip_H6", - "A7": "tip_A7", - "B7": "tip_B7", - "C7": "tip_C7", - "D7": "tip_D7", - "E7": "tip_E7", - "F7": "tip_F7", - "G7": "tip_G7", - "H7": "tip_H7", - "A8": "tip_A8", - "B8": "tip_B8", - "C8": "tip_C8", - "D8": "tip_D8", - "E8": "tip_E8", - "F8": "tip_F8", - "G8": "tip_G8", - "H8": "tip_H8", - "A9": "tip_A9", - "B9": "tip_B9", - "C9": "tip_C9", - "D9": "tip_D9", - "E9": "tip_E9", - "F9": "tip_F9", - "G9": "tip_G9", - "H9": "tip_H9", - "A10": "tip_A10", - "B10": "tip_B10", - "C10": "tip_C10", - "D10": "tip_D10", - "E10": "tip_E10", - "F10": "tip_F10", - "G10": "tip_G10", - "H10": "tip_H10", - "A11": "tip_A11", - "B11": "tip_B11", - "C11": "tip_C11", - "D11": "tip_D11", - "E11": "tip_E11", - "F11": "tip_F11", - "G11": "tip_G11", - "H11": "tip_H11", - "A12": "tip_A12", - "B12": "tip_B12", - "C12": "tip_C12", - "D12": "tip_D12", - "E12": "tip_E12", - "F12": "tip_F12", - "G12": "tip_G12", - "H12": "tip_H12" - } - }, - "data": { - "Material": { - "uuid": "076250742950465b9d6ea29a225dfb00", - "Code": "ZX-001-300", - "SupplyType": 1, - "Name": "300μL Tip头" - } - } - }, - { - "id": "RackT5_A1", - "name": "RackT5_A1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B1", - "name": "RackT5_B1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C1", - "name": "RackT5_C1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D1", - "name": "RackT5_D1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E1", - "name": "RackT5_E1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F1", - "name": "RackT5_F1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G1", - "name": "RackT5_G1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H1", - "name": "RackT5_H1", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 13.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A2", - "name": "RackT5_A2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B2", - "name": "RackT5_B2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C2", - "name": "RackT5_C2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D2", - "name": "RackT5_D2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E2", - "name": "RackT5_E2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F2", - "name": "RackT5_F2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G2", - "name": "RackT5_G2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H2", - "name": "RackT5_H2", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 22.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A3", - "name": "RackT5_A3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B3", - "name": "RackT5_B3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C3", - "name": "RackT5_C3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D3", - "name": "RackT5_D3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E3", - "name": "RackT5_E3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F3", - "name": "RackT5_F3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G3", - "name": "RackT5_G3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H3", - "name": "RackT5_H3", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 31.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A4", - "name": "RackT5_A4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B4", - "name": "RackT5_B4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C4", - "name": "RackT5_C4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D4", - "name": "RackT5_D4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E4", - "name": "RackT5_E4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F4", - "name": "RackT5_F4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G4", - "name": "RackT5_G4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H4", - "name": "RackT5_H4", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 40.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A5", - "name": "RackT5_A5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B5", - "name": "RackT5_B5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C5", - "name": "RackT5_C5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D5", - "name": "RackT5_D5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E5", - "name": "RackT5_E5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F5", - "name": "RackT5_F5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G5", - "name": "RackT5_G5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H5", - "name": "RackT5_H5", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 49.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A6", - "name": "RackT5_A6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B6", - "name": "RackT5_B6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C6", - "name": "RackT5_C6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D6", - "name": "RackT5_D6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E6", - "name": "RackT5_E6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F6", - "name": "RackT5_F6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G6", - "name": "RackT5_G6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H6", - "name": "RackT5_H6", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 58.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A7", - "name": "RackT5_A7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B7", - "name": "RackT5_B7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C7", - "name": "RackT5_C7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D7", - "name": "RackT5_D7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E7", - "name": "RackT5_E7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F7", - "name": "RackT5_F7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G7", - "name": "RackT5_G7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H7", - "name": "RackT5_H7", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 67.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A8", - "name": "RackT5_A8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B8", - "name": "RackT5_B8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C8", - "name": "RackT5_C8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D8", - "name": "RackT5_D8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E8", - "name": "RackT5_E8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F8", - "name": "RackT5_F8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G8", - "name": "RackT5_G8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H8", - "name": "RackT5_H8", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 76.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A9", - "name": "RackT5_A9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B9", - "name": "RackT5_B9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C9", - "name": "RackT5_C9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D9", - "name": "RackT5_D9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E9", - "name": "RackT5_E9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F9", - "name": "RackT5_F9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G9", - "name": "RackT5_G9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H9", - "name": "RackT5_H9", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 85.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A10", - "name": "RackT5_A10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B10", - "name": "RackT5_B10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C10", - "name": "RackT5_C10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D10", - "name": "RackT5_D10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E10", - "name": "RackT5_E10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F10", - "name": "RackT5_F10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G10", - "name": "RackT5_G10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H10", - "name": "RackT5_H10", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 94.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A11", - "name": "RackT5_A11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B11", - "name": "RackT5_B11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C11", - "name": "RackT5_C11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D11", - "name": "RackT5_D11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E11", - "name": "RackT5_E11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F11", - "name": "RackT5_F11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G11", - "name": "RackT5_G11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H11", - "name": "RackT5_H11", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 103.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_A12", - "name": "RackT5_A12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 73.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_B12", - "name": "RackT5_B12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 64.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_C12", - "name": "RackT5_C12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 55.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_D12", - "name": "RackT5_D12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 46.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_E12", - "name": "RackT5_E12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 37.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_F12", - "name": "RackT5_F12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 28.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_G12", - "name": "RackT5_G12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 19.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "RackT5_H12", - "name": "RackT5_H12", - - "children": [], - "parent": "RackT5", - "type": "tip_spot", - "class": "", - "position": { - "x": 112.224, - "y": 10.084, - "z": 25.49 - }, - "config": { - "type": "TipSpot", - "size_x": 4.312, - "size_y": 4.312, - "size_z": 0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 39.2, - "has_filter": false, - "maximal_volume": 10.0, - "fitting_depth": 3.29 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 88, - "has_filter": true, - "maximal_volume": 1000.0, - "fitting_depth": 3.95 - } - } - }, - { - "id": "PlateT6", - "name": "PlateT6", - - "children": [ - "PlateT6_A1", - "PlateT6_B1", - "PlateT6_C1", - "PlateT6_D1", - "PlateT6_E1", - "PlateT6_F1", - "PlateT6_G1", - "PlateT6_H1", - "PlateT6_A2", - "PlateT6_B2", - "PlateT6_C2", - "PlateT6_D2", - "PlateT6_E2", - "PlateT6_F2", - "PlateT6_G2", - "PlateT6_H2", - "PlateT6_A3", - "PlateT6_B3", - "PlateT6_C3", - "PlateT6_D3", - "PlateT6_E3", - "PlateT6_F3", - "PlateT6_G3", - "PlateT6_H3", - "PlateT6_A4", - "PlateT6_B4", - "PlateT6_C4", - "PlateT6_D4", - "PlateT6_E4", - "PlateT6_F4", - "PlateT6_G4", - "PlateT6_H4", - "PlateT6_A5", - "PlateT6_B5", - "PlateT6_C5", - "PlateT6_D5", - "PlateT6_E5", - "PlateT6_F5", - "PlateT6_G5", - "PlateT6_H5", - "PlateT6_A6", - "PlateT6_B6", - "PlateT6_C6", - "PlateT6_D6", - "PlateT6_E6", - "PlateT6_F6", - "PlateT6_G6", - "PlateT6_H6", - "PlateT6_A7", - "PlateT6_B7", - "PlateT6_C7", - "PlateT6_D7", - "PlateT6_E7", - "PlateT6_F7", - "PlateT6_G7", - "PlateT6_H7", - "PlateT6_A8", - "PlateT6_B8", - "PlateT6_C8", - "PlateT6_D8", - "PlateT6_E8", - "PlateT6_F8", - "PlateT6_G8", - "PlateT6_H8", - "PlateT6_A9", - "PlateT6_B9", - "PlateT6_C9", - "PlateT6_D9", - "PlateT6_E9", - "PlateT6_F9", - "PlateT6_G9", - "PlateT6_H9", - "PlateT6_A10", - "PlateT6_B10", - "PlateT6_C10", - "PlateT6_D10", - "PlateT6_E10", - "PlateT6_F10", - "PlateT6_G10", - "PlateT6_H10", - "PlateT6_A11", - "PlateT6_B11", - "PlateT6_C11", - "PlateT6_D11", - "PlateT6_E11", - "PlateT6_F11", - "PlateT6_G11", - "PlateT6_H11", - "PlateT6_A12", - "PlateT6_B12", - "PlateT6_C12", - "PlateT6_D12", - "PlateT6_E12", - "PlateT6_F12", - "PlateT6_G12", - "PlateT6_H12" - ], - "parent": "T6", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT6_A1", - "B1": "PlateT6_B1", - "C1": "PlateT6_C1", - "D1": "PlateT6_D1", - "E1": "PlateT6_E1", - "F1": "PlateT6_F1", - "G1": "PlateT6_G1", - "H1": "PlateT6_H1", - "A2": "PlateT6_A2", - "B2": "PlateT6_B2", - "C2": "PlateT6_C2", - "D2": "PlateT6_D2", - "E2": "PlateT6_E2", - "F2": "PlateT6_F2", - "G2": "PlateT6_G2", - "H2": "PlateT6_H2", - "A3": "PlateT6_A3", - "B3": "PlateT6_B3", - "C3": "PlateT6_C3", - "D3": "PlateT6_D3", - "E3": "PlateT6_E3", - "F3": "PlateT6_F3", - "G3": "PlateT6_G3", - "H3": "PlateT6_H3", - "A4": "PlateT6_A4", - "B4": "PlateT6_B4", - "C4": "PlateT6_C4", - "D4": "PlateT6_D4", - "E4": "PlateT6_E4", - "F4": "PlateT6_F4", - "G4": "PlateT6_G4", - "H4": "PlateT6_H4", - "A5": "PlateT6_A5", - "B5": "PlateT6_B5", - "C5": "PlateT6_C5", - "D5": "PlateT6_D5", - "E5": "PlateT6_E5", - "F5": "PlateT6_F5", - "G5": "PlateT6_G5", - "H5": "PlateT6_H5", - "A6": "PlateT6_A6", - "B6": "PlateT6_B6", - "C6": "PlateT6_C6", - "D6": "PlateT6_D6", - "E6": "PlateT6_E6", - "F6": "PlateT6_F6", - "G6": "PlateT6_G6", - "H6": "PlateT6_H6", - "A7": "PlateT6_A7", - "B7": "PlateT6_B7", - "C7": "PlateT6_C7", - "D7": "PlateT6_D7", - "E7": "PlateT6_E7", - "F7": "PlateT6_F7", - "G7": "PlateT6_G7", - "H7": "PlateT6_H7", - "A8": "PlateT6_A8", - "B8": "PlateT6_B8", - "C8": "PlateT6_C8", - "D8": "PlateT6_D8", - "E8": "PlateT6_E8", - "F8": "PlateT6_F8", - "G8": "PlateT6_G8", - "H8": "PlateT6_H8", - "A9": "PlateT6_A9", - "B9": "PlateT6_B9", - "C9": "PlateT6_C9", - "D9": "PlateT6_D9", - "E9": "PlateT6_E9", - "F9": "PlateT6_F9", - "G9": "PlateT6_G9", - "H9": "PlateT6_H9", - "A10": "PlateT6_A10", - "B10": "PlateT6_B10", - "C10": "PlateT6_C10", - "D10": "PlateT6_D10", - "E10": "PlateT6_E10", - "F10": "PlateT6_F10", - "G10": "PlateT6_G10", - "H10": "PlateT6_H10", - "A11": "PlateT6_A11", - "B11": "PlateT6_B11", - "C11": "PlateT6_C11", - "D11": "PlateT6_D11", - "E11": "PlateT6_E11", - "F11": "PlateT6_F11", - "G11": "PlateT6_G11", - "H11": "PlateT6_H11", - "A12": "PlateT6_A12", - "B12": "PlateT6_B12", - "C12": "PlateT6_C12", - "D12": "PlateT6_D12", - "E12": "PlateT6_E12", - "F12": "PlateT6_F12", - "G12": "PlateT6_G12", - "H12": "PlateT6_H12" - } - }, - "data": { - "Material": { - "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", - "Code": "1", - "SupplyType": 1, - "Name": "ep适配器", - "SummaryName": "ep适配器" - } - } - }, - { - "id": "PlateT6_A1", - "name": "PlateT6_A1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B1", - "name": "PlateT6_B1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C1", - "name": "PlateT6_C1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D1", - "name": "PlateT6_D1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E1", - "name": "PlateT6_E1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F1", - "name": "PlateT6_F1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G1", - "name": "PlateT6_G1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H1", - "name": "PlateT6_H1", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A2", - "name": "PlateT6_A2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B2", - "name": "PlateT6_B2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C2", - "name": "PlateT6_C2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D2", - "name": "PlateT6_D2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E2", - "name": "PlateT6_E2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F2", - "name": "PlateT6_F2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G2", - "name": "PlateT6_G2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H2", - "name": "PlateT6_H2", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A3", - "name": "PlateT6_A3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B3", - "name": "PlateT6_B3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C3", - "name": "PlateT6_C3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D3", - "name": "PlateT6_D3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E3", - "name": "PlateT6_E3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F3", - "name": "PlateT6_F3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G3", - "name": "PlateT6_G3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H3", - "name": "PlateT6_H3", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A4", - "name": "PlateT6_A4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B4", - "name": "PlateT6_B4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C4", - "name": "PlateT6_C4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D4", - "name": "PlateT6_D4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E4", - "name": "PlateT6_E4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F4", - "name": "PlateT6_F4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G4", - "name": "PlateT6_G4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H4", - "name": "PlateT6_H4", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A5", - "name": "PlateT6_A5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B5", - "name": "PlateT6_B5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C5", - "name": "PlateT6_C5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D5", - "name": "PlateT6_D5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E5", - "name": "PlateT6_E5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F5", - "name": "PlateT6_F5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G5", - "name": "PlateT6_G5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H5", - "name": "PlateT6_H5", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A6", - "name": "PlateT6_A6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B6", - "name": "PlateT6_B6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C6", - "name": "PlateT6_C6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D6", - "name": "PlateT6_D6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E6", - "name": "PlateT6_E6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F6", - "name": "PlateT6_F6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G6", - "name": "PlateT6_G6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H6", - "name": "PlateT6_H6", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A7", - "name": "PlateT6_A7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B7", - "name": "PlateT6_B7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C7", - "name": "PlateT6_C7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D7", - "name": "PlateT6_D7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E7", - "name": "PlateT6_E7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F7", - "name": "PlateT6_F7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G7", - "name": "PlateT6_G7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H7", - "name": "PlateT6_H7", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A8", - "name": "PlateT6_A8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B8", - "name": "PlateT6_B8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C8", - "name": "PlateT6_C8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D8", - "name": "PlateT6_D8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E8", - "name": "PlateT6_E8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F8", - "name": "PlateT6_F8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G8", - "name": "PlateT6_G8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H8", - "name": "PlateT6_H8", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A9", - "name": "PlateT6_A9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B9", - "name": "PlateT6_B9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C9", - "name": "PlateT6_C9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D9", - "name": "PlateT6_D9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E9", - "name": "PlateT6_E9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F9", - "name": "PlateT6_F9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G9", - "name": "PlateT6_G9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H9", - "name": "PlateT6_H9", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A10", - "name": "PlateT6_A10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B10", - "name": "PlateT6_B10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C10", - "name": "PlateT6_C10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D10", - "name": "PlateT6_D10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E10", - "name": "PlateT6_E10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F10", - "name": "PlateT6_F10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G10", - "name": "PlateT6_G10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H10", - "name": "PlateT6_H10", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A11", - "name": "PlateT6_A11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B11", - "name": "PlateT6_B11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C11", - "name": "PlateT6_C11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D11", - "name": "PlateT6_D11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E11", - "name": "PlateT6_E11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F11", - "name": "PlateT6_F11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G11", - "name": "PlateT6_G11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H11", - "name": "PlateT6_H11", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_A12", - "name": "PlateT6_A12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_B12", - "name": "PlateT6_B12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_C12", - "name": "PlateT6_C12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_D12", - "name": "PlateT6_D12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_E12", - "name": "PlateT6_E12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_F12", - "name": "PlateT6_F12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_G12", - "name": "PlateT6_G12", - - "children": [], - "parent": "PlateT6", - "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": "PlateT6_H12", - "name": "PlateT6_H12", - - "children": [], - "parent": "PlateT6", - "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": "RackT1", + "name": "RackT1", - { - "id": "PlateT9", - "name": "PlateT9", - - "children": [ - "PlateT9_A1", - "PlateT9_B1", - "PlateT9_C1", - "PlateT9_D1", - "PlateT9_E1", - "PlateT9_F1", - "PlateT9_G1", - "PlateT9_H1", - "PlateT9_A2", - "PlateT9_B2", - "PlateT9_C2", - "PlateT9_D2", - "PlateT9_E2", - "PlateT9_F2", - "PlateT9_G2", - "PlateT9_H2", - "PlateT9_A3", - "PlateT9_B3", - "PlateT9_C3", - "PlateT9_D3", - "PlateT9_E3", - "PlateT9_F3", - "PlateT9_G3", - "PlateT9_H3", - "PlateT9_A4", - "PlateT9_B4", - "PlateT9_C4", - "PlateT9_D4", - "PlateT9_E4", - "PlateT9_F4", - "PlateT9_G4", - "PlateT9_H4", - "PlateT9_A5", - "PlateT9_B5", - "PlateT9_C5", - "PlateT9_D5", - "PlateT9_E5", - "PlateT9_F5", - "PlateT9_G5", - "PlateT9_H5", - "PlateT9_A6", - "PlateT9_B6", - "PlateT9_C6", - "PlateT9_D6", - "PlateT9_E6", - "PlateT9_F6", - "PlateT9_G6", - "PlateT9_H6", - "PlateT9_A7", - "PlateT9_B7", - "PlateT9_C7", - "PlateT9_D7", - "PlateT9_E7", - "PlateT9_F7", - "PlateT9_G7", - "PlateT9_H7", - "PlateT9_A8", - "PlateT9_B8", - "PlateT9_C8", - "PlateT9_D8", - "PlateT9_E8", - "PlateT9_F8", - "PlateT9_G8", - "PlateT9_H8", - "PlateT9_A9", - "PlateT9_B9", - "PlateT9_C9", - "PlateT9_D9", - "PlateT9_E9", - "PlateT9_F9", - "PlateT9_G9", - "PlateT9_H9", - "PlateT9_A10", - "PlateT9_B10", - "PlateT9_C10", - "PlateT9_D10", - "PlateT9_E10", - "PlateT9_F10", - "PlateT9_G10", - "PlateT9_H10", - "PlateT9_A11", - "PlateT9_B11", - "PlateT9_C11", - "PlateT9_D11", - "PlateT9_E11", - "PlateT9_F11", - "PlateT9_G11", - "PlateT9_H11", - "PlateT9_A12", - "PlateT9_B12", - "PlateT9_C12", - "PlateT9_D12", - "PlateT9_E12", - "PlateT9_F12", - "PlateT9_G12", - "PlateT9_H12" - ], - "parent": "T9", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT9_A1", - "B1": "PlateT9_B1", - "C1": "PlateT9_C1", - "D1": "PlateT9_D1", - "E1": "PlateT9_E1", - "F1": "PlateT9_F1", - "G1": "PlateT9_G1", - "H1": "PlateT9_H1", - "A2": "PlateT9_A2", - "B2": "PlateT9_B2", - "C2": "PlateT9_C2", - "D2": "PlateT9_D2", - "E2": "PlateT9_E2", - "F2": "PlateT9_F2", - "G2": "PlateT9_G2", - "H2": "PlateT9_H2", - "A3": "PlateT9_A3", - "B3": "PlateT9_B3", - "C3": "PlateT9_C3", - "D3": "PlateT9_D3", - "E3": "PlateT9_E3", - "F3": "PlateT9_F3", - "G3": "PlateT9_G3", - "H3": "PlateT9_H3", - "A4": "PlateT9_A4", - "B4": "PlateT9_B4", - "C4": "PlateT9_C4", - "D4": "PlateT9_D4", - "E4": "PlateT9_E4", - "F4": "PlateT9_F4", - "G4": "PlateT9_G4", - "H4": "PlateT9_H4", - "A5": "PlateT9_A5", - "B5": "PlateT9_B5", - "C5": "PlateT9_C5", - "D5": "PlateT9_D5", - "E5": "PlateT9_E5", - "F5": "PlateT9_F5", - "G5": "PlateT9_G5", - "H5": "PlateT9_H5", - "A6": "PlateT9_A6", - "B6": "PlateT9_B6", - "C6": "PlateT9_C6", - "D6": "PlateT9_D6", - "E6": "PlateT9_E6", - "F6": "PlateT9_F6", - "G6": "PlateT9_G6", - "H6": "PlateT9_H6", - "A7": "PlateT9_A7", - "B7": "PlateT9_B7", - "C7": "PlateT9_C7", - "D7": "PlateT9_D7", - "E7": "PlateT9_E7", - "F7": "PlateT9_F7", - "G7": "PlateT9_G7", - "H7": "PlateT9_H7", - "A8": "PlateT9_A8", - "B8": "PlateT9_B8", - "C8": "PlateT9_C8", - "D8": "PlateT9_D8", - "E8": "PlateT9_E8", - "F8": "PlateT9_F8", - "G8": "PlateT9_G8", - "H8": "PlateT9_H8", - "A9": "PlateT9_A9", - "B9": "PlateT9_B9", - "C9": "PlateT9_C9", - "D9": "PlateT9_D9", - "E9": "PlateT9_E9", - "F9": "PlateT9_F9", - "G9": "PlateT9_G9", - "H9": "PlateT9_H9", - "A10": "PlateT9_A10", - "B10": "PlateT9_B10", - "C10": "PlateT9_C10", - "D10": "PlateT9_D10", - "E10": "PlateT9_E10", - "F10": "PlateT9_F10", - "G10": "PlateT9_G10", - "H10": "PlateT9_H10", - "A11": "PlateT9_A11", - "B11": "PlateT9_B11", - "C11": "PlateT9_C11", - "D11": "PlateT9_D11", - "E11": "PlateT9_E11", - "F11": "PlateT9_F11", - "G11": "PlateT9_G11", - "H11": "PlateT9_H11", - "A12": "PlateT9_A12", - "B12": "PlateT9_B12", - "C12": "PlateT9_C12", - "D12": "PlateT9_D12", - "E12": "PlateT9_E12", - "F12": "PlateT9_F12", - "G12": "PlateT9_G12", - "H12": "PlateT9_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT9_A1", - "name": "PlateT9_A1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B1", - "name": "PlateT9_B1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C1", - "name": "PlateT9_C1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D1", - "name": "PlateT9_D1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E1", - "name": "PlateT9_E1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F1", - "name": "PlateT9_F1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G1", - "name": "PlateT9_G1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H1", - "name": "PlateT9_H1", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A2", - "name": "PlateT9_A2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B2", - "name": "PlateT9_B2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C2", - "name": "PlateT9_C2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D2", - "name": "PlateT9_D2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E2", - "name": "PlateT9_E2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F2", - "name": "PlateT9_F2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G2", - "name": "PlateT9_G2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H2", - "name": "PlateT9_H2", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A3", - "name": "PlateT9_A3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B3", - "name": "PlateT9_B3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C3", - "name": "PlateT9_C3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D3", - "name": "PlateT9_D3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E3", - "name": "PlateT9_E3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F3", - "name": "PlateT9_F3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G3", - "name": "PlateT9_G3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H3", - "name": "PlateT9_H3", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A4", - "name": "PlateT9_A4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B4", - "name": "PlateT9_B4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C4", - "name": "PlateT9_C4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D4", - "name": "PlateT9_D4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E4", - "name": "PlateT9_E4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F4", - "name": "PlateT9_F4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G4", - "name": "PlateT9_G4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H4", - "name": "PlateT9_H4", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A5", - "name": "PlateT9_A5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B5", - "name": "PlateT9_B5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C5", - "name": "PlateT9_C5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D5", - "name": "PlateT9_D5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E5", - "name": "PlateT9_E5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F5", - "name": "PlateT9_F5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G5", - "name": "PlateT9_G5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H5", - "name": "PlateT9_H5", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A6", - "name": "PlateT9_A6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B6", - "name": "PlateT9_B6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C6", - "name": "PlateT9_C6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D6", - "name": "PlateT9_D6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E6", - "name": "PlateT9_E6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F6", - "name": "PlateT9_F6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G6", - "name": "PlateT9_G6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H6", - "name": "PlateT9_H6", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A7", - "name": "PlateT9_A7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B7", - "name": "PlateT9_B7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C7", - "name": "PlateT9_C7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D7", - "name": "PlateT9_D7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E7", - "name": "PlateT9_E7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F7", - "name": "PlateT9_F7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G7", - "name": "PlateT9_G7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H7", - "name": "PlateT9_H7", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A8", - "name": "PlateT9_A8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B8", - "name": "PlateT9_B8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C8", - "name": "PlateT9_C8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D8", - "name": "PlateT9_D8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E8", - "name": "PlateT9_E8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F8", - "name": "PlateT9_F8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G8", - "name": "PlateT9_G8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H8", - "name": "PlateT9_H8", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A9", - "name": "PlateT9_A9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B9", - "name": "PlateT9_B9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C9", - "name": "PlateT9_C9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D9", - "name": "PlateT9_D9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E9", - "name": "PlateT9_E9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F9", - "name": "PlateT9_F9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G9", - "name": "PlateT9_G9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H9", - "name": "PlateT9_H9", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A10", - "name": "PlateT9_A10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B10", - "name": "PlateT9_B10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C10", - "name": "PlateT9_C10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D10", - "name": "PlateT9_D10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E10", - "name": "PlateT9_E10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F10", - "name": "PlateT9_F10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G10", - "name": "PlateT9_G10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H10", - "name": "PlateT9_H10", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A11", - "name": "PlateT9_A11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B11", - "name": "PlateT9_B11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C11", - "name": "PlateT9_C11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D11", - "name": "PlateT9_D11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E11", - "name": "PlateT9_E11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F11", - "name": "PlateT9_F11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G11", - "name": "PlateT9_G11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H11", - "name": "PlateT9_H11", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_A12", - "name": "PlateT9_A12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_B12", - "name": "PlateT9_B12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_C12", - "name": "PlateT9_C12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_D12", - "name": "PlateT9_D12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_E12", - "name": "PlateT9_E12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_F12", - "name": "PlateT9_F12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_G12", - "name": "PlateT9_G12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT9_H12", - "name": "PlateT9_H12", - - "children": [], - "parent": "PlateT9", - "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": "PlateT10", - "name": "PlateT10", - - "children": [ - "PlateT10_A1", - "PlateT10_B1", - "PlateT10_C1", - "PlateT10_D1", - "PlateT10_E1", - "PlateT10_F1", - "PlateT10_G1", - "PlateT10_H1", - "PlateT10_A2", - "PlateT10_B2", - "PlateT10_C2", - "PlateT10_D2", - "PlateT10_E2", - "PlateT10_F2", - "PlateT10_G2", - "PlateT10_H2", - "PlateT10_A3", - "PlateT10_B3", - "PlateT10_C3", - "PlateT10_D3", - "PlateT10_E3", - "PlateT10_F3", - "PlateT10_G3", - "PlateT10_H3", - "PlateT10_A4", - "PlateT10_B4", - "PlateT10_C4", - "PlateT10_D4", - "PlateT10_E4", - "PlateT10_F4", - "PlateT10_G4", - "PlateT10_H4", - "PlateT10_A5", - "PlateT10_B5", - "PlateT10_C5", - "PlateT10_D5", - "PlateT10_E5", - "PlateT10_F5", - "PlateT10_G5", - "PlateT10_H5", - "PlateT10_A6", - "PlateT10_B6", - "PlateT10_C6", - "PlateT10_D6", - "PlateT10_E6", - "PlateT10_F6", - "PlateT10_G6", - "PlateT10_H6", - "PlateT10_A7", - "PlateT10_B7", - "PlateT10_C7", - "PlateT10_D7", - "PlateT10_E7", - "PlateT10_F7", - "PlateT10_G7", - "PlateT10_H7", - "PlateT10_A8", - "PlateT10_B8", - "PlateT10_C8", - "PlateT10_D8", - "PlateT10_E8", - "PlateT10_F8", - "PlateT10_G8", - "PlateT10_H8", - "PlateT10_A9", - "PlateT10_B9", - "PlateT10_C9", - "PlateT10_D9", - "PlateT10_E9", - "PlateT10_F9", - "PlateT10_G9", - "PlateT10_H9", - "PlateT10_A10", - "PlateT10_B10", - "PlateT10_C10", - "PlateT10_D10", - "PlateT10_E10", - "PlateT10_F10", - "PlateT10_G10", - "PlateT10_H10", - "PlateT10_A11", - "PlateT10_B11", - "PlateT10_C11", - "PlateT10_D11", - "PlateT10_E11", - "PlateT10_F11", - "PlateT10_G11", - "PlateT10_H11", - "PlateT10_A12", - "PlateT10_B12", - "PlateT10_C12", - "PlateT10_D12", - "PlateT10_E12", - "PlateT10_F12", - "PlateT10_G12", - "PlateT10_H12" - ], - "parent": "T10", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT10_A1", - "B1": "PlateT10_B1", - "C1": "PlateT10_C1", - "D1": "PlateT10_D1", - "E1": "PlateT10_E1", - "F1": "PlateT10_F1", - "G1": "PlateT10_G1", - "H1": "PlateT10_H1", - "A2": "PlateT10_A2", - "B2": "PlateT10_B2", - "C2": "PlateT10_C2", - "D2": "PlateT10_D2", - "E2": "PlateT10_E2", - "F2": "PlateT10_F2", - "G2": "PlateT10_G2", - "H2": "PlateT10_H2", - "A3": "PlateT10_A3", - "B3": "PlateT10_B3", - "C3": "PlateT10_C3", - "D3": "PlateT10_D3", - "E3": "PlateT10_E3", - "F3": "PlateT10_F3", - "G3": "PlateT10_G3", - "H3": "PlateT10_H3", - "A4": "PlateT10_A4", - "B4": "PlateT10_B4", - "C4": "PlateT10_C4", - "D4": "PlateT10_D4", - "E4": "PlateT10_E4", - "F4": "PlateT10_F4", - "G4": "PlateT10_G4", - "H4": "PlateT10_H4", - "A5": "PlateT10_A5", - "B5": "PlateT10_B5", - "C5": "PlateT10_C5", - "D5": "PlateT10_D5", - "E5": "PlateT10_E5", - "F5": "PlateT10_F5", - "G5": "PlateT10_G5", - "H5": "PlateT10_H5", - "A6": "PlateT10_A6", - "B6": "PlateT10_B6", - "C6": "PlateT10_C6", - "D6": "PlateT10_D6", - "E6": "PlateT10_E6", - "F6": "PlateT10_F6", - "G6": "PlateT10_G6", - "H6": "PlateT10_H6", - "A7": "PlateT10_A7", - "B7": "PlateT10_B7", - "C7": "PlateT10_C7", - "D7": "PlateT10_D7", - "E7": "PlateT10_E7", - "F7": "PlateT10_F7", - "G7": "PlateT10_G7", - "H7": "PlateT10_H7", - "A8": "PlateT10_A8", - "B8": "PlateT10_B8", - "C8": "PlateT10_C8", - "D8": "PlateT10_D8", - "E8": "PlateT10_E8", - "F8": "PlateT10_F8", - "G8": "PlateT10_G8", - "H8": "PlateT10_H8", - "A9": "PlateT10_A9", - "B9": "PlateT10_B9", - "C9": "PlateT10_C9", - "D9": "PlateT10_D9", - "E9": "PlateT10_E9", - "F9": "PlateT10_F9", - "G9": "PlateT10_G9", - "H9": "PlateT10_H9", - "A10": "PlateT10_A10", - "B10": "PlateT10_B10", - "C10": "PlateT10_C10", - "D10": "PlateT10_D10", - "E10": "PlateT10_E10", - "F10": "PlateT10_F10", - "G10": "PlateT10_G10", - "H10": "PlateT10_H10", - "A11": "PlateT10_A11", - "B11": "PlateT10_B11", - "C11": "PlateT10_C11", - "D11": "PlateT10_D11", - "E11": "PlateT10_E11", - "F11": "PlateT10_F11", - "G11": "PlateT10_G11", - "H11": "PlateT10_H11", - "A12": "PlateT10_A12", - "B12": "PlateT10_B12", - "C12": "PlateT10_C12", - "D12": "PlateT10_D12", - "E12": "PlateT10_E12", - "F12": "PlateT10_F12", - "G12": "PlateT10_G12", - "H12": "PlateT10_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT10_A1", - "name": "PlateT10_A1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B1", - "name": "PlateT10_B1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C1", - "name": "PlateT10_C1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D1", - "name": "PlateT10_D1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E1", - "name": "PlateT10_E1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F1", - "name": "PlateT10_F1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G1", - "name": "PlateT10_G1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H1", - "name": "PlateT10_H1", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A2", - "name": "PlateT10_A2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B2", - "name": "PlateT10_B2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C2", - "name": "PlateT10_C2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D2", - "name": "PlateT10_D2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E2", - "name": "PlateT10_E2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F2", - "name": "PlateT10_F2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G2", - "name": "PlateT10_G2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H2", - "name": "PlateT10_H2", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A3", - "name": "PlateT10_A3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B3", - "name": "PlateT10_B3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C3", - "name": "PlateT10_C3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D3", - "name": "PlateT10_D3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E3", - "name": "PlateT10_E3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F3", - "name": "PlateT10_F3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G3", - "name": "PlateT10_G3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H3", - "name": "PlateT10_H3", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A4", - "name": "PlateT10_A4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B4", - "name": "PlateT10_B4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C4", - "name": "PlateT10_C4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D4", - "name": "PlateT10_D4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E4", - "name": "PlateT10_E4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F4", - "name": "PlateT10_F4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G4", - "name": "PlateT10_G4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H4", - "name": "PlateT10_H4", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A5", - "name": "PlateT10_A5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B5", - "name": "PlateT10_B5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C5", - "name": "PlateT10_C5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D5", - "name": "PlateT10_D5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E5", - "name": "PlateT10_E5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F5", - "name": "PlateT10_F5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G5", - "name": "PlateT10_G5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H5", - "name": "PlateT10_H5", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A6", - "name": "PlateT10_A6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B6", - "name": "PlateT10_B6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C6", - "name": "PlateT10_C6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D6", - "name": "PlateT10_D6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E6", - "name": "PlateT10_E6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F6", - "name": "PlateT10_F6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G6", - "name": "PlateT10_G6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H6", - "name": "PlateT10_H6", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A7", - "name": "PlateT10_A7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B7", - "name": "PlateT10_B7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C7", - "name": "PlateT10_C7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D7", - "name": "PlateT10_D7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E7", - "name": "PlateT10_E7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F7", - "name": "PlateT10_F7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G7", - "name": "PlateT10_G7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H7", - "name": "PlateT10_H7", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A8", - "name": "PlateT10_A8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B8", - "name": "PlateT10_B8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C8", - "name": "PlateT10_C8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D8", - "name": "PlateT10_D8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E8", - "name": "PlateT10_E8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F8", - "name": "PlateT10_F8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G8", - "name": "PlateT10_G8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H8", - "name": "PlateT10_H8", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A9", - "name": "PlateT10_A9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B9", - "name": "PlateT10_B9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C9", - "name": "PlateT10_C9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D9", - "name": "PlateT10_D9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E9", - "name": "PlateT10_E9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F9", - "name": "PlateT10_F9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G9", - "name": "PlateT10_G9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H9", - "name": "PlateT10_H9", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A10", - "name": "PlateT10_A10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B10", - "name": "PlateT10_B10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C10", - "name": "PlateT10_C10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D10", - "name": "PlateT10_D10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E10", - "name": "PlateT10_E10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F10", - "name": "PlateT10_F10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G10", - "name": "PlateT10_G10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H10", - "name": "PlateT10_H10", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A11", - "name": "PlateT10_A11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B11", - "name": "PlateT10_B11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C11", - "name": "PlateT10_C11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D11", - "name": "PlateT10_D11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E11", - "name": "PlateT10_E11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F11", - "name": "PlateT10_F11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G11", - "name": "PlateT10_G11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H11", - "name": "PlateT10_H11", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_A12", - "name": "PlateT10_A12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_B12", - "name": "PlateT10_B12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_C12", - "name": "PlateT10_C12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_D12", - "name": "PlateT10_D12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_E12", - "name": "PlateT10_E12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_F12", - "name": "PlateT10_F12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_G12", - "name": "PlateT10_G12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT10_H12", - "name": "PlateT10_H12", - - "children": [], - "parent": "PlateT10", - "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": "PlateT13", - "name": "PlateT13", - - "children": [ - "PlateT13_A1", - "PlateT13_B1", - "PlateT13_C1", - "PlateT13_D1", - "PlateT13_E1", - "PlateT13_F1", - "PlateT13_G1", - "PlateT13_H1", - "PlateT13_A2", - "PlateT13_B2", - "PlateT13_C2", - "PlateT13_D2", - "PlateT13_E2", - "PlateT13_F2", - "PlateT13_G2", - "PlateT13_H2", - "PlateT13_A3", - "PlateT13_B3", - "PlateT13_C3", - "PlateT13_D3", - "PlateT13_E3", - "PlateT13_F3", - "PlateT13_G3", - "PlateT13_H3", - "PlateT13_A4", - "PlateT13_B4", - "PlateT13_C4", - "PlateT13_D4", - "PlateT13_E4", - "PlateT13_F4", - "PlateT13_G4", - "PlateT13_H4", - "PlateT13_A5", - "PlateT13_B5", - "PlateT13_C5", - "PlateT13_D5", - "PlateT13_E5", - "PlateT13_F5", - "PlateT13_G5", - "PlateT13_H5", - "PlateT13_A6", - "PlateT13_B6", - "PlateT13_C6", - "PlateT13_D6", - "PlateT13_E6", - "PlateT13_F6", - "PlateT13_G6", - "PlateT13_H6", - "PlateT13_A7", - "PlateT13_B7", - "PlateT13_C7", - "PlateT13_D7", - "PlateT13_E7", - "PlateT13_F7", - "PlateT13_G7", - "PlateT13_H7", - "PlateT13_A8", - "PlateT13_B8", - "PlateT13_C8", - "PlateT13_D8", - "PlateT13_E8", - "PlateT13_F8", - "PlateT13_G8", - "PlateT13_H8", - "PlateT13_A9", - "PlateT13_B9", - "PlateT13_C9", - "PlateT13_D9", - "PlateT13_E9", - "PlateT13_F9", - "PlateT13_G9", - "PlateT13_H9", - "PlateT13_A10", - "PlateT13_B10", - "PlateT13_C10", - "PlateT13_D10", - "PlateT13_E10", - "PlateT13_F10", - "PlateT13_G10", - "PlateT13_H10", - "PlateT13_A11", - "PlateT13_B11", - "PlateT13_C11", - "PlateT13_D11", - "PlateT13_E11", - "PlateT13_F11", - "PlateT13_G11", - "PlateT13_H11", - "PlateT13_A12", - "PlateT13_B12", - "PlateT13_C12", - "PlateT13_D12", - "PlateT13_E12", - "PlateT13_F12", - "PlateT13_G12", - "PlateT13_H12" - ], - "parent": "T13", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT13_A1", - "B1": "PlateT13_B1", - "C1": "PlateT13_C1", - "D1": "PlateT13_D1", - "E1": "PlateT13_E1", - "F1": "PlateT13_F1", - "G1": "PlateT13_G1", - "H1": "PlateT13_H1", - "A2": "PlateT13_A2", - "B2": "PlateT13_B2", - "C2": "PlateT13_C2", - "D2": "PlateT13_D2", - "E2": "PlateT13_E2", - "F2": "PlateT13_F2", - "G2": "PlateT13_G2", - "H2": "PlateT13_H2", - "A3": "PlateT13_A3", - "B3": "PlateT13_B3", - "C3": "PlateT13_C3", - "D3": "PlateT13_D3", - "E3": "PlateT13_E3", - "F3": "PlateT13_F3", - "G3": "PlateT13_G3", - "H3": "PlateT13_H3", - "A4": "PlateT13_A4", - "B4": "PlateT13_B4", - "C4": "PlateT13_C4", - "D4": "PlateT13_D4", - "E4": "PlateT13_E4", - "F4": "PlateT13_F4", - "G4": "PlateT13_G4", - "H4": "PlateT13_H4", - "A5": "PlateT13_A5", - "B5": "PlateT13_B5", - "C5": "PlateT13_C5", - "D5": "PlateT13_D5", - "E5": "PlateT13_E5", - "F5": "PlateT13_F5", - "G5": "PlateT13_G5", - "H5": "PlateT13_H5", - "A6": "PlateT13_A6", - "B6": "PlateT13_B6", - "C6": "PlateT13_C6", - "D6": "PlateT13_D6", - "E6": "PlateT13_E6", - "F6": "PlateT13_F6", - "G6": "PlateT13_G6", - "H6": "PlateT13_H6", - "A7": "PlateT13_A7", - "B7": "PlateT13_B7", - "C7": "PlateT13_C7", - "D7": "PlateT13_D7", - "E7": "PlateT13_E7", - "F7": "PlateT13_F7", - "G7": "PlateT13_G7", - "H7": "PlateT13_H7", - "A8": "PlateT13_A8", - "B8": "PlateT13_B8", - "C8": "PlateT13_C8", - "D8": "PlateT13_D8", - "E8": "PlateT13_E8", - "F8": "PlateT13_F8", - "G8": "PlateT13_G8", - "H8": "PlateT13_H8", - "A9": "PlateT13_A9", - "B9": "PlateT13_B9", - "C9": "PlateT13_C9", - "D9": "PlateT13_D9", - "E9": "PlateT13_E9", - "F9": "PlateT13_F9", - "G9": "PlateT13_G9", - "H9": "PlateT13_H9", - "A10": "PlateT13_A10", - "B10": "PlateT13_B10", - "C10": "PlateT13_C10", - "D10": "PlateT13_D10", - "E10": "PlateT13_E10", - "F10": "PlateT13_F10", - "G10": "PlateT13_G10", - "H10": "PlateT13_H10", - "A11": "PlateT13_A11", - "B11": "PlateT13_B11", - "C11": "PlateT13_C11", - "D11": "PlateT13_D11", - "E11": "PlateT13_E11", - "F11": "PlateT13_F11", - "G11": "PlateT13_G11", - "H11": "PlateT13_H11", - "A12": "PlateT13_A12", - "B12": "PlateT13_B12", - "C12": "PlateT13_C12", - "D12": "PlateT13_D12", - "E12": "PlateT13_E12", - "F12": "PlateT13_F12", - "G12": "PlateT13_G12", - "H12": "PlateT13_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT13_A1", - "name": "PlateT13_A1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B1", - "name": "PlateT13_B1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C1", - "name": "PlateT13_C1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D1", - "name": "PlateT13_D1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E1", - "name": "PlateT13_E1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F1", - "name": "PlateT13_F1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G1", - "name": "PlateT13_G1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H1", - "name": "PlateT13_H1", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A2", - "name": "PlateT13_A2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B2", - "name": "PlateT13_B2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C2", - "name": "PlateT13_C2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D2", - "name": "PlateT13_D2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E2", - "name": "PlateT13_E2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F2", - "name": "PlateT13_F2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G2", - "name": "PlateT13_G2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H2", - "name": "PlateT13_H2", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A3", - "name": "PlateT13_A3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B3", - "name": "PlateT13_B3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C3", - "name": "PlateT13_C3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D3", - "name": "PlateT13_D3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E3", - "name": "PlateT13_E3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F3", - "name": "PlateT13_F3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G3", - "name": "PlateT13_G3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H3", - "name": "PlateT13_H3", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A4", - "name": "PlateT13_A4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B4", - "name": "PlateT13_B4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C4", - "name": "PlateT13_C4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D4", - "name": "PlateT13_D4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E4", - "name": "PlateT13_E4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F4", - "name": "PlateT13_F4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G4", - "name": "PlateT13_G4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H4", - "name": "PlateT13_H4", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A5", - "name": "PlateT13_A5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B5", - "name": "PlateT13_B5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C5", - "name": "PlateT13_C5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D5", - "name": "PlateT13_D5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E5", - "name": "PlateT13_E5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F5", - "name": "PlateT13_F5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G5", - "name": "PlateT13_G5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H5", - "name": "PlateT13_H5", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A6", - "name": "PlateT13_A6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B6", - "name": "PlateT13_B6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C6", - "name": "PlateT13_C6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D6", - "name": "PlateT13_D6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E6", - "name": "PlateT13_E6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F6", - "name": "PlateT13_F6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G6", - "name": "PlateT13_G6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H6", - "name": "PlateT13_H6", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A7", - "name": "PlateT13_A7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B7", - "name": "PlateT13_B7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C7", - "name": "PlateT13_C7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D7", - "name": "PlateT13_D7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E7", - "name": "PlateT13_E7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F7", - "name": "PlateT13_F7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G7", - "name": "PlateT13_G7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H7", - "name": "PlateT13_H7", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A8", - "name": "PlateT13_A8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B8", - "name": "PlateT13_B8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C8", - "name": "PlateT13_C8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D8", - "name": "PlateT13_D8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E8", - "name": "PlateT13_E8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F8", - "name": "PlateT13_F8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G8", - "name": "PlateT13_G8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H8", - "name": "PlateT13_H8", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A9", - "name": "PlateT13_A9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B9", - "name": "PlateT13_B9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C9", - "name": "PlateT13_C9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D9", - "name": "PlateT13_D9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E9", - "name": "PlateT13_E9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F9", - "name": "PlateT13_F9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G9", - "name": "PlateT13_G9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H9", - "name": "PlateT13_H9", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A10", - "name": "PlateT13_A10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B10", - "name": "PlateT13_B10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C10", - "name": "PlateT13_C10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D10", - "name": "PlateT13_D10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E10", - "name": "PlateT13_E10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F10", - "name": "PlateT13_F10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G10", - "name": "PlateT13_G10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H10", - "name": "PlateT13_H10", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A11", - "name": "PlateT13_A11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B11", - "name": "PlateT13_B11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C11", - "name": "PlateT13_C11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D11", - "name": "PlateT13_D11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E11", - "name": "PlateT13_E11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F11", - "name": "PlateT13_F11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G11", - "name": "PlateT13_G11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H11", - "name": "PlateT13_H11", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_A12", - "name": "PlateT13_A12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_B12", - "name": "PlateT13_B12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_C12", - "name": "PlateT13_C12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_D12", - "name": "PlateT13_D12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_E12", - "name": "PlateT13_E12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_F12", - "name": "PlateT13_F12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_G12", - "name": "PlateT13_G12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT13_H12", - "name": "PlateT13_H12", - - "children": [], - "parent": "PlateT13", - "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": "PlateT14", - "name": "PlateT14", - - "children": [ - "PlateT14_A1", - "PlateT14_B1", - "PlateT14_C1", - "PlateT14_D1", - "PlateT14_E1", - "PlateT14_F1", - "PlateT14_G1", - "PlateT14_H1", - "PlateT14_A2", - "PlateT14_B2", - "PlateT14_C2", - "PlateT14_D2", - "PlateT14_E2", - "PlateT14_F2", - "PlateT14_G2", - "PlateT14_H2", - "PlateT14_A3", - "PlateT14_B3", - "PlateT14_C3", - "PlateT14_D3", - "PlateT14_E3", - "PlateT14_F3", - "PlateT14_G3", - "PlateT14_H3", - "PlateT14_A4", - "PlateT14_B4", - "PlateT14_C4", - "PlateT14_D4", - "PlateT14_E4", - "PlateT14_F4", - "PlateT14_G4", - "PlateT14_H4", - "PlateT14_A5", - "PlateT14_B5", - "PlateT14_C5", - "PlateT14_D5", - "PlateT14_E5", - "PlateT14_F5", - "PlateT14_G5", - "PlateT14_H5", - "PlateT14_A6", - "PlateT14_B6", - "PlateT14_C6", - "PlateT14_D6", - "PlateT14_E6", - "PlateT14_F6", - "PlateT14_G6", - "PlateT14_H6", - "PlateT14_A7", - "PlateT14_B7", - "PlateT14_C7", - "PlateT14_D7", - "PlateT14_E7", - "PlateT14_F7", - "PlateT14_G7", - "PlateT14_H7", - "PlateT14_A8", - "PlateT14_B8", - "PlateT14_C8", - "PlateT14_D8", - "PlateT14_E8", - "PlateT14_F8", - "PlateT14_G8", - "PlateT14_H8", - "PlateT14_A9", - "PlateT14_B9", - "PlateT14_C9", - "PlateT14_D9", - "PlateT14_E9", - "PlateT14_F9", - "PlateT14_G9", - "PlateT14_H9", - "PlateT14_A10", - "PlateT14_B10", - "PlateT14_C10", - "PlateT14_D10", - "PlateT14_E10", - "PlateT14_F10", - "PlateT14_G10", - "PlateT14_H10", - "PlateT14_A11", - "PlateT14_B11", - "PlateT14_C11", - "PlateT14_D11", - "PlateT14_E11", - "PlateT14_F11", - "PlateT14_G11", - "PlateT14_H11", - "PlateT14_A12", - "PlateT14_B12", - "PlateT14_C12", - "PlateT14_D12", - "PlateT14_E12", - "PlateT14_F12", - "PlateT14_G12", - "PlateT14_H12" - ], - "parent": "T14", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT14_A1", - "B1": "PlateT14_B1", - "C1": "PlateT14_C1", - "D1": "PlateT14_D1", - "E1": "PlateT14_E1", - "F1": "PlateT14_F1", - "G1": "PlateT14_G1", - "H1": "PlateT14_H1", - "A2": "PlateT14_A2", - "B2": "PlateT14_B2", - "C2": "PlateT14_C2", - "D2": "PlateT14_D2", - "E2": "PlateT14_E2", - "F2": "PlateT14_F2", - "G2": "PlateT14_G2", - "H2": "PlateT14_H2", - "A3": "PlateT14_A3", - "B3": "PlateT14_B3", - "C3": "PlateT14_C3", - "D3": "PlateT14_D3", - "E3": "PlateT14_E3", - "F3": "PlateT14_F3", - "G3": "PlateT14_G3", - "H3": "PlateT14_H3", - "A4": "PlateT14_A4", - "B4": "PlateT14_B4", - "C4": "PlateT14_C4", - "D4": "PlateT14_D4", - "E4": "PlateT14_E4", - "F4": "PlateT14_F4", - "G4": "PlateT14_G4", - "H4": "PlateT14_H4", - "A5": "PlateT14_A5", - "B5": "PlateT14_B5", - "C5": "PlateT14_C5", - "D5": "PlateT14_D5", - "E5": "PlateT14_E5", - "F5": "PlateT14_F5", - "G5": "PlateT14_G5", - "H5": "PlateT14_H5", - "A6": "PlateT14_A6", - "B6": "PlateT14_B6", - "C6": "PlateT14_C6", - "D6": "PlateT14_D6", - "E6": "PlateT14_E6", - "F6": "PlateT14_F6", - "G6": "PlateT14_G6", - "H6": "PlateT14_H6", - "A7": "PlateT14_A7", - "B7": "PlateT14_B7", - "C7": "PlateT14_C7", - "D7": "PlateT14_D7", - "E7": "PlateT14_E7", - "F7": "PlateT14_F7", - "G7": "PlateT14_G7", - "H7": "PlateT14_H7", - "A8": "PlateT14_A8", - "B8": "PlateT14_B8", - "C8": "PlateT14_C8", - "D8": "PlateT14_D8", - "E8": "PlateT14_E8", - "F8": "PlateT14_F8", - "G8": "PlateT14_G8", - "H8": "PlateT14_H8", - "A9": "PlateT14_A9", - "B9": "PlateT14_B9", - "C9": "PlateT14_C9", - "D9": "PlateT14_D9", - "E9": "PlateT14_E9", - "F9": "PlateT14_F9", - "G9": "PlateT14_G9", - "H9": "PlateT14_H9", - "A10": "PlateT14_A10", - "B10": "PlateT14_B10", - "C10": "PlateT14_C10", - "D10": "PlateT14_D10", - "E10": "PlateT14_E10", - "F10": "PlateT14_F10", - "G10": "PlateT14_G10", - "H10": "PlateT14_H10", - "A11": "PlateT14_A11", - "B11": "PlateT14_B11", - "C11": "PlateT14_C11", - "D11": "PlateT14_D11", - "E11": "PlateT14_E11", - "F11": "PlateT14_F11", - "G11": "PlateT14_G11", - "H11": "PlateT14_H11", - "A12": "PlateT14_A12", - "B12": "PlateT14_B12", - "C12": "PlateT14_C12", - "D12": "PlateT14_D12", - "E12": "PlateT14_E12", - "F12": "PlateT14_F12", - "G12": "PlateT14_G12", - "H12": "PlateT14_H12" - } - }, - "data": { - "Material": { - "uuid": "4a043a07c65a4f9bb97745e1f129b165", - "Code": "ZX-58-0001", - "SupplyType": 2, - "Name": "全裙边 PCR适配器", - "SummaryName": "全裙边 PCR适配器" - } - } - }, - { - "id": "PlateT14_A1", - "name": "PlateT14_A1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B1", - "name": "PlateT14_B1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C1", - "name": "PlateT14_C1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D1", - "name": "PlateT14_D1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E1", - "name": "PlateT14_E1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F1", - "name": "PlateT14_F1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G1", - "name": "PlateT14_G1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H1", - "name": "PlateT14_H1", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A2", - "name": "PlateT14_A2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B2", - "name": "PlateT14_B2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C2", - "name": "PlateT14_C2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D2", - "name": "PlateT14_D2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E2", - "name": "PlateT14_E2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F2", - "name": "PlateT14_F2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G2", - "name": "PlateT14_G2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H2", - "name": "PlateT14_H2", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A3", - "name": "PlateT14_A3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B3", - "name": "PlateT14_B3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C3", - "name": "PlateT14_C3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D3", - "name": "PlateT14_D3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E3", - "name": "PlateT14_E3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F3", - "name": "PlateT14_F3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G3", - "name": "PlateT14_G3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H3", - "name": "PlateT14_H3", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A4", - "name": "PlateT14_A4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B4", - "name": "PlateT14_B4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C4", - "name": "PlateT14_C4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D4", - "name": "PlateT14_D4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E4", - "name": "PlateT14_E4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F4", - "name": "PlateT14_F4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G4", - "name": "PlateT14_G4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H4", - "name": "PlateT14_H4", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A5", - "name": "PlateT14_A5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B5", - "name": "PlateT14_B5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C5", - "name": "PlateT14_C5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D5", - "name": "PlateT14_D5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E5", - "name": "PlateT14_E5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F5", - "name": "PlateT14_F5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G5", - "name": "PlateT14_G5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H5", - "name": "PlateT14_H5", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A6", - "name": "PlateT14_A6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B6", - "name": "PlateT14_B6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C6", - "name": "PlateT14_C6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D6", - "name": "PlateT14_D6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E6", - "name": "PlateT14_E6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F6", - "name": "PlateT14_F6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G6", - "name": "PlateT14_G6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H6", - "name": "PlateT14_H6", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A7", - "name": "PlateT14_A7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B7", - "name": "PlateT14_B7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C7", - "name": "PlateT14_C7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D7", - "name": "PlateT14_D7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E7", - "name": "PlateT14_E7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F7", - "name": "PlateT14_F7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G7", - "name": "PlateT14_G7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H7", - "name": "PlateT14_H7", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A8", - "name": "PlateT14_A8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B8", - "name": "PlateT14_B8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C8", - "name": "PlateT14_C8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D8", - "name": "PlateT14_D8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E8", - "name": "PlateT14_E8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F8", - "name": "PlateT14_F8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G8", - "name": "PlateT14_G8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H8", - "name": "PlateT14_H8", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A9", - "name": "PlateT14_A9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B9", - "name": "PlateT14_B9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C9", - "name": "PlateT14_C9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D9", - "name": "PlateT14_D9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E9", - "name": "PlateT14_E9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F9", - "name": "PlateT14_F9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G9", - "name": "PlateT14_G9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H9", - "name": "PlateT14_H9", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A10", - "name": "PlateT14_A10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B10", - "name": "PlateT14_B10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C10", - "name": "PlateT14_C10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D10", - "name": "PlateT14_D10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E10", - "name": "PlateT14_E10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F10", - "name": "PlateT14_F10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G10", - "name": "PlateT14_G10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H10", - "name": "PlateT14_H10", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A11", - "name": "PlateT14_A11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B11", - "name": "PlateT14_B11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C11", - "name": "PlateT14_C11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D11", - "name": "PlateT14_D11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E11", - "name": "PlateT14_E11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F11", - "name": "PlateT14_F11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G11", - "name": "PlateT14_G11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H11", - "name": "PlateT14_H11", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_A12", - "name": "PlateT14_A12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_B12", - "name": "PlateT14_B12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_C12", - "name": "PlateT14_C12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_D12", - "name": "PlateT14_D12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_E12", - "name": "PlateT14_E12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_F12", - "name": "PlateT14_F12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_G12", - "name": "PlateT14_G12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT14_H12", - "name": "PlateT14_H12", - - "children": [], - "parent": "PlateT14", - "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": "PlateT15", - "name": "PlateT15", - - "children": [ - "PlateT15_A1", - "PlateT15_B1", - "PlateT15_C1", - "PlateT15_D1", - "PlateT15_E1", - "PlateT15_F1", - "PlateT15_G1", - "PlateT15_H1", - "PlateT15_A2", - "PlateT15_B2", - "PlateT15_C2", - "PlateT15_D2", - "PlateT15_E2", - "PlateT15_F2", - "PlateT15_G2", - "PlateT15_H2", - "PlateT15_A3", - "PlateT15_B3", - "PlateT15_C3", - "PlateT15_D3", - "PlateT15_E3", - "PlateT15_F3", - "PlateT15_G3", - "PlateT15_H3", - "PlateT15_A4", - "PlateT15_B4", - "PlateT15_C4", - "PlateT15_D4", - "PlateT15_E4", - "PlateT15_F4", - "PlateT15_G4", - "PlateT15_H4", - "PlateT15_A5", - "PlateT15_B5", - "PlateT15_C5", - "PlateT15_D5", - "PlateT15_E5", - "PlateT15_F5", - "PlateT15_G5", - "PlateT15_H5", - "PlateT15_A6", - "PlateT15_B6", - "PlateT15_C6", - "PlateT15_D6", - "PlateT15_E6", - "PlateT15_F6", - "PlateT15_G6", - "PlateT15_H6", - "PlateT15_A7", - "PlateT15_B7", - "PlateT15_C7", - "PlateT15_D7", - "PlateT15_E7", - "PlateT15_F7", - "PlateT15_G7", - "PlateT15_H7", - "PlateT15_A8", - "PlateT15_B8", - "PlateT15_C8", - "PlateT15_D8", - "PlateT15_E8", - "PlateT15_F8", - "PlateT15_G8", - "PlateT15_H8", - "PlateT15_A9", - "PlateT15_B9", - "PlateT15_C9", - "PlateT15_D9", - "PlateT15_E9", - "PlateT15_F9", - "PlateT15_G9", - "PlateT15_H9", - "PlateT15_A10", - "PlateT15_B10", - "PlateT15_C10", - "PlateT15_D10", - "PlateT15_E10", - "PlateT15_F10", - "PlateT15_G10", - "PlateT15_H10", - "PlateT15_A11", - "PlateT15_B11", - "PlateT15_C11", - "PlateT15_D11", - "PlateT15_E11", - "PlateT15_F11", - "PlateT15_G11", - "PlateT15_H11", - "PlateT15_A12", - "PlateT15_B12", - "PlateT15_C12", - "PlateT15_D12", - "PlateT15_E12", - "PlateT15_F12", - "PlateT15_G12", - "PlateT15_H12" - ], - "parent": "T15", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Plate", - "size_x": 127, - "size_y": 85.5, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "PlateT15_A1", - "B1": "PlateT15_B1", - "C1": "PlateT15_C1", - "D1": "PlateT15_D1", - "E1": "PlateT15_E1", - "F1": "PlateT15_F1", - "G1": "PlateT15_G1", - "H1": "PlateT15_H1", - "A2": "PlateT15_A2", - "B2": "PlateT15_B2", - "C2": "PlateT15_C2", - "D2": "PlateT15_D2", - "E2": "PlateT15_E2", - "F2": "PlateT15_F2", - "G2": "PlateT15_G2", - "H2": "PlateT15_H2", - "A3": "PlateT15_A3", - "B3": "PlateT15_B3", - "C3": "PlateT15_C3", - "D3": "PlateT15_D3", - "E3": "PlateT15_E3", - "F3": "PlateT15_F3", - "G3": "PlateT15_G3", - "H3": "PlateT15_H3", - "A4": "PlateT15_A4", - "B4": "PlateT15_B4", - "C4": "PlateT15_C4", - "D4": "PlateT15_D4", - "E4": "PlateT15_E4", - "F4": "PlateT15_F4", - "G4": "PlateT15_G4", - "H4": "PlateT15_H4", - "A5": "PlateT15_A5", - "B5": "PlateT15_B5", - "C5": "PlateT15_C5", - "D5": "PlateT15_D5", - "E5": "PlateT15_E5", - "F5": "PlateT15_F5", - "G5": "PlateT15_G5", - "H5": "PlateT15_H5", - "A6": "PlateT15_A6", - "B6": "PlateT15_B6", - "C6": "PlateT15_C6", - "D6": "PlateT15_D6", - "E6": "PlateT15_E6", - "F6": "PlateT15_F6", - "G6": "PlateT15_G6", - "H6": "PlateT15_H6", - "A7": "PlateT15_A7", - "B7": "PlateT15_B7", - "C7": "PlateT15_C7", - "D7": "PlateT15_D7", - "E7": "PlateT15_E7", - "F7": "PlateT15_F7", - "G7": "PlateT15_G7", - "H7": "PlateT15_H7", - "A8": "PlateT15_A8", - "B8": "PlateT15_B8", - "C8": "PlateT15_C8", - "D8": "PlateT15_D8", - "E8": "PlateT15_E8", - "F8": "PlateT15_F8", - "G8": "PlateT15_G8", - "H8": "PlateT15_H8", - "A9": "PlateT15_A9", - "B9": "PlateT15_B9", - "C9": "PlateT15_C9", - "D9": "PlateT15_D9", - "E9": "PlateT15_E9", - "F9": "PlateT15_F9", - "G9": "PlateT15_G9", - "H9": "PlateT15_H9", - "A10": "PlateT15_A10", - "B10": "PlateT15_B10", - "C10": "PlateT15_C10", - "D10": "PlateT15_D10", - "E10": "PlateT15_E10", - "F10": "PlateT15_F10", - "G10": "PlateT15_G10", - "H10": "PlateT15_H10", - "A11": "PlateT15_A11", - "B11": "PlateT15_B11", - "C11": "PlateT15_C11", - "D11": "PlateT15_D11", - "E11": "PlateT15_E11", - "F11": "PlateT15_F11", - "G11": "PlateT15_G11", - "H11": "PlateT15_H11", - "A12": "PlateT15_A12", - "B12": "PlateT15_B12", - "C12": "PlateT15_C12", - "D12": "PlateT15_D12", - "E12": "PlateT15_E12", - "F12": "PlateT15_F12", - "G12": "PlateT15_G12", - "H12": "PlateT15_H12" - } - }, - "data": { - "Material": { - "uuid": "04211a2dc93547fe9bf6121eac533650" - } - } - }, - { - "id": "PlateT15_A1", - "name": "PlateT15_A1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B1", - "name": "PlateT15_B1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C1", - "name": "PlateT15_C1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D1", - "name": "PlateT15_D1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E1", - "name": "PlateT15_E1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F1", - "name": "PlateT15_F1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G1", - "name": "PlateT15_G1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H1", - "name": "PlateT15_H1", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A2", - "name": "PlateT15_A2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B2", - "name": "PlateT15_B2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C2", - "name": "PlateT15_C2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D2", - "name": "PlateT15_D2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E2", - "name": "PlateT15_E2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F2", - "name": "PlateT15_F2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G2", - "name": "PlateT15_G2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H2", - "name": "PlateT15_H2", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A3", - "name": "PlateT15_A3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B3", - "name": "PlateT15_B3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C3", - "name": "PlateT15_C3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D3", - "name": "PlateT15_D3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E3", - "name": "PlateT15_E3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F3", - "name": "PlateT15_F3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G3", - "name": "PlateT15_G3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H3", - "name": "PlateT15_H3", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A4", - "name": "PlateT15_A4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B4", - "name": "PlateT15_B4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C4", - "name": "PlateT15_C4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D4", - "name": "PlateT15_D4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E4", - "name": "PlateT15_E4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F4", - "name": "PlateT15_F4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G4", - "name": "PlateT15_G4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H4", - "name": "PlateT15_H4", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A5", - "name": "PlateT15_A5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B5", - "name": "PlateT15_B5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C5", - "name": "PlateT15_C5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D5", - "name": "PlateT15_D5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E5", - "name": "PlateT15_E5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F5", - "name": "PlateT15_F5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G5", - "name": "PlateT15_G5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H5", - "name": "PlateT15_H5", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A6", - "name": "PlateT15_A6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B6", - "name": "PlateT15_B6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C6", - "name": "PlateT15_C6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D6", - "name": "PlateT15_D6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E6", - "name": "PlateT15_E6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F6", - "name": "PlateT15_F6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G6", - "name": "PlateT15_G6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H6", - "name": "PlateT15_H6", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A7", - "name": "PlateT15_A7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B7", - "name": "PlateT15_B7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C7", - "name": "PlateT15_C7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D7", - "name": "PlateT15_D7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E7", - "name": "PlateT15_E7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F7", - "name": "PlateT15_F7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G7", - "name": "PlateT15_G7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H7", - "name": "PlateT15_H7", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A8", - "name": "PlateT15_A8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B8", - "name": "PlateT15_B8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C8", - "name": "PlateT15_C8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D8", - "name": "PlateT15_D8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E8", - "name": "PlateT15_E8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F8", - "name": "PlateT15_F8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G8", - "name": "PlateT15_G8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H8", - "name": "PlateT15_H8", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A9", - "name": "PlateT15_A9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B9", - "name": "PlateT15_B9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C9", - "name": "PlateT15_C9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D9", - "name": "PlateT15_D9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E9", - "name": "PlateT15_E9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F9", - "name": "PlateT15_F9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G9", - "name": "PlateT15_G9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H9", - "name": "PlateT15_H9", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A10", - "name": "PlateT15_A10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B10", - "name": "PlateT15_B10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C10", - "name": "PlateT15_C10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D10", - "name": "PlateT15_D10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E10", - "name": "PlateT15_E10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F10", - "name": "PlateT15_F10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G10", - "name": "PlateT15_G10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H10", - "name": "PlateT15_H10", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A11", - "name": "PlateT15_A11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B11", - "name": "PlateT15_B11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C11", - "name": "PlateT15_C11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D11", - "name": "PlateT15_D11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E11", - "name": "PlateT15_E11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F11", - "name": "PlateT15_F11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G11", - "name": "PlateT15_G11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H11", - "name": "PlateT15_H11", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_A12", - "name": "PlateT15_A12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_B12", - "name": "PlateT15_B12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_C12", - "name": "PlateT15_C12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_D12", - "name": "PlateT15_D12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_E12", - "name": "PlateT15_E12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_F12", - "name": "PlateT15_F12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_G12", - "name": "PlateT15_G12", - - "children": [], - "parent": "PlateT15", - "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": "PlateT15_H12", - "name": "PlateT15_H12", - - "children": [], - "parent": "PlateT15", - "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": "trash", - "name": "trash", - - "children": [], - "parent": "T16", - "type": "plate", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "PRCXI9300Trash", - "size_x": 127, - "size_y": 85.5, - "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" - } - } + "children": [ + "RackT1_A1", + "RackT1_B1", + "RackT1_C1", + "RackT1_D1", + "RackT1_E1", + "RackT1_F1", + "RackT1_G1", + "RackT1_H1", + "RackT1_A2", + "RackT1_B2", + "RackT1_C2", + "RackT1_D2", + "RackT1_E2", + "RackT1_F2", + "RackT1_G2", + "RackT1_H2", + "RackT1_A3", + "RackT1_B3", + "RackT1_C3", + "RackT1_D3", + "RackT1_E3", + "RackT1_F3", + "RackT1_G3", + "RackT1_H3", + "RackT1_A4", + "RackT1_B4", + "RackT1_C4", + "RackT1_D4", + "RackT1_E4", + "RackT1_F4", + "RackT1_G4", + "RackT1_H4", + "RackT1_A5", + "RackT1_B5", + "RackT1_C5", + "RackT1_D5", + "RackT1_E5", + "RackT1_F5", + "RackT1_G5", + "RackT1_H5", + "RackT1_A6", + "RackT1_B6", + "RackT1_C6", + "RackT1_D6", + "RackT1_E6", + "RackT1_F6", + "RackT1_G6", + "RackT1_H6", + "RackT1_A7", + "RackT1_B7", + "RackT1_C7", + "RackT1_D7", + "RackT1_E7", + "RackT1_F7", + "RackT1_G7", + "RackT1_H7", + "RackT1_A8", + "RackT1_B8", + "RackT1_C8", + "RackT1_D8", + "RackT1_E8", + "RackT1_F8", + "RackT1_G8", + "RackT1_H8", + "RackT1_A9", + "RackT1_B9", + "RackT1_C9", + "RackT1_D9", + "RackT1_E9", + "RackT1_F9", + "RackT1_G9", + "RackT1_H9", + "RackT1_A10", + "RackT1_B10", + "RackT1_C10", + "RackT1_D10", + "RackT1_E10", + "RackT1_F10", + "RackT1_G10", + "RackT1_H10", + "RackT1_A11", + "RackT1_B11", + "RackT1_C11", + "RackT1_D11", + "RackT1_E11", + "RackT1_F11", + "RackT1_G11", + "RackT1_H11", + "RackT1_A12", + "RackT1_B12", + "RackT1_C12", + "RackT1_D12", + "RackT1_E12", + "RackT1_F12", + "RackT1_G12", + "RackT1_H12" + ], + "parent": "T1", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300TipRack", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" } - ], - "edges": [] -} \ No newline at end of file + }, + "data": { + "Material": { + "uuid": "068b3815e36b4a72a59bae017011b29f", + "Code": "ZX-001-10+", + "Name": "10μL加长 Tip头" + } + } + }, + { + "id": "RackT1_A1", + "name": "RackT1_A1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B1", + "name": "RackT1_B1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C1", + "name": "RackT1_C1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D1", + "name": "RackT1_D1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E1", + "name": "RackT1_E1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F1", + "name": "RackT1_F1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G1", + "name": "RackT1_G1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H1", + "name": "RackT1_H1", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A2", + "name": "RackT1_A2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B2", + "name": "RackT1_B2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C2", + "name": "RackT1_C2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D2", + "name": "RackT1_D2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E2", + "name": "RackT1_E2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F2", + "name": "RackT1_F2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G2", + "name": "RackT1_G2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H2", + "name": "RackT1_H2", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A3", + "name": "RackT1_A3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B3", + "name": "RackT1_B3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C3", + "name": "RackT1_C3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D3", + "name": "RackT1_D3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E3", + "name": "RackT1_E3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F3", + "name": "RackT1_F3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G3", + "name": "RackT1_G3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H3", + "name": "RackT1_H3", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A4", + "name": "RackT1_A4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B4", + "name": "RackT1_B4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C4", + "name": "RackT1_C4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D4", + "name": "RackT1_D4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E4", + "name": "RackT1_E4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F4", + "name": "RackT1_F4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G4", + "name": "RackT1_G4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H4", + "name": "RackT1_H4", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A5", + "name": "RackT1_A5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B5", + "name": "RackT1_B5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C5", + "name": "RackT1_C5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D5", + "name": "RackT1_D5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E5", + "name": "RackT1_E5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F5", + "name": "RackT1_F5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G5", + "name": "RackT1_G5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H5", + "name": "RackT1_H5", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A6", + "name": "RackT1_A6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B6", + "name": "RackT1_B6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C6", + "name": "RackT1_C6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D6", + "name": "RackT1_D6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E6", + "name": "RackT1_E6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F6", + "name": "RackT1_F6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G6", + "name": "RackT1_G6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H6", + "name": "RackT1_H6", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A7", + "name": "RackT1_A7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B7", + "name": "RackT1_B7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C7", + "name": "RackT1_C7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D7", + "name": "RackT1_D7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E7", + "name": "RackT1_E7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F7", + "name": "RackT1_F7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G7", + "name": "RackT1_G7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H7", + "name": "RackT1_H7", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A8", + "name": "RackT1_A8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B8", + "name": "RackT1_B8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C8", + "name": "RackT1_C8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D8", + "name": "RackT1_D8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E8", + "name": "RackT1_E8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F8", + "name": "RackT1_F8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G8", + "name": "RackT1_G8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H8", + "name": "RackT1_H8", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A9", + "name": "RackT1_A9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B9", + "name": "RackT1_B9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C9", + "name": "RackT1_C9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D9", + "name": "RackT1_D9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E9", + "name": "RackT1_E9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F9", + "name": "RackT1_F9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G9", + "name": "RackT1_G9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H9", + "name": "RackT1_H9", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A10", + "name": "RackT1_A10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B10", + "name": "RackT1_B10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C10", + "name": "RackT1_C10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D10", + "name": "RackT1_D10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E10", + "name": "RackT1_E10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F10", + "name": "RackT1_F10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G10", + "name": "RackT1_G10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H10", + "name": "RackT1_H10", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A11", + "name": "RackT1_A11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B11", + "name": "RackT1_B11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C11", + "name": "RackT1_C11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D11", + "name": "RackT1_D11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E11", + "name": "RackT1_E11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F11", + "name": "RackT1_F11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G11", + "name": "RackT1_G11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H11", + "name": "RackT1_H11", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_A12", + "name": "RackT1_A12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_B12", + "name": "RackT1_B12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_C12", + "name": "RackT1_C12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_D12", + "name": "RackT1_D12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_E12", + "name": "RackT1_E12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_F12", + "name": "RackT1_F12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_G12", + "name": "RackT1_G12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT1_H12", + "name": "RackT1_H12", + + "children": [], + "parent": "RackT1", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT2", + "name": "PlateT2", + + "children": [ + "PlateT2_A1", + "PlateT2_B1", + "PlateT2_C1", + "PlateT2_D1", + "PlateT2_E1", + "PlateT2_F1", + "PlateT2_G1", + "PlateT2_H1", + "PlateT2_A2", + "PlateT2_B2", + "PlateT2_C2", + "PlateT2_D2", + "PlateT2_E2", + "PlateT2_F2", + "PlateT2_G2", + "PlateT2_H2", + "PlateT2_A3", + "PlateT2_B3", + "PlateT2_C3", + "PlateT2_D3", + "PlateT2_E3", + "PlateT2_F3", + "PlateT2_G3", + "PlateT2_H3", + "PlateT2_A4", + "PlateT2_B4", + "PlateT2_C4", + "PlateT2_D4", + "PlateT2_E4", + "PlateT2_F4", + "PlateT2_G4", + "PlateT2_H4", + "PlateT2_A5", + "PlateT2_B5", + "PlateT2_C5", + "PlateT2_D5", + "PlateT2_E5", + "PlateT2_F5", + "PlateT2_G5", + "PlateT2_H5", + "PlateT2_A6", + "PlateT2_B6", + "PlateT2_C6", + "PlateT2_D6", + "PlateT2_E6", + "PlateT2_F6", + "PlateT2_G6", + "PlateT2_H6", + "PlateT2_A7", + "PlateT2_B7", + "PlateT2_C7", + "PlateT2_D7", + "PlateT2_E7", + "PlateT2_F7", + "PlateT2_G7", + "PlateT2_H7", + "PlateT2_A8", + "PlateT2_B8", + "PlateT2_C8", + "PlateT2_D8", + "PlateT2_E8", + "PlateT2_F8", + "PlateT2_G8", + "PlateT2_H8", + "PlateT2_A9", + "PlateT2_B9", + "PlateT2_C9", + "PlateT2_D9", + "PlateT2_E9", + "PlateT2_F9", + "PlateT2_G9", + "PlateT2_H9", + "PlateT2_A10", + "PlateT2_B10", + "PlateT2_C10", + "PlateT2_D10", + "PlateT2_E10", + "PlateT2_F10", + "PlateT2_G10", + "PlateT2_H10", + "PlateT2_A11", + "PlateT2_B11", + "PlateT2_C11", + "PlateT2_D11", + "PlateT2_E11", + "PlateT2_F11", + "PlateT2_G11", + "PlateT2_H11", + "PlateT2_A12", + "PlateT2_B12", + "PlateT2_C12", + "PlateT2_D12", + "PlateT2_E12", + "PlateT2_F12", + "PlateT2_G12", + "PlateT2_H12" + ], + "parent": "T2", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT2_A1", + "B1": "PlateT2_B1", + "C1": "PlateT2_C1", + "D1": "PlateT2_D1", + "E1": "PlateT2_E1", + "F1": "PlateT2_F1", + "G1": "PlateT2_G1", + "H1": "PlateT2_H1", + "A2": "PlateT2_A2", + "B2": "PlateT2_B2", + "C2": "PlateT2_C2", + "D2": "PlateT2_D2", + "E2": "PlateT2_E2", + "F2": "PlateT2_F2", + "G2": "PlateT2_G2", + "H2": "PlateT2_H2", + "A3": "PlateT2_A3", + "B3": "PlateT2_B3", + "C3": "PlateT2_C3", + "D3": "PlateT2_D3", + "E3": "PlateT2_E3", + "F3": "PlateT2_F3", + "G3": "PlateT2_G3", + "H3": "PlateT2_H3", + "A4": "PlateT2_A4", + "B4": "PlateT2_B4", + "C4": "PlateT2_C4", + "D4": "PlateT2_D4", + "E4": "PlateT2_E4", + "F4": "PlateT2_F4", + "G4": "PlateT2_G4", + "H4": "PlateT2_H4", + "A5": "PlateT2_A5", + "B5": "PlateT2_B5", + "C5": "PlateT2_C5", + "D5": "PlateT2_D5", + "E5": "PlateT2_E5", + "F5": "PlateT2_F5", + "G5": "PlateT2_G5", + "H5": "PlateT2_H5", + "A6": "PlateT2_A6", + "B6": "PlateT2_B6", + "C6": "PlateT2_C6", + "D6": "PlateT2_D6", + "E6": "PlateT2_E6", + "F6": "PlateT2_F6", + "G6": "PlateT2_G6", + "H6": "PlateT2_H6", + "A7": "PlateT2_A7", + "B7": "PlateT2_B7", + "C7": "PlateT2_C7", + "D7": "PlateT2_D7", + "E7": "PlateT2_E7", + "F7": "PlateT2_F7", + "G7": "PlateT2_G7", + "H7": "PlateT2_H7", + "A8": "PlateT2_A8", + "B8": "PlateT2_B8", + "C8": "PlateT2_C8", + "D8": "PlateT2_D8", + "E8": "PlateT2_E8", + "F8": "PlateT2_F8", + "G8": "PlateT2_G8", + "H8": "PlateT2_H8", + "A9": "PlateT2_A9", + "B9": "PlateT2_B9", + "C9": "PlateT2_C9", + "D9": "PlateT2_D9", + "E9": "PlateT2_E9", + "F9": "PlateT2_F9", + "G9": "PlateT2_G9", + "H9": "PlateT2_H9", + "A10": "PlateT2_A10", + "B10": "PlateT2_B10", + "C10": "PlateT2_C10", + "D10": "PlateT2_D10", + "E10": "PlateT2_E10", + "F10": "PlateT2_F10", + "G10": "PlateT2_G10", + "H10": "PlateT2_H10", + "A11": "PlateT2_A11", + "B11": "PlateT2_B11", + "C11": "PlateT2_C11", + "D11": "PlateT2_D11", + "E11": "PlateT2_E11", + "F11": "PlateT2_F11", + "G11": "PlateT2_G11", + "H11": "PlateT2_H11", + "A12": "PlateT2_A12", + "B12": "PlateT2_B12", + "C12": "PlateT2_C12", + "D12": "PlateT2_D12", + "E12": "PlateT2_E12", + "F12": "PlateT2_F12", + "G12": "PlateT2_G12", + "H12": "PlateT2_H12" + } + }, + "data": { + "Material": { + "uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", + "Code": "ZX-78-096", + "Name": "细菌培养皿" + } + } + }, + { + "id": "PlateT2_A1", + "name": "PlateT2_A1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B1", + "name": "PlateT2_B1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C1", + "name": "PlateT2_C1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D1", + "name": "PlateT2_D1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E1", + "name": "PlateT2_E1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F1", + "name": "PlateT2_F1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G1", + "name": "PlateT2_G1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H1", + "name": "PlateT2_H1", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A2", + "name": "PlateT2_A2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B2", + "name": "PlateT2_B2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C2", + "name": "PlateT2_C2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D2", + "name": "PlateT2_D2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E2", + "name": "PlateT2_E2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F2", + "name": "PlateT2_F2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G2", + "name": "PlateT2_G2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H2", + "name": "PlateT2_H2", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A3", + "name": "PlateT2_A3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B3", + "name": "PlateT2_B3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C3", + "name": "PlateT2_C3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D3", + "name": "PlateT2_D3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E3", + "name": "PlateT2_E3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F3", + "name": "PlateT2_F3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G3", + "name": "PlateT2_G3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H3", + "name": "PlateT2_H3", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A4", + "name": "PlateT2_A4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B4", + "name": "PlateT2_B4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C4", + "name": "PlateT2_C4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D4", + "name": "PlateT2_D4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E4", + "name": "PlateT2_E4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F4", + "name": "PlateT2_F4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G4", + "name": "PlateT2_G4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H4", + "name": "PlateT2_H4", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A5", + "name": "PlateT2_A5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B5", + "name": "PlateT2_B5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C5", + "name": "PlateT2_C5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D5", + "name": "PlateT2_D5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E5", + "name": "PlateT2_E5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F5", + "name": "PlateT2_F5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G5", + "name": "PlateT2_G5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H5", + "name": "PlateT2_H5", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A6", + "name": "PlateT2_A6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B6", + "name": "PlateT2_B6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C6", + "name": "PlateT2_C6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D6", + "name": "PlateT2_D6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E6", + "name": "PlateT2_E6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F6", + "name": "PlateT2_F6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G6", + "name": "PlateT2_G6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H6", + "name": "PlateT2_H6", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A7", + "name": "PlateT2_A7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B7", + "name": "PlateT2_B7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C7", + "name": "PlateT2_C7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D7", + "name": "PlateT2_D7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E7", + "name": "PlateT2_E7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F7", + "name": "PlateT2_F7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G7", + "name": "PlateT2_G7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H7", + "name": "PlateT2_H7", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A8", + "name": "PlateT2_A8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B8", + "name": "PlateT2_B8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C8", + "name": "PlateT2_C8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D8", + "name": "PlateT2_D8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E8", + "name": "PlateT2_E8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F8", + "name": "PlateT2_F8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G8", + "name": "PlateT2_G8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H8", + "name": "PlateT2_H8", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A9", + "name": "PlateT2_A9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B9", + "name": "PlateT2_B9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C9", + "name": "PlateT2_C9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D9", + "name": "PlateT2_D9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E9", + "name": "PlateT2_E9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F9", + "name": "PlateT2_F9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G9", + "name": "PlateT2_G9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H9", + "name": "PlateT2_H9", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A10", + "name": "PlateT2_A10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B10", + "name": "PlateT2_B10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C10", + "name": "PlateT2_C10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D10", + "name": "PlateT2_D10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E10", + "name": "PlateT2_E10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F10", + "name": "PlateT2_F10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G10", + "name": "PlateT2_G10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H10", + "name": "PlateT2_H10", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A11", + "name": "PlateT2_A11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B11", + "name": "PlateT2_B11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C11", + "name": "PlateT2_C11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D11", + "name": "PlateT2_D11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E11", + "name": "PlateT2_E11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F11", + "name": "PlateT2_F11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G11", + "name": "PlateT2_G11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H11", + "name": "PlateT2_H11", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_A12", + "name": "PlateT2_A12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_B12", + "name": "PlateT2_B12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_C12", + "name": "PlateT2_C12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_D12", + "name": "PlateT2_D12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_E12", + "name": "PlateT2_E12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_F12", + "name": "PlateT2_F12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_G12", + "name": "PlateT2_G12", + + "children": [], + "parent": "PlateT2", + "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": "PlateT2_H12", + "name": "PlateT2_H12", + + "children": [], + "parent": "PlateT2", + "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": "RackT5", + "name": "RackT5", + + "children": [ + "RackT5_A1", + "RackT5_B1", + "RackT5_C1", + "RackT5_D1", + "RackT5_E1", + "RackT5_F1", + "RackT5_G1", + "RackT5_H1", + "RackT5_A2", + "RackT5_B2", + "RackT5_C2", + "RackT5_D2", + "RackT5_E2", + "RackT5_F2", + "RackT5_G2", + "RackT5_H2", + "RackT5_A3", + "RackT5_B3", + "RackT5_C3", + "RackT5_D3", + "RackT5_E3", + "RackT5_F3", + "RackT5_G3", + "RackT5_H3", + "RackT5_A4", + "RackT5_B4", + "RackT5_C4", + "RackT5_D4", + "RackT5_E4", + "RackT5_F4", + "RackT5_G4", + "RackT5_H4", + "RackT5_A5", + "RackT5_B5", + "RackT5_C5", + "RackT5_D5", + "RackT5_E5", + "RackT5_F5", + "RackT5_G5", + "RackT5_H5", + "RackT5_A6", + "RackT5_B6", + "RackT5_C6", + "RackT5_D6", + "RackT5_E6", + "RackT5_F6", + "RackT5_G6", + "RackT5_H6", + "RackT5_A7", + "RackT5_B7", + "RackT5_C7", + "RackT5_D7", + "RackT5_E7", + "RackT5_F7", + "RackT5_G7", + "RackT5_H7", + "RackT5_A8", + "RackT5_B8", + "RackT5_C8", + "RackT5_D8", + "RackT5_E8", + "RackT5_F8", + "RackT5_G8", + "RackT5_H8", + "RackT5_A9", + "RackT5_B9", + "RackT5_C9", + "RackT5_D9", + "RackT5_E9", + "RackT5_F9", + "RackT5_G9", + "RackT5_H9", + "RackT5_A10", + "RackT5_B10", + "RackT5_C10", + "RackT5_D10", + "RackT5_E10", + "RackT5_F10", + "RackT5_G10", + "RackT5_H10", + "RackT5_A11", + "RackT5_B11", + "RackT5_C11", + "RackT5_D11", + "RackT5_E11", + "RackT5_F11", + "RackT5_G11", + "RackT5_H11", + "RackT5_A12", + "RackT5_B12", + "RackT5_C12", + "RackT5_D12", + "RackT5_E12", + "RackT5_F12", + "RackT5_G12", + "RackT5_H12" + ], + "parent": "T5", + "type": "tip_rack", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300TipRack", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_rack", + "model": null, + "barcode": null, + "ordering": { + "A1": "tip_A1", + "B1": "tip_B1", + "C1": "tip_C1", + "D1": "tip_D1", + "E1": "tip_E1", + "F1": "tip_F1", + "G1": "tip_G1", + "H1": "tip_H1", + "A2": "tip_A2", + "B2": "tip_B2", + "C2": "tip_C2", + "D2": "tip_D2", + "E2": "tip_E2", + "F2": "tip_F2", + "G2": "tip_G2", + "H2": "tip_H2", + "A3": "tip_A3", + "B3": "tip_B3", + "C3": "tip_C3", + "D3": "tip_D3", + "E3": "tip_E3", + "F3": "tip_F3", + "G3": "tip_G3", + "H3": "tip_H3", + "A4": "tip_A4", + "B4": "tip_B4", + "C4": "tip_C4", + "D4": "tip_D4", + "E4": "tip_E4", + "F4": "tip_F4", + "G4": "tip_G4", + "H4": "tip_H4", + "A5": "tip_A5", + "B5": "tip_B5", + "C5": "tip_C5", + "D5": "tip_D5", + "E5": "tip_E5", + "F5": "tip_F5", + "G5": "tip_G5", + "H5": "tip_H5", + "A6": "tip_A6", + "B6": "tip_B6", + "C6": "tip_C6", + "D6": "tip_D6", + "E6": "tip_E6", + "F6": "tip_F6", + "G6": "tip_G6", + "H6": "tip_H6", + "A7": "tip_A7", + "B7": "tip_B7", + "C7": "tip_C7", + "D7": "tip_D7", + "E7": "tip_E7", + "F7": "tip_F7", + "G7": "tip_G7", + "H7": "tip_H7", + "A8": "tip_A8", + "B8": "tip_B8", + "C8": "tip_C8", + "D8": "tip_D8", + "E8": "tip_E8", + "F8": "tip_F8", + "G8": "tip_G8", + "H8": "tip_H8", + "A9": "tip_A9", + "B9": "tip_B9", + "C9": "tip_C9", + "D9": "tip_D9", + "E9": "tip_E9", + "F9": "tip_F9", + "G9": "tip_G9", + "H9": "tip_H9", + "A10": "tip_A10", + "B10": "tip_B10", + "C10": "tip_C10", + "D10": "tip_D10", + "E10": "tip_E10", + "F10": "tip_F10", + "G10": "tip_G10", + "H10": "tip_H10", + "A11": "tip_A11", + "B11": "tip_B11", + "C11": "tip_C11", + "D11": "tip_D11", + "E11": "tip_E11", + "F11": "tip_F11", + "G11": "tip_G11", + "H11": "tip_H11", + "A12": "tip_A12", + "B12": "tip_B12", + "C12": "tip_C12", + "D12": "tip_D12", + "E12": "tip_E12", + "F12": "tip_F12", + "G12": "tip_G12", + "H12": "tip_H12" + } + }, + "data": { + "Material": { + "uuid": "076250742950465b9d6ea29a225dfb00", + "Code": "ZX-001-300", + "SupplyType": 1, + "Name": "300μL Tip头" + } + } + }, + { + "id": "RackT5_A1", + "name": "RackT5_A1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B1", + "name": "RackT5_B1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C1", + "name": "RackT5_C1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D1", + "name": "RackT5_D1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E1", + "name": "RackT5_E1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F1", + "name": "RackT5_F1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G1", + "name": "RackT5_G1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H1", + "name": "RackT5_H1", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 13.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A2", + "name": "RackT5_A2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B2", + "name": "RackT5_B2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C2", + "name": "RackT5_C2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D2", + "name": "RackT5_D2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E2", + "name": "RackT5_E2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F2", + "name": "RackT5_F2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G2", + "name": "RackT5_G2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H2", + "name": "RackT5_H2", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 22.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A3", + "name": "RackT5_A3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B3", + "name": "RackT5_B3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C3", + "name": "RackT5_C3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D3", + "name": "RackT5_D3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E3", + "name": "RackT5_E3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F3", + "name": "RackT5_F3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G3", + "name": "RackT5_G3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H3", + "name": "RackT5_H3", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 31.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A4", + "name": "RackT5_A4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B4", + "name": "RackT5_B4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C4", + "name": "RackT5_C4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D4", + "name": "RackT5_D4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E4", + "name": "RackT5_E4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F4", + "name": "RackT5_F4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G4", + "name": "RackT5_G4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H4", + "name": "RackT5_H4", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 40.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A5", + "name": "RackT5_A5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B5", + "name": "RackT5_B5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C5", + "name": "RackT5_C5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D5", + "name": "RackT5_D5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E5", + "name": "RackT5_E5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F5", + "name": "RackT5_F5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G5", + "name": "RackT5_G5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H5", + "name": "RackT5_H5", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 49.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A6", + "name": "RackT5_A6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B6", + "name": "RackT5_B6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C6", + "name": "RackT5_C6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D6", + "name": "RackT5_D6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E6", + "name": "RackT5_E6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F6", + "name": "RackT5_F6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G6", + "name": "RackT5_G6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H6", + "name": "RackT5_H6", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 58.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A7", + "name": "RackT5_A7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B7", + "name": "RackT5_B7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C7", + "name": "RackT5_C7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D7", + "name": "RackT5_D7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E7", + "name": "RackT5_E7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F7", + "name": "RackT5_F7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G7", + "name": "RackT5_G7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H7", + "name": "RackT5_H7", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 67.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A8", + "name": "RackT5_A8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B8", + "name": "RackT5_B8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C8", + "name": "RackT5_C8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D8", + "name": "RackT5_D8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E8", + "name": "RackT5_E8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F8", + "name": "RackT5_F8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G8", + "name": "RackT5_G8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H8", + "name": "RackT5_H8", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 76.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A9", + "name": "RackT5_A9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B9", + "name": "RackT5_B9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C9", + "name": "RackT5_C9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D9", + "name": "RackT5_D9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E9", + "name": "RackT5_E9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F9", + "name": "RackT5_F9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G9", + "name": "RackT5_G9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H9", + "name": "RackT5_H9", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 85.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A10", + "name": "RackT5_A10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B10", + "name": "RackT5_B10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C10", + "name": "RackT5_C10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D10", + "name": "RackT5_D10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E10", + "name": "RackT5_E10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F10", + "name": "RackT5_F10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G10", + "name": "RackT5_G10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H10", + "name": "RackT5_H10", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 94.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A11", + "name": "RackT5_A11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B11", + "name": "RackT5_B11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C11", + "name": "RackT5_C11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D11", + "name": "RackT5_D11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E11", + "name": "RackT5_E11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F11", + "name": "RackT5_F11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G11", + "name": "RackT5_G11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H11", + "name": "RackT5_H11", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 103.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_A12", + "name": "RackT5_A12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 73.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_B12", + "name": "RackT5_B12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 64.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_C12", + "name": "RackT5_C12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 55.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_D12", + "name": "RackT5_D12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 46.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_E12", + "name": "RackT5_E12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 37.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_F12", + "name": "RackT5_F12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 28.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_G12", + "name": "RackT5_G12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 19.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "RackT5_H12", + "name": "RackT5_H12", + + "children": [], + "parent": "RackT5", + "type": "tip_spot", + "class": "", + "position": { + "x": 112.224, + "y": 10.084, + "z": 25.49 + }, + "config": { + "type": "TipSpot", + "size_x": 4.312, + "size_y": 4.312, + "size_z": 0, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "tip_spot", + "model": null, + "barcode": null, + "prototype_tip": { + "type": "Tip", + "total_tip_length": 39.2, + "has_filter": false, + "maximal_volume": 10.0, + "fitting_depth": 3.29 + } + }, + "data": { + "tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + }, + "tip_state": { + "liquids": [], + "pending_liquids": [], + "liquid_history": [] + }, + "pending_tip": { + "type": "Tip", + "total_tip_length": 88, + "has_filter": true, + "maximal_volume": 1000.0, + "fitting_depth": 3.95 + } + } + }, + { + "id": "PlateT6", + "name": "PlateT6", + + "children": [ + "PlateT6_A1", + "PlateT6_B1", + "PlateT6_C1", + "PlateT6_D1", + "PlateT6_E1", + "PlateT6_F1", + "PlateT6_G1", + "PlateT6_H1", + "PlateT6_A2", + "PlateT6_B2", + "PlateT6_C2", + "PlateT6_D2", + "PlateT6_E2", + "PlateT6_F2", + "PlateT6_G2", + "PlateT6_H2", + "PlateT6_A3", + "PlateT6_B3", + "PlateT6_C3", + "PlateT6_D3", + "PlateT6_E3", + "PlateT6_F3", + "PlateT6_G3", + "PlateT6_H3", + "PlateT6_A4", + "PlateT6_B4", + "PlateT6_C4", + "PlateT6_D4", + "PlateT6_E4", + "PlateT6_F4", + "PlateT6_G4", + "PlateT6_H4", + "PlateT6_A5", + "PlateT6_B5", + "PlateT6_C5", + "PlateT6_D5", + "PlateT6_E5", + "PlateT6_F5", + "PlateT6_G5", + "PlateT6_H5", + "PlateT6_A6", + "PlateT6_B6", + "PlateT6_C6", + "PlateT6_D6", + "PlateT6_E6", + "PlateT6_F6", + "PlateT6_G6", + "PlateT6_H6", + "PlateT6_A7", + "PlateT6_B7", + "PlateT6_C7", + "PlateT6_D7", + "PlateT6_E7", + "PlateT6_F7", + "PlateT6_G7", + "PlateT6_H7", + "PlateT6_A8", + "PlateT6_B8", + "PlateT6_C8", + "PlateT6_D8", + "PlateT6_E8", + "PlateT6_F8", + "PlateT6_G8", + "PlateT6_H8", + "PlateT6_A9", + "PlateT6_B9", + "PlateT6_C9", + "PlateT6_D9", + "PlateT6_E9", + "PlateT6_F9", + "PlateT6_G9", + "PlateT6_H9", + "PlateT6_A10", + "PlateT6_B10", + "PlateT6_C10", + "PlateT6_D10", + "PlateT6_E10", + "PlateT6_F10", + "PlateT6_G10", + "PlateT6_H10", + "PlateT6_A11", + "PlateT6_B11", + "PlateT6_C11", + "PlateT6_D11", + "PlateT6_E11", + "PlateT6_F11", + "PlateT6_G11", + "PlateT6_H11", + "PlateT6_A12", + "PlateT6_B12", + "PlateT6_C12", + "PlateT6_D12", + "PlateT6_E12", + "PlateT6_F12", + "PlateT6_G12", + "PlateT6_H12" + ], + "parent": "T6", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT6_A1", + "B1": "PlateT6_B1", + "C1": "PlateT6_C1", + "D1": "PlateT6_D1", + "E1": "PlateT6_E1", + "F1": "PlateT6_F1", + "G1": "PlateT6_G1", + "H1": "PlateT6_H1", + "A2": "PlateT6_A2", + "B2": "PlateT6_B2", + "C2": "PlateT6_C2", + "D2": "PlateT6_D2", + "E2": "PlateT6_E2", + "F2": "PlateT6_F2", + "G2": "PlateT6_G2", + "H2": "PlateT6_H2", + "A3": "PlateT6_A3", + "B3": "PlateT6_B3", + "C3": "PlateT6_C3", + "D3": "PlateT6_D3", + "E3": "PlateT6_E3", + "F3": "PlateT6_F3", + "G3": "PlateT6_G3", + "H3": "PlateT6_H3", + "A4": "PlateT6_A4", + "B4": "PlateT6_B4", + "C4": "PlateT6_C4", + "D4": "PlateT6_D4", + "E4": "PlateT6_E4", + "F4": "PlateT6_F4", + "G4": "PlateT6_G4", + "H4": "PlateT6_H4", + "A5": "PlateT6_A5", + "B5": "PlateT6_B5", + "C5": "PlateT6_C5", + "D5": "PlateT6_D5", + "E5": "PlateT6_E5", + "F5": "PlateT6_F5", + "G5": "PlateT6_G5", + "H5": "PlateT6_H5", + "A6": "PlateT6_A6", + "B6": "PlateT6_B6", + "C6": "PlateT6_C6", + "D6": "PlateT6_D6", + "E6": "PlateT6_E6", + "F6": "PlateT6_F6", + "G6": "PlateT6_G6", + "H6": "PlateT6_H6", + "A7": "PlateT6_A7", + "B7": "PlateT6_B7", + "C7": "PlateT6_C7", + "D7": "PlateT6_D7", + "E7": "PlateT6_E7", + "F7": "PlateT6_F7", + "G7": "PlateT6_G7", + "H7": "PlateT6_H7", + "A8": "PlateT6_A8", + "B8": "PlateT6_B8", + "C8": "PlateT6_C8", + "D8": "PlateT6_D8", + "E8": "PlateT6_E8", + "F8": "PlateT6_F8", + "G8": "PlateT6_G8", + "H8": "PlateT6_H8", + "A9": "PlateT6_A9", + "B9": "PlateT6_B9", + "C9": "PlateT6_C9", + "D9": "PlateT6_D9", + "E9": "PlateT6_E9", + "F9": "PlateT6_F9", + "G9": "PlateT6_G9", + "H9": "PlateT6_H9", + "A10": "PlateT6_A10", + "B10": "PlateT6_B10", + "C10": "PlateT6_C10", + "D10": "PlateT6_D10", + "E10": "PlateT6_E10", + "F10": "PlateT6_F10", + "G10": "PlateT6_G10", + "H10": "PlateT6_H10", + "A11": "PlateT6_A11", + "B11": "PlateT6_B11", + "C11": "PlateT6_C11", + "D11": "PlateT6_D11", + "E11": "PlateT6_E11", + "F11": "PlateT6_F11", + "G11": "PlateT6_G11", + "H11": "PlateT6_H11", + "A12": "PlateT6_A12", + "B12": "PlateT6_B12", + "C12": "PlateT6_C12", + "D12": "PlateT6_D12", + "E12": "PlateT6_E12", + "F12": "PlateT6_F12", + "G12": "PlateT6_G12", + "H12": "PlateT6_H12" + } + }, + "data": { + "Material": { + "uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", + "Code": "1", + "SupplyType": 1, + "Name": "ep适配器", + "SummaryName": "ep适配器" + } + } + }, + { + "id": "PlateT6_A1", + "name": "PlateT6_A1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B1", + "name": "PlateT6_B1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C1", + "name": "PlateT6_C1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D1", + "name": "PlateT6_D1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E1", + "name": "PlateT6_E1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F1", + "name": "PlateT6_F1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G1", + "name": "PlateT6_G1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H1", + "name": "PlateT6_H1", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A2", + "name": "PlateT6_A2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B2", + "name": "PlateT6_B2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C2", + "name": "PlateT6_C2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D2", + "name": "PlateT6_D2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E2", + "name": "PlateT6_E2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F2", + "name": "PlateT6_F2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G2", + "name": "PlateT6_G2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H2", + "name": "PlateT6_H2", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A3", + "name": "PlateT6_A3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B3", + "name": "PlateT6_B3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C3", + "name": "PlateT6_C3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D3", + "name": "PlateT6_D3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E3", + "name": "PlateT6_E3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F3", + "name": "PlateT6_F3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G3", + "name": "PlateT6_G3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H3", + "name": "PlateT6_H3", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A4", + "name": "PlateT6_A4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B4", + "name": "PlateT6_B4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C4", + "name": "PlateT6_C4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D4", + "name": "PlateT6_D4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E4", + "name": "PlateT6_E4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F4", + "name": "PlateT6_F4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G4", + "name": "PlateT6_G4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H4", + "name": "PlateT6_H4", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A5", + "name": "PlateT6_A5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B5", + "name": "PlateT6_B5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C5", + "name": "PlateT6_C5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D5", + "name": "PlateT6_D5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E5", + "name": "PlateT6_E5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F5", + "name": "PlateT6_F5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G5", + "name": "PlateT6_G5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H5", + "name": "PlateT6_H5", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A6", + "name": "PlateT6_A6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B6", + "name": "PlateT6_B6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C6", + "name": "PlateT6_C6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D6", + "name": "PlateT6_D6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E6", + "name": "PlateT6_E6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F6", + "name": "PlateT6_F6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G6", + "name": "PlateT6_G6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H6", + "name": "PlateT6_H6", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A7", + "name": "PlateT6_A7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B7", + "name": "PlateT6_B7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C7", + "name": "PlateT6_C7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D7", + "name": "PlateT6_D7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E7", + "name": "PlateT6_E7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F7", + "name": "PlateT6_F7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G7", + "name": "PlateT6_G7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H7", + "name": "PlateT6_H7", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A8", + "name": "PlateT6_A8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B8", + "name": "PlateT6_B8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C8", + "name": "PlateT6_C8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D8", + "name": "PlateT6_D8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E8", + "name": "PlateT6_E8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F8", + "name": "PlateT6_F8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G8", + "name": "PlateT6_G8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H8", + "name": "PlateT6_H8", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A9", + "name": "PlateT6_A9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B9", + "name": "PlateT6_B9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C9", + "name": "PlateT6_C9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D9", + "name": "PlateT6_D9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E9", + "name": "PlateT6_E9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F9", + "name": "PlateT6_F9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G9", + "name": "PlateT6_G9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H9", + "name": "PlateT6_H9", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A10", + "name": "PlateT6_A10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B10", + "name": "PlateT6_B10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C10", + "name": "PlateT6_C10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D10", + "name": "PlateT6_D10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E10", + "name": "PlateT6_E10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F10", + "name": "PlateT6_F10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G10", + "name": "PlateT6_G10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H10", + "name": "PlateT6_H10", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A11", + "name": "PlateT6_A11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B11", + "name": "PlateT6_B11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C11", + "name": "PlateT6_C11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D11", + "name": "PlateT6_D11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E11", + "name": "PlateT6_E11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F11", + "name": "PlateT6_F11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G11", + "name": "PlateT6_G11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H11", + "name": "PlateT6_H11", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_A12", + "name": "PlateT6_A12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_B12", + "name": "PlateT6_B12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_C12", + "name": "PlateT6_C12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_D12", + "name": "PlateT6_D12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_E12", + "name": "PlateT6_E12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_F12", + "name": "PlateT6_F12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_G12", + "name": "PlateT6_G12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT6_H12", + "name": "PlateT6_H12", + + "children": [], + "parent": "PlateT6", + "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": "PlateT9", + "name": "PlateT9", + + "children": [ + "PlateT9_A1", + "PlateT9_B1", + "PlateT9_C1", + "PlateT9_D1", + "PlateT9_E1", + "PlateT9_F1", + "PlateT9_G1", + "PlateT9_H1", + "PlateT9_A2", + "PlateT9_B2", + "PlateT9_C2", + "PlateT9_D2", + "PlateT9_E2", + "PlateT9_F2", + "PlateT9_G2", + "PlateT9_H2", + "PlateT9_A3", + "PlateT9_B3", + "PlateT9_C3", + "PlateT9_D3", + "PlateT9_E3", + "PlateT9_F3", + "PlateT9_G3", + "PlateT9_H3", + "PlateT9_A4", + "PlateT9_B4", + "PlateT9_C4", + "PlateT9_D4", + "PlateT9_E4", + "PlateT9_F4", + "PlateT9_G4", + "PlateT9_H4", + "PlateT9_A5", + "PlateT9_B5", + "PlateT9_C5", + "PlateT9_D5", + "PlateT9_E5", + "PlateT9_F5", + "PlateT9_G5", + "PlateT9_H5", + "PlateT9_A6", + "PlateT9_B6", + "PlateT9_C6", + "PlateT9_D6", + "PlateT9_E6", + "PlateT9_F6", + "PlateT9_G6", + "PlateT9_H6", + "PlateT9_A7", + "PlateT9_B7", + "PlateT9_C7", + "PlateT9_D7", + "PlateT9_E7", + "PlateT9_F7", + "PlateT9_G7", + "PlateT9_H7", + "PlateT9_A8", + "PlateT9_B8", + "PlateT9_C8", + "PlateT9_D8", + "PlateT9_E8", + "PlateT9_F8", + "PlateT9_G8", + "PlateT9_H8", + "PlateT9_A9", + "PlateT9_B9", + "PlateT9_C9", + "PlateT9_D9", + "PlateT9_E9", + "PlateT9_F9", + "PlateT9_G9", + "PlateT9_H9", + "PlateT9_A10", + "PlateT9_B10", + "PlateT9_C10", + "PlateT9_D10", + "PlateT9_E10", + "PlateT9_F10", + "PlateT9_G10", + "PlateT9_H10", + "PlateT9_A11", + "PlateT9_B11", + "PlateT9_C11", + "PlateT9_D11", + "PlateT9_E11", + "PlateT9_F11", + "PlateT9_G11", + "PlateT9_H11", + "PlateT9_A12", + "PlateT9_B12", + "PlateT9_C12", + "PlateT9_D12", + "PlateT9_E12", + "PlateT9_F12", + "PlateT9_G12", + "PlateT9_H12" + ], + "parent": "T9", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT9_A1", + "B1": "PlateT9_B1", + "C1": "PlateT9_C1", + "D1": "PlateT9_D1", + "E1": "PlateT9_E1", + "F1": "PlateT9_F1", + "G1": "PlateT9_G1", + "H1": "PlateT9_H1", + "A2": "PlateT9_A2", + "B2": "PlateT9_B2", + "C2": "PlateT9_C2", + "D2": "PlateT9_D2", + "E2": "PlateT9_E2", + "F2": "PlateT9_F2", + "G2": "PlateT9_G2", + "H2": "PlateT9_H2", + "A3": "PlateT9_A3", + "B3": "PlateT9_B3", + "C3": "PlateT9_C3", + "D3": "PlateT9_D3", + "E3": "PlateT9_E3", + "F3": "PlateT9_F3", + "G3": "PlateT9_G3", + "H3": "PlateT9_H3", + "A4": "PlateT9_A4", + "B4": "PlateT9_B4", + "C4": "PlateT9_C4", + "D4": "PlateT9_D4", + "E4": "PlateT9_E4", + "F4": "PlateT9_F4", + "G4": "PlateT9_G4", + "H4": "PlateT9_H4", + "A5": "PlateT9_A5", + "B5": "PlateT9_B5", + "C5": "PlateT9_C5", + "D5": "PlateT9_D5", + "E5": "PlateT9_E5", + "F5": "PlateT9_F5", + "G5": "PlateT9_G5", + "H5": "PlateT9_H5", + "A6": "PlateT9_A6", + "B6": "PlateT9_B6", + "C6": "PlateT9_C6", + "D6": "PlateT9_D6", + "E6": "PlateT9_E6", + "F6": "PlateT9_F6", + "G6": "PlateT9_G6", + "H6": "PlateT9_H6", + "A7": "PlateT9_A7", + "B7": "PlateT9_B7", + "C7": "PlateT9_C7", + "D7": "PlateT9_D7", + "E7": "PlateT9_E7", + "F7": "PlateT9_F7", + "G7": "PlateT9_G7", + "H7": "PlateT9_H7", + "A8": "PlateT9_A8", + "B8": "PlateT9_B8", + "C8": "PlateT9_C8", + "D8": "PlateT9_D8", + "E8": "PlateT9_E8", + "F8": "PlateT9_F8", + "G8": "PlateT9_G8", + "H8": "PlateT9_H8", + "A9": "PlateT9_A9", + "B9": "PlateT9_B9", + "C9": "PlateT9_C9", + "D9": "PlateT9_D9", + "E9": "PlateT9_E9", + "F9": "PlateT9_F9", + "G9": "PlateT9_G9", + "H9": "PlateT9_H9", + "A10": "PlateT9_A10", + "B10": "PlateT9_B10", + "C10": "PlateT9_C10", + "D10": "PlateT9_D10", + "E10": "PlateT9_E10", + "F10": "PlateT9_F10", + "G10": "PlateT9_G10", + "H10": "PlateT9_H10", + "A11": "PlateT9_A11", + "B11": "PlateT9_B11", + "C11": "PlateT9_C11", + "D11": "PlateT9_D11", + "E11": "PlateT9_E11", + "F11": "PlateT9_F11", + "G11": "PlateT9_G11", + "H11": "PlateT9_H11", + "A12": "PlateT9_A12", + "B12": "PlateT9_B12", + "C12": "PlateT9_C12", + "D12": "PlateT9_D12", + "E12": "PlateT9_E12", + "F12": "PlateT9_F12", + "G12": "PlateT9_G12", + "H12": "PlateT9_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT9_A1", + "name": "PlateT9_A1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B1", + "name": "PlateT9_B1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C1", + "name": "PlateT9_C1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D1", + "name": "PlateT9_D1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E1", + "name": "PlateT9_E1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F1", + "name": "PlateT9_F1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G1", + "name": "PlateT9_G1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H1", + "name": "PlateT9_H1", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A2", + "name": "PlateT9_A2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B2", + "name": "PlateT9_B2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C2", + "name": "PlateT9_C2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D2", + "name": "PlateT9_D2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E2", + "name": "PlateT9_E2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F2", + "name": "PlateT9_F2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G2", + "name": "PlateT9_G2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H2", + "name": "PlateT9_H2", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A3", + "name": "PlateT9_A3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B3", + "name": "PlateT9_B3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C3", + "name": "PlateT9_C3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D3", + "name": "PlateT9_D3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E3", + "name": "PlateT9_E3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F3", + "name": "PlateT9_F3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G3", + "name": "PlateT9_G3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H3", + "name": "PlateT9_H3", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A4", + "name": "PlateT9_A4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B4", + "name": "PlateT9_B4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C4", + "name": "PlateT9_C4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D4", + "name": "PlateT9_D4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E4", + "name": "PlateT9_E4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F4", + "name": "PlateT9_F4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G4", + "name": "PlateT9_G4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H4", + "name": "PlateT9_H4", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A5", + "name": "PlateT9_A5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B5", + "name": "PlateT9_B5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C5", + "name": "PlateT9_C5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D5", + "name": "PlateT9_D5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E5", + "name": "PlateT9_E5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F5", + "name": "PlateT9_F5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G5", + "name": "PlateT9_G5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H5", + "name": "PlateT9_H5", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A6", + "name": "PlateT9_A6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B6", + "name": "PlateT9_B6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C6", + "name": "PlateT9_C6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D6", + "name": "PlateT9_D6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E6", + "name": "PlateT9_E6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F6", + "name": "PlateT9_F6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G6", + "name": "PlateT9_G6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H6", + "name": "PlateT9_H6", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A7", + "name": "PlateT9_A7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B7", + "name": "PlateT9_B7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C7", + "name": "PlateT9_C7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D7", + "name": "PlateT9_D7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E7", + "name": "PlateT9_E7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F7", + "name": "PlateT9_F7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G7", + "name": "PlateT9_G7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H7", + "name": "PlateT9_H7", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A8", + "name": "PlateT9_A8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B8", + "name": "PlateT9_B8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C8", + "name": "PlateT9_C8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D8", + "name": "PlateT9_D8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E8", + "name": "PlateT9_E8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F8", + "name": "PlateT9_F8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G8", + "name": "PlateT9_G8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H8", + "name": "PlateT9_H8", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A9", + "name": "PlateT9_A9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B9", + "name": "PlateT9_B9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C9", + "name": "PlateT9_C9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D9", + "name": "PlateT9_D9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E9", + "name": "PlateT9_E9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F9", + "name": "PlateT9_F9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G9", + "name": "PlateT9_G9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H9", + "name": "PlateT9_H9", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A10", + "name": "PlateT9_A10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B10", + "name": "PlateT9_B10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C10", + "name": "PlateT9_C10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D10", + "name": "PlateT9_D10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E10", + "name": "PlateT9_E10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F10", + "name": "PlateT9_F10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G10", + "name": "PlateT9_G10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H10", + "name": "PlateT9_H10", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A11", + "name": "PlateT9_A11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B11", + "name": "PlateT9_B11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C11", + "name": "PlateT9_C11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D11", + "name": "PlateT9_D11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E11", + "name": "PlateT9_E11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F11", + "name": "PlateT9_F11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G11", + "name": "PlateT9_G11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H11", + "name": "PlateT9_H11", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_A12", + "name": "PlateT9_A12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_B12", + "name": "PlateT9_B12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_C12", + "name": "PlateT9_C12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_D12", + "name": "PlateT9_D12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_E12", + "name": "PlateT9_E12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_F12", + "name": "PlateT9_F12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_G12", + "name": "PlateT9_G12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT9_H12", + "name": "PlateT9_H12", + + "children": [], + "parent": "PlateT9", + "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": "PlateT10", + "name": "PlateT10", + + "children": [ + "PlateT10_A1", + "PlateT10_B1", + "PlateT10_C1", + "PlateT10_D1", + "PlateT10_E1", + "PlateT10_F1", + "PlateT10_G1", + "PlateT10_H1", + "PlateT10_A2", + "PlateT10_B2", + "PlateT10_C2", + "PlateT10_D2", + "PlateT10_E2", + "PlateT10_F2", + "PlateT10_G2", + "PlateT10_H2", + "PlateT10_A3", + "PlateT10_B3", + "PlateT10_C3", + "PlateT10_D3", + "PlateT10_E3", + "PlateT10_F3", + "PlateT10_G3", + "PlateT10_H3", + "PlateT10_A4", + "PlateT10_B4", + "PlateT10_C4", + "PlateT10_D4", + "PlateT10_E4", + "PlateT10_F4", + "PlateT10_G4", + "PlateT10_H4", + "PlateT10_A5", + "PlateT10_B5", + "PlateT10_C5", + "PlateT10_D5", + "PlateT10_E5", + "PlateT10_F5", + "PlateT10_G5", + "PlateT10_H5", + "PlateT10_A6", + "PlateT10_B6", + "PlateT10_C6", + "PlateT10_D6", + "PlateT10_E6", + "PlateT10_F6", + "PlateT10_G6", + "PlateT10_H6", + "PlateT10_A7", + "PlateT10_B7", + "PlateT10_C7", + "PlateT10_D7", + "PlateT10_E7", + "PlateT10_F7", + "PlateT10_G7", + "PlateT10_H7", + "PlateT10_A8", + "PlateT10_B8", + "PlateT10_C8", + "PlateT10_D8", + "PlateT10_E8", + "PlateT10_F8", + "PlateT10_G8", + "PlateT10_H8", + "PlateT10_A9", + "PlateT10_B9", + "PlateT10_C9", + "PlateT10_D9", + "PlateT10_E9", + "PlateT10_F9", + "PlateT10_G9", + "PlateT10_H9", + "PlateT10_A10", + "PlateT10_B10", + "PlateT10_C10", + "PlateT10_D10", + "PlateT10_E10", + "PlateT10_F10", + "PlateT10_G10", + "PlateT10_H10", + "PlateT10_A11", + "PlateT10_B11", + "PlateT10_C11", + "PlateT10_D11", + "PlateT10_E11", + "PlateT10_F11", + "PlateT10_G11", + "PlateT10_H11", + "PlateT10_A12", + "PlateT10_B12", + "PlateT10_C12", + "PlateT10_D12", + "PlateT10_E12", + "PlateT10_F12", + "PlateT10_G12", + "PlateT10_H12" + ], + "parent": "T10", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT10_A1", + "B1": "PlateT10_B1", + "C1": "PlateT10_C1", + "D1": "PlateT10_D1", + "E1": "PlateT10_E1", + "F1": "PlateT10_F1", + "G1": "PlateT10_G1", + "H1": "PlateT10_H1", + "A2": "PlateT10_A2", + "B2": "PlateT10_B2", + "C2": "PlateT10_C2", + "D2": "PlateT10_D2", + "E2": "PlateT10_E2", + "F2": "PlateT10_F2", + "G2": "PlateT10_G2", + "H2": "PlateT10_H2", + "A3": "PlateT10_A3", + "B3": "PlateT10_B3", + "C3": "PlateT10_C3", + "D3": "PlateT10_D3", + "E3": "PlateT10_E3", + "F3": "PlateT10_F3", + "G3": "PlateT10_G3", + "H3": "PlateT10_H3", + "A4": "PlateT10_A4", + "B4": "PlateT10_B4", + "C4": "PlateT10_C4", + "D4": "PlateT10_D4", + "E4": "PlateT10_E4", + "F4": "PlateT10_F4", + "G4": "PlateT10_G4", + "H4": "PlateT10_H4", + "A5": "PlateT10_A5", + "B5": "PlateT10_B5", + "C5": "PlateT10_C5", + "D5": "PlateT10_D5", + "E5": "PlateT10_E5", + "F5": "PlateT10_F5", + "G5": "PlateT10_G5", + "H5": "PlateT10_H5", + "A6": "PlateT10_A6", + "B6": "PlateT10_B6", + "C6": "PlateT10_C6", + "D6": "PlateT10_D6", + "E6": "PlateT10_E6", + "F6": "PlateT10_F6", + "G6": "PlateT10_G6", + "H6": "PlateT10_H6", + "A7": "PlateT10_A7", + "B7": "PlateT10_B7", + "C7": "PlateT10_C7", + "D7": "PlateT10_D7", + "E7": "PlateT10_E7", + "F7": "PlateT10_F7", + "G7": "PlateT10_G7", + "H7": "PlateT10_H7", + "A8": "PlateT10_A8", + "B8": "PlateT10_B8", + "C8": "PlateT10_C8", + "D8": "PlateT10_D8", + "E8": "PlateT10_E8", + "F8": "PlateT10_F8", + "G8": "PlateT10_G8", + "H8": "PlateT10_H8", + "A9": "PlateT10_A9", + "B9": "PlateT10_B9", + "C9": "PlateT10_C9", + "D9": "PlateT10_D9", + "E9": "PlateT10_E9", + "F9": "PlateT10_F9", + "G9": "PlateT10_G9", + "H9": "PlateT10_H9", + "A10": "PlateT10_A10", + "B10": "PlateT10_B10", + "C10": "PlateT10_C10", + "D10": "PlateT10_D10", + "E10": "PlateT10_E10", + "F10": "PlateT10_F10", + "G10": "PlateT10_G10", + "H10": "PlateT10_H10", + "A11": "PlateT10_A11", + "B11": "PlateT10_B11", + "C11": "PlateT10_C11", + "D11": "PlateT10_D11", + "E11": "PlateT10_E11", + "F11": "PlateT10_F11", + "G11": "PlateT10_G11", + "H11": "PlateT10_H11", + "A12": "PlateT10_A12", + "B12": "PlateT10_B12", + "C12": "PlateT10_C12", + "D12": "PlateT10_D12", + "E12": "PlateT10_E12", + "F12": "PlateT10_F12", + "G12": "PlateT10_G12", + "H12": "PlateT10_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT10_A1", + "name": "PlateT10_A1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B1", + "name": "PlateT10_B1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C1", + "name": "PlateT10_C1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D1", + "name": "PlateT10_D1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E1", + "name": "PlateT10_E1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F1", + "name": "PlateT10_F1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G1", + "name": "PlateT10_G1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H1", + "name": "PlateT10_H1", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A2", + "name": "PlateT10_A2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B2", + "name": "PlateT10_B2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C2", + "name": "PlateT10_C2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D2", + "name": "PlateT10_D2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E2", + "name": "PlateT10_E2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F2", + "name": "PlateT10_F2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G2", + "name": "PlateT10_G2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H2", + "name": "PlateT10_H2", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A3", + "name": "PlateT10_A3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B3", + "name": "PlateT10_B3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C3", + "name": "PlateT10_C3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D3", + "name": "PlateT10_D3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E3", + "name": "PlateT10_E3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F3", + "name": "PlateT10_F3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G3", + "name": "PlateT10_G3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H3", + "name": "PlateT10_H3", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A4", + "name": "PlateT10_A4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B4", + "name": "PlateT10_B4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C4", + "name": "PlateT10_C4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D4", + "name": "PlateT10_D4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E4", + "name": "PlateT10_E4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F4", + "name": "PlateT10_F4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G4", + "name": "PlateT10_G4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H4", + "name": "PlateT10_H4", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A5", + "name": "PlateT10_A5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B5", + "name": "PlateT10_B5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C5", + "name": "PlateT10_C5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D5", + "name": "PlateT10_D5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E5", + "name": "PlateT10_E5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F5", + "name": "PlateT10_F5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G5", + "name": "PlateT10_G5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H5", + "name": "PlateT10_H5", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A6", + "name": "PlateT10_A6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B6", + "name": "PlateT10_B6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C6", + "name": "PlateT10_C6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D6", + "name": "PlateT10_D6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E6", + "name": "PlateT10_E6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F6", + "name": "PlateT10_F6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G6", + "name": "PlateT10_G6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H6", + "name": "PlateT10_H6", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A7", + "name": "PlateT10_A7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B7", + "name": "PlateT10_B7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C7", + "name": "PlateT10_C7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D7", + "name": "PlateT10_D7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E7", + "name": "PlateT10_E7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F7", + "name": "PlateT10_F7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G7", + "name": "PlateT10_G7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H7", + "name": "PlateT10_H7", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A8", + "name": "PlateT10_A8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B8", + "name": "PlateT10_B8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C8", + "name": "PlateT10_C8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D8", + "name": "PlateT10_D8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E8", + "name": "PlateT10_E8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F8", + "name": "PlateT10_F8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G8", + "name": "PlateT10_G8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H8", + "name": "PlateT10_H8", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A9", + "name": "PlateT10_A9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B9", + "name": "PlateT10_B9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C9", + "name": "PlateT10_C9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D9", + "name": "PlateT10_D9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E9", + "name": "PlateT10_E9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F9", + "name": "PlateT10_F9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G9", + "name": "PlateT10_G9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H9", + "name": "PlateT10_H9", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A10", + "name": "PlateT10_A10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B10", + "name": "PlateT10_B10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C10", + "name": "PlateT10_C10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D10", + "name": "PlateT10_D10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E10", + "name": "PlateT10_E10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F10", + "name": "PlateT10_F10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G10", + "name": "PlateT10_G10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H10", + "name": "PlateT10_H10", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A11", + "name": "PlateT10_A11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B11", + "name": "PlateT10_B11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C11", + "name": "PlateT10_C11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D11", + "name": "PlateT10_D11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E11", + "name": "PlateT10_E11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F11", + "name": "PlateT10_F11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G11", + "name": "PlateT10_G11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H11", + "name": "PlateT10_H11", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_A12", + "name": "PlateT10_A12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_B12", + "name": "PlateT10_B12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_C12", + "name": "PlateT10_C12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_D12", + "name": "PlateT10_D12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_E12", + "name": "PlateT10_E12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_F12", + "name": "PlateT10_F12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_G12", + "name": "PlateT10_G12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT10_H12", + "name": "PlateT10_H12", + + "children": [], + "parent": "PlateT10", + "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": "PlateT13", + "name": "PlateT13", + + "children": [ + "PlateT13_A1", + "PlateT13_B1", + "PlateT13_C1", + "PlateT13_D1", + "PlateT13_E1", + "PlateT13_F1", + "PlateT13_G1", + "PlateT13_H1", + "PlateT13_A2", + "PlateT13_B2", + "PlateT13_C2", + "PlateT13_D2", + "PlateT13_E2", + "PlateT13_F2", + "PlateT13_G2", + "PlateT13_H2", + "PlateT13_A3", + "PlateT13_B3", + "PlateT13_C3", + "PlateT13_D3", + "PlateT13_E3", + "PlateT13_F3", + "PlateT13_G3", + "PlateT13_H3", + "PlateT13_A4", + "PlateT13_B4", + "PlateT13_C4", + "PlateT13_D4", + "PlateT13_E4", + "PlateT13_F4", + "PlateT13_G4", + "PlateT13_H4", + "PlateT13_A5", + "PlateT13_B5", + "PlateT13_C5", + "PlateT13_D5", + "PlateT13_E5", + "PlateT13_F5", + "PlateT13_G5", + "PlateT13_H5", + "PlateT13_A6", + "PlateT13_B6", + "PlateT13_C6", + "PlateT13_D6", + "PlateT13_E6", + "PlateT13_F6", + "PlateT13_G6", + "PlateT13_H6", + "PlateT13_A7", + "PlateT13_B7", + "PlateT13_C7", + "PlateT13_D7", + "PlateT13_E7", + "PlateT13_F7", + "PlateT13_G7", + "PlateT13_H7", + "PlateT13_A8", + "PlateT13_B8", + "PlateT13_C8", + "PlateT13_D8", + "PlateT13_E8", + "PlateT13_F8", + "PlateT13_G8", + "PlateT13_H8", + "PlateT13_A9", + "PlateT13_B9", + "PlateT13_C9", + "PlateT13_D9", + "PlateT13_E9", + "PlateT13_F9", + "PlateT13_G9", + "PlateT13_H9", + "PlateT13_A10", + "PlateT13_B10", + "PlateT13_C10", + "PlateT13_D10", + "PlateT13_E10", + "PlateT13_F10", + "PlateT13_G10", + "PlateT13_H10", + "PlateT13_A11", + "PlateT13_B11", + "PlateT13_C11", + "PlateT13_D11", + "PlateT13_E11", + "PlateT13_F11", + "PlateT13_G11", + "PlateT13_H11", + "PlateT13_A12", + "PlateT13_B12", + "PlateT13_C12", + "PlateT13_D12", + "PlateT13_E12", + "PlateT13_F12", + "PlateT13_G12", + "PlateT13_H12" + ], + "parent": "T13", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT13_A1", + "B1": "PlateT13_B1", + "C1": "PlateT13_C1", + "D1": "PlateT13_D1", + "E1": "PlateT13_E1", + "F1": "PlateT13_F1", + "G1": "PlateT13_G1", + "H1": "PlateT13_H1", + "A2": "PlateT13_A2", + "B2": "PlateT13_B2", + "C2": "PlateT13_C2", + "D2": "PlateT13_D2", + "E2": "PlateT13_E2", + "F2": "PlateT13_F2", + "G2": "PlateT13_G2", + "H2": "PlateT13_H2", + "A3": "PlateT13_A3", + "B3": "PlateT13_B3", + "C3": "PlateT13_C3", + "D3": "PlateT13_D3", + "E3": "PlateT13_E3", + "F3": "PlateT13_F3", + "G3": "PlateT13_G3", + "H3": "PlateT13_H3", + "A4": "PlateT13_A4", + "B4": "PlateT13_B4", + "C4": "PlateT13_C4", + "D4": "PlateT13_D4", + "E4": "PlateT13_E4", + "F4": "PlateT13_F4", + "G4": "PlateT13_G4", + "H4": "PlateT13_H4", + "A5": "PlateT13_A5", + "B5": "PlateT13_B5", + "C5": "PlateT13_C5", + "D5": "PlateT13_D5", + "E5": "PlateT13_E5", + "F5": "PlateT13_F5", + "G5": "PlateT13_G5", + "H5": "PlateT13_H5", + "A6": "PlateT13_A6", + "B6": "PlateT13_B6", + "C6": "PlateT13_C6", + "D6": "PlateT13_D6", + "E6": "PlateT13_E6", + "F6": "PlateT13_F6", + "G6": "PlateT13_G6", + "H6": "PlateT13_H6", + "A7": "PlateT13_A7", + "B7": "PlateT13_B7", + "C7": "PlateT13_C7", + "D7": "PlateT13_D7", + "E7": "PlateT13_E7", + "F7": "PlateT13_F7", + "G7": "PlateT13_G7", + "H7": "PlateT13_H7", + "A8": "PlateT13_A8", + "B8": "PlateT13_B8", + "C8": "PlateT13_C8", + "D8": "PlateT13_D8", + "E8": "PlateT13_E8", + "F8": "PlateT13_F8", + "G8": "PlateT13_G8", + "H8": "PlateT13_H8", + "A9": "PlateT13_A9", + "B9": "PlateT13_B9", + "C9": "PlateT13_C9", + "D9": "PlateT13_D9", + "E9": "PlateT13_E9", + "F9": "PlateT13_F9", + "G9": "PlateT13_G9", + "H9": "PlateT13_H9", + "A10": "PlateT13_A10", + "B10": "PlateT13_B10", + "C10": "PlateT13_C10", + "D10": "PlateT13_D10", + "E10": "PlateT13_E10", + "F10": "PlateT13_F10", + "G10": "PlateT13_G10", + "H10": "PlateT13_H10", + "A11": "PlateT13_A11", + "B11": "PlateT13_B11", + "C11": "PlateT13_C11", + "D11": "PlateT13_D11", + "E11": "PlateT13_E11", + "F11": "PlateT13_F11", + "G11": "PlateT13_G11", + "H11": "PlateT13_H11", + "A12": "PlateT13_A12", + "B12": "PlateT13_B12", + "C12": "PlateT13_C12", + "D12": "PlateT13_D12", + "E12": "PlateT13_E12", + "F12": "PlateT13_F12", + "G12": "PlateT13_G12", + "H12": "PlateT13_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT13_A1", + "name": "PlateT13_A1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B1", + "name": "PlateT13_B1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C1", + "name": "PlateT13_C1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D1", + "name": "PlateT13_D1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E1", + "name": "PlateT13_E1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F1", + "name": "PlateT13_F1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G1", + "name": "PlateT13_G1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H1", + "name": "PlateT13_H1", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A2", + "name": "PlateT13_A2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B2", + "name": "PlateT13_B2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C2", + "name": "PlateT13_C2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D2", + "name": "PlateT13_D2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E2", + "name": "PlateT13_E2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F2", + "name": "PlateT13_F2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G2", + "name": "PlateT13_G2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H2", + "name": "PlateT13_H2", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A3", + "name": "PlateT13_A3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B3", + "name": "PlateT13_B3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C3", + "name": "PlateT13_C3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D3", + "name": "PlateT13_D3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E3", + "name": "PlateT13_E3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F3", + "name": "PlateT13_F3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G3", + "name": "PlateT13_G3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H3", + "name": "PlateT13_H3", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A4", + "name": "PlateT13_A4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B4", + "name": "PlateT13_B4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C4", + "name": "PlateT13_C4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D4", + "name": "PlateT13_D4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E4", + "name": "PlateT13_E4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F4", + "name": "PlateT13_F4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G4", + "name": "PlateT13_G4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H4", + "name": "PlateT13_H4", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A5", + "name": "PlateT13_A5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B5", + "name": "PlateT13_B5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C5", + "name": "PlateT13_C5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D5", + "name": "PlateT13_D5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E5", + "name": "PlateT13_E5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F5", + "name": "PlateT13_F5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G5", + "name": "PlateT13_G5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H5", + "name": "PlateT13_H5", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A6", + "name": "PlateT13_A6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B6", + "name": "PlateT13_B6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C6", + "name": "PlateT13_C6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D6", + "name": "PlateT13_D6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E6", + "name": "PlateT13_E6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F6", + "name": "PlateT13_F6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G6", + "name": "PlateT13_G6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H6", + "name": "PlateT13_H6", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A7", + "name": "PlateT13_A7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B7", + "name": "PlateT13_B7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C7", + "name": "PlateT13_C7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D7", + "name": "PlateT13_D7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E7", + "name": "PlateT13_E7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F7", + "name": "PlateT13_F7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G7", + "name": "PlateT13_G7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H7", + "name": "PlateT13_H7", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A8", + "name": "PlateT13_A8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B8", + "name": "PlateT13_B8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C8", + "name": "PlateT13_C8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D8", + "name": "PlateT13_D8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E8", + "name": "PlateT13_E8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F8", + "name": "PlateT13_F8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G8", + "name": "PlateT13_G8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H8", + "name": "PlateT13_H8", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A9", + "name": "PlateT13_A9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B9", + "name": "PlateT13_B9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C9", + "name": "PlateT13_C9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D9", + "name": "PlateT13_D9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E9", + "name": "PlateT13_E9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F9", + "name": "PlateT13_F9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G9", + "name": "PlateT13_G9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H9", + "name": "PlateT13_H9", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A10", + "name": "PlateT13_A10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B10", + "name": "PlateT13_B10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C10", + "name": "PlateT13_C10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D10", + "name": "PlateT13_D10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E10", + "name": "PlateT13_E10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F10", + "name": "PlateT13_F10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G10", + "name": "PlateT13_G10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H10", + "name": "PlateT13_H10", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A11", + "name": "PlateT13_A11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B11", + "name": "PlateT13_B11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C11", + "name": "PlateT13_C11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D11", + "name": "PlateT13_D11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E11", + "name": "PlateT13_E11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F11", + "name": "PlateT13_F11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G11", + "name": "PlateT13_G11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H11", + "name": "PlateT13_H11", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_A12", + "name": "PlateT13_A12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_B12", + "name": "PlateT13_B12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_C12", + "name": "PlateT13_C12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_D12", + "name": "PlateT13_D12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_E12", + "name": "PlateT13_E12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_F12", + "name": "PlateT13_F12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_G12", + "name": "PlateT13_G12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT13_H12", + "name": "PlateT13_H12", + + "children": [], + "parent": "PlateT13", + "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": "PlateT14", + "name": "PlateT14", + + "children": [ + "PlateT14_A1", + "PlateT14_B1", + "PlateT14_C1", + "PlateT14_D1", + "PlateT14_E1", + "PlateT14_F1", + "PlateT14_G1", + "PlateT14_H1", + "PlateT14_A2", + "PlateT14_B2", + "PlateT14_C2", + "PlateT14_D2", + "PlateT14_E2", + "PlateT14_F2", + "PlateT14_G2", + "PlateT14_H2", + "PlateT14_A3", + "PlateT14_B3", + "PlateT14_C3", + "PlateT14_D3", + "PlateT14_E3", + "PlateT14_F3", + "PlateT14_G3", + "PlateT14_H3", + "PlateT14_A4", + "PlateT14_B4", + "PlateT14_C4", + "PlateT14_D4", + "PlateT14_E4", + "PlateT14_F4", + "PlateT14_G4", + "PlateT14_H4", + "PlateT14_A5", + "PlateT14_B5", + "PlateT14_C5", + "PlateT14_D5", + "PlateT14_E5", + "PlateT14_F5", + "PlateT14_G5", + "PlateT14_H5", + "PlateT14_A6", + "PlateT14_B6", + "PlateT14_C6", + "PlateT14_D6", + "PlateT14_E6", + "PlateT14_F6", + "PlateT14_G6", + "PlateT14_H6", + "PlateT14_A7", + "PlateT14_B7", + "PlateT14_C7", + "PlateT14_D7", + "PlateT14_E7", + "PlateT14_F7", + "PlateT14_G7", + "PlateT14_H7", + "PlateT14_A8", + "PlateT14_B8", + "PlateT14_C8", + "PlateT14_D8", + "PlateT14_E8", + "PlateT14_F8", + "PlateT14_G8", + "PlateT14_H8", + "PlateT14_A9", + "PlateT14_B9", + "PlateT14_C9", + "PlateT14_D9", + "PlateT14_E9", + "PlateT14_F9", + "PlateT14_G9", + "PlateT14_H9", + "PlateT14_A10", + "PlateT14_B10", + "PlateT14_C10", + "PlateT14_D10", + "PlateT14_E10", + "PlateT14_F10", + "PlateT14_G10", + "PlateT14_H10", + "PlateT14_A11", + "PlateT14_B11", + "PlateT14_C11", + "PlateT14_D11", + "PlateT14_E11", + "PlateT14_F11", + "PlateT14_G11", + "PlateT14_H11", + "PlateT14_A12", + "PlateT14_B12", + "PlateT14_C12", + "PlateT14_D12", + "PlateT14_E12", + "PlateT14_F12", + "PlateT14_G12", + "PlateT14_H12" + ], + "parent": "T14", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT14_A1", + "B1": "PlateT14_B1", + "C1": "PlateT14_C1", + "D1": "PlateT14_D1", + "E1": "PlateT14_E1", + "F1": "PlateT14_F1", + "G1": "PlateT14_G1", + "H1": "PlateT14_H1", + "A2": "PlateT14_A2", + "B2": "PlateT14_B2", + "C2": "PlateT14_C2", + "D2": "PlateT14_D2", + "E2": "PlateT14_E2", + "F2": "PlateT14_F2", + "G2": "PlateT14_G2", + "H2": "PlateT14_H2", + "A3": "PlateT14_A3", + "B3": "PlateT14_B3", + "C3": "PlateT14_C3", + "D3": "PlateT14_D3", + "E3": "PlateT14_E3", + "F3": "PlateT14_F3", + "G3": "PlateT14_G3", + "H3": "PlateT14_H3", + "A4": "PlateT14_A4", + "B4": "PlateT14_B4", + "C4": "PlateT14_C4", + "D4": "PlateT14_D4", + "E4": "PlateT14_E4", + "F4": "PlateT14_F4", + "G4": "PlateT14_G4", + "H4": "PlateT14_H4", + "A5": "PlateT14_A5", + "B5": "PlateT14_B5", + "C5": "PlateT14_C5", + "D5": "PlateT14_D5", + "E5": "PlateT14_E5", + "F5": "PlateT14_F5", + "G5": "PlateT14_G5", + "H5": "PlateT14_H5", + "A6": "PlateT14_A6", + "B6": "PlateT14_B6", + "C6": "PlateT14_C6", + "D6": "PlateT14_D6", + "E6": "PlateT14_E6", + "F6": "PlateT14_F6", + "G6": "PlateT14_G6", + "H6": "PlateT14_H6", + "A7": "PlateT14_A7", + "B7": "PlateT14_B7", + "C7": "PlateT14_C7", + "D7": "PlateT14_D7", + "E7": "PlateT14_E7", + "F7": "PlateT14_F7", + "G7": "PlateT14_G7", + "H7": "PlateT14_H7", + "A8": "PlateT14_A8", + "B8": "PlateT14_B8", + "C8": "PlateT14_C8", + "D8": "PlateT14_D8", + "E8": "PlateT14_E8", + "F8": "PlateT14_F8", + "G8": "PlateT14_G8", + "H8": "PlateT14_H8", + "A9": "PlateT14_A9", + "B9": "PlateT14_B9", + "C9": "PlateT14_C9", + "D9": "PlateT14_D9", + "E9": "PlateT14_E9", + "F9": "PlateT14_F9", + "G9": "PlateT14_G9", + "H9": "PlateT14_H9", + "A10": "PlateT14_A10", + "B10": "PlateT14_B10", + "C10": "PlateT14_C10", + "D10": "PlateT14_D10", + "E10": "PlateT14_E10", + "F10": "PlateT14_F10", + "G10": "PlateT14_G10", + "H10": "PlateT14_H10", + "A11": "PlateT14_A11", + "B11": "PlateT14_B11", + "C11": "PlateT14_C11", + "D11": "PlateT14_D11", + "E11": "PlateT14_E11", + "F11": "PlateT14_F11", + "G11": "PlateT14_G11", + "H11": "PlateT14_H11", + "A12": "PlateT14_A12", + "B12": "PlateT14_B12", + "C12": "PlateT14_C12", + "D12": "PlateT14_D12", + "E12": "PlateT14_E12", + "F12": "PlateT14_F12", + "G12": "PlateT14_G12", + "H12": "PlateT14_H12" + } + }, + "data": { + "Material": { + "uuid": "4a043a07c65a4f9bb97745e1f129b165", + "Code": "ZX-58-0001", + "SupplyType": 2, + "Name": "全裙边 PCR适配器", + "SummaryName": "全裙边 PCR适配器" + } + } + }, + { + "id": "PlateT14_A1", + "name": "PlateT14_A1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B1", + "name": "PlateT14_B1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C1", + "name": "PlateT14_C1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D1", + "name": "PlateT14_D1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E1", + "name": "PlateT14_E1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F1", + "name": "PlateT14_F1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G1", + "name": "PlateT14_G1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H1", + "name": "PlateT14_H1", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A2", + "name": "PlateT14_A2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B2", + "name": "PlateT14_B2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C2", + "name": "PlateT14_C2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D2", + "name": "PlateT14_D2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E2", + "name": "PlateT14_E2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F2", + "name": "PlateT14_F2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G2", + "name": "PlateT14_G2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H2", + "name": "PlateT14_H2", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A3", + "name": "PlateT14_A3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B3", + "name": "PlateT14_B3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C3", + "name": "PlateT14_C3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D3", + "name": "PlateT14_D3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E3", + "name": "PlateT14_E3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F3", + "name": "PlateT14_F3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G3", + "name": "PlateT14_G3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H3", + "name": "PlateT14_H3", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A4", + "name": "PlateT14_A4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B4", + "name": "PlateT14_B4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C4", + "name": "PlateT14_C4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D4", + "name": "PlateT14_D4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E4", + "name": "PlateT14_E4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F4", + "name": "PlateT14_F4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G4", + "name": "PlateT14_G4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H4", + "name": "PlateT14_H4", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A5", + "name": "PlateT14_A5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B5", + "name": "PlateT14_B5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C5", + "name": "PlateT14_C5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D5", + "name": "PlateT14_D5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E5", + "name": "PlateT14_E5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F5", + "name": "PlateT14_F5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G5", + "name": "PlateT14_G5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H5", + "name": "PlateT14_H5", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A6", + "name": "PlateT14_A6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B6", + "name": "PlateT14_B6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C6", + "name": "PlateT14_C6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D6", + "name": "PlateT14_D6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E6", + "name": "PlateT14_E6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F6", + "name": "PlateT14_F6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G6", + "name": "PlateT14_G6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H6", + "name": "PlateT14_H6", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A7", + "name": "PlateT14_A7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B7", + "name": "PlateT14_B7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C7", + "name": "PlateT14_C7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D7", + "name": "PlateT14_D7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E7", + "name": "PlateT14_E7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F7", + "name": "PlateT14_F7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G7", + "name": "PlateT14_G7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H7", + "name": "PlateT14_H7", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A8", + "name": "PlateT14_A8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B8", + "name": "PlateT14_B8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C8", + "name": "PlateT14_C8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D8", + "name": "PlateT14_D8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E8", + "name": "PlateT14_E8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F8", + "name": "PlateT14_F8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G8", + "name": "PlateT14_G8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H8", + "name": "PlateT14_H8", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A9", + "name": "PlateT14_A9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B9", + "name": "PlateT14_B9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C9", + "name": "PlateT14_C9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D9", + "name": "PlateT14_D9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E9", + "name": "PlateT14_E9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F9", + "name": "PlateT14_F9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G9", + "name": "PlateT14_G9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H9", + "name": "PlateT14_H9", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A10", + "name": "PlateT14_A10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B10", + "name": "PlateT14_B10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C10", + "name": "PlateT14_C10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D10", + "name": "PlateT14_D10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E10", + "name": "PlateT14_E10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F10", + "name": "PlateT14_F10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G10", + "name": "PlateT14_G10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H10", + "name": "PlateT14_H10", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A11", + "name": "PlateT14_A11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B11", + "name": "PlateT14_B11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C11", + "name": "PlateT14_C11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D11", + "name": "PlateT14_D11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E11", + "name": "PlateT14_E11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F11", + "name": "PlateT14_F11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G11", + "name": "PlateT14_G11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H11", + "name": "PlateT14_H11", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_A12", + "name": "PlateT14_A12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_B12", + "name": "PlateT14_B12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_C12", + "name": "PlateT14_C12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_D12", + "name": "PlateT14_D12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_E12", + "name": "PlateT14_E12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_F12", + "name": "PlateT14_F12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_G12", + "name": "PlateT14_G12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT14_H12", + "name": "PlateT14_H12", + + "children": [], + "parent": "PlateT14", + "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": "PlateT15", + "name": "PlateT15", + + "children": [ + "PlateT15_A1", + "PlateT15_B1", + "PlateT15_C1", + "PlateT15_D1", + "PlateT15_E1", + "PlateT15_F1", + "PlateT15_G1", + "PlateT15_H1", + "PlateT15_A2", + "PlateT15_B2", + "PlateT15_C2", + "PlateT15_D2", + "PlateT15_E2", + "PlateT15_F2", + "PlateT15_G2", + "PlateT15_H2", + "PlateT15_A3", + "PlateT15_B3", + "PlateT15_C3", + "PlateT15_D3", + "PlateT15_E3", + "PlateT15_F3", + "PlateT15_G3", + "PlateT15_H3", + "PlateT15_A4", + "PlateT15_B4", + "PlateT15_C4", + "PlateT15_D4", + "PlateT15_E4", + "PlateT15_F4", + "PlateT15_G4", + "PlateT15_H4", + "PlateT15_A5", + "PlateT15_B5", + "PlateT15_C5", + "PlateT15_D5", + "PlateT15_E5", + "PlateT15_F5", + "PlateT15_G5", + "PlateT15_H5", + "PlateT15_A6", + "PlateT15_B6", + "PlateT15_C6", + "PlateT15_D6", + "PlateT15_E6", + "PlateT15_F6", + "PlateT15_G6", + "PlateT15_H6", + "PlateT15_A7", + "PlateT15_B7", + "PlateT15_C7", + "PlateT15_D7", + "PlateT15_E7", + "PlateT15_F7", + "PlateT15_G7", + "PlateT15_H7", + "PlateT15_A8", + "PlateT15_B8", + "PlateT15_C8", + "PlateT15_D8", + "PlateT15_E8", + "PlateT15_F8", + "PlateT15_G8", + "PlateT15_H8", + "PlateT15_A9", + "PlateT15_B9", + "PlateT15_C9", + "PlateT15_D9", + "PlateT15_E9", + "PlateT15_F9", + "PlateT15_G9", + "PlateT15_H9", + "PlateT15_A10", + "PlateT15_B10", + "PlateT15_C10", + "PlateT15_D10", + "PlateT15_E10", + "PlateT15_F10", + "PlateT15_G10", + "PlateT15_H10", + "PlateT15_A11", + "PlateT15_B11", + "PlateT15_C11", + "PlateT15_D11", + "PlateT15_E11", + "PlateT15_F11", + "PlateT15_G11", + "PlateT15_H11", + "PlateT15_A12", + "PlateT15_B12", + "PlateT15_C12", + "PlateT15_D12", + "PlateT15_E12", + "PlateT15_F12", + "PlateT15_G12", + "PlateT15_H12" + ], + "parent": "T15", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Plate", + "size_x": 127, + "size_y": 85.5, + "size_z": 10, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + }, + "category": "plate", + "model": null, + "barcode": null, + "ordering": { + "A1": "PlateT15_A1", + "B1": "PlateT15_B1", + "C1": "PlateT15_C1", + "D1": "PlateT15_D1", + "E1": "PlateT15_E1", + "F1": "PlateT15_F1", + "G1": "PlateT15_G1", + "H1": "PlateT15_H1", + "A2": "PlateT15_A2", + "B2": "PlateT15_B2", + "C2": "PlateT15_C2", + "D2": "PlateT15_D2", + "E2": "PlateT15_E2", + "F2": "PlateT15_F2", + "G2": "PlateT15_G2", + "H2": "PlateT15_H2", + "A3": "PlateT15_A3", + "B3": "PlateT15_B3", + "C3": "PlateT15_C3", + "D3": "PlateT15_D3", + "E3": "PlateT15_E3", + "F3": "PlateT15_F3", + "G3": "PlateT15_G3", + "H3": "PlateT15_H3", + "A4": "PlateT15_A4", + "B4": "PlateT15_B4", + "C4": "PlateT15_C4", + "D4": "PlateT15_D4", + "E4": "PlateT15_E4", + "F4": "PlateT15_F4", + "G4": "PlateT15_G4", + "H4": "PlateT15_H4", + "A5": "PlateT15_A5", + "B5": "PlateT15_B5", + "C5": "PlateT15_C5", + "D5": "PlateT15_D5", + "E5": "PlateT15_E5", + "F5": "PlateT15_F5", + "G5": "PlateT15_G5", + "H5": "PlateT15_H5", + "A6": "PlateT15_A6", + "B6": "PlateT15_B6", + "C6": "PlateT15_C6", + "D6": "PlateT15_D6", + "E6": "PlateT15_E6", + "F6": "PlateT15_F6", + "G6": "PlateT15_G6", + "H6": "PlateT15_H6", + "A7": "PlateT15_A7", + "B7": "PlateT15_B7", + "C7": "PlateT15_C7", + "D7": "PlateT15_D7", + "E7": "PlateT15_E7", + "F7": "PlateT15_F7", + "G7": "PlateT15_G7", + "H7": "PlateT15_H7", + "A8": "PlateT15_A8", + "B8": "PlateT15_B8", + "C8": "PlateT15_C8", + "D8": "PlateT15_D8", + "E8": "PlateT15_E8", + "F8": "PlateT15_F8", + "G8": "PlateT15_G8", + "H8": "PlateT15_H8", + "A9": "PlateT15_A9", + "B9": "PlateT15_B9", + "C9": "PlateT15_C9", + "D9": "PlateT15_D9", + "E9": "PlateT15_E9", + "F9": "PlateT15_F9", + "G9": "PlateT15_G9", + "H9": "PlateT15_H9", + "A10": "PlateT15_A10", + "B10": "PlateT15_B10", + "C10": "PlateT15_C10", + "D10": "PlateT15_D10", + "E10": "PlateT15_E10", + "F10": "PlateT15_F10", + "G10": "PlateT15_G10", + "H10": "PlateT15_H10", + "A11": "PlateT15_A11", + "B11": "PlateT15_B11", + "C11": "PlateT15_C11", + "D11": "PlateT15_D11", + "E11": "PlateT15_E11", + "F11": "PlateT15_F11", + "G11": "PlateT15_G11", + "H11": "PlateT15_H11", + "A12": "PlateT15_A12", + "B12": "PlateT15_B12", + "C12": "PlateT15_C12", + "D12": "PlateT15_D12", + "E12": "PlateT15_E12", + "F12": "PlateT15_F12", + "G12": "PlateT15_G12", + "H12": "PlateT15_H12" + } + }, + "data": { + "Material": { + "uuid": "04211a2dc93547fe9bf6121eac533650" + } + } + }, + { + "id": "PlateT15_A1", + "name": "PlateT15_A1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B1", + "name": "PlateT15_B1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C1", + "name": "PlateT15_C1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D1", + "name": "PlateT15_D1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E1", + "name": "PlateT15_E1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F1", + "name": "PlateT15_F1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G1", + "name": "PlateT15_G1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H1", + "name": "PlateT15_H1", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A2", + "name": "PlateT15_A2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B2", + "name": "PlateT15_B2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C2", + "name": "PlateT15_C2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D2", + "name": "PlateT15_D2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E2", + "name": "PlateT15_E2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F2", + "name": "PlateT15_F2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G2", + "name": "PlateT15_G2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H2", + "name": "PlateT15_H2", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A3", + "name": "PlateT15_A3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B3", + "name": "PlateT15_B3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C3", + "name": "PlateT15_C3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D3", + "name": "PlateT15_D3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E3", + "name": "PlateT15_E3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F3", + "name": "PlateT15_F3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G3", + "name": "PlateT15_G3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H3", + "name": "PlateT15_H3", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A4", + "name": "PlateT15_A4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B4", + "name": "PlateT15_B4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C4", + "name": "PlateT15_C4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D4", + "name": "PlateT15_D4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E4", + "name": "PlateT15_E4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F4", + "name": "PlateT15_F4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G4", + "name": "PlateT15_G4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H4", + "name": "PlateT15_H4", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A5", + "name": "PlateT15_A5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B5", + "name": "PlateT15_B5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C5", + "name": "PlateT15_C5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D5", + "name": "PlateT15_D5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E5", + "name": "PlateT15_E5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F5", + "name": "PlateT15_F5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G5", + "name": "PlateT15_G5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H5", + "name": "PlateT15_H5", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A6", + "name": "PlateT15_A6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B6", + "name": "PlateT15_B6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C6", + "name": "PlateT15_C6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D6", + "name": "PlateT15_D6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E6", + "name": "PlateT15_E6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F6", + "name": "PlateT15_F6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G6", + "name": "PlateT15_G6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H6", + "name": "PlateT15_H6", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A7", + "name": "PlateT15_A7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B7", + "name": "PlateT15_B7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C7", + "name": "PlateT15_C7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D7", + "name": "PlateT15_D7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E7", + "name": "PlateT15_E7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F7", + "name": "PlateT15_F7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G7", + "name": "PlateT15_G7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H7", + "name": "PlateT15_H7", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A8", + "name": "PlateT15_A8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B8", + "name": "PlateT15_B8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C8", + "name": "PlateT15_C8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D8", + "name": "PlateT15_D8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E8", + "name": "PlateT15_E8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F8", + "name": "PlateT15_F8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G8", + "name": "PlateT15_G8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H8", + "name": "PlateT15_H8", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A9", + "name": "PlateT15_A9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B9", + "name": "PlateT15_B9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C9", + "name": "PlateT15_C9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D9", + "name": "PlateT15_D9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E9", + "name": "PlateT15_E9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F9", + "name": "PlateT15_F9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G9", + "name": "PlateT15_G9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H9", + "name": "PlateT15_H9", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A10", + "name": "PlateT15_A10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B10", + "name": "PlateT15_B10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C10", + "name": "PlateT15_C10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D10", + "name": "PlateT15_D10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E10", + "name": "PlateT15_E10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F10", + "name": "PlateT15_F10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G10", + "name": "PlateT15_G10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H10", + "name": "PlateT15_H10", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A11", + "name": "PlateT15_A11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B11", + "name": "PlateT15_B11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C11", + "name": "PlateT15_C11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D11", + "name": "PlateT15_D11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E11", + "name": "PlateT15_E11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F11", + "name": "PlateT15_F11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G11", + "name": "PlateT15_G11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H11", + "name": "PlateT15_H11", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_A12", + "name": "PlateT15_A12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_B12", + "name": "PlateT15_B12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_C12", + "name": "PlateT15_C12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_D12", + "name": "PlateT15_D12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_E12", + "name": "PlateT15_E12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_F12", + "name": "PlateT15_F12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_G12", + "name": "PlateT15_G12", + + "children": [], + "parent": "PlateT15", + "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": "PlateT15_H12", + "name": "PlateT15_H12", + + "children": [], + "parent": "PlateT15", + "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": "trash", + "name": "trash", + + "children": [], + "parent": "T16", + "type": "plate", + "class": "", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "PRCXI9300Trash", + "size_x": 127, + "size_y": 85.5, + "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" + } + } + } + ], + "edges": [] +} From 847a300af37c737abdc671f24ff98637db6a0773 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 02:57:03 +0800 Subject: [PATCH 05/40] update registry --- unilabos/registry/devices/laiyu_liquid.yaml | 1922 ----------------- .../registry/devices/laiyu_liquid_test.yaml | 2 +- unilabos/registry/devices/liquid_handler.yaml | 33 +- 3 files changed, 13 insertions(+), 1944 deletions(-) delete mode 100644 unilabos/registry/devices/laiyu_liquid.yaml diff --git a/unilabos/registry/devices/laiyu_liquid.yaml b/unilabos/registry/devices/laiyu_liquid.yaml deleted file mode 100644 index 98201a7d..00000000 --- a/unilabos/registry/devices/laiyu_liquid.yaml +++ /dev/null @@ -1,1922 +0,0 @@ -laiyu_liquid: - category: - - liquid_handler - - workstation - - laiyu_liquid - class: - action_value_mappings: - add_liquid: - feedback: {} - goal: - asp_vols: asp_vols - dis_vols: dis_vols - flow_rates: flow_rates - offsets: offsets - reagent_sources: reagent_sources - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: reagent_sources - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: targets - 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: - flow_rates: flow_rates - 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: - success: success - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: resources - 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-add_resource: - feedback: {} - goal: {} - goal_default: - name: null - position: null - resource_type: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - name: - type: string - position: - items: - type: number - type: array - resource_type: - type: string - required: - - name - - resource_type - - position - type: object - result: {} - required: - - goal - title: add_resource参数 - type: object - type: UniLabJsonCommand - dispense: - feedback: {} - goal: - flow_rates: flow_rates - resources: resources - 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: - success: success - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: resources - 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_tip: - feedback: {} - goal: - 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: - success: success - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: tip_spots - 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 - 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: {} - placeholder_keys: - well: unilabos_resources - result: - success: success - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: well - 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_tip: - feedback: {} - goal: - tip_rack: tip_rack - 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_rack: unilabos_resources - result: - success: success - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: tip_spots - 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 - setup: - feedback: {} - goal: - string: string - 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 - stop: - feedback: {} - goal: - string: string - 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 - transfer: - feedback: {} - goal: - source: source - target: target - tip_position: tip_position - tip_rack: tip_rack - volume: volume - 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: - source: unilabos_resources - target: unilabos_resources - tip_rack: unilabos_resources - result: - success: success - 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: offsets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: sources - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: targets - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: tip_racks - 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.laiyu_liquid.core.laiyu_liquid_main:LaiYuLiquid - status_types: - current_position: String - current_volume: float - is_connected: bool - is_initialized: bool - status: dict - tip_attached: bool - type: python - config_info: - - default: /dev/cu.usbserial-3130 - description: RS485转USB端口 - name: port - type: string - - default: 1 - description: 设备地址 - name: address - type: integer - - default: 9600 - description: 波特率 - name: baudrate - type: integer - - default: 5.0 - description: 通信超时时间 (秒) - name: timeout - type: number - - default: 340.0 - description: 工作台宽度 (mm) - name: deck_width - type: number - - default: 250.0 - description: 工作台高度 (mm) - name: deck_height - type: number - - default: 160.0 - description: 工作台深度 (mm) - name: deck_depth - type: number - - default: 77000.0 - description: 最大体积 (μL) - name: max_volume - type: number - - default: 0.1 - description: 最小体积 (μL) - name: min_volume - type: number - - default: 100.0 - description: 最大速度 (mm/s) - name: max_speed - type: number - - default: 50.0 - description: 加速度 (mm/s²) - name: acceleration - type: number - - default: 50.0 - description: 安全高度 (mm) - name: safe_height - type: number - - default: 10.0 - description: 吸头拾取深度 (mm) - name: tip_pickup_depth - type: number - - default: true - description: 液面检测功能 - name: liquid_detection - type: boolean - - default: 10.0 - description: X轴最小安全边距 (mm) - name: safety_margin_x_min - type: number - - default: 10.0 - description: X轴最大安全边距 (mm) - name: safety_margin_x_max - type: number - - default: 10.0 - description: Y轴最小安全边距 (mm) - name: safety_margin_y_min - type: number - - default: 10.0 - description: Y轴最大安全边距 (mm) - name: safety_margin_y_max - type: number - - default: 20.0 - description: Z轴安全间隙 (mm) - name: safety_margin_z_clearance - type: number - description: LaiYu液体处理工作站,基于RS485通信协议的自动化液体处理设备。集成XYZ三轴运动平台和SOPA气动式移液器,支持精确的液体分配和转移操作。具备完整的硬件控制、资源管理和标准化接口,适用于实验室自动化液体处理、样品制备、试剂分配等应用场景。设备通过RS485总线控制步进电机和移液器,提供高精度的位置控制和液体处理能力。 - handles: [] - icon: '' - init_param_schema: - config: - properties: - config: - type: string - required: [] - type: object - data: - properties: - current_position: - items: - type: number - type: array - current_volume: - type: number - is_connected: - type: boolean - is_initialized: - type: boolean - status: - type: object - tip_attached: - type: boolean - required: - - current_position - - current_volume - - is_connected - - is_initialized - - tip_attached - - status - type: object - model: - mesh: laiyu_liquid_handler - type: device - version: 1.0.0 diff --git a/unilabos/registry/devices/laiyu_liquid_test.yaml b/unilabos/registry/devices/laiyu_liquid_test.yaml index bbc0e873..282242df 100644 --- a/unilabos/registry/devices/laiyu_liquid_test.yaml +++ b/unilabos/registry/devices/laiyu_liquid_test.yaml @@ -197,7 +197,7 @@ xyz_stepper_controller: title: wait_complete参数 type: object type: UniLabJsonCommand - module: unilabos.devices.laiyu_liquid_test.xyz_stepper_driver:XYZStepperController + module: unilabos.devices.liquid_handling.laiyu.drivers.xyz_stepper_driver:XYZStepperController status_types: status: list type: python diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index c611d211..b0656d12 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -4019,8 +4019,7 @@ liquid_handler: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -4176,11 +4175,9 @@ liquid_handler: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -5043,8 +5040,7 @@ liquid_handler.biomek: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -5187,11 +5183,9 @@ liquid_handler.biomek: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 @@ -9671,8 +9665,7 @@ liquid_handler.prcxi: mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' - mix_times: - - 0 + mix_times: 0 mix_vol: 0 none_keys: - '' @@ -9828,11 +9821,9 @@ liquid_handler.prcxi: mix_stage: type: string mix_times: - items: - maximum: 2147483647 - minimum: -2147483648 - type: integer - type: array + maximum: 2147483647 + minimum: -2147483648 + type: integer mix_vol: maximum: 2147483647 minimum: -2147483648 From e6d8d41183b18ae4d1187c8c5831e9025136e837 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 26 Dec 2025 03:26:06 +0800 Subject: [PATCH 06/40] bump version to 0.10.3 --- .conda/recipe.yaml | 2 +- recipes/msgs/recipe.yaml | 2 +- recipes/unilabos/recipe.yaml | 2 +- setup.py | 2 +- unilabos/__init__.py | 2 +- .../registry/devices/laiyu_liquid_test.yaml | 515 +++++++++++++++--- unilabos_msgs/package.xml | 2 +- 7 files changed, 440 insertions(+), 87 deletions(-) diff --git a/.conda/recipe.yaml b/.conda/recipe.yaml index 62b06337..f7dca724 100644 --- a/.conda/recipe.yaml +++ b/.conda/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: 0.10.12 + version: 0.10.13 source: path: ../unilabos diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index 86150f0d..399be6ca 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -1,6 +1,6 @@ package: name: ros-humble-unilabos-msgs - version: 0.10.12 + version: 0.10.13 source: path: ../../unilabos_msgs target_directory: src diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index 0f79b260..34bd39c7 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.10.12" + version: "0.10.13" source: path: ../.. diff --git a/setup.py b/setup.py index 4f733d06..cb687c20 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ package_name = 'unilabos' setup( name=package_name, - version='0.10.12', + version='0.10.13', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/unilabos/__init__.py b/unilabos/__init__.py index a37fec72..f63b48ab 100644 --- a/unilabos/__init__.py +++ b/unilabos/__init__.py @@ -1 +1 @@ -__version__ = "0.10.12" +__version__ = "0.10.13" diff --git a/unilabos/registry/devices/laiyu_liquid_test.yaml b/unilabos/registry/devices/laiyu_liquid_test.yaml index 282242df..dcaa9818 100644 --- a/unilabos/registry/devices/laiyu_liquid_test.yaml +++ b/unilabos/registry/devices/laiyu_liquid_test.yaml @@ -3,11 +3,11 @@ xyz_stepper_controller: - laiyu_liquid_test class: action_value_mappings: - auto-define_current_as_zero: + auto-degrees_to_steps: feedback: {} goal: {} goal_default: - save_path: work_origin.json + degrees: null handles: {} placeholder_keys: {} result: {} @@ -17,23 +17,22 @@ xyz_stepper_controller: feedback: {} goal: properties: - save_path: - default: work_origin.json - type: string - required: [] + degrees: + type: number + required: + - degrees type: object result: {} required: - goal - title: define_current_as_zero参数 + title: degrees_to_steps参数 type: object type: UniLabJsonCommand - auto-enable: + auto-emergency_stop: feedback: {} goal: {} goal_default: axis: null - state: null handles: {} placeholder_keys: {} result: {} @@ -44,27 +43,415 @@ xyz_stepper_controller: goal: properties: axis: - type: string - state: - type: boolean + type: object required: - axis - - state type: object result: {} required: - goal - title: enable参数 + title: emergency_stop参数 type: object type: UniLabJsonCommand - auto-move_to: + auto-enable_all_axes: + feedback: {} + goal: {} + goal_default: + enable: true + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + enable: + default: true + type: boolean + required: [] + type: object + result: {} + required: + - goal + title: enable_all_axes参数 + type: object + type: UniLabJsonCommand + auto-enable_motor: feedback: {} goal: {} goal_default: - acc: 500 axis: null - precision: 50 - speed: 2000 + enable: true + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + axis: + type: object + enable: + default: true + type: boolean + required: + - axis + type: object + result: {} + required: + - goal + title: enable_motor参数 + type: object + type: UniLabJsonCommand + auto-home_all_axes: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: home_all_axes参数 + type: object + type: UniLabJsonCommand + auto-home_axis: + feedback: {} + goal: {} + goal_default: + axis: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + axis: + type: object + required: + - axis + type: object + result: {} + required: + - goal + title: home_axis参数 + type: object + type: UniLabJsonCommand + auto-move_to_position: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + axis: null + position: null + precision: 100 + speed: 5000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + axis: + type: object + position: + type: integer + precision: + default: 100 + type: integer + speed: + default: 5000 + type: integer + required: + - axis + - position + type: object + result: {} + required: + - goal + title: move_to_position参数 + type: object + type: UniLabJsonCommand + auto-move_to_position_degrees: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + axis: null + degrees: null + precision: 100 + speed: 5000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + axis: + type: object + degrees: + type: number + precision: + default: 100 + type: integer + speed: + default: 5000 + type: integer + required: + - axis + - degrees + type: object + result: {} + required: + - goal + title: move_to_position_degrees参数 + type: object + type: UniLabJsonCommand + auto-move_to_position_revolutions: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + axis: null + precision: 100 + revolutions: null + speed: 5000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + axis: + type: object + precision: + default: 100 + type: integer + revolutions: + type: number + speed: + default: 5000 + type: integer + required: + - axis + - revolutions + type: object + result: {} + required: + - goal + title: move_to_position_revolutions参数 + type: object + type: UniLabJsonCommand + auto-move_xyz: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + speed: 5000 + x: null + y: null + z: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + speed: + default: 5000 + type: integer + x: + type: string + y: + type: string + z: + type: string + required: [] + type: object + result: {} + required: + - goal + title: move_xyz参数 + type: object + type: UniLabJsonCommand + auto-move_xyz_degrees: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + speed: 5000 + x_deg: null + y_deg: null + z_deg: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + speed: + default: 5000 + type: integer + x_deg: + type: string + y_deg: + type: string + z_deg: + type: string + required: [] + type: object + result: {} + required: + - goal + title: move_xyz_degrees参数 + type: object + type: UniLabJsonCommand + auto-move_xyz_revolutions: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + speed: 5000 + x_rev: null + y_rev: null + z_rev: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + speed: + default: 5000 + type: integer + x_rev: + type: string + y_rev: + type: string + z_rev: + type: string + required: [] + type: object + result: {} + required: + - goal + title: move_xyz_revolutions参数 + type: object + type: UniLabJsonCommand + auto-revolutions_to_steps: + feedback: {} + goal: {} + goal_default: + revolutions: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + revolutions: + type: number + required: + - revolutions + type: object + result: {} + required: + - goal + title: revolutions_to_steps参数 + type: object + type: UniLabJsonCommand + auto-set_speed_mode: + feedback: {} + goal: {} + goal_default: + acceleration: 1000 + axis: null + speed: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + acceleration: + default: 1000 + type: integer + axis: + type: object + speed: + type: integer + required: + - axis + - speed + type: object + result: {} + required: + - goal + title: set_speed_mode参数 + type: object + type: UniLabJsonCommand + auto-steps_to_degrees: + feedback: {} + goal: {} + goal_default: steps: null handles: {} placeholder_keys: {} @@ -75,38 +462,22 @@ xyz_stepper_controller: feedback: {} goal: properties: - acc: - default: 500 - type: integer - axis: - type: string - precision: - default: 50 - type: integer - speed: - default: 2000 - type: integer steps: type: integer required: - - axis - steps type: object result: {} required: - goal - title: move_to参数 + title: steps_to_degrees参数 type: object type: UniLabJsonCommand - auto-move_xyz_work: + auto-steps_to_revolutions: feedback: {} goal: {} goal_default: - acc: 1500 - speed: 100 - x: 0.0 - y: 0.0 - z: 0.0 + steps: null handles: {} placeholder_keys: {} result: {} @@ -116,35 +487,21 @@ xyz_stepper_controller: feedback: {} goal: properties: - acc: - default: 1500 + steps: type: integer - speed: - default: 100 - type: integer - x: - default: 0.0 - type: number - y: - default: 0.0 - type: number - z: - default: 0.0 - type: number - required: [] + required: + - steps type: object result: {} required: - goal - title: move_xyz_work参数 + title: steps_to_revolutions参数 type: object type: UniLabJsonCommand - auto-return_to_work_origin: + auto-stop_all_axes: feedback: {} goal: {} - goal_default: - acc: 800 - speed: 200 + goal_default: {} handles: {} placeholder_keys: {} result: {} @@ -153,22 +510,16 @@ xyz_stepper_controller: properties: feedback: {} goal: - properties: - acc: - default: 800 - type: integer - speed: - default: 200 - type: integer + properties: {} required: [] type: object result: {} required: - goal - title: return_to_work_origin参数 + title: stop_all_axes参数 type: object type: UniLabJsonCommand - auto-wait_complete: + auto-wait_for_completion: feedback: {} goal: {} goal_default: @@ -184,22 +535,23 @@ xyz_stepper_controller: goal: properties: axis: - type: string + type: object timeout: default: 30.0 - type: string + type: number required: - axis type: object result: {} required: - goal - title: wait_complete参数 + title: wait_for_completion参数 type: object type: UniLabJsonCommand module: unilabos.devices.liquid_handling.laiyu.drivers.xyz_stepper_driver:XYZStepperController status_types: - status: list + all_positions: dict + motor_status: unilabos.devices.liquid_handling.laiyu.drivers.xyz_stepper_driver:MotorPosition type: python config_info: [] description: 新XYZ控制器 @@ -210,23 +562,24 @@ xyz_stepper_controller: properties: baudrate: default: 115200 - type: string - client: - type: string - origin_path: - default: unilabos/devices/laiyu_liquid_test/work_origin.json - type: string + type: integer port: - default: /dev/ttyUSB0 type: string - required: [] + timeout: + default: 1.0 + type: number + required: + - port type: object data: properties: - status: - type: array + all_positions: + type: object + motor_status: + type: object required: - - status + - motor_status + - all_positions type: object registry_type: device version: 1.0.0 diff --git a/unilabos_msgs/package.xml b/unilabos_msgs/package.xml index dbb20383..325fc131 100644 --- a/unilabos_msgs/package.xml +++ b/unilabos_msgs/package.xml @@ -2,7 +2,7 @@ unilabos_msgs - 0.10.12 + 0.10.13 ROS2 Messages package for unilabos devices Junhan Chang Xuwznln From 394c140830089124267a9c7bcda8dcc8b5375b05 Mon Sep 17 00:00:00 2001 From: Xianwei Qi Date: Fri, 26 Dec 2025 16:24:55 +0800 Subject: [PATCH 07/40] test_transfer_liquid --- .../liquid_handling/test_transfer_liquid.py | 505 ++++++++++++++++++ .../liquid_handler_abstract.py | 143 +++-- .../liquid_handling/test_transfer_liquid.py | 13 + 3 files changed, 622 insertions(+), 39 deletions(-) create mode 100644 test/devices/liquid_handling/test_transfer_liquid.py create mode 100644 unilabos/devices/liquid_handling/test_transfer_liquid.py diff --git a/test/devices/liquid_handling/test_transfer_liquid.py b/test/devices/liquid_handling/test_transfer_liquid.py new file mode 100644 index 00000000..9896aac5 --- /dev/null +++ b/test/devices/liquid_handling/test_transfer_liquid.py @@ -0,0 +1,505 @@ +import asyncio +from dataclasses import dataclass +from typing import Any, Iterable, List, Optional, Sequence, Tuple + +import pytest + +from unilabos.devices.liquid_handling.liquid_handler_abstract import LiquidHandlerAbstract + + +@dataclass(frozen=True) +class DummyContainer: + name: str + + def __repr__(self) -> str: # pragma: no cover + return f"DummyContainer({self.name})" + + +@dataclass(frozen=True) +class DummyTipSpot: + name: str + + def __repr__(self) -> str: # pragma: no cover + return f"DummyTipSpot({self.name})" + + +def make_tip_iter(n: int = 256) -> Iterable[List[DummyTipSpot]]: + """Yield lists so code can safely call `tip.extend(next(self.current_tip))`.""" + for i in range(n): + yield [DummyTipSpot(f"tip_{i}")] + + +class FakeLiquidHandler(LiquidHandlerAbstract): + """不初始化真实 backend/deck;仅用来记录 transfer_liquid 内部调用序列。""" + + def __init__(self, channel_num: int = 8): + # 不调用 super().__init__,避免真实硬件/后端依赖 + self.channel_num = channel_num + self.support_touch_tip = True + self.current_tip = iter(make_tip_iter()) + self.calls: List[Tuple[str, Any]] = [] + + async def pick_up_tips(self, tip_spots, use_channels=None, offsets=None, **backend_kwargs): + self.calls.append(("pick_up_tips", {"tips": list(tip_spots), "use_channels": use_channels})) + + async def aspirate( + self, + resources: Sequence[Any], + vols: List[float], + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Any = None, + liquid_height: Any = None, + blow_out_air_volume: Any = None, + spread: str = "wide", + **backend_kwargs, + ): + self.calls.append( + ( + "aspirate", + { + "resources": list(resources), + "vols": list(vols), + "use_channels": list(use_channels) if use_channels is not None else None, + "flow_rates": list(flow_rates) if flow_rates is not None else None, + "offsets": list(offsets) if offsets is not None else None, + "liquid_height": list(liquid_height) if liquid_height is not None else None, + "blow_out_air_volume": list(blow_out_air_volume) if blow_out_air_volume is not None else None, + }, + ) + ) + + async def dispense( + self, + resources: Sequence[Any], + vols: List[float], + use_channels: Optional[List[int]] = None, + flow_rates: Optional[List[Optional[float]]] = None, + offsets: Any = None, + liquid_height: Any = None, + blow_out_air_volume: Any = None, + spread: str = "wide", + **backend_kwargs, + ): + self.calls.append( + ( + "dispense", + { + "resources": list(resources), + "vols": list(vols), + "use_channels": list(use_channels) if use_channels is not None else None, + "flow_rates": list(flow_rates) if flow_rates is not None else None, + "offsets": list(offsets) if offsets is not None else None, + "liquid_height": list(liquid_height) if liquid_height is not None else None, + "blow_out_air_volume": list(blow_out_air_volume) if blow_out_air_volume is not None else None, + }, + ) + ) + + async def discard_tips(self, use_channels=None, *args, **kwargs): + # 有的分支是 discard_tips(use_channels=[0]),有的分支是 discard_tips([0..7])(位置参数) + self.calls.append(("discard_tips", {"use_channels": list(use_channels) if use_channels is not None else None})) + + async def custom_delay(self, seconds=0, msg=None): + self.calls.append(("custom_delay", {"seconds": seconds, "msg": msg})) + + async def touch_tip(self, targets): + # 原实现会访问 targets.get_size_x() 等;测试里只记录调用 + self.calls.append(("touch_tip", {"targets": targets})) + + async def mix(self, targets, mix_time=None, mix_vol=None, height_to_bottom=None, offsets=None, mix_rate=None, none_keys=None): + self.calls.append( + ( + "mix", + { + "targets": targets, + "mix_time": mix_time, + "mix_vol": mix_vol, + }, + ) + ) + + +def run(coro): + return asyncio.run(coro) + + +def test_one_to_one_single_channel_basic_calls(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(64)) + + sources = [DummyContainer(f"S{i}") for i in range(3)] + targets = [DummyContainer(f"T{i}") for i in range(3)] + + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=[0], + asp_vols=[1, 2, 3], + dis_vols=[4, 5, 6], + mix_times=None, # 应该仍能执行(不 mix) + ) + ) + + assert [c[0] for c in lh.calls].count("pick_up_tips") == 3 + assert [c[0] for c in lh.calls].count("aspirate") == 3 + assert [c[0] for c in lh.calls].count("dispense") == 3 + assert [c[0] for c in lh.calls].count("discard_tips") == 3 + + # 每次 aspirate/dispense 都是单孔列表 + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + assert aspirates[0]["resources"] == [sources[0]] + assert aspirates[0]["vols"] == [1.0] + + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert dispenses[2]["resources"] == [targets[2]] + assert dispenses[2]["vols"] == [6.0] + + +def test_one_to_one_single_channel_before_stage_mixes_prior_to_aspirate(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(16)) + + source = DummyContainer("S0") + target = DummyContainer("T0") + + run( + lh.transfer_liquid( + sources=[source], + targets=[target], + tip_racks=[], + use_channels=[0], + asp_vols=[5], + dis_vols=[5], + mix_stage="before", + mix_times=1, + mix_vol=3, + ) + ) + + names = [name for name, _ in lh.calls] + assert names.count("mix") == 1 + assert names.index("mix") < names.index("aspirate") + + +def test_one_to_one_eight_channel_groups_by_8(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(256)) + + sources = [DummyContainer(f"S{i}") for i in range(16)] + targets = [DummyContainer(f"T{i}") for i in range(16)] + asp_vols = list(range(1, 17)) + dis_vols = list(range(101, 117)) + + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=list(range(8)), + asp_vols=asp_vols, + dis_vols=dis_vols, + mix_times=0, # 触发逻辑但不 mix + ) + ) + + # 16 个任务 -> 2 组,每组 8 通道一起做 + assert [c[0] for c in lh.calls].count("pick_up_tips") == 2 + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert len(aspirates) == 2 + assert len(dispenses) == 2 + + assert aspirates[0]["resources"] == sources[0:8] + assert aspirates[0]["vols"] == [float(v) for v in asp_vols[0:8]] + assert dispenses[1]["resources"] == targets[8:16] + assert dispenses[1]["vols"] == [float(v) for v in dis_vols[8:16]] + + +def test_one_to_one_eight_channel_requires_multiple_of_8_targets(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(64)) + + sources = [DummyContainer(f"S{i}") for i in range(9)] + targets = [DummyContainer(f"T{i}") for i in range(9)] + + with pytest.raises(ValueError, match="multiple of 8"): + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=list(range(8)), + asp_vols=[1] * 9, + dis_vols=[1] * 9, + mix_times=0, + ) + ) + + +def test_one_to_one_eight_channel_parameter_lists_are_chunked_per_8(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(512)) + + sources = [DummyContainer(f"S{i}") for i in range(16)] + targets = [DummyContainer(f"T{i}") for i in range(16)] + asp_vols = [i + 1 for i in range(16)] + dis_vols = [200 + i for i in range(16)] + asp_flow_rates = [0.1 * (i + 1) for i in range(16)] + dis_flow_rates = [0.2 * (i + 1) for i in range(16)] + offsets = [f"offset_{i}" for i in range(16)] + liquid_heights = [i * 0.5 for i in range(16)] + blow_out_air_volume = [i + 0.05 for i in range(16)] + + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=list(range(8)), + asp_vols=asp_vols, + dis_vols=dis_vols, + asp_flow_rates=asp_flow_rates, + dis_flow_rates=dis_flow_rates, + offsets=offsets, + liquid_height=liquid_heights, + blow_out_air_volume=blow_out_air_volume, + mix_times=0, + ) + ) + + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert len(aspirates) == len(dispenses) == 2 + + for batch_idx in range(2): + start = batch_idx * 8 + end = start + 8 + asp_call = aspirates[batch_idx] + dis_call = dispenses[batch_idx] + assert asp_call["resources"] == sources[start:end] + assert asp_call["flow_rates"] == asp_flow_rates[start:end] + assert asp_call["offsets"] == offsets[start:end] + assert asp_call["liquid_height"] == liquid_heights[start:end] + assert asp_call["blow_out_air_volume"] == blow_out_air_volume[start:end] + assert dis_call["flow_rates"] == dis_flow_rates[start:end] + assert dis_call["offsets"] == offsets[start:end] + assert dis_call["liquid_height"] == liquid_heights[start:end] + assert dis_call["blow_out_air_volume"] == blow_out_air_volume[start:end] + + +def test_one_to_one_eight_channel_handles_32_tasks_four_batches(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(1024)) + + sources = [DummyContainer(f"S{i}") for i in range(32)] + targets = [DummyContainer(f"T{i}") for i in range(32)] + asp_vols = [i + 1 for i in range(32)] + dis_vols = [300 + i for i in range(32)] + + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=list(range(8)), + asp_vols=asp_vols, + dis_vols=dis_vols, + mix_times=0, + ) + ) + + pick_calls = [name for name, _ in lh.calls if name == "pick_up_tips"] + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert len(pick_calls) == 4 + assert len(aspirates) == len(dispenses) == 4 + assert aspirates[0]["resources"] == sources[0:8] + assert aspirates[-1]["resources"] == sources[24:32] + assert dispenses[0]["resources"] == targets[0:8] + assert dispenses[-1]["resources"] == targets[24:32] + + +def test_one_to_many_single_channel_aspirates_total_when_asp_vol_too_small(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(64)) + + source = DummyContainer("SRC") + targets = [DummyContainer(f"T{i}") for i in range(3)] + dis_vols = [10, 20, 30] # sum=60 + + run( + lh.transfer_liquid( + sources=[source], + targets=targets, + tip_racks=[], + use_channels=[0], + asp_vols=10, # 小于 sum(dis_vols) -> 应吸 60 + dis_vols=dis_vols, + mix_times=0, + ) + ) + + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + assert len(aspirates) == 1 + assert aspirates[0]["resources"] == [source] + assert aspirates[0]["vols"] == [60.0] + assert aspirates[0]["use_channels"] == [0] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert [d["vols"][0] for d in dispenses] == [10.0, 20.0, 30.0] + + +def test_one_to_many_eight_channel_basic(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(128)) + + source = DummyContainer("SRC") + targets = [DummyContainer(f"T{i}") for i in range(8)] + dis_vols = [i + 1 for i in range(8)] + + run( + lh.transfer_liquid( + sources=[source], + targets=targets, + tip_racks=[], + use_channels=list(range(8)), + asp_vols=999, # one-to-many 8ch 会按 dis_vols 吸(每通道各自) + dis_vols=dis_vols, + mix_times=0, + ) + ) + + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + assert aspirates[0]["resources"] == [source] * 8 + assert aspirates[0]["vols"] == [float(v) for v in dis_vols] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert dispenses[0]["resources"] == targets + assert dispenses[0]["vols"] == [float(v) for v in dis_vols] + + +def test_many_to_one_single_channel_standard_dispense_equals_asp_by_default(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(128)) + + sources = [DummyContainer(f"S{i}") for i in range(3)] + target = DummyContainer("T") + asp_vols = [5, 6, 7] + + run( + lh.transfer_liquid( + sources=sources, + targets=[target], + tip_racks=[], + use_channels=[0], + asp_vols=asp_vols, + dis_vols=1, # many-to-one 允许标量;非比例模式下实际每次分液=对应 asp_vol + mix_times=0, + ) + ) + + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert [d["vols"][0] for d in dispenses] == [float(v) for v in asp_vols] + assert all(d["resources"] == [target] for d in dispenses) + + +def test_many_to_one_single_channel_before_stage_mixes_target_once(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(128)) + + sources = [DummyContainer("S0"), DummyContainer("S1")] + target = DummyContainer("T") + + run( + lh.transfer_liquid( + sources=sources, + targets=[target], + tip_racks=[], + use_channels=[0], + asp_vols=[5, 6], + dis_vols=1, + mix_stage="before", + mix_times=2, + mix_vol=4, + ) + ) + + names = [name for name, _ in lh.calls] + assert names[0] == "mix" + assert names.count("mix") == 1 + + +def test_many_to_one_single_channel_proportional_mixing_uses_dis_vols_per_source(): + lh = FakeLiquidHandler(channel_num=1) + lh.current_tip = iter(make_tip_iter(128)) + + sources = [DummyContainer(f"S{i}") for i in range(3)] + target = DummyContainer("T") + asp_vols = [5, 6, 7] + dis_vols = [1, 2, 3] + + run( + lh.transfer_liquid( + sources=sources, + targets=[target], + tip_racks=[], + use_channels=[0], + asp_vols=asp_vols, + dis_vols=dis_vols, # 比例模式 + mix_times=0, + ) + ) + + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert [d["vols"][0] for d in dispenses] == [float(v) for v in dis_vols] + + +def test_many_to_one_eight_channel_basic(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(256)) + + sources = [DummyContainer(f"S{i}") for i in range(8)] + target = DummyContainer("T") + asp_vols = [10 + i for i in range(8)] + + run( + lh.transfer_liquid( + sources=sources, + targets=[target], + tip_racks=[], + use_channels=list(range(8)), + asp_vols=asp_vols, + dis_vols=999, # 非比例模式下每通道分液=对应 asp_vol + mix_times=0, + ) + ) + + aspirates = [payload for name, payload in lh.calls if name == "aspirate"] + dispenses = [payload for name, payload in lh.calls if name == "dispense"] + assert aspirates[0]["resources"] == sources + assert aspirates[0]["vols"] == [float(v) for v in asp_vols] + assert dispenses[0]["resources"] == [target] * 8 + assert dispenses[0]["vols"] == [float(v) for v in asp_vols] + + +def test_transfer_liquid_mode_detection_unsupported_shape_raises(): + lh = FakeLiquidHandler(channel_num=8) + lh.current_tip = iter(make_tip_iter(64)) + + sources = [DummyContainer("S0"), DummyContainer("S1")] + targets = [DummyContainer("T0"), DummyContainer("T1"), DummyContainer("T2")] + + with pytest.raises(ValueError, match="Unsupported transfer mode"): + run( + lh.transfer_liquid( + sources=sources, + targets=targets, + tip_racks=[], + use_channels=[0], + asp_vols=[1, 1], + dis_vols=[1, 1, 1], + mix_times=0, + ) + ) + diff --git a/unilabos/devices/liquid_handling/liquid_handler_abstract.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py index e849ffb9..306902ff 100644 --- a/unilabos/devices/liquid_handling/liquid_handler_abstract.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -969,11 +969,19 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): One or more TipRacks providing fresh tips. is_96_well Set *True* to use the 96‑channel head. + mix_stage + When to mix the target wells relative to dispensing. Default "none" means + no mixing occurs even if mix_times is provided. Use "before", "after", or + "both" to mix at the corresponding stage(s). + mix_times + Number of mix cycles. If *None* (default) no mixing occurs regardless of + mix_stage. """ # 确保 use_channels 有默认值 if use_channels is None: - use_channels = [0] if self.channel_num >= 1 else list(range(self.channel_num)) + # 默认使用设备所有通道(例如 8 通道移液站默认就是 0-7) + use_channels = list(range(self.channel_num)) if self.channel_num > 0 else [0] if is_96_well: pass # This mode is not verified. @@ -1001,42 +1009,42 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): if mix_times is not None: mix_times = int(mix_times) - # 识别传输模式 - num_sources = len(sources) - num_targets = len(targets) - - if num_sources == 1 and num_targets > 1: - # 模式1: 一对多 (1 source -> N targets) - await self._transfer_one_to_many( - sources[0], targets, tip_racks, use_channels, - asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, - offsets, touch_tip, liquid_height, blow_out_air_volume, - spread, mix_stage, mix_times, mix_vol, mix_rate, - mix_liquid_height, delays - ) - elif num_sources > 1 and num_targets == 1: - # 模式2: 多对一 (N sources -> 1 target) - await self._transfer_many_to_one( - sources, targets[0], tip_racks, use_channels, - asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, - offsets, touch_tip, liquid_height, blow_out_air_volume, - spread, mix_stage, mix_times, mix_vol, mix_rate, - mix_liquid_height, delays - ) - elif num_sources == num_targets: - # 模式3: 一对一 (N sources -> N targets) - 原有逻辑 - await self._transfer_one_to_one( - sources, targets, tip_racks, use_channels, - asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, - offsets, touch_tip, liquid_height, blow_out_air_volume, - spread, mix_stage, mix_times, mix_vol, mix_rate, - mix_liquid_height, delays - ) - else: - raise ValueError( - f"Unsupported transfer mode: {num_sources} sources -> {num_targets} targets. " - "Supported modes: 1->N, N->1, or N->N." - ) + # 识别传输模式(mix_times 为 None 也应该能正常移液,只是不做 mix) + num_sources = len(sources) + num_targets = len(targets) + + if num_sources == 1 and num_targets > 1: + # 模式1: 一对多 (1 source -> N targets) + await self._transfer_one_to_many( + sources[0], targets, tip_racks, use_channels, + asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, + offsets, touch_tip, liquid_height, blow_out_air_volume, + spread, mix_stage, mix_times, mix_vol, mix_rate, + mix_liquid_height, delays + ) + elif num_sources > 1 and num_targets == 1: + # 模式2: 多对一 (N sources -> 1 target) + await self._transfer_many_to_one( + sources, targets[0], tip_racks, use_channels, + asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, + offsets, touch_tip, liquid_height, blow_out_air_volume, + spread, mix_stage, mix_times, mix_vol, mix_rate, + mix_liquid_height, delays + ) + elif num_sources == num_targets: + # 模式3: 一对一 (N sources -> N targets) + await self._transfer_one_to_one( + sources, targets, tip_racks, use_channels, + asp_vols, dis_vols, asp_flow_rates, dis_flow_rates, + offsets, touch_tip, liquid_height, blow_out_air_volume, + spread, mix_stage, mix_times, mix_vol, mix_rate, + mix_liquid_height, delays + ) + else: + raise ValueError( + f"Unsupported transfer mode: {num_sources} sources -> {num_targets} targets. " + "Supported modes: 1->N, N->1, or N->N." + ) async def _transfer_one_to_one( self, @@ -1076,6 +1084,16 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): tip.extend(next(self.current_tip)) await self.pick_up_tips(tip) + if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: + await self.mix( + 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, + ) + await self.aspirate( resources=[sources[_]], vols=[asp_vols[_]], @@ -1136,6 +1154,16 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): current_dis_blow_out_air_volume = blow_out_air_volume[i: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 + if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: + 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, + ) + await self.aspirate( resources=current_reagent_sources, vols=current_asp_vols, @@ -1217,6 +1245,17 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): tip.extend(next(self.current_tip)) await self.pick_up_tips(tip) + if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: + for idx, target in enumerate(targets): + await self.mix( + targets=[target], + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets[idx:idx + 1] if offsets and len(offsets) > idx else None, + height_to_bottom=mix_liquid_height if mix_liquid_height else None, + mix_rate=mix_rate if mix_rate else None, + ) + # 从源容器吸液(总体积) await self.aspirate( resources=[source], @@ -1281,6 +1320,16 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): current_asp_liquid_height = liquid_height[0:1] * 8 if liquid_height and len(liquid_height) > 0 else [None] * 8 current_asp_blow_out_air_volume = blow_out_air_volume[0:1] * 8 if blow_out_air_volume and len(blow_out_air_volume) > 0 else [None] * 8 + if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: + await self.mix( + targets=current_targets, + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets[i:i + 8] 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, + ) + # 从源容器吸液(8个通道都从同一个源,但每个通道的吸液体积不同) await self.aspirate( resources=[source] * 8, # 8个通道都从同一个源 @@ -1379,8 +1428,14 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): # 单通道模式:多次吸液,一次分液 # 先混合前(如果需要) if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: - # 注意:在吸液前混合源容器通常不常见,这里跳过 - pass + await self.mix( + targets=[target], + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets[0:1] 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, + ) # 从每个源容器吸液并分液到目标容器 for idx, source in enumerate(sources): @@ -1455,6 +1510,16 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): raise ValueError(f"For 8-channel mode, number of sources {len(sources)} must be a multiple of 8.") # 每次处理8个源 + if mix_stage in ["before", "both"] and mix_times is not None and mix_times > 0: + await self.mix( + targets=[target], + mix_time=mix_times, + mix_vol=mix_vol, + offsets=offsets[0:1] 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, + ) + for i in range(0, len(sources), 8): tip = [] for _ in range(len(use_channels)): diff --git a/unilabos/devices/liquid_handling/test_transfer_liquid.py b/unilabos/devices/liquid_handling/test_transfer_liquid.py new file mode 100644 index 00000000..5d50f0a6 --- /dev/null +++ b/unilabos/devices/liquid_handling/test_transfer_liquid.py @@ -0,0 +1,13 @@ +""" +说明: +这里放一个“入口文件”,方便在 `unilabos/devices/liquid_handling` 目录下直接找到 +`transfer_liquid` 的测试。 + +实际测试用例实现放在仓库标准测试目录: +`test/devices/liquid_handling/test_transfer_liquid.py` +""" + +# 让 pytest 能从这里发现同一套测试(避免复制两份测试代码)。 +from test.devices.liquid_handling.test_transfer_liquid import * # noqa: F401,F403 + + From 75bb5ec553ea5052cb1b7661a75219b5cd74d147 Mon Sep 17 00:00:00 2001 From: Xianwei Qi Date: Fri, 26 Dec 2025 16:42:50 +0800 Subject: [PATCH 08/40] test_transfer_liquid_2 --- tests/__init__.py | 7 +++++++ tests/devices/__init__.py | 1 + tests/devices/liquid_handling/__init__.py | 5 +++++ .../devices/liquid_handling/test_transfer_liquid.py | 0 tests/ros/msgs/test_runner.py | 8 ++++---- unilabos/devices/liquid_handling/test_transfer_liquid.py | 4 ++-- 6 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 tests/__init__.py create mode 100644 tests/devices/__init__.py create mode 100644 tests/devices/liquid_handling/__init__.py rename {test => tests}/devices/liquid_handling/test_transfer_liquid.py (100%) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..5c26f48f --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,7 @@ +""" +测试包根目录。 + +让 `tests.*` 模块可以被正常 import(例如给 `unilabos` 下的测试入口使用)。 +""" + + diff --git a/tests/devices/__init__.py b/tests/devices/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/devices/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/devices/liquid_handling/__init__.py b/tests/devices/liquid_handling/__init__.py new file mode 100644 index 00000000..b16b30e2 --- /dev/null +++ b/tests/devices/liquid_handling/__init__.py @@ -0,0 +1,5 @@ +""" +液体处理设备相关测试。 +""" + + diff --git a/test/devices/liquid_handling/test_transfer_liquid.py b/tests/devices/liquid_handling/test_transfer_liquid.py similarity index 100% rename from test/devices/liquid_handling/test_transfer_liquid.py rename to tests/devices/liquid_handling/test_transfer_liquid.py diff --git a/tests/ros/msgs/test_runner.py b/tests/ros/msgs/test_runner.py index fe4cb096..02d352db 100644 --- a/tests/ros/msgs/test_runner.py +++ b/tests/ros/msgs/test_runner.py @@ -11,10 +11,10 @@ import os # 添加项目根目录到路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) -# 导入测试模块 -from test.ros.msgs.test_basic import TestBasicFunctionality -from test.ros.msgs.test_conversion import TestBasicConversion, TestMappingConversion -from test.ros.msgs.test_mapping import TestTypeMapping, TestFieldMapping +# 导入测试模块(统一从 tests 包获取) +from tests.ros.msgs.test_basic import TestBasicFunctionality +from tests.ros.msgs.test_conversion import TestBasicConversion, TestMappingConversion +from tests.ros.msgs.test_mapping import TestTypeMapping, TestFieldMapping def run_tests(): diff --git a/unilabos/devices/liquid_handling/test_transfer_liquid.py b/unilabos/devices/liquid_handling/test_transfer_liquid.py index 5d50f0a6..f13980f0 100644 --- a/unilabos/devices/liquid_handling/test_transfer_liquid.py +++ b/unilabos/devices/liquid_handling/test_transfer_liquid.py @@ -4,10 +4,10 @@ `transfer_liquid` 的测试。 实际测试用例实现放在仓库标准测试目录: -`test/devices/liquid_handling/test_transfer_liquid.py` +`tests/devices/liquid_handling/test_transfer_liquid.py` """ # 让 pytest 能从这里发现同一套测试(避免复制两份测试代码)。 -from test.devices.liquid_handling.test_transfer_liquid import * # noqa: F401,F403 +from tests.devices.liquid_handling.test_transfer_liquid import * # noqa: F401,F403 From a1c34f138e83a5103b32c0a7b78fd29981c89cef Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Sun, 28 Dec 2025 23:22:50 +0800 Subject: [PATCH 09/40] Close #208. Fix mock devices. (cherry picked from commit 28f93737acea10d45e6a2dd0d6110d8777735ec5) --- unilabos/app/ws_client.py | 2 +- .../experiments/mock_devices/mock_all.json | 20 +++++++++---------- .../mock_devices/mock_chiller.json | 2 +- .../experiments/mock_devices/mock_filter.json | 2 +- .../experiments/mock_devices/mock_heater.json | 2 +- .../experiments/mock_devices/mock_pump.json | 2 +- .../mock_devices/mock_rotavap.json | 2 +- .../mock_devices/mock_separator.json | 2 +- .../mock_devices/mock_solenoid_valve.json | 2 +- .../mock_devices/mock_stirrer.json | 2 +- .../mock_devices/mock_stirrer_new.json | 2 +- .../experiments/mock_devices/mock_vacuum.json | 2 +- .../mock_protocol/centrifugeteststation.json | 2 +- .../mock_protocol/filterteststation.json | 2 +- .../mock_protocol/heatchillteststation.json | 2 +- .../mock_protocol/stirteststation.json | 2 +- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 8c44712f..6da4f5f3 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -1240,7 +1240,7 @@ class WebSocketClient(BaseCommunicationClient): }, } self.message_processor.send_message(message) - logger.debug(f"[WebSocketClient] Device status published: {device_id}.{property_name}") + logger.trace(f"[WebSocketClient] Device status published: {device_id}.{property_name}") def publish_job_status( self, feedback_data: dict, item: QueueItem, status: str, return_info: Optional[dict] = None diff --git a/unilabos/test/experiments/mock_devices/mock_all.json b/unilabos/test/experiments/mock_devices/mock_all.json index 10d224f5..7327b54a 100644 --- a/unilabos/test/experiments/mock_devices/mock_all.json +++ b/unilabos/test/experiments/mock_devices/mock_all.json @@ -8,7 +8,7 @@ ], "parent": null, "type": "device", - "class": "mock_chiller", + "class": "virtual_heatchill", "position": { "x": 620.6111111111111, "y": 171, @@ -49,7 +49,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_filter", + "class": "virtual_filter", "position": { "x": 620.6111111111111, "y": 171, @@ -80,7 +80,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_heater", + "class": "virtual_heatchill", "position": { "x": 620.6111111111111, "y": 171, @@ -108,7 +108,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_pump", + "class": "virtual_transfer_pump", "position": { "x": 620.6111111111111, "y": 171, @@ -147,7 +147,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_rotavap", + "class": "virtual_rotavap", "position": { "x": 620.6111111111111, "y": 171, @@ -175,7 +175,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_separator", + "class": "virtual_separator", "position": { "x": 620.6111111111111, "y": 171, @@ -213,7 +213,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_solenoid_valve", + "class": "virtual_solenoid_valve", "position": { "x": 620.6111111111111, "y": 171, @@ -233,7 +233,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_stirrer_new", + "class": "virtual_stirrer", "position": { "x": 620.6111111111111, "y": 171, @@ -261,7 +261,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_stirrer", + "class": "virtual_stirrer", "position": { "x": 620.6111111111111, "y": 171, @@ -289,7 +289,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_vacuum", + "class": "virtual_vacuum_pump", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_chiller.json b/unilabos/test/experiments/mock_devices/mock_chiller.json index fc0e2f4c..26e48d5c 100644 --- a/unilabos/test/experiments/mock_devices/mock_chiller.json +++ b/unilabos/test/experiments/mock_devices/mock_chiller.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_chiller", + "class": "virtual_heatchill", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_filter.json b/unilabos/test/experiments/mock_devices/mock_filter.json index d8d80299..d58e8c77 100644 --- a/unilabos/test/experiments/mock_devices/mock_filter.json +++ b/unilabos/test/experiments/mock_devices/mock_filter.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_filter", + "class": "virtual_filter", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_heater.json b/unilabos/test/experiments/mock_devices/mock_heater.json index 1aca9688..ebb82fd9 100644 --- a/unilabos/test/experiments/mock_devices/mock_heater.json +++ b/unilabos/test/experiments/mock_devices/mock_heater.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_heater", + "class": "virtual_heatchill", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_pump.json b/unilabos/test/experiments/mock_devices/mock_pump.json index d1c13945..6b546706 100644 --- a/unilabos/test/experiments/mock_devices/mock_pump.json +++ b/unilabos/test/experiments/mock_devices/mock_pump.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_pump", + "class": "virtual_transfer_pump", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_rotavap.json b/unilabos/test/experiments/mock_devices/mock_rotavap.json index b28cfe2a..04f0276f 100644 --- a/unilabos/test/experiments/mock_devices/mock_rotavap.json +++ b/unilabos/test/experiments/mock_devices/mock_rotavap.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_rotavap", + "class": "virtual_rotavap", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_separator.json b/unilabos/test/experiments/mock_devices/mock_separator.json index 20f26718..2fc7ce79 100644 --- a/unilabos/test/experiments/mock_devices/mock_separator.json +++ b/unilabos/test/experiments/mock_devices/mock_separator.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_separator", + "class": "virtual_separator", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_solenoid_valve.json b/unilabos/test/experiments/mock_devices/mock_solenoid_valve.json index e4e23cc1..50d60c74 100644 --- a/unilabos/test/experiments/mock_devices/mock_solenoid_valve.json +++ b/unilabos/test/experiments/mock_devices/mock_solenoid_valve.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_solenoid_valve", + "class": "virtual_solenoid_valve", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_stirrer.json b/unilabos/test/experiments/mock_devices/mock_stirrer.json index 9dfc59c7..be419de6 100644 --- a/unilabos/test/experiments/mock_devices/mock_stirrer.json +++ b/unilabos/test/experiments/mock_devices/mock_stirrer.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_stirrer", + "class": "virtual_stirrer", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_stirrer_new.json b/unilabos/test/experiments/mock_devices/mock_stirrer_new.json index 837b2fec..b0f58db3 100644 --- a/unilabos/test/experiments/mock_devices/mock_stirrer_new.json +++ b/unilabos/test/experiments/mock_devices/mock_stirrer_new.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_stirrer_new", + "class": "virtual_stirrer", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_devices/mock_vacuum.json b/unilabos/test/experiments/mock_devices/mock_vacuum.json index 31406aea..66d43773 100644 --- a/unilabos/test/experiments/mock_devices/mock_vacuum.json +++ b/unilabos/test/experiments/mock_devices/mock_vacuum.json @@ -6,7 +6,7 @@ "children": [], "parent": null, "type": "device", - "class": "mock_vacuum", + "class": "virtual_vacuum_pump", "position": { "x": 620.6111111111111, "y": 171, diff --git a/unilabos/test/experiments/mock_protocol/centrifugeteststation.json b/unilabos/test/experiments/mock_protocol/centrifugeteststation.json index e6918349..eefed3e3 100644 --- a/unilabos/test/experiments/mock_protocol/centrifugeteststation.json +++ b/unilabos/test/experiments/mock_protocol/centrifugeteststation.json @@ -32,7 +32,7 @@ "children": [], "parent": "CentrifugeTestStation", "type": "device", - "class": "virtual_pump", + "class": "virtual_transfer_pump", "position": { "x": 520.6111111111111, "y": 300, diff --git a/unilabos/test/experiments/mock_protocol/filterteststation.json b/unilabos/test/experiments/mock_protocol/filterteststation.json index a816def8..8069e80c 100644 --- a/unilabos/test/experiments/mock_protocol/filterteststation.json +++ b/unilabos/test/experiments/mock_protocol/filterteststation.json @@ -32,7 +32,7 @@ "children": [], "parent": "FilterTestStation", "type": "device", - "class": "virtual_pump", + "class": "virtual_transfer_pump", "position": { "x": 520.6111111111111, "y": 300, diff --git a/unilabos/test/experiments/mock_protocol/heatchillteststation.json b/unilabos/test/experiments/mock_protocol/heatchillteststation.json index 9d243b84..f103e13d 100644 --- a/unilabos/test/experiments/mock_protocol/heatchillteststation.json +++ b/unilabos/test/experiments/mock_protocol/heatchillteststation.json @@ -32,7 +32,7 @@ "children": [], "parent": "HeatChillTestStation", "type": "device", - "class": "virtual_pump", + "class": "virtual_transfer_pump", "position": { "x": 520.6111111111111, "y": 300, diff --git a/unilabos/test/experiments/mock_protocol/stirteststation.json b/unilabos/test/experiments/mock_protocol/stirteststation.json index 20694d1b..4563c9cf 100644 --- a/unilabos/test/experiments/mock_protocol/stirteststation.json +++ b/unilabos/test/experiments/mock_protocol/stirteststation.json @@ -32,7 +32,7 @@ "children": [], "parent": "StirTestStation", "type": "device", - "class": "virtual_pump", + "class": "virtual_transfer_pump", "position": { "x": 520.6111111111111, "y": 300, From 66c18c080ab035ceabdba7c92af519a9f558ac82 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 02:03:43 +0800 Subject: [PATCH 10/40] Update create_resource to resource tree mode. --- unilabos/app/main.py | 2 +- unilabos/app/ws_client.py | 60 +++++- .../devices/liquid_handling/prcxi/prcxi.py | 11 +- unilabos/resources/graphio.py | 2 +- unilabos/ros/nodes/base_device_node.py | 192 +++++++++--------- unilabos/ros/nodes/presets/host_node.py | 9 +- unilabos/ros/nodes/presets/workstation.py | 2 +- unilabos/ros/nodes/resource_tracker.py | 10 +- 8 files changed, 179 insertions(+), 109 deletions(-) diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 2a2facd4..3af50cbb 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -418,7 +418,7 @@ def main(): # 如果从远端获取了物料信息,则与本地物料进行同步 if request_startup_json and "nodes" in request_startup_json: print_status("开始同步远端物料到本地...", "info") - remote_tree_set = ResourceTreeSet.from_raw_list(request_startup_json["nodes"]) + remote_tree_set = ResourceTreeSet.from_raw_dict_list(request_startup_json["nodes"]) resource_tree_set.merge_remote_resources(remote_tree_set) print_status("远端物料同步完成", "info") diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 6da4f5f3..23f139d2 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -579,6 +579,8 @@ class MessageProcessor: elif message_type == "session_id": self.session_id = message_data.get("session_id") logger.info(f"[MessageProcessor] Session ID: {self.session_id}") + elif message_type == "request_reload": + await self._handle_request_reload(message_data) else: logger.debug(f"[MessageProcessor] Unknown message type: {message_type}") @@ -888,6 +890,20 @@ class MessageProcessor: ) thread.start() + async def _handle_request_reload(self, data: Dict[str, Any]): + """ + 处理重载请求 + + 当LabGo发送request_reload时,重新发送设备注册信息 + """ + reason = data.get("reason", "unknown") + logger.info(f"[MessageProcessor] Received reload request, reason: {reason}") + + # 重新发送host_node_ready信息 + if self.websocket_client: + self.websocket_client.publish_host_ready() + logger.info("[MessageProcessor] Re-sent host_node_ready after reload request") + async def _send_action_state_response( self, device_id: str, action_name: str, task_id: str, job_id: str, typ: str, free: bool, need_more: int ): @@ -1282,7 +1298,7 @@ class WebSocketClient(BaseCommunicationClient): self.message_processor.send_message(message) job_log = format_job_log(item.job_id, item.task_id, item.device_id, item.action_name) - logger.debug(f"[WebSocketClient] Job status published: {job_log} - {status}") + logger.trace(f"[WebSocketClient] Job status published: {job_log} - {status}") def send_ping(self, ping_id: str, timestamp: float) -> None: """发送ping消息""" @@ -1313,17 +1329,55 @@ class WebSocketClient(BaseCommunicationClient): logger.warning(f"[WebSocketClient] Failed to cancel job {job_log}") def publish_host_ready(self) -> None: - """发布host_node ready信号""" + """发布host_node ready信号,包含设备和动作信息""" if self.is_disabled or not self.is_connected(): logger.debug("[WebSocketClient] Not connected, cannot publish host ready signal") return + # 收集设备信息 + devices = [] + machine_name = BasicConfig.machine_name + + try: + host_node = HostNode.get_instance(0) + if host_node: + # 获取设备信息 + for device_id, namespace in host_node.devices_names.items(): + device_key = f"{namespace}/{device_id}" if namespace.startswith("/") else f"/{namespace}/{device_id}" + is_online = device_key in host_node._online_devices + + # 获取设备的动作信息 + actions = {} + for action_id, client in host_node._action_clients.items(): + # action_id 格式: /namespace/device_id/action_name + if device_id in action_id: + action_name = action_id.split("/")[-1] + actions[action_name] = { + "action_path": action_id, + "action_type": str(type(client).__name__), + } + + devices.append({ + "device_id": device_id, + "namespace": namespace, + "device_key": device_key, + "is_online": is_online, + "machine_name": host_node.device_machine_names.get(device_id, machine_name), + "actions": actions, + }) + + logger.info(f"[WebSocketClient] Collected {len(devices)} devices for host_ready") + except Exception as e: + logger.warning(f"[WebSocketClient] Error collecting device info: {e}") + message = { "action": "host_node_ready", "data": { "status": "ready", "timestamp": time.time(), + "machine_name": machine_name, + "devices": devices, }, } self.message_processor.send_message(message) - logger.info("[WebSocketClient] Host node ready signal published") + logger.info(f"[WebSocketClient] Host node ready signal published with {len(devices)} devices") diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py index 02ef20d1..e0c7e80b 100644 --- a/unilabos/devices/liquid_handling/prcxi/prcxi.py +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -70,7 +70,16 @@ class PRCXI9300Deck(Deck): def __init__(self, name: str, size_x: float, size_y: float, size_z: float, **kwargs): super().__init__(name, size_x, size_y, size_z) - self.slots = [None] * 6 # PRCXI 9300 有 6 个槽位 + self.slots = [None] * 16 # PRCXI 9300/9320 最大有 16 个槽位 + self.slot_locations = [Coordinate(0, 0, 0)] * 16 + + def assign_child_at_slot(self, resource: Resource, slot: int, reassign: bool = False) -> None: + if self.slots[slot - 1] is not None and not reassign: + raise ValueError(f"Spot {slot} is already occupied") + + self.slots[slot - 1] = resource + super().assign_child_resource(resource, location=self.slot_locations[slot - 1]) + class PRCXI9300Container(Plate): """PRCXI 9300 的专用 Container 类,继承自 Plate,用于槽位定位和未知模块。 diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 4541cb02..8744b457 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -134,7 +134,7 @@ def canonicalize_nodes_data( parent_instance.children.append(current_instance) # 第五步:创建 ResourceTreeSet - resource_tree_set = ResourceTreeSet.from_nested_list(standardized_instances) + resource_tree_set = ResourceTreeSet.from_nested_instance_list(standardized_instances) return resource_tree_set diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 16aba6d1..e0b1b9aa 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -5,7 +5,8 @@ import json import threading import time import traceback -from typing import get_type_hints, TypeVar, Generic, Dict, Any, Type, TypedDict, Optional, List, TYPE_CHECKING, Union +from typing import get_type_hints, TypeVar, Generic, Dict, Any, Type, TypedDict, Optional, List, TYPE_CHECKING, Union, \ + Tuple from concurrent.futures import ThreadPoolExecutor import asyncio @@ -362,78 +363,82 @@ class BaseROS2DeviceNode(Node, Generic[T]): return res async def append_resource(req: SerialCommand_Request, res: SerialCommand_Response): + from pylabrobot.resources.resource import Resource as ResourcePLR + from pylabrobot.resources.deck import Deck + from pylabrobot.resources import Coordinate + from pylabrobot.resources import Plate # 物料传输到对应的node节点 - rclient = self.create_client(ResourceAdd, "/resources/add") - rclient.wait_for_service() - rclient2 = self.create_client(ResourceAdd, "/resources/add") - rclient2.wait_for_service() - request = ResourceAdd.Request() - request2 = ResourceAdd.Request() + client = self._resource_clients["c2s_update_resource_tree"] + request = SerialCommand.Request() + request2 = SerialCommand.Request() command_json = json.loads(req.command) namespace = command_json["namespace"] bind_parent_id = command_json["bind_parent_id"] edge_device_id = command_json["edge_device_id"] location = command_json["bind_location"] other_calling_param = command_json["other_calling_param"] - resources = command_json["resource"] + input_resources = command_json["resource"] initialize_full = other_calling_param.pop("initialize_full", False) # 用来增加液体 ADD_LIQUID_TYPE = other_calling_param.pop("ADD_LIQUID_TYPE", []) - LIQUID_VOLUME = other_calling_param.pop("LIQUID_VOLUME", []) - LIQUID_INPUT_SLOT = other_calling_param.pop("LIQUID_INPUT_SLOT", []) + LIQUID_VOLUME: List[float] = other_calling_param.pop("LIQUID_VOLUME", []) + LIQUID_INPUT_SLOT: List[int] = other_calling_param.pop("LIQUID_INPUT_SLOT", []) slot = other_calling_param.pop("slot", "-1") - resource = None - if slot != "-1": # slot为负数的时候采用assign方法 + if slot != -1: # slot为负数的时候采用assign方法 other_calling_param["slot"] = slot - # 本地拿到这个物料,可能需要先做初始化? - if isinstance(resources, list): - if ( - len(resources) == 1 and isinstance(resources[0], list) and not initialize_full - ): # 取消,不存在的情况 - # 预先initialize过,以整组的形式传入 - request.resources = [convert_to_ros_msg(Resource, resource_) for resource_ in resources[0]] - elif initialize_full: - resources = initialize_resources(resources) - request.resources = [convert_to_ros_msg(Resource, resource) for resource in resources] - else: - request.resources = [convert_to_ros_msg(Resource, resource) for resource in resources] - else: - if initialize_full: - resources = initialize_resources([resources]) - request.resources = [convert_to_ros_msg(Resource, resources)] - if len(LIQUID_INPUT_SLOT) and LIQUID_INPUT_SLOT[0] == -1: - container_instance = request.resources[0] - container_query_dict: dict = resources + # 本地拿到这个物料,可能需要先做初始化 + if isinstance(input_resources, list) and initialize_full: + input_resources = initialize_resources(input_resources) + elif initialize_full: + input_resources = initialize_resources([input_resources]) + rts: ResourceTreeSet = ResourceTreeSet.from_raw_dict_list(input_resources) + parent_resource = None + if bind_parent_id != self.node_name: + parent_resource = self.resource_tracker.figure_resource( + {"name": bind_parent_id} + ) + for r in rts.root_nodes: + # noinspection PyUnresolvedReferences + r.res_content.parent_uuid = parent_resource.unilabos_uuid + + if len(LIQUID_INPUT_SLOT) and LIQUID_INPUT_SLOT[0] == -1 and len(rts.root_nodes) == 1 and isinstance(rts.root_nodes[0], RegularContainer): + # noinspection PyTypeChecker + container_instance: RegularContainer = rts.root_nodes[0] found_resources = self.resource_tracker.figure_resource( - {"id": container_query_dict["name"]}, try_mode=True + {"id": container_instance.name}, try_mode=True ) if not len(found_resources): self.resource_tracker.add_resource(container_instance) - logger.info(f"添加物料{container_query_dict['name']}到资源跟踪器") + logger.info(f"添加物料{container_instance.name}到资源跟踪器") else: assert ( len(found_resources) == 1 - ), f"找到多个同名物料: {container_query_dict['name']}, 请检查物料系统" - resource = found_resources[0] - if isinstance(resource, Resource): - regular_container = RegularContainer(resource.id) - regular_container.ulr_resource = resource - regular_container.ulr_resource_data.update(json.loads(container_instance.data)) - logger.info(f"更新物料{container_query_dict['name']}的数据{resource.data} ULR") - elif isinstance(resource, dict): - if "data" not in resource: - resource["data"] = {} - resource["data"].update(json.loads(container_instance.data)) - request.resources[0].name = resource["name"] - logger.info(f"更新物料{container_query_dict['name']}的数据{resource['data']} dict") + ), f"找到多个同名物料: {container_instance.name}, 请检查物料系统" + found_resource = found_resources[0] + if isinstance(found_resource, RegularContainer): + logger.info(f"更新物料{container_instance.name}的数据{found_resource.state}") + found_resource.state.update(json.loads(container_instance.state)) + elif isinstance(found_resource, dict): + raise ValueError("已不支持 字典 版本的RegularContainer") else: logger.info( - f"更新物料{container_query_dict['name']}出现不支持的数据类型{type(resource)} {resource}" + f"更新物料{container_instance.name}出现不支持的数据类型{type(found_resource)} {found_resource}" ) - response: ResourceAdd.Response = await rclient.call_async(request) - # 应该先add_resource了 + # noinspection PyUnresolvedReferences + request.command = json.dumps({ + "action": "add", + "data": { + "data": rts.dump(), + "mount_uuid": parent_resource.unilabos_uuid if parent_resource is not None else "", + "first_add": True, + }, + }) + tree_response: SerialCommand.Response = await client.call_async(request) + uuid_maps = json.loads(tree_response.response) + self.resource_tracker.loop_update_uuid(input_resources, uuid_maps) + self.lab_logger().info(f"Resource tree added. UUID mapping: {len(uuid_maps)} nodes") final_response = { - "created_resources": [ROS2MessageInstance(i).get_python_dict() for i in request.resources], + "created_resources": rts.dump(), "liquid_input_resources": [], } res.response = json.dumps(final_response) @@ -458,59 +463,60 @@ class BaseROS2DeviceNode(Node, Generic[T]): ) res.response = get_result_info_str(traceback.format_exc(), False, {}) return res - # 接下来该根据bind_parent_id进行assign了,目前只有plr可以进行assign,不然没有办法输入到物料系统中 - if bind_parent_id != self.node_name: - resource = self.resource_tracker.figure_resource( - {"name": bind_parent_id} - ) # 拿到父节点,进行具体assign等操作 - # request.resources = [convert_to_ros_msg(Resource, resources)] - try: - from pylabrobot.resources.resource import Resource as ResourcePLR - from pylabrobot.resources.deck import Deck - from pylabrobot.resources import Coordinate - from pylabrobot.resources import OTDeck - from pylabrobot.resources import Plate - - contain_model = not isinstance(resource, Deck) - if isinstance(resource, ResourcePLR): - # resources.list() - plr_instance = ResourceTreeSet.from_raw_list(resources).to_plr_resources()[0] - # resources_tree = dict_to_tree(copy.deepcopy({r["id"]: r for r in resources})) - # plr_instance = resource_ulab_to_plr(resources_tree[0], contain_model) - + if len(rts.root_nodes) == 1 and parent_resource is not None: + plr_instance = rts.to_plr_resources()[0] if isinstance(plr_instance, Plate): - empty_liquid_info_in = [(None, 0)] * plr_instance.num_items + empty_liquid_info_in: List[Tuple[Optional[str], float]] = [(None, 0)] * plr_instance.num_items + if len(ADD_LIQUID_TYPE) == 1 and len(LIQUID_VOLUME) == 1 and len(LIQUID_INPUT_SLOT) > 1: + ADD_LIQUID_TYPE = ADD_LIQUID_TYPE * len(LIQUID_INPUT_SLOT) + LIQUID_VOLUME = LIQUID_VOLUME * len(LIQUID_INPUT_SLOT) + self.lab_logger().warning(f"增加液体资源时,数量为1,自动补全为 {len(LIQUID_INPUT_SLOT)} 个") for liquid_type, liquid_volume, liquid_input_slot in zip( ADD_LIQUID_TYPE, LIQUID_VOLUME, LIQUID_INPUT_SLOT ): empty_liquid_info_in[liquid_input_slot] = (liquid_type, liquid_volume) plr_instance.set_well_liquids(empty_liquid_info_in) - input_wells_ulr = [ - convert_to_ros_msg( - Resource, - resource_plr_to_ulab(plr_instance.get_well(LIQUID_INPUT_SLOT), with_children=False), - ) - for r in LIQUID_INPUT_SLOT - ] - final_response["liquid_input_resources"] = [ - ROS2MessageInstance(i).get_python_dict() for i in input_wells_ulr - ] + try: + # noinspection PyProtectedMember + keys = list(plr_instance._ordering.keys()) + for ind, r in enumerate(LIQUID_INPUT_SLOT[:]): + if isinstance(r, int): + # noinspection PyTypeChecker + LIQUID_INPUT_SLOT[ind] = keys[r] + input_wells = [plr_instance.get_well(r) for r in LIQUID_INPUT_SLOT] + except AttributeError: + # 按照id回去失败,回退到children + input_wells = [] + for r in LIQUID_INPUT_SLOT: + input_wells.append(plr_instance.children[r]) + final_response["liquid_input_resources"] = ResourceTreeSet.from_plr_resources(input_wells).dump() res.response = json.dumps(final_response) - if isinstance(resource, OTDeck) and "slot" in other_calling_param: + if issubclass(parent_resource.__class__, Deck) and hasattr(parent_resource, "assign_child_at_slot") and "slot" in other_calling_param: other_calling_param["slot"] = int(other_calling_param["slot"]) - resource.assign_child_at_slot(plr_instance, **other_calling_param) + parent_resource.assign_child_at_slot(plr_instance, **other_calling_param) else: - _discard_slot = other_calling_param.pop("slot", "-1") - resource.assign_child_resource( + _discard_slot = other_calling_param.pop("slot", -1) + parent_resource.assign_child_resource( plr_instance, Coordinate(location["x"], location["y"], location["z"]), **other_calling_param, ) - request2.resources = [ - convert_to_ros_msg(Resource, r) for r in tree_to_list([resource_plr_to_ulab(resource)]) - ] - rclient2.call(request2) + # 调整了液体以及Deck之后要重新Assign + # noinspection PyUnresolvedReferences + request.command = json.dumps({ + "action": "add", + "data": { + "data": ResourceTreeSet.from_plr_resources([parent_resource]).dump(), + "mount_uuid": parent_resource.parent.unilabos_uuid if parent_resource.parent is not None else self.uuid, + "first_add": False, + }, + }) + tree_response: SerialCommand.Response = await client.call_async(request) + uuid_maps = json.loads(tree_response.response) + self.resource_tracker.loop_update_uuid(input_resources, uuid_maps) + self._lab_logger.info(f"Resource tree added. UUID mapping: {len(uuid_maps)} nodes") + # 这里created_resources不包含parent_resource # 发送给ResourceMeshManager action_client = ActionClient( self, @@ -521,7 +527,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): goal = SendCmd.Goal() goal.command = json.dumps( { - "resources": resources, + "resources": input_resources, "bind_parent_id": bind_parent_id, } ) @@ -614,7 +620,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): ) ) # type: ignore raw_nodes = json.loads(response.response) - tree_set = ResourceTreeSet.from_raw_list(raw_nodes) + tree_set = ResourceTreeSet.from_raw_dict_list(raw_nodes) self.lab_logger().debug(f"获取资源结果: {len(tree_set.trees)} 个资源树") return tree_set @@ -642,7 +648,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): raw_data = json.loads(response.response) # 转换为 PLR 资源 - tree_set = ResourceTreeSet.from_raw_list(raw_data) + tree_set = ResourceTreeSet.from_raw_dict_list(raw_data) plr_resource = tree_set.to_plr_resources()[0] self.lab_logger().debug(f"获取资源 {resource_id} 成功") return plr_resource @@ -1523,7 +1529,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): raw_data = json.loads(response.response) # 转换为 PLR 资源 - tree_set = ResourceTreeSet.from_raw_list(raw_data) + tree_set = ResourceTreeSet.from_raw_dict_list(raw_data) plr_resource = tree_set.to_plr_resources()[0] # 通过资源跟踪器获取本地实例 diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index ebc44924..971b6dd4 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -45,6 +45,7 @@ from unilabos.ros.nodes.resource_tracker import ( ) from unilabos.utils import logger from unilabos.utils.exception import DeviceClassInvalid +from unilabos.utils.log import warning from unilabos.utils.type_check import serialize_result_info from unilabos.registry.placeholder_type import ResourceSlot, DeviceSlot @@ -180,7 +181,7 @@ class HostNode(BaseROS2DeviceNode): for plr_resource in ResourceTreeSet([tree]).to_plr_resources(): self._resource_tracker.add_resource(plr_resource) except Exception as ex: - self.lab_logger().warning(f"[Host Node-Resource] 根节点物料{tree}序列化失败!") + warning(f"[Host Node-Resource] 根节点物料{tree}序列化失败!") except Exception as ex: logger.error(f"[Host Node-Resource] 添加物料出错!\n{traceback.format_exc()}") # 初始化Node基类,传递空参数覆盖列表 @@ -455,10 +456,10 @@ class HostNode(BaseROS2DeviceNode): async def create_resource( self, - device_id: str, + device_id: DeviceSlot, res_id: str, class_name: str, - parent: str, + parent: ResourceSlot, bind_locations: Point, liquid_input_slot: list[int] = [], liquid_type: list[str] = [], @@ -805,7 +806,7 @@ class HostNode(BaseROS2DeviceNode): self.lab_logger().info(f"[Host Node] Result for {action_id} ({job_id[:8]}): {status}") if goal_status != GoalStatus.STATUS_CANCELED: - self.lab_logger().debug(f"[Host Node] Result data: {result_data}") + self.lab_logger().trace(f"[Host Node] Result data: {result_data}") # 清理 _goals 中的记录 if job_id in self._goals: diff --git a/unilabos/ros/nodes/presets/workstation.py b/unilabos/ros/nodes/presets/workstation.py index 7325dda6..91cd0ef6 100644 --- a/unilabos/ros/nodes/presets/workstation.py +++ b/unilabos/ros/nodes/presets/workstation.py @@ -244,7 +244,7 @@ class ROS2WorkstationNode(BaseROS2DeviceNode): r ) # type: ignore raw_data = json.loads(response.response) - tree_set = ResourceTreeSet.from_raw_list(raw_data) + tree_set = ResourceTreeSet.from_raw_dict_list(raw_data) target = tree_set.dump() protocol_kwargs[k] = target[0][0] if v == "unilabos_msgs/Resource" else target except Exception as ex: diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/ros/nodes/resource_tracker.py index aaa80799..09e77493 100644 --- a/unilabos/ros/nodes/resource_tracker.py +++ b/unilabos/ros/nodes/resource_tracker.py @@ -523,7 +523,7 @@ class ResourceTreeSet(object): return plr_resources @classmethod - def from_raw_list(cls, raw_list: List[Dict[str, Any]]) -> "ResourceTreeSet": + def from_raw_dict_list(cls, raw_list: List[Dict[str, Any]]) -> "ResourceTreeSet": """ 从原始字典列表创建 ResourceTreeSet,自动建立 parent-children 关系 @@ -573,10 +573,10 @@ class ResourceTreeSet(object): parent_instance.children.append(instance) # 第四步:使用 from_nested_list 创建 ResourceTreeSet - return cls.from_nested_list(instances) + return cls.from_nested_instance_list(instances) @classmethod - def from_nested_list(cls, nested_list: List[ResourceDictInstance]) -> "ResourceTreeSet": + def from_nested_instance_list(cls, nested_list: List[ResourceDictInstance]) -> "ResourceTreeSet": """ 从扁平化的资源列表创建ResourceTreeSet,自动按根节点分组 @@ -785,7 +785,7 @@ class ResourceTreeSet(object): """ nested_lists = [] for tree_data in data: - nested_lists.extend(ResourceTreeSet.from_raw_list(tree_data).trees) + nested_lists.extend(ResourceTreeSet.from_raw_dict_list(tree_data).trees) return cls(nested_lists) @@ -965,7 +965,7 @@ class DeviceNodeResourceTracker(object): if current_uuid in self.uuid_to_resources: self.uuid_to_resources.pop(current_uuid) self.uuid_to_resources[new_uuid] = res - logger.debug(f"更新uuid: {current_uuid} -> {new_uuid}") + logger.trace(f"更新uuid: {current_uuid} -> {new_uuid}") replaced = 1 return replaced From 2e14bf197cf69d854a7d9742e6657e5110855121 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 19:26:42 +0800 Subject: [PATCH 11/40] Fix and tested new create_resource. --- unilabos/ros/nodes/base_device_node.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index e0b1b9aa..30c2b88f 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -430,7 +430,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): "data": { "data": rts.dump(), "mount_uuid": parent_resource.unilabos_uuid if parent_resource is not None else "", - "first_add": True, + "first_add": False, }, }) tree_response: SerialCommand.Response = await client.call_async(request) @@ -504,11 +504,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): ) # 调整了液体以及Deck之后要重新Assign # noinspection PyUnresolvedReferences + rts_with_parent = ResourceTreeSet.from_plr_resources([parent_resource]) + if rts_with_parent.root_nodes[0].res_content.uuid_parent is None: + rts_with_parent.root_nodes[0].res_content.parent_uuid = self.uuid request.command = json.dumps({ "action": "add", "data": { - "data": ResourceTreeSet.from_plr_resources([parent_resource]).dump(), - "mount_uuid": parent_resource.parent.unilabos_uuid if parent_resource.parent is not None else self.uuid, + "data": rts_with_parent.dump(), + "mount_uuid": rts_with_parent.root_nodes[0].res_content.uuid_parent, "first_add": False, }, }) From f2b993643f82da172565cadc3919be69ec82f993 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 19:40:29 +0800 Subject: [PATCH 12/40] Fix drag materials. --- unilabos/ros/nodes/base_device_node.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 30c2b88f..e810b0bb 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -796,7 +796,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): } def _handle_update( - plr_resources: List[ResourcePLR], tree_set: ResourceTreeSet, additional_add_params: Dict[str, Any] + plr_resources: List[Union[ResourcePLR, ResourceDictInstance]], tree_set: ResourceTreeSet, additional_add_params: Dict[str, Any] ) -> Dict[str, Any]: """ 处理资源更新操作的内部函数 @@ -810,6 +810,9 @@ class BaseROS2DeviceNode(Node, Generic[T]): 操作结果字典 """ for plr_resource, tree in zip(plr_resources, tree_set.trees): + if isinstance(plr_resource, ResourceDictInstance): + self._lab_logger.info(f"跳过 非资源{plr_resource.res_content.name} 的更新") + continue states = plr_resource.serialize_all_state() original_instance: ResourcePLR = self.resource_tracker.figure_resource( {"uuid": tree.root_node.res_content.uuid}, try_mode=False @@ -889,7 +892,12 @@ class BaseROS2DeviceNode(Node, Generic[T]): elif action == "update": if tree_set is None: raise ValueError("tree_set不能为None") - plr_resources = tree_set.to_plr_resources() + plr_resources = [] + for tree in tree_set.trees: + if tree.root_node.res_content.type == "device": + plr_resources.append(tree.root_node) + else: + plr_resources.append(ResourceTreeSet([tree]).to_plr_resources()[0]) result = _handle_update(plr_resources, tree_set, additional_add_params) results.append(result) elif action == "remove": From e227cddab334d3d2eec90113e231eb01aa30f48e Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 20:37:22 +0800 Subject: [PATCH 13/40] Update LICENSE --- .conda/recipe.yaml | 5 +-- .cursorignore | 26 ++++++++++++ .gitignore | 1 + NOTICE | 17 ++++++++ README.md | 46 ++++++++++++++------ README_zh.md | 46 ++++++++++++++------ docs/user_guide/best_practice.md | 2 +- docs/user_guide/graph_files.md | 2 +- docs/user_guide/installation.md | 12 +++--- recipes/msgs/recipe.yaml | 2 +- scripts/create_readme.py | 4 +- unilabos/devices/LICENSE | 73 ++++++++++++++++++++++++++++++++ unilabos/devices/LICENSE_eng | 73 ++++++++++++++++++++++++++++++++ 13 files changed, 267 insertions(+), 42 deletions(-) create mode 100644 .cursorignore create mode 100644 NOTICE create mode 100644 unilabos/devices/LICENSE create mode 100644 unilabos/devices/LICENSE_eng diff --git a/.conda/recipe.yaml b/.conda/recipe.yaml index f7dca724..979de17f 100644 --- a/.conda/recipe.yaml +++ b/.conda/recipe.yaml @@ -9,7 +9,7 @@ source: build: python: entry_points: - - unilab = unilabos.app.main:main + - unilab = unilabos.app.main:main script: - set PIP_NO_INDEX= - if: win @@ -25,7 +25,6 @@ build: - cp $RECIPE_DIR/../setup.py $SRC_DIR - $PYTHON -m pip install $SRC_DIR - requirements: host: - python ==3.11.11 @@ -87,6 +86,6 @@ requirements: - uni-lab::ros-humble-unilabos-msgs about: - repository: https://github.com/dptech-corp/Uni-Lab-OS + repository: https://github.com/deepmodeling/Uni-Lab-OS license: GPL-3.0-only description: "Uni-Lab-OS" diff --git a/.cursorignore b/.cursorignore new file mode 100644 index 00000000..7b0d4f90 --- /dev/null +++ b/.cursorignore @@ -0,0 +1,26 @@ +.conda +# .github +.idea +# .vscode +output +pylabrobot_repo +recipes +scripts +service +temp +# unilabos/test +# unilabos/app/web +unilabos/device_mesh +unilabos_data +unilabos_msgs +unilabos.egg-info +CONTRIBUTORS +# LICENSE +MANIFEST.in +pyrightconfig.json +# README.md +# README_zh.md +setup.py +setup.cfg +.gitattrubutes +**/__pycache__ diff --git a/.gitignore b/.gitignore index 71d8d0d5..610be614 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +cursor_docs/ configs/ temp/ output/ diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..7198cb92 --- /dev/null +++ b/NOTICE @@ -0,0 +1,17 @@ +# Uni-Lab-OS Licensing Notice + +This project uses a dual licensing structure: + +## 1. Main Framework - GPL-3.0 + +- unilabos/ (except unilabos/devices/) +- docs/ +- tests/ + +See [LICENSE](LICENSE) for details. + +## 2. Device Drivers - DP Technology Proprietary License + +- unilabos/devices/ + +See [unilabos/devices/LICENSE](unilabos/devices/LICENSE) for details. diff --git a/README.md b/README.md index 2e0288f3..7cf43d9a 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,13 @@ **English** | [中文](README_zh.md) -[![GitHub Stars](https://img.shields.io/github/stars/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/stargazers) -[![GitHub Forks](https://img.shields.io/github/forks/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/network/members) -[![GitHub Issues](https://img.shields.io/github/issues/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/issues) -[![GitHub License](https://img.shields.io/github/license/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/blob/main/LICENSE) +[![GitHub Stars](https://img.shields.io/github/stars/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/stargazers) +[![GitHub Forks](https://img.shields.io/github/forks/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/network/members) +[![GitHub Issues](https://img.shields.io/github/issues/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/issues) +[![GitHub License](https://img.shields.io/github/license/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/blob/main/LICENSE) Uni-Lab-OS is a platform for laboratory automation, designed to connect and control various experimental equipment, enabling automation and standardization of experimental workflows. -## 🏆 Competition - -Join the [Intelligent Organic Chemistry Synthesis Competition](https://bohrium.dp.tech/competitions/1451645258) to explore automated synthesis with Uni-Lab-OS! - ## Key Features - Multi-device integration management @@ -31,7 +27,7 @@ Join the [Intelligent Organic Chemistry Synthesis Competition](https://bohrium.d Detailed documentation can be found at: -- [Online Documentation](https://xuwznln.github.io/Uni-Lab-OS-Doc/) +- [Online Documentation](https://deepmodeling.github.io/Uni-Lab-OS/) ## Quick Start @@ -48,7 +44,7 @@ mamba install -n unilab uni-lab::unilabos -c robostack-staging -c conda-forge ```bash # Clone the repository -git clone https://github.com/dptech-corp/Uni-Lab-OS.git +git clone https://github.com/deepmodeling/Uni-Lab-OS.git cd Uni-Lab-OS # Install Uni-Lab-OS @@ -57,15 +53,37 @@ pip install . 3. Start Uni-Lab System: -Please refer to [Documentation - Boot Examples](https://xuwznln.github.io/Uni-Lab-OS-Doc/boot_examples/index.html) +Please refer to [Documentation - Boot Examples](https://deepmodeling.github.io/Uni-Lab-OS/boot_examples/index.html) ## Message Format -Uni-Lab-OS uses pre-built `unilabos_msgs` for system communication. You can find the built versions on the [GitHub Releases](https://github.com/dptech-corp/Uni-Lab-OS/releases) page. +Uni-Lab-OS uses pre-built `unilabos_msgs` for system communication. You can find the built versions on the [GitHub Releases](https://github.com/deepmodeling/Uni-Lab-OS/releases) page. + +## Citation + +If you use Uni-Lab-OS in academic research, please cite: + +```bibtex +@article{gao2025unilabos, + title = {UniLabOS: An AI-Native Operating System for Autonomous Laboratories}, + doi = {10.48550/arXiv.2512.21766}, + publisher = {arXiv}, + author = {Gao, Jing and Chang, Junhan and Que, Haohui and Xiong, Yanfei and + Zhang, Shixiang and Qi, Xianwei and Liu, Zhen and Wang, Jun-Jie and + Ding, Qianjun and Li, Xinyu and Pan, Ziwei and Xie, Qiming and + Yan, Zhuang and Yan, Junchi and Zhang, Linfeng}, + year = {2025} +} +``` ## License -This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for details. +This project uses a dual licensing structure: + +- **Main Framework**: GPL-3.0 - see [LICENSE](LICENSE) +- **Device Drivers** (`unilabos/devices/`): DP Technology Proprietary License + +See [NOTICE](NOTICE) for complete licensing details. ## Project Statistics @@ -77,4 +95,4 @@ This project is licensed under GPL-3.0 - see the [LICENSE](LICENSE) file for det ## Contact Us -- GitHub Issues: [https://github.com/dptech-corp/Uni-Lab-OS/issues](https://github.com/dptech-corp/Uni-Lab-OS/issues) +- GitHub Issues: [https://github.com/deepmodeling/Uni-Lab-OS/issues](https://github.com/deepmodeling/Uni-Lab-OS/issues) diff --git a/README_zh.md b/README_zh.md index 76976ebf..e635e71a 100644 --- a/README_zh.md +++ b/README_zh.md @@ -8,17 +8,13 @@ [English](README.md) | **中文** -[![GitHub Stars](https://img.shields.io/github/stars/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/stargazers) -[![GitHub Forks](https://img.shields.io/github/forks/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/network/members) -[![GitHub Issues](https://img.shields.io/github/issues/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/issues) -[![GitHub License](https://img.shields.io/github/license/dptech-corp/Uni-Lab-OS.svg)](https://github.com/dptech-corp/Uni-Lab-OS/blob/main/LICENSE) +[![GitHub Stars](https://img.shields.io/github/stars/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/stargazers) +[![GitHub Forks](https://img.shields.io/github/forks/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/network/members) +[![GitHub Issues](https://img.shields.io/github/issues/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/issues) +[![GitHub License](https://img.shields.io/github/license/dptech-corp/Uni-Lab-OS.svg)](https://github.com/deepmodeling/Uni-Lab-OS/blob/main/LICENSE) Uni-Lab-OS 是一个用于实验室自动化的综合平台,旨在连接和控制各种实验设备,实现实验流程的自动化和标准化。 -## 🏆 比赛 - -欢迎参加[有机化学合成智能实验大赛](https://bohrium.dp.tech/competitions/1451645258),使用 Uni-Lab-OS 探索自动化合成! - ## 核心特点 - 多设备集成管理 @@ -31,7 +27,7 @@ Uni-Lab-OS 是一个用于实验室自动化的综合平台,旨在连接和控 详细文档可在以下位置找到: -- [在线文档](https://xuwznln.github.io/Uni-Lab-OS-Doc/) +- [在线文档](https://deepmodeling.github.io/Uni-Lab-OS/) ## 快速开始 @@ -50,7 +46,7 @@ mamba install -n unilab uni-lab::unilabos -c robostack-staging -c conda-forge ```bash # 克隆仓库 -git clone https://github.com/dptech-corp/Uni-Lab-OS.git +git clone https://github.com/deepmodeling/Uni-Lab-OS.git cd Uni-Lab-OS # 安装 Uni-Lab-OS @@ -59,15 +55,37 @@ pip install . 3. 启动 Uni-Lab 系统: -请见[文档-启动样例](https://xuwznln.github.io/Uni-Lab-OS-Doc/boot_examples/index.html) +请见[文档-启动样例](https://deepmodeling.github.io/Uni-Lab-OS/boot_examples/index.html) ## 消息格式 -Uni-Lab-OS 使用预构建的 `unilabos_msgs` 进行系统通信。您可以在 [GitHub Releases](https://github.com/dptech-corp/Uni-Lab-OS/releases) 页面找到已构建的版本。 +Uni-Lab-OS 使用预构建的 `unilabos_msgs` 进行系统通信。您可以在 [GitHub Releases](https://github.com/deepmodeling/Uni-Lab-OS/releases) 页面找到已构建的版本。 + +## 引用 + +如果您在学术研究中使用 Uni-Lab-OS,请引用: + +```bibtex +@article{gao2025unilabos, + title = {UniLabOS: An AI-Native Operating System for Autonomous Laboratories}, + doi = {10.48550/arXiv.2512.21766}, + publisher = {arXiv}, + author = {Gao, Jing and Chang, Junhan and Que, Haohui and Xiong, Yanfei and + Zhang, Shixiang and Qi, Xianwei and Liu, Zhen and Wang, Jun-Jie and + Ding, Qianjun and Li, Xinyu and Pan, Ziwei and Xie, Qiming and + Yan, Zhuang and Yan, Junchi and Zhang, Linfeng}, + year = {2025} +} +``` ## 许可证 -此项目采用 GPL-3.0 许可 - 详情请参阅 [LICENSE](LICENSE) 文件。 +本项目采用双许可证结构: + +- **主框架**:GPL-3.0 - 详见 [LICENSE](LICENSE) +- **设备驱动** (`unilabos/devices/`):深势科技专有许可证 + +完整许可证说明请参阅 [NOTICE](NOTICE)。 ## 项目统计 @@ -79,4 +97,4 @@ Uni-Lab-OS 使用预构建的 `unilabos_msgs` 进行系统通信。您可以在 ## 联系我们 -- GitHub Issues: [https://github.com/dptech-corp/Uni-Lab-OS/issues](https://github.com/dptech-corp/Uni-Lab-OS/issues) +- GitHub Issues: [https://github.com/deepmodeling/Uni-Lab-OS/issues](https://github.com/deepmodeling/Uni-Lab-OS/issues) diff --git a/docs/user_guide/best_practice.md b/docs/user_guide/best_practice.md index 5b960e8e..e1ffc249 100644 --- a/docs/user_guide/best_practice.md +++ b/docs/user_guide/best_practice.md @@ -1807,7 +1807,7 @@ unilab --ak your_ak --sk your_sk -g graph.json \ #### 14.5 社区支持 -- **GitHub Issues**:[https://github.com/dptech-corp/Uni-Lab-OS/issues](https://github.com/dptech-corp/Uni-Lab-OS/issues) +- **GitHub Issues**:[https://github.com/deepmodeling/Uni-Lab-OS/issues](https://github.com/deepmodeling/Uni-Lab-OS/issues) - **官方网站**:[https://uni-lab.bohrium.com](https://uni-lab.bohrium.com) --- diff --git a/docs/user_guide/graph_files.md b/docs/user_guide/graph_files.md index a8f86aaf..44c3faf0 100644 --- a/docs/user_guide/graph_files.md +++ b/docs/user_guide/graph_files.md @@ -857,4 +857,4 @@ class ResourceDictPosition(BaseModel): - 在 Web 界面中使用模板创建 - 参考示例文件:`test/experiments/` 目录 - 查看 ResourceDict 源码了解完整定义 -- [GitHub 讨论区](https://github.com/dptech-corp/Uni-Lab-OS/discussions) +- [GitHub 讨论区](https://github.com/deepmodeling/Uni-Lab-OS/discussions) diff --git a/docs/user_guide/installation.md b/docs/user_guide/installation.md index d3fd4982..3f94f2ff 100644 --- a/docs/user_guide/installation.md +++ b/docs/user_guide/installation.md @@ -37,7 +37,7 @@ #### 第一步:下载预打包环境 -1. 访问 [GitHub Actions - Conda Pack Build](https://github.com/dptech-corp/Uni-Lab-OS/actions/workflows/conda-pack-build.yml) +1. 访问 [GitHub Actions - Conda Pack Build](https://github.com/deepmodeling/Uni-Lab-OS/actions/workflows/conda-pack-build.yml) 2. 选择最新的成功构建记录(绿色勾号 ✓) @@ -189,13 +189,13 @@ conda activate unilab ### 第一步:克隆仓库 ```bash -git clone https://github.com/dptech-corp/Uni-Lab-OS.git +git clone https://github.com/deepmodeling/Uni-Lab-OS.git cd Uni-Lab-OS ``` 如果您需要贡献代码,建议先 Fork 仓库: -1. 访问 https://github.com/dptech-corp/Uni-Lab-OS +1. 访问 https://github.com/deepmodeling/Uni-Lab-OS 2. 点击右上角的 "Fork" 按钮 3. Clone 您的 Fork 版本: ```bash @@ -240,7 +240,7 @@ pip uninstall unilabos -y # 克隆 dev 分支(如果还未克隆) cd /path/to/your/workspace -git clone -b dev https://github.com/dptech-corp/Uni-Lab-OS.git +git clone -b dev https://github.com/deepmodeling/Uni-Lab-OS.git # 或者如果已经克隆,切换到 dev 分支 cd Uni-Lab-OS git checkout dev @@ -503,9 +503,9 @@ mamba update ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-f ## 需要帮助? - **故障排查**: 查看更详细的故障排查信息 -- **GitHub Issues**: [报告问题](https://github.com/dptech-corp/Uni-Lab-OS/issues) +- **GitHub Issues**: [报告问题](https://github.com/deepmodeling/Uni-Lab-OS/issues) - **开发者文档**: 查看开发者指南获取更多技术细节 -- **社区讨论**: [GitHub Discussions](https://github.com/dptech-corp/Uni-Lab-OS/discussions) +- **社区讨论**: [GitHub Discussions](https://github.com/deepmodeling/Uni-Lab-OS/discussions) --- diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index 399be6ca..484ed7c6 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -17,7 +17,7 @@ build: - bash $SRC_DIR/build_ament_cmake.sh about: - repository: https://github.com/dptech-corp/Uni-Lab-OS + repository: https://github.com/deepmodeling/Uni-Lab-OS license: BSD-3-Clause description: "ros-humble-unilabos-msgs is a package that provides message definitions for Uni-Lab-OS." diff --git a/scripts/create_readme.py b/scripts/create_readme.py index 708f0004..c4f39330 100644 --- a/scripts/create_readme.py +++ b/scripts/create_readme.py @@ -126,7 +126,7 @@ If installation fails: For more help: - Documentation: docs/user_guide/installation.md - Quick Start: QUICK_START_CONDA_PACK.md - - Issues: https://github.com/dptech-corp/Uni-Lab-OS/issues + - Issues: https://github.com/deepmodeling/Uni-Lab-OS/issues License: -------- @@ -134,7 +134,7 @@ License: UniLabOS is licensed under GPL-3.0-only. See LICENSE file for details. -Repository: https://github.com/dptech-corp/Uni-Lab-OS +Repository: https://github.com/deepmodeling/Uni-Lab-OS """ return readme diff --git a/unilabos/devices/LICENSE b/unilabos/devices/LICENSE new file mode 100644 index 00000000..f72c497f --- /dev/null +++ b/unilabos/devices/LICENSE @@ -0,0 +1,73 @@ +Uni-Lab-OS软件许可使用准则 + + +本软件使用准则(以下简称"本准则")旨在规范用户在使用Uni-Lab-OS软件(以下简称"本软件")过程中的行为和义务。在下载、安装、使用或以任何方式访问本软件之前,请务必仔细阅读并理解以下条款和条件。若您不同意本准则的全部或部分内容,请您立即停止使用本软件。一旦您开始访问、下载、安装、使用本软件,即表示您已阅读、理解并同意接受本准则的约束。 + +1、使用许可 +1.1 本软件的所有权及版权归北京深势科技有限公司(以下简称"深势科技")所有。在遵守本准则的前提下,深势科技特此授予学术用户(以下简称"您")一个全球范围内的、非排他性的、免版权费用的使用许可,可为了满足学术目的而使用本软件。 + +1.2 本准则下授予的许可仅适用于本软件的二进制代码版本。您不对本软件源代码拥有任何权利。 + +2、使用限制 +2.1 本准则仅授予学术用户出于学术目的使用本软件,任何商业组织、商业机构或其他非学术用户不得使用本软件,如果违反本条款,深势科技将保留一切追诉的权利。 +2.2 您将本软件用于任何商业行为,应取得深势科技的商业许可。 +2.3 您不得将本软件或任何形式的衍生作品用于任何商业目的,也不得将其出售、出租、转让、分发或以其他方式提供给任何第三方。您必须确保本软件的使用仅限于您个人学术研究,禁止您为任何其他实体的利益使用本软件(无论是否收费)。 +2.4 您不得以任何方式修改、破解、反编译、反汇编、反向工程、隔离、分离或以其他方式从任何程序或文档中提取源代码或试图发现本软件的源代码。您不得以任何方式去除、修改或屏蔽本软件中的任何版权、商标或其他专有权利声明。您不得使用本软件进行任何非法活动,包括但不限于侵犯他人的知识产权、隐私权等。 +2.5 您同意将本软件仅用于合法的学术目的,且遵守您所在国家或地区的法律法规,您将承担因违反法律法规而产生的一切法律责任。 + +3、软件所有权 +本软件在此仅作使用许可,并非出售。本软件及与软件有关的全部文档的所有权及其他所有权利(包括但不限于知识产权和商业秘密),始终是深势科技的专有财产,您不拥有任何权利,但本准则下被明确授予的有限的使用许可权利除外。 + +4、衍生作品传播规范 +若您传播基于Uni-Lab-OS程序修改形成的作品,须同时满足以下全部条件: +4.1 作品必须包含显著声明,明确标注修改内容及修改日期; +4.2 作品必须声明本作品依据本许可协议发布; +4.3 必须将整个作品(包括修改部分)作为整体授予获取副本者本许可协议的保障,且该许可将自动延伸适用于作品全组件(无论其以何种形式打包); +4.4 若衍生作品含交互式用户界面:每个界面均须显示合规法律声明,若原始Uni-Lab-OS程序的交互界面未展示法律声明,您的衍生作品可免除此义务。 + +5、提出建议 +您可以对本软件提出建议,前提是: +(i)您声明并保证,该建议未侵害任何第三方的任何知识产权; +(ii)您承认,深势科技有权使用该建议,但无使用该建议的义务; +(iii)您授予深势科技一项非独占的、不可撤销的、可分许可的、无版权费的、全球范围的著作权许可,以复制、分发、传播、公开展示、公开表演、修改、翻译、基于其制作衍生作品、生产、制作、推销、销售、提供销售和/或以其他方式整体或部分地使用该建议和基于其的衍生作品,包括但不限于,通过将该建议整体或部分地纳入深势科技的软件和/或其他软件,以及在现存的或将来任何时候存在的任何媒介中或通过该媒介体现,以及为从事上述活动而授予多个分许可; +(iv)您特此授予深势科技一项永久的、全球范围的、非独占性的、免费的、免特许权使用费的、不可撤销的专利许可,许可其制造、委托制造、使用、要约销售、销售、进口及以其他方式转让该建议和基于其的衍生专利。上述专利许可的适用范围仅限于以下专利权利要求:您有权许可的、且仅因您的建议本身,或因您的建议与所提交的本软件结合而必然构成侵权的专利权利要求。若任何实体针对您或其他实体提起专利诉讼(包括诉讼中的交叉诉讼或反诉),主张该建议或您所贡献的软件构成直接或间接专利侵权,则依据本协议授予的、针对该建议或软件的任何专利许可,自该诉讼提起之日起终止。 +(v)您放弃对该建议的任何权利或主张,深势科技无需承担任何义务、版税或基于知识产权或其他方面的限制。 + +6、引用要求 +如您使用本软件获得的成果发表在出版物上,您应在成果中承认对Uni-Lab-OS软件的使用并标注权利人名称。引用 Uni-Lab-OS时请使用以下内容: +@article{gao2025unilabos, + title = {UniLabOS: An AI-Native Operating System for Autonomous Laboratories}, + doi = {10.48550/arXiv.2512.21766}, + publisher = {arXiv}, + author = {Gao, Jing and Chang, Junhan and Que, Haohui and Xiong, Yanfei and Zhang, Shixiang and Qi, Xianwei and Liu, Zhen and Wang, Jun-Jie and Ding, Qianjun and Li, Xinyu and Pan, Ziwei and Xie, Qiming and Yan, Zhuang and Yan, Junchi and Zhang, Linfeng}, + year = {2025} +} + +7、保留权利 +您认可,所有未被明确授予您的本软件的权利,无论是当前或今后存在的,均由深势科技予以保留,任何未经深势科技明确授权而使用本软件的行为将被视为侵权,深势科技有权追究侵权者的一切法律责任。 + +8、保密信息 +您同意将本软件代码及相关文档视为深势科技的机密信息,您不会向任何第三方提供相关代码,并将采取合理审慎的使用态度来防止本软件代码及相关文档被泄露。 + +9、无保证 +该软件是"按原样"提供的,没有任何明示或暗示的保证,不包含任何代码或规范没有缺陷、适销性、适用于特定目的或不侵犯第三方权利的保证。您同意您自主承担使用本软件或与本准则有关的全部风险。 + +10、免责条款 +在任何情况下,无论基于侵权(包括过失)、合同或其他法律理论,除非适用法律强制规定(如故意或重大过失行为)或另有书面协议,深势科技不对被许可人因软件许可、使用或无法使用软件所致损害承担责任(包括任何性质的直接、间接、特殊、偶发或后果性损害,例如但不限于商誉损失、停工损失、计算机故障或失灵造成的损害,以及其他一切商业损害或损失),即使深势科技已被告知发生此类损害的可能性亦不例外。 +被许可人在再分发软件或其衍生作品时,仅能以自身名义独立承担责任进行操作,不得代表深势科技或其他被许可人。 + +11、终止 +如果您以任何方式违反本准则或未能遵守本准则的任何重要条款或条件,则您被授予的所有权利将自动终止。 + +12、举报 +如果您认为有人违反了本准则,请向深势科技进行举报,深势科技将对您的身份进行严格保密,举报邮箱changjh@dp.tech。 + +13、法律管辖 +本准则中的任何内容均不得解释为通过暗示、禁止反悔或其他方式授予本准则中授予的许可或权利以外的任何许可或权利。如果本准则的任何条款被认定为不可执行,则仅在必要的范围内对该条款进行修改,使其可执行。本准则应受中华人民共和国法律管辖,不适用法律冲突条款及《联合国国际货物销售合同公约》,因本准则产生的一切争议由北京市海淀区人民法院管辖。 + +14、未来版本 +深势科技保留不经事先通知随时变更或停止本软件或本准则的权利。 + +15、语言优先 +本准则同时具有中文版本和英文版本,如果英文版本和中文版本有冲突,以中文版本为准。 + diff --git a/unilabos/devices/LICENSE_eng b/unilabos/devices/LICENSE_eng new file mode 100644 index 00000000..33699a33 --- /dev/null +++ b/unilabos/devices/LICENSE_eng @@ -0,0 +1,73 @@ +Uni-Lab-OS License Agreement + +Preamble +This License Agreement (the "Agreement") is instituted to govern user conduct and obligations in relation to the utilization of the Uni-Lab-OS (the "Software"). By accessing, downloading, installing, or utilizing the Software in any manner, you hereby acknowledge that you have meticulously reviewed, comprehended, and consented to be legally bound by the terms herein. If you dissent from any provision of this Agreement, you must forthwith cease all interaction with the Software. + +1. Grant of License +1.1 The proprietary rights to the Software are exclusively retained by Beijing DP Technology Co., Ltd. ("DP Technology"). Subject to full compliance with this Agreement, DP Technology hereby grants academic users ("Licensee") a worldwide, non-exclusive, royalty-free license to untilise the Software solely for non-commercial academic pursuits. + +1.2 The foregoing license applies exclusively to the Software's executable binary code. No rights whatsoever are conferred to the Software's source code. + +2. Usage Restrictions +2.1 This license is restricted to academic users engaging in scholastic activities. Commercial entities, institutions, or any non-academic parties are expressly prohibited from utilizing the Software. Violations of this clause shall entitle DP Technology to pursue all available legal remedies. +2.2 The Licensee shall obtain a commercial license from DP Technology for any commercial use of the Software. +2.3 The Licensee shall not utilise the Software or any derivative works for commercial purposes, nor distribute, sublicense, lease, transfer, or otherwise disseminate the Software to third parties. The Licensee is strictly prohibited from utilizing the Software for the benefit of any third-party entity, whether gratuitously or otherwise. +2.4 Reverse engineering, decompilation, disassembly, code isolation, or any attempt to derive source code from the Software is strictly prohibited. The Licensee shall not alter, circumvent, or remove copyright notices, trademarks, or proprietary legends embedded in the Software. Use of the Software for unlawful activities—including but not limited to intellectual property infringement or privacy violations—is categorically barred. +2.5 The Licensee warrants that the Software shall be utilised solely for lawful academic purposes in compliance with applicable jurisdictional statutes. All legal liabilities arising from noncompliance shall be borne exclusively by the Licensee. + +3. Proprietary Rights +This Agreement confers a license to utilise the Software, not a transfer of ownership. All intellectual property rights—including copyrights, patents, trade secrets, and documentation—remain the exclusive dominion of DP Technology. The Licensee acquires no entitlements beyond the limited usage privileges expressly delineated herein. + +4. Derivative Work +You may convey a work based on the Software, or the modifications to produce it from the Software, provided that you meet all of these conditions: +4.1 The work must carry prominent notices stating that you modified it, and giving a relevant date. +4.2 The work must carry prominent notices stating that it is released under this License. +4.3 You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +4.4 If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Software has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +5. Feedback and Proposals +Licensees may submit proposals, suggestions, or improvements pertaining to the Software ("Feedback") under the following conditions: +(a) Licensee represents and warrants that such Feedback does not infringe upon any third-party intellectual property rights; +(b) Licensee acknowledges that DP Technology reserves the right, but assumes no obligation, to utilize such Feedback; +(c) Licensee irrevocably grants DP Technology a non-exclusive, royalty-free, perpetual, worldwide, sublicensable copyright license to reproduce, distribute, modify, publicly perform or display, translate, create derivative works of, commercialize, and otherwise exploit the Feedback in any medium or format, whether now known or hereafter devised, including the right to grant multiple tiers of sublicenses to enable such activities; +(d) Licensee hereby grants DP Technology a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Feedback and such Derivative Works, where such license applies only to those patent claimss licensable by Licensee that are necessarily infringed by the Feedback(s) alone or by comibination of the Feedback(s) with the Software to which such Feedback(s) were submitted. If any entity institutes patent litigation against Licensee or any other entity (including a cross-claim orcounterclaim in a lawsuit) alleging that the Feedback, or the Software to which you have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted under this Agreement for the Feedback or Software shall terminate as of the date such litigation is filed. +(e) Licensee hereby waives all claims, proprietary rights, or restrictions related to DP Technology's use of such Feedback. + +6. Citation Requirement +If academic or research output generated using the Software is published, Licensee must explicitly acknowledge the use of Uni-Lab-OS and attribute ownership to DP Technology. The following citation must be included: +@article{gao2025unilabos, + title = {UniLabOS: An AI-Native Operating System for Autonomous Laboratories}, + doi = {10.48550/arXiv.2512.21766}, + publisher = {arXiv}, + author = {Gao, Jing and Chang, Junhan and Que, Haohui and Xiong, Yanfei and Zhang, Shixiang and Qi, Xianwei and Liu, Zhen and Wang, Jun-Jie and Ding, Qianjun and Li, Xinyu and Pan, Ziwei and Xie, Qiming and Yan, Zhuang and Yan, Junchi and Zhang, Linfeng}, + year = {2025} +} + +7. Reservation of Rights +All rights not expressly granted herein, whether existing now or arising in the future, are exclusively reserved by DP Technology. Any unauthorized use of the Software beyond the scope of this Agreement constitutes infringement, and DP Technology reserves all legal rights to pursue remedies against violators. + +8. Confidentiality +Licensee agrees to treat the Software's code, documentation, and related materials as confidential information. Licensee shall not disclose such materials to third parties and shall employ reasonable safeguards to prevent unauthorized access, dissemination, or misuse. + +9. Disclaimer of Warranties +The software is provided "as is," without warranties of any kind, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, non-infringement, or error-free operation. Licensee accepts all risks associated with the use of the software. + +10. Limitation of Liability +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall DP Technology be liable to Licensee for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the software (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if DP Technology has been advised of the possibility of such damages. +While redistributing the Software or Derivative Works thereof, Licensee may act only on Licensee's own behalf and on Licensee's sole responsibility, not on behalf of DP Technology or any other Licensee. + +11. Termination +All rights granted herein shall terminate immediately and automatically if Licensee materially breaches any provision of this Agreement. + +12. Reporting Violations +To report suspected violations of this Agreement, notify DP Technology via the designated email address: changjh@dp.tech. DP Technology shall maintain the confidentiality of the reporter's identity. + +13. Governing Law and Dispute Resolution +This Agreement shall be governed by the laws of the People's Republic of China, excluding its conflict of laws principles and the United Nations Convention on Contracts for the International Sale of Goods. Any dispute arising from this Agreement shall be exclusively adjudicated by the Haidian District People's Court in Beijing. + +14. Amendments and Updates +DP Technology reserves the right to modify, suspend, or terminate the Software or this Agreement at any time without prior notice. + +15. Language Priority +This Agreement is provided in both Chinese and English. In the event of any discrepancy, the Chinese version shall prevail. + From 78bf57f590e93c8876fe025e1851744fe88c4fac Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 20:41:23 +0800 Subject: [PATCH 14/40] Bump version to 0.10.4 --- .conda/recipe.yaml | 2 +- recipes/msgs/recipe.yaml | 2 +- recipes/unilabos/recipe.yaml | 2 +- setup.py | 2 +- unilabos/__init__.py | 2 +- unilabos/test/experiments/prcxi_9320_with_res_test.json | 4 ++-- unilabos_msgs/package.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.conda/recipe.yaml b/.conda/recipe.yaml index 979de17f..8dccb800 100644 --- a/.conda/recipe.yaml +++ b/.conda/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: 0.10.13 + version: 0.10.14 source: path: ../unilabos diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index 484ed7c6..88b68277 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -1,6 +1,6 @@ package: name: ros-humble-unilabos-msgs - version: 0.10.13 + version: 0.10.14 source: path: ../../unilabos_msgs target_directory: src diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index 34bd39c7..45a0098a 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.10.13" + version: "0.10.14" source: path: ../.. diff --git a/setup.py b/setup.py index cb687c20..290a9a21 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ package_name = 'unilabos' setup( name=package_name, - version='0.10.13', + version='0.10.14', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/unilabos/__init__.py b/unilabos/__init__.py index f63b48ab..a9f358e1 100644 --- a/unilabos/__init__.py +++ b/unilabos/__init__.py @@ -1 +1 @@ -__version__ = "0.10.13" +__version__ = "0.10.14" diff --git a/unilabos/test/experiments/prcxi_9320_with_res_test.json b/unilabos/test/experiments/prcxi_9320_with_res_test.json index d29918cd..5462dcf3 100644 --- a/unilabos/test/experiments/prcxi_9320_with_res_test.json +++ b/unilabos/test/experiments/prcxi_9320_with_res_test.json @@ -21,12 +21,12 @@ }, "host": "10.20.30.184", "port": 9999, - "debug": false, + "debug": true, "setup": true, "is_9320": true, "timeout": 10, "matrix_id": "5de524d0-3f95-406c-86dd-f83626ebc7cb", - "simulator": false, + "simulator": true, "channel_num": 2 }, "data": { diff --git a/unilabos_msgs/package.xml b/unilabos_msgs/package.xml index 325fc131..02beacfd 100644 --- a/unilabos_msgs/package.xml +++ b/unilabos_msgs/package.xml @@ -2,7 +2,7 @@ unilabos_msgs - 0.10.13 + 0.10.14 ROS2 Messages package for unilabos devices Junhan Chang Xuwznln From 3d2d428a96144d7b4f3bb6a3dba8fe076a9ad6c0 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 20:54:20 +0800 Subject: [PATCH 15/40] Update README.md Modify resource_tracker file module path. (cherry picked from commit 8066c200b9d16a2abaadc0d773ac87a366f52a2d) --- README.md | 14 ++++++++++---- README_zh.md | 8 ++++++-- docs/user_guide/graph_files.md | 8 ++++---- tests/resources/test_resourcetreeset.py | 3 +-- unilabos/app/backend.py | 2 +- unilabos/app/main.py | 2 +- unilabos/app/web/client.py | 4 +--- .../device_comms/coin_cell_assembly_workstation.py | 4 ++-- unilabos/devices/liquid_handling/biomek.py | 2 +- unilabos/resources/graphio.py | 2 +- .../{ros/nodes => resources}/resource_tracker.py | 0 unilabos/ros/device_node_wrapper.py | 2 +- unilabos/ros/initialize_device.py | 3 +-- unilabos/ros/main_slave_run.py | 2 +- unilabos/ros/nodes/base_device_node.py | 9 +-------- unilabos/ros/nodes/presets/host_node.py | 4 +--- unilabos/ros/nodes/presets/workstation.py | 5 ++--- unilabos/ros/utils/driver_creator.py | 7 +++---- 18 files changed, 38 insertions(+), 43 deletions(-) rename unilabos/{ros/nodes => resources}/resource_tracker.py (100%) diff --git a/README.md b/README.md index 7cf43d9a..f10cc0f0 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,9 @@ Detailed documentation can be found at: ## Quick Start -Uni-Lab-OS recommends using `mamba` for environment management. Choose the appropriate environment file for your operating system: +1. Setup Conda Environment + +Uni-Lab-OS recommends using `mamba` for environment management: ```bash # Create new environment @@ -40,7 +42,7 @@ mamba activate unilab mamba install -n unilab uni-lab::unilabos -c robostack-staging -c conda-forge ``` -## Install Dev Uni-Lab-OS +2. Install Dev Uni-Lab-OS ```bash # Clone the repository @@ -51,17 +53,21 @@ cd Uni-Lab-OS pip install . ``` -3. Start Uni-Lab System: +3. Start Uni-Lab System Please refer to [Documentation - Boot Examples](https://deepmodeling.github.io/Uni-Lab-OS/boot_examples/index.html) +4. Best Practice + +See [Best Practice Guide](https://deepmodeling.github.io/Uni-Lab-OS/user_guide/best_practice.html) + ## Message Format Uni-Lab-OS uses pre-built `unilabos_msgs` for system communication. You can find the built versions on the [GitHub Releases](https://github.com/deepmodeling/Uni-Lab-OS/releases) page. ## Citation -If you use Uni-Lab-OS in academic research, please cite: +If you use [Uni-Lab-OS](https://arxiv.org/abs/2512.21766) in academic research, please cite: ```bibtex @article{gao2025unilabos, diff --git a/README_zh.md b/README_zh.md index e635e71a..c4dba7d1 100644 --- a/README_zh.md +++ b/README_zh.md @@ -53,17 +53,21 @@ cd Uni-Lab-OS pip install . ``` -3. 启动 Uni-Lab 系统: +3. 启动 Uni-Lab 系统 请见[文档-启动样例](https://deepmodeling.github.io/Uni-Lab-OS/boot_examples/index.html) +4. 最佳实践 + +请见[最佳实践指南](https://deepmodeling.github.io/Uni-Lab-OS/user_guide/best_practice.html) + ## 消息格式 Uni-Lab-OS 使用预构建的 `unilabos_msgs` 进行系统通信。您可以在 [GitHub Releases](https://github.com/deepmodeling/Uni-Lab-OS/releases) 页面找到已构建的版本。 ## 引用 -如果您在学术研究中使用 Uni-Lab-OS,请引用: +如果您在学术研究中使用 [Uni-Lab-OS](https://arxiv.org/abs/2512.21766),请引用: ```bibtex @article{gao2025unilabos, diff --git a/docs/user_guide/graph_files.md b/docs/user_guide/graph_files.md index 44c3faf0..d6902829 100644 --- a/docs/user_guide/graph_files.md +++ b/docs/user_guide/graph_files.md @@ -463,7 +463,7 @@ Uni-Lab 使用 `ResourceDictInstance.get_resource_instance_from_dict()` 方法 ### 使用示例 ```python -from unilabos.ros.nodes.resource_tracker import ResourceDictInstance +from unilabos.resources.resource_tracker import ResourceDictInstance # 旧格式节点 old_format_node = { @@ -477,10 +477,10 @@ old_format_node = { instance = ResourceDictInstance.get_resource_instance_from_dict(old_format_node) # 访问标准化后的数据 -print(instance.res_content.id) # "pump_1" -print(instance.res_content.uuid) # 自动生成的 UUID +print(instance.res_content.id) # "pump_1" +print(instance.res_content.uuid) # 自动生成的 UUID print(instance.res_content.config) # {} -print(instance.res_content.data) # {} +print(instance.res_content.data) # {} ``` ### 格式迁移建议 diff --git a/tests/resources/test_resourcetreeset.py b/tests/resources/test_resourcetreeset.py index 1ba9ab20..cd1ff91a 100644 --- a/tests/resources/test_resourcetreeset.py +++ b/tests/resources/test_resourcetreeset.py @@ -2,9 +2,8 @@ import pytest import json import os -from pylabrobot.resources import Resource as ResourcePLR from unilabos.resources.graphio import resource_bioyond_to_plr -from unilabos.ros.nodes.resource_tracker import ResourceTreeSet +from unilabos.resources.resource_tracker import ResourceTreeSet from unilabos.registry.registry import lab_registry from unilabos.resources.bioyond.decks import BIOYOND_PolymerReactionStation_Deck diff --git a/unilabos/app/backend.py b/unilabos/app/backend.py index b2bc0af2..4af03cb0 100644 --- a/unilabos/app/backend.py +++ b/unilabos/app/backend.py @@ -1,6 +1,6 @@ import threading -from unilabos.ros.nodes.resource_tracker import ResourceTreeSet +from unilabos.resources.resource_tracker import ResourceTreeSet from unilabos.utils import logger diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 3af50cbb..6738b2f8 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -315,7 +315,7 @@ def main(): from unilabos.app.web import start_server from unilabos.app.register import register_devices_and_resources from unilabos.resources.graphio import modify_to_backend_format - from unilabos.ros.nodes.resource_tracker import ResourceTreeSet, ResourceDict + from unilabos.resources.resource_tracker import ResourceTreeSet, ResourceDict # 显示启动横幅 print_unilab_banner(args_dict) diff --git a/unilabos/app/web/client.py b/unilabos/app/web/client.py index 8968f033..64a9418b 100644 --- a/unilabos/app/web/client.py +++ b/unilabos/app/web/client.py @@ -6,12 +6,10 @@ HTTP客户端模块 import json import os -import time -from threading import Thread from typing import List, Dict, Any, Optional import requests -from unilabos.ros.nodes.resource_tracker import ResourceTreeSet +from unilabos.resources.resource_tracker import ResourceTreeSet from unilabos.utils.log import info from unilabos.config.config import HTTPConfig, BasicConfig from unilabos.utils import logger diff --git a/unilabos/device_comms/coin_cell_assembly_workstation.py b/unilabos/device_comms/coin_cell_assembly_workstation.py index 62d9b09c..187f4117 100644 --- a/unilabos/device_comms/coin_cell_assembly_workstation.py +++ b/unilabos/device_comms/coin_cell_assembly_workstation.py @@ -6,7 +6,7 @@ Coin Cell Assembly Workstation """ from typing import Dict, Any, List, Optional, Union -from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker +from unilabos.resources.resource_tracker import DeviceNodeResourceTracker from unilabos.device_comms.workstation_base import WorkstationBase, WorkflowInfo from unilabos.device_comms.workstation_communication import ( WorkstationCommunicationBase, CommunicationConfig, CommunicationProtocol, CoinCellCommunication @@ -61,7 +61,7 @@ class CoinCellAssemblyWorkstation(WorkstationBase): # 创建资源跟踪器(如果没有提供) if resource_tracker is None: - from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker + from unilabos.resources.resource_tracker import DeviceNodeResourceTracker resource_tracker = DeviceNodeResourceTracker() # 初始化基类 diff --git a/unilabos/devices/liquid_handling/biomek.py b/unilabos/devices/liquid_handling/biomek.py index 3fe3049d..7fbafd7e 100644 --- a/unilabos/devices/liquid_handling/biomek.py +++ b/unilabos/devices/liquid_handling/biomek.py @@ -13,7 +13,7 @@ from pylabrobot.resources import ( import copy from unilabos_msgs.msg import Resource -from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker # type: ignore +from unilabos.resources.resource_tracker import DeviceNodeResourceTracker # type: ignore class LiquidHandlerBiomek: diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 8744b457..faf0482a 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -13,7 +13,7 @@ from unilabos.config.config import BasicConfig from unilabos.resources.container import RegularContainer from unilabos.resources.itemized_carrier import ItemizedCarrier, BottleCarrier from unilabos.ros.msgs.message_converter import convert_to_ros_msg -from unilabos.ros.nodes.resource_tracker import ( +from unilabos.resources.resource_tracker import ( ResourceDictInstance, ResourceTreeSet, ) diff --git a/unilabos/ros/nodes/resource_tracker.py b/unilabos/resources/resource_tracker.py similarity index 100% rename from unilabos/ros/nodes/resource_tracker.py rename to unilabos/resources/resource_tracker.py diff --git a/unilabos/ros/device_node_wrapper.py b/unilabos/ros/device_node_wrapper.py index f5e80c58..db9caa41 100644 --- a/unilabos/ros/device_node_wrapper.py +++ b/unilabos/ros/device_node_wrapper.py @@ -5,7 +5,7 @@ from unilabos.ros.msgs.message_converter import ( get_action_type, ) from unilabos.ros.nodes.base_device_node import init_wrapper, ROS2DeviceNode -from unilabos.ros.nodes.resource_tracker import ResourceDictInstance +from unilabos.resources.resource_tracker import ResourceDictInstance # 定义泛型类型变量 T = TypeVar("T") diff --git a/unilabos/ros/initialize_device.py b/unilabos/ros/initialize_device.py index 55ac1455..675814ad 100644 --- a/unilabos/ros/initialize_device.py +++ b/unilabos/ros/initialize_device.py @@ -1,10 +1,9 @@ -import copy from typing import Optional from unilabos.registry.registry import lab_registry from unilabos.ros.device_node_wrapper import ros2_device_node from unilabos.ros.nodes.base_device_node import ROS2DeviceNode, DeviceInitError -from unilabos.ros.nodes.resource_tracker import ResourceDictInstance +from unilabos.resources.resource_tracker import ResourceDictInstance from unilabos.utils import logger from unilabos.utils.exception import DeviceClassInvalid from unilabos.utils.import_manager import default_manager diff --git a/unilabos/ros/main_slave_run.py b/unilabos/ros/main_slave_run.py index 4373cea3..b79c3683 100644 --- a/unilabos/ros/main_slave_run.py +++ b/unilabos/ros/main_slave_run.py @@ -10,7 +10,7 @@ from unilabos_msgs.srv._serial_command import SerialCommand_Response from unilabos.app.register import register_devices_and_resources from unilabos.ros.nodes.presets.resource_mesh_manager import ResourceMeshManager -from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker, ResourceTreeSet +from unilabos.resources.resource_tracker import DeviceNodeResourceTracker, ResourceTreeSet from unilabos.devices.ros_dev.liquid_handler_joint_publisher import LiquidHandlerJointPublisher from unilabos_msgs.srv import SerialCommand # type: ignore from rclpy.executors import MultiThreadedExecutor diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index e810b0bb..954a6532 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -1,4 +1,3 @@ -import copy import inspect import io import json @@ -13,7 +12,6 @@ import asyncio import rclpy import yaml -from msgcenterpy import ROS2MessageInstance from rclpy.node import Node from rclpy.action import ActionServer, ActionClient from rclpy.action.server import ServerGoalHandle @@ -26,11 +24,7 @@ from unilabos.utils.decorator import get_topic_config, get_all_subscriptions from unilabos.resources.container import RegularContainer from unilabos.resources.graphio import ( - resource_ulab_to_plr, initialize_resources, - dict_to_tree, - resource_plr_to_ulab, - tree_to_list, ) from unilabos.resources.plr_additional_res_reg import register from unilabos.ros.msgs.message_converter import ( @@ -47,7 +41,7 @@ from unilabos_msgs.srv import ( ) # type: ignore from unilabos_msgs.msg import Resource # type: ignore -from unilabos.ros.nodes.resource_tracker import ( +from unilabos.resources.resource_tracker import ( DeviceNodeResourceTracker, ResourceTreeSet, ResourceTreeInstance, @@ -363,7 +357,6 @@ class BaseROS2DeviceNode(Node, Generic[T]): return res async def append_resource(req: SerialCommand_Request, res: SerialCommand_Response): - from pylabrobot.resources.resource import Resource as ResourcePLR from pylabrobot.resources.deck import Deck from pylabrobot.resources import Coordinate from pylabrobot.resources import Plate diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 971b6dd4..e0a66bf8 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -10,7 +10,6 @@ from typing import TYPE_CHECKING, Optional, Dict, Any, List, ClassVar, Set, Type from action_msgs.msg import GoalStatus from geometry_msgs.msg import Point from rclpy.action import ActionClient, get_action_server_names_and_types_by_node -from rclpy.callback_groups import ReentrantCallbackGroup from rclpy.service import Service from unilabos_msgs.msg import Resource # type: ignore from unilabos_msgs.srv import ( @@ -19,7 +18,6 @@ from unilabos_msgs.srv import ( ResourceUpdate, ResourceList, SerialCommand, - ResourceGet, ) # type: ignore from unilabos_msgs.srv._serial_command import SerialCommand_Request, SerialCommand_Response from unique_identifier_msgs.msg import UUID @@ -37,7 +35,7 @@ from unilabos.ros.msgs.message_converter import ( ) from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, ROS2DeviceNode, DeviceNodeResourceTracker from unilabos.ros.nodes.presets.controller_node import ControllerNode -from unilabos.ros.nodes.resource_tracker import ( +from unilabos.resources.resource_tracker import ( ResourceDict, ResourceDictInstance, ResourceTreeSet, diff --git a/unilabos/ros/nodes/presets/workstation.py b/unilabos/ros/nodes/presets/workstation.py index 91cd0ef6..ed3fe144 100644 --- a/unilabos/ros/nodes/presets/workstation.py +++ b/unilabos/ros/nodes/presets/workstation.py @@ -12,11 +12,10 @@ from unilabos_msgs.srv import ResourceUpdate from unilabos.messages import * # type: ignore # protocol names from rclpy.action import ActionServer, ActionClient from rclpy.action.server import ServerGoalHandle -from rclpy.callback_groups import ReentrantCallbackGroup from unilabos_msgs.srv._serial_command import SerialCommand_Request, SerialCommand_Response from unilabos.compile import action_protocol_generators -from unilabos.resources.graphio import list_to_nested_dict, nested_dict_to_list +from unilabos.resources.graphio import nested_dict_to_list from unilabos.ros.initialize_device import initialize_device_from_dict from unilabos.ros.msgs.message_converter import ( get_action_type, @@ -24,7 +23,7 @@ from unilabos.ros.msgs.message_converter import ( convert_from_ros_msg_with_mapping, ) from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode, DeviceNodeResourceTracker, ROS2DeviceNode -from unilabos.ros.nodes.resource_tracker import ResourceTreeSet, ResourceDictInstance +from unilabos.resources.resource_tracker import ResourceTreeSet, ResourceDictInstance from unilabos.utils.type_check import get_result_info_str if TYPE_CHECKING: diff --git a/unilabos/ros/utils/driver_creator.py b/unilabos/ros/utils/driver_creator.py index 7a60474a..35aca5ec 100644 --- a/unilabos/ros/utils/driver_creator.py +++ b/unilabos/ros/utils/driver_creator.py @@ -11,10 +11,9 @@ import traceback from abc import abstractmethod from typing import Type, Any, Dict, Optional, TypeVar, Generic, List -from unilabos.resources.graphio import nested_dict_to_list, resource_ulab_to_plr -from unilabos.ros.nodes.resource_tracker import DeviceNodeResourceTracker, ResourceTreeSet, ResourceDictInstance, \ +from unilabos.resources.resource_tracker import DeviceNodeResourceTracker, ResourceTreeSet, ResourceDictInstance, \ ResourceTreeInstance -from unilabos.utils import logger, import_manager +from unilabos.utils import logger from unilabos.utils.cls_creator import create_instance_from_config # 定义泛型类型变量 @@ -135,7 +134,7 @@ class PyLabRobotCreator(DeviceClassCreator[T]): Returns: 处理后的数据 """ - from pylabrobot.resources import Deck, Resource + from pylabrobot.resources import Resource if states is None: states = {} From 12c0770c92e8dc5abf95a5151fed134f43784ce1 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 7 Jan 2026 21:11:10 +0800 Subject: [PATCH 16/40] Fix build on macos-intel --- .github/workflows/conda-pack-build.yml | 2 +- .github/workflows/multi-platform-build.yml | 2 +- .github/workflows/unilabos-conda-build.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/conda-pack-build.yml b/.github/workflows/conda-pack-build.yml index 7e278a9b..3a379fa5 100644 --- a/.github/workflows/conda-pack-build.yml +++ b/.github/workflows/conda-pack-build.yml @@ -24,7 +24,7 @@ jobs: platform: linux-64 env_file: unilabos-linux-64.yaml script_ext: sh - - os: macos-13 # Intel + - os: macos-15 # Intel (via Rosetta) platform: osx-64 env_file: unilabos-osx-64.yaml script_ext: sh diff --git a/.github/workflows/multi-platform-build.yml b/.github/workflows/multi-platform-build.yml index a8785da8..bcba6dbf 100644 --- a/.github/workflows/multi-platform-build.yml +++ b/.github/workflows/multi-platform-build.yml @@ -27,7 +27,7 @@ jobs: - os: ubuntu-latest platform: linux-64 env_file: unilabos-linux-64.yaml - - os: macos-13 # Intel + - os: macos-15 # Intel (via Rosetta) platform: osx-64 env_file: unilabos-osx-64.yaml - os: macos-latest # ARM64 diff --git a/.github/workflows/unilabos-conda-build.yml b/.github/workflows/unilabos-conda-build.yml index 65f6fba4..214f9bfc 100644 --- a/.github/workflows/unilabos-conda-build.yml +++ b/.github/workflows/unilabos-conda-build.yml @@ -26,7 +26,7 @@ jobs: include: - os: ubuntu-latest platform: linux-64 - - os: macos-13 # Intel + - os: macos-15 # Intel (via Rosetta) platform: osx-64 - os: macos-latest # ARM64 platform: osx-arm64 From f26eb69eca79cc78485010541467a8b7986e23de Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 03:04:32 +0800 Subject: [PATCH 17/40] Fix size not pass through. --- unilabos/resources/resource_tracker.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index 09e77493..610ba3dd 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -14,9 +14,9 @@ if TYPE_CHECKING: class ResourceDictPositionSize(BaseModel): - depth: float = Field(description="Depth", default=0.0) - width: float = Field(description="Width", default=0.0) - height: float = Field(description="Height", default=0.0) + depth: float = Field(description="Depth", default=0.0) # z + width: float = Field(description="Width", default=0.0) # x + height: float = Field(description="Height", default=0.0) # y class ResourceDictPositionScale(BaseModel): @@ -469,9 +469,9 @@ class ResourceTreeSet(object): **res.config, "name": res.name, "type": res.config.get("type", plr_type), - "size_x": res.config.get("size_x", 0), - "size_y": res.config.get("size_y", 0), - "size_z": res.config.get("size_z", 0), + "size_x": res.pose.size.width, + "size_y": res.pose.size.height, + "size_z": res.pose.size.depth, "location": { "x": res.pose.position.x, "y": res.pose.position.y, From bad1db509434110946f244b7eb581ef3e9362c59 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 03:04:57 +0800 Subject: [PATCH 18/40] location not passed to ItemizedCarrier when assign child resource --- unilabos/resources/itemized_carrier.py | 1 + 1 file changed, 1 insertion(+) diff --git a/unilabos/resources/itemized_carrier.py b/unilabos/resources/itemized_carrier.py index 3b3454a1..a5207d4c 100644 --- a/unilabos/resources/itemized_carrier.py +++ b/unilabos/resources/itemized_carrier.py @@ -149,6 +149,7 @@ class ItemizedCarrier(ResourcePLR): if not reassign and self.sites[idx] is not None: raise ValueError(f"a site with index {idx} already exists") + location = list(self.child_locations.values())[idx] super().assign_child_resource(resource, location=location, reassign=reassign) self.sites[idx] = resource From 1c312772ae0a1863563ecdb3678122c0cca64ef8 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 03:05:17 +0800 Subject: [PATCH 19/40] Force update resource when adding new resource / transfer to another resource --- unilabos/ros/nodes/base_device_node.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 954a6532..66a48c4e 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -881,6 +881,13 @@ class BaseROS2DeviceNode(Node, Generic[T]): raise ValueError("tree_set不能为None") plr_resources = tree_set.to_plr_resources() result = _handle_add(plr_resources, tree_set, additional_add_params) + new_tree_set = ResourceTreeSet.from_plr_resources(plr_resources) + r = SerialCommand.Request() + r.command = json.dumps( + {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 + response: SerialCommand_Response = await self._resource_clients[ + "c2s_update_resource_tree"].call_async(r) # type: ignore + self.lab_logger().info(f"确认资源云端 Add 结果: {response.response}") results.append(result) elif action == "update": if tree_set is None: @@ -1758,6 +1765,7 @@ class ROS2DeviceNode: or driver_class.__name__ == "LiquidHandlerBiomek" or driver_class.__name__ == "PRCXI9300Handler" or driver_class.__name__ == "TransformXYZHandler" + or driver_class.__name__ == "OpcUaClient" ) # 创建设备类实例 From 93cb3073966660de076fb428e1d2c897b95cca2c Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 03:45:30 +0800 Subject: [PATCH 20/40] Fix update with different spot and same parent --- unilabos/ros/nodes/base_device_node.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 66a48c4e..489b4e56 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -844,6 +844,16 @@ class BaseROS2DeviceNode(Node, Generic[T]): and original_parent_resource is not None ): self.transfer_to_new_resource(original_instance, tree, additional_add_params) + else: + # 判断是否变更了resource_site + target_site = original_instance.unilabos_extra.get("update_resource_site") + sites = original_instance.parent.sites if original_instance.parent is not None and hasattr(original_instance.parent, "sites") else None + site_names = list(original_instance.parent._ordering.keys()) if original_instance.parent is not None and hasattr(original_instance.parent, "sites") else [] + if target_site is not None and sites is not None and site_names is not None: + site_index = sites.index(original_instance) + site_name = site_names[site_index] + if site_name != target_site: + self.transfer_to_new_resource(original_instance, tree, additional_add_params) # 加载状态 original_instance.load_all_state(states) @@ -898,7 +908,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): plr_resources.append(tree.root_node) else: plr_resources.append(ResourceTreeSet([tree]).to_plr_resources()[0]) + new_tree_set = ResourceTreeSet.from_plr_resources(plr_resources) result = _handle_update(plr_resources, tree_set, additional_add_params) + r = SerialCommand.Request() + r.command = json.dumps( + {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 + response: SerialCommand_Response = await self._resource_clients[ + "c2s_update_resource_tree"].call_async(r) # type: ignore + self.lab_logger().info(f"确认资源云端 Update 结果: {response.response}") results.append(result) elif action == "remove": result = _handle_remove(resources_uuid) From daea1ab54da860adb7693682b4698f5cb117fbc3 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 15:26:31 +0800 Subject: [PATCH 21/40] temp cancel update req --- unilabos/ros/nodes/base_device_node.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 489b4e56..5d7379e7 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -790,7 +790,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): def _handle_update( plr_resources: List[Union[ResourcePLR, ResourceDictInstance]], tree_set: ResourceTreeSet, additional_add_params: Dict[str, Any] - ) -> Dict[str, Any]: + ) -> Tuple[Dict[str, Any], List[ResourcePLR]]: """ 处理资源更新操作的内部函数 @@ -802,6 +802,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): Returns: 操作结果字典 """ + original_instances = [] for plr_resource, tree in zip(plr_resources, tree_set.trees): if isinstance(plr_resource, ResourceDictInstance): self._lab_logger.info(f"跳过 非资源{plr_resource.res_content.name} 的更新") @@ -861,13 +862,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().info( f"更新了资源属性 {plr_resource}[{tree.root_node.res_content.uuid}] " f"及其子节点 {child_count} 个" ) + original_instances.append(original_instance) # 调用driver的update回调 func = getattr(self.driver_instance, "resource_tree_update", None) if callable(func): - func(plr_resources) + func(original_instances) - return {"success": True, "action": "update"} + return {"success": True, "action": "update"}, original_instances try: data = json.loads(req.command) @@ -908,14 +910,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): plr_resources.append(tree.root_node) else: plr_resources.append(ResourceTreeSet([tree]).to_plr_resources()[0]) - new_tree_set = ResourceTreeSet.from_plr_resources(plr_resources) - result = _handle_update(plr_resources, tree_set, additional_add_params) - r = SerialCommand.Request() - r.command = json.dumps( - {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 - response: SerialCommand_Response = await self._resource_clients[ - "c2s_update_resource_tree"].call_async(r) # type: ignore - self.lab_logger().info(f"确认资源云端 Update 结果: {response.response}") + result, original_instances = _handle_update(plr_resources, tree_set, additional_add_params) + # new_tree_set = ResourceTreeSet.from_plr_resources(original_instances) + # r = SerialCommand.Request() + # r.command = json.dumps( + # {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 + # response: SerialCommand_Response = await self._resource_clients[ + # "c2s_update_resource_tree"].call_async(r) # type: ignore + # self.lab_logger().info(f"确认资源云端 Update 结果: {response.response}") results.append(result) elif action == "remove": result = _handle_remove(resources_uuid) From 01655902909cd05cf718f6f7f5e1c17e0961b057 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Thu, 8 Jan 2026 15:37:49 +0800 Subject: [PATCH 22/40] bump version to 0.10.15 --- .conda/recipe.yaml | 2 +- recipes/msgs/recipe.yaml | 2 +- recipes/unilabos/recipe.yaml | 2 +- setup.py | 2 +- unilabos/__init__.py | 2 +- unilabos_msgs/package.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.conda/recipe.yaml b/.conda/recipe.yaml index 8dccb800..2b041c80 100644 --- a/.conda/recipe.yaml +++ b/.conda/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: 0.10.14 + version: 0.10.15 source: path: ../unilabos diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index 88b68277..6d329081 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -1,6 +1,6 @@ package: name: ros-humble-unilabos-msgs - version: 0.10.14 + version: 0.10.15 source: path: ../../unilabos_msgs target_directory: src diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index 45a0098a..be3f1a16 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.10.14" + version: "0.10.15" source: path: ../.. diff --git a/setup.py b/setup.py index 290a9a21..b6ae5edb 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ package_name = 'unilabos' setup( name=package_name, - version='0.10.14', + version='0.10.15', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/unilabos/__init__.py b/unilabos/__init__.py index a9f358e1..d5ac10aa 100644 --- a/unilabos/__init__.py +++ b/unilabos/__init__.py @@ -1 +1 @@ -__version__ = "0.10.14" +__version__ = "0.10.15" diff --git a/unilabos_msgs/package.xml b/unilabos_msgs/package.xml index 02beacfd..b9c26326 100644 --- a/unilabos_msgs/package.xml +++ b/unilabos_msgs/package.xml @@ -2,7 +2,7 @@ unilabos_msgs - 0.10.14 + 0.10.15 ROS2 Messages package for unilabos devices Junhan Chang Xuwznln From 657f952e7afcabd025decafcf5a4e299e86186f7 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 9 Jan 2026 12:01:57 +0800 Subject: [PATCH 23/40] Create session_id by edge. --- unilabos/app/ws_client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 23f139d2..8a00a9ee 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -359,7 +359,7 @@ class MessageProcessor: self.device_manager = device_manager self.queue_processor = None # 延迟设置 self.websocket_client = None # 延迟设置 - self.session_id = "" + self.session_id = str(uuid.uuid4())[:6] # 产生一个随机的session_id # WebSocket连接 self.websocket = None @@ -576,9 +576,9 @@ class MessageProcessor: await self._handle_resource_tree_update(message_data, "update") elif message_type == "remove_material": await self._handle_resource_tree_update(message_data, "remove") - elif message_type == "session_id": - self.session_id = message_data.get("session_id") - logger.info(f"[MessageProcessor] Session ID: {self.session_id}") + # elif message_type == "session_id": + # self.session_id = message_data.get("session_id") + # logger.info(f"[MessageProcessor] Session ID: {self.session_id}") elif message_type == "request_reload": await self._handle_request_reload(message_data) else: From aacf3497e035bed4efc293f5ce667fbe42c9afe7 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:18:39 +0800 Subject: [PATCH 24/40] Add no_update_feedback option. --- docs/conf.py | 4 +- docs/developer_guide/action_includes.md | 1024 +---------------------- docs/requirements.txt | 4 + unilabos/app/main.py | 6 + unilabos/app/ws_client.py | 6 +- unilabos/config/config.py | 1 + unilabos/ros/nodes/base_device_node.py | 17 +- 7 files changed, 62 insertions(+), 1000 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index f15f0e6f..60a22b6d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,7 +24,7 @@ extensions = [ "sphinx.ext.autodoc", "sphinx.ext.napoleon", # 如果您使用 Google 或 NumPy 风格的 docstrings "sphinx_rtd_theme", - "sphinxcontrib.mermaid" + "sphinxcontrib.mermaid", ] source_suffix = { @@ -58,7 +58,7 @@ html_theme = "sphinx_rtd_theme" # sphinx-book-theme 主题选项 html_theme_options = { - "repository_url": "https://github.com/用户名/Uni-Lab", + "repository_url": "https://github.com/deepmodeling/Uni-Lab-OS", "use_repository_button": True, "use_issues_button": True, "use_edit_page_button": True, diff --git a/docs/developer_guide/action_includes.md b/docs/developer_guide/action_includes.md index 206f94e2..be1316cc 100644 --- a/docs/developer_guide/action_includes.md +++ b/docs/developer_guide/action_includes.md @@ -1,4 +1,5 @@ -## 基础通用操作 +## 简单单变量动作函数 + ### `SendCmd` @@ -6,343 +7,49 @@ :language: yaml ``` ---- +---- +## 常量有机化学操作 -### `FloatSingleInput` +Uni-Lab 常量有机化学指令集多数来自 [XDL](https://croningroup.gitlab.io/chemputer/xdl/standard/full_steps_specification.html#),包含有机合成实验中常见的操作,如加热、搅拌、冷却等。 -```{literalinclude} ../../unilabos_msgs/action/FloatSingleInput.action -:language: yaml -``` ---- -### `IntSingleInput` - -```{literalinclude} ../../unilabos_msgs/action/IntSingleInput.action -:language: yaml -``` - ---- - -### `Point3DSeparateInput` - -```{literalinclude} ../../unilabos_msgs/action/Point3DSeparateInput.action -:language: yaml -``` - ---- - -### `StrSingleInput` - -```{literalinclude} ../../unilabos_msgs/action/StrSingleInput.action -:language: yaml -``` - ---- - -### `Wait` - -```{literalinclude} ../../unilabos_msgs/action/Wait.action -:language: yaml -``` - ---- - -## 化学实验操作 - -Uni-Lab 化学操作指令集多数来自 [XDL](https://croningroup.gitlab.io/chemputer/xdl/standard/full_steps_specification.html#),包含有机合成实验中常见的操作。 - -### 物料添加 - -#### `Add` - -```{literalinclude} ../../unilabos_msgs/action/Add.action -:language: yaml -``` - ---- - -#### `AddSolid` - -```{literalinclude} ../../unilabos_msgs/action/AddSolid.action -:language: yaml -``` - ---- - -### 液体转移与泵控制 - -#### `PumpTransfer` - -```{literalinclude} ../../unilabos_msgs/action/PumpTransfer.action -:language: yaml -``` - ---- - -#### `SetPumpPosition` - -```{literalinclude} ../../unilabos_msgs/action/SetPumpPosition.action -:language: yaml -``` - ---- - -#### `Transfer` - -```{literalinclude} ../../unilabos_msgs/action/Transfer.action -:language: yaml -``` - ---- - -### 温度控制 - -#### `HeatChill` - -```{literalinclude} ../../unilabos_msgs/action/HeatChill.action -:language: yaml -``` - ---- - -#### `HeatChillStart` - -```{literalinclude} ../../unilabos_msgs/action/HeatChillStart.action -:language: yaml -``` - ---- - -#### `HeatChillStop` - -```{literalinclude} ../../unilabos_msgs/action/HeatChillStop.action -:language: yaml -``` - ---- - -### 搅拌控制 - -#### `StartStir` - -```{literalinclude} ../../unilabos_msgs/action/StartStir.action -:language: yaml -``` - ---- - -#### `Stir` - -```{literalinclude} ../../unilabos_msgs/action/Stir.action -:language: yaml -``` - ---- - -#### `StopStir` - -```{literalinclude} ../../unilabos_msgs/action/StopStir.action -:language: yaml -``` - ---- - -### 气体与真空控制 - -#### `EvacuateAndRefill` - -```{literalinclude} ../../unilabos_msgs/action/EvacuateAndRefill.action -:language: yaml -``` - ---- - -#### `Purge` - -```{literalinclude} ../../unilabos_msgs/action/Purge.action -:language: yaml -``` - ---- - -#### `StartPurge` - -```{literalinclude} ../../unilabos_msgs/action/StartPurge.action -:language: yaml -``` - ---- - -#### `StopPurge` - -```{literalinclude} ../../unilabos_msgs/action/StopPurge.action -:language: yaml -``` - ---- - -### 分离与过滤 - -#### `Centrifuge` - -```{literalinclude} ../../unilabos_msgs/action/Centrifuge.action -:language: yaml -``` - ---- - -#### `Filter` - -```{literalinclude} ../../unilabos_msgs/action/Filter.action -:language: yaml -``` - ---- - -#### `FilterThrough` - -```{literalinclude} ../../unilabos_msgs/action/FilterThrough.action -:language: yaml -``` - ---- - -#### `RunColumn` - -```{literalinclude} ../../unilabos_msgs/action/RunColumn.action -:language: yaml -``` - ---- - -#### `Separate` - -```{literalinclude} ../../unilabos_msgs/action/Separate.action -:language: yaml -``` - ---- - -### 化学处理 - -#### `AdjustPH` - -```{literalinclude} ../../unilabos_msgs/action/AdjustPH.action -:language: yaml -``` - ---- - -#### `Crystallize` - -```{literalinclude} ../../unilabos_msgs/action/Crystallize.action -:language: yaml -``` - ---- - -#### `Dissolve` - -```{literalinclude} ../../unilabos_msgs/action/Dissolve.action -:language: yaml -``` - ---- - -#### `Dry` - -```{literalinclude} ../../unilabos_msgs/action/Dry.action -:language: yaml -``` - ---- - -#### `Evaporate` - -```{literalinclude} ../../unilabos_msgs/action/Evaporate.action -:language: yaml -``` - ---- - -#### `Hydrogenate` - -```{literalinclude} ../../unilabos_msgs/action/Hydrogenate.action -:language: yaml -``` - ---- - -#### `Recrystallize` - -```{literalinclude} ../../unilabos_msgs/action/Recrystallize.action -:language: yaml -``` - ---- - -#### `WashSolid` - -```{literalinclude} ../../unilabos_msgs/action/WashSolid.action -:language: yaml -``` - ---- - -### 清洁与维护 - -#### `Clean` +### `Clean` ```{literalinclude} ../../unilabos_msgs/action/Clean.action :language: yaml ``` ---- +---- -#### `CleanVessel` +### `HeatChillStart` -```{literalinclude} ../../unilabos_msgs/action/CleanVessel.action +```{literalinclude} ../../unilabos_msgs/action/HeatChillStart.action :language: yaml ``` ---- +---- -#### `EmptyIn` +### `HeatChillStop` -```{literalinclude} ../../unilabos_msgs/action/EmptyIn.action +```{literalinclude} ../../unilabos_msgs/action/HeatChillStop.action :language: yaml ``` ---- +---- -#### `ResetHandling` +### `PumpTransfer` -```{literalinclude} ../../unilabos_msgs/action/ResetHandling.action +```{literalinclude} ../../unilabos_msgs/action/PumpTransfer.action :language: yaml ``` ---- +---- +## 移液工作站及相关生物自动化设备操作 -## 生物自动化操作 +Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.org/user_guide/index.html),包含生物实验中常见的操作,如移液、混匀、离心等。 -Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.org/user_guide/index.html),包含移液工作站的各类操作。 -### `LiquidHandlerAdd` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerAdd.action -:language: yaml -``` - ---- - -### `LiquidHandlerAspirate` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerAspirate.action -:language: yaml -``` - ---- ### `LiquidHandlerDiscardTips` @@ -350,15 +57,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- - -### `LiquidHandlerDispense` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerDispense.action -:language: yaml -``` - ---- +---- ### `LiquidHandlerDropTips` @@ -366,7 +65,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- ### `LiquidHandlerDropTips96` @@ -374,31 +73,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- - -### `LiquidHandlerIncubateBiomek` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerIncubateBiomek.action -:language: yaml -``` - ---- - -### `LiquidHandlerMix` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerMix.action -:language: yaml -``` - ---- - -### `LiquidHandlerMoveBiomek` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerMoveBiomek.action -:language: yaml -``` - ---- +---- ### `LiquidHandlerMoveLid` @@ -406,7 +81,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- ### `LiquidHandlerMovePlate` @@ -414,7 +89,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- ### `LiquidHandlerMoveResource` @@ -422,23 +97,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- - -### `LiquidHandlerMoveTo` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerMoveTo.action -:language: yaml -``` - ---- - -### `LiquidHandlerOscillateBiomek` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerOscillateBiomek.action -:language: yaml -``` - ---- +---- ### `LiquidHandlerPickUpTips` @@ -446,7 +105,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- ### `LiquidHandlerPickUpTips96` @@ -454,23 +113,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- - -### `LiquidHandlerProtocolCreation` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerProtocolCreation.action -:language: yaml -``` - ---- - -### `LiquidHandlerRemove` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerRemove.action -:language: yaml -``` - ---- +---- ### `LiquidHandlerReturnTips` @@ -478,7 +121,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- ### `LiquidHandlerReturnTips96` @@ -486,31 +129,7 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- - -### `LiquidHandlerSetGroup` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerSetGroup.action -:language: yaml -``` - ---- - -### `LiquidHandlerSetLiquid` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerSetLiquid.action -:language: yaml -``` - ---- - -### `LiquidHandlerSetTipRack` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerSetTipRack.action -:language: yaml -``` - ---- +---- ### `LiquidHandlerStamp` @@ -518,597 +137,22 @@ Uni-Lab 生物操作指令集多数来自 [PyLabRobot](https://docs.pylabrobot.o :language: yaml ``` ---- +---- +## 多工作站及小车运行、物料转移 -### `LiquidHandlerTransfer` -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerTransfer.action -:language: yaml -``` - ---- - -### `LiquidHandlerTransferBiomek` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerTransferBiomek.action -:language: yaml -``` - ---- - -### `LiquidHandlerTransferGroup` - -```{literalinclude} ../../unilabos_msgs/action/LiquidHandlerTransferGroup.action -:language: yaml -``` - ---- - -## 专用工作站操作 - -### 反应工作站 - -#### `ReactionStationDripBack` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationDripBack.action -:language: yaml -``` - ---- - -#### `ReactionStationLiquidFeedBeaker` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationLiquidFeedBeaker.action -:language: yaml -``` - ---- - -#### `ReactionStationLiquidFeedSolvents` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationLiquidFeedSolvents.action -:language: yaml -``` - ---- - -#### `ReactionStationLiquidFeedTitration` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationLiquidFeedTitration.action -:language: yaml -``` - ---- - -#### `ReactionStationLiquidFeedVialsNonTitration` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationLiquidFeedVialsNonTitration.action -:language: yaml -``` - ---- - -#### `ReactionStationProExecu` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationProExecu.action -:language: yaml -``` - ---- - -#### `ReactionStationReactorTakenOut` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationReactorTakenOut.action -:language: yaml -``` - ---- - -#### `ReactionStationReaTackIn` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationReaTackIn.action -:language: yaml -``` - ---- - -#### `ReactionStationSolidFeedVial` - -```{literalinclude} ../../unilabos_msgs/action/ReactionStationSolidFeedVial.action -:language: yaml -``` - ---- - -### 固体分配站 - -#### `SolidDispenseAddPowderTube` - -```{literalinclude} ../../unilabos_msgs/action/SolidDispenseAddPowderTube.action -:language: yaml -``` - ---- - -### 分液工作站 - -#### `DispenStationSolnPrep` - -```{literalinclude} ../../unilabos_msgs/action/DispenStationSolnPrep.action -:language: yaml -``` - ---- - -#### `DispenStationVialFeed` - -```{literalinclude} ../../unilabos_msgs/action/DispenStationVialFeed.action -:language: yaml -``` - ---- - -### 后处理工作站 - -#### `PostProcessGrab` - -```{literalinclude} ../../unilabos_msgs/action/PostProcessGrab.action -:language: yaml -``` - ---- - -#### `PostProcessTriggerClean` - -```{literalinclude} ../../unilabos_msgs/action/PostProcessTriggerClean.action -:language: yaml -``` - ---- - -#### `PostProcessTriggerPostPro` - -```{literalinclude} ../../unilabos_msgs/action/PostProcessTriggerPostPro.action -:language: yaml -``` - ---- - -## 系统管理与资源调度 - -### 资源与布局管理 - -#### `DefaultLayoutRecommendLayout` - -```{literalinclude} ../../unilabos_msgs/action/DefaultLayoutRecommendLayout.action -:language: yaml -``` - ---- - -#### `ResourceCreateFromOuter` - -```{literalinclude} ../../unilabos_msgs/action/ResourceCreateFromOuter.action -:language: yaml -``` - ---- - -#### `ResourceCreateFromOuterEasy` - -```{literalinclude} ../../unilabos_msgs/action/ResourceCreateFromOuterEasy.action -:language: yaml -``` - ---- - -### 多工作站协调 - -#### `AGVTransfer` +### `AGVTransfer` ```{literalinclude} ../../unilabos_msgs/action/AGVTransfer.action :language: yaml ``` ---- +---- -#### `WorkStationRun` +### `WorkStationRun` ```{literalinclude} ../../unilabos_msgs/action/WorkStationRun.action :language: yaml ``` ---- - -## 机器人控制(ROS2 标准) - -Uni-Lab 机械臂、机器人、夹爪和导航指令集沿用 ROS2 的 `control_msgs` 和 `nav2_msgs`。 - -### 机械臂与关节控制 - -#### `FollowJointTrajectory` - -```yaml -# The trajectory for all revolute, continuous or prismatic joints -trajectory_msgs/JointTrajectory trajectory -# The trajectory for all planar or floating joints (i.e. individual joints with more than one DOF) -trajectory_msgs/MultiDOFJointTrajectory multi_dof_trajectory - -# Tolerances for the trajectory. If the measured joint values fall -# outside the tolerances the trajectory goal is aborted. Any -# tolerances that are not specified (by being omitted or set to 0) are -# set to the defaults for the action server (often taken from the -# parameter server). - -# Tolerances applied to the joints as the trajectory is executed. If -# violated, the goal aborts with error_code set to -# PATH_TOLERANCE_VIOLATED. -JointTolerance[] path_tolerance -JointComponentTolerance[] component_path_tolerance - -# To report success, the joints must be within goal_tolerance of the -# final trajectory value. The goal must be achieved by time the -# trajectory ends plus goal_time_tolerance. (goal_time_tolerance -# allows some leeway in time, so that the trajectory goal can still -# succeed even if the joints reach the goal some time after the -# precise end time of the trajectory). -# -# If the joints are not within goal_tolerance after "trajectory finish -# time" + goal_time_tolerance, the goal aborts with error_code set to -# GOAL_TOLERANCE_VIOLATED -JointTolerance[] goal_tolerance -JointComponentTolerance[] component_goal_tolerance -builtin_interfaces/Duration goal_time_tolerance - ---- -int32 error_code -int32 SUCCESSFUL = 0 -int32 INVALID_GOAL = -1 -int32 INVALID_JOINTS = -2 -int32 OLD_HEADER_TIMESTAMP = -3 -int32 PATH_TOLERANCE_VIOLATED = -4 -int32 GOAL_TOLERANCE_VIOLATED = -5 - -# Human readable description of the error code. Contains complementary -# information that is especially useful when execution fails, for instance: -# - INVALID_GOAL: The reason for the invalid goal (e.g., the requested -# trajectory is in the past). -# - INVALID_JOINTS: The mismatch between the expected controller joints -# and those provided in the goal. -# - PATH_TOLERANCE_VIOLATED and GOAL_TOLERANCE_VIOLATED: Which joint -# violated which tolerance, and by how much. -string error_string - ---- -std_msgs/Header header -string[] joint_names -trajectory_msgs/JointTrajectoryPoint desired -trajectory_msgs/JointTrajectoryPoint actual -trajectory_msgs/JointTrajectoryPoint error - -string[] multi_dof_joint_names -trajectory_msgs/MultiDOFJointTrajectoryPoint multi_dof_desired -trajectory_msgs/MultiDOFJointTrajectoryPoint multi_dof_actual -trajectory_msgs/MultiDOFJointTrajectoryPoint multi_dof_error - -``` - ---- - -#### `JointTrajectory` - -```yaml -trajectory_msgs/JointTrajectory trajectory ---- - ---- -``` - ---- - -#### `PointHead` - -```yaml -geometry_msgs/PointStamped target -geometry_msgs/Vector3 pointing_axis -string pointing_frame -builtin_interfaces/Duration min_duration -float64 max_velocity ---- - ---- -float64 pointing_angle_error -``` - ---- - -#### `SingleJointPosition` - -```yaml -float64 position -builtin_interfaces/Duration min_duration -float64 max_velocity ---- - ---- -std_msgs/Header header -float64 position -float64 velocity -float64 error -``` - ---- - -### 夹爪控制 - -#### `GripperCommand` - -```yaml -GripperCommand command ---- -float64 position # The current gripper gap size (in meters) -float64 effort # The current effort exerted (in Newtons) -bool stalled # True iff the gripper is exerting max effort and not moving -bool reached_goal # True iff the gripper position has reached the commanded setpoint ---- -float64 position # The current gripper gap size (in meters) -float64 effort # The current effort exerted (in Newtons) -bool stalled # True iff the gripper is exerting max effort and not moving -bool reached_goal # True iff the gripper position has reached the commanded setpoint - -``` - ---- - -#### `ParallelGripperCommand` - -```yaml -# Parallel grippers refer to an end effector where two opposing fingers grasp an object from opposite sides. -sensor_msgs/JointState command -# name: the name(s) of the joint this command is requesting -# position: desired position of each gripper joint (radians or meters) -# velocity: (optional, not used if empty) max velocity of the joint allowed while moving (radians or meters / second) -# effort: (optional, not used if empty) max effort of the joint allowed while moving (Newtons or Newton-meters) ---- -sensor_msgs/JointState state # The current gripper state. -# position of each joint (radians or meters) -# optional: velocity of each joint (radians or meters / second) -# optional: effort of each joint (Newtons or Newton-meters) -bool stalled # True if the gripper is exerting max effort and not moving -bool reached_goal # True if the gripper position has reached the commanded setpoint ---- -sensor_msgs/JointState state # The current gripper state. -# position of each joint (radians or meters) -# optional: velocity of each joint (radians or meters / second) -# optional: effort of each joint (Newtons or Newton-meters) - -``` - ---- - -### 导航与路径规划 - -#### `AssistedTeleop` - -```yaml -#goal definition -builtin_interfaces/Duration time_allowance ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback -builtin_interfaces/Duration current_teleop_duration -``` - ---- - -#### `BackUp` - -```yaml -#goal definition -geometry_msgs/Point target -float32 speed -builtin_interfaces/Duration time_allowance ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback definition -float32 distance_traveled -``` - ---- - -#### `ComputePathThroughPoses` - -```yaml -#goal definition -geometry_msgs/PoseStamped[] goals -geometry_msgs/PoseStamped start -string planner_id -bool use_start # If false, use current robot pose as path start, if true, use start above instead ---- -#result definition -nav_msgs/Path path -builtin_interfaces/Duration planning_time ---- -#feedback definition -``` - ---- - -#### `ComputePathToPose` - -```yaml -#goal definition -geometry_msgs/PoseStamped goal -geometry_msgs/PoseStamped start -string planner_id -bool use_start # If false, use current robot pose as path start, if true, use start above instead ---- -#result definition -nav_msgs/Path path -builtin_interfaces/Duration planning_time ---- -#feedback definition -``` - ---- - -#### `DriveOnHeading` - -```yaml -#goal definition -geometry_msgs/Point target -float32 speed -builtin_interfaces/Duration time_allowance ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback definition -float32 distance_traveled -``` - ---- - -#### `DummyBehavior` - -```yaml -#goal definition -std_msgs/String command ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback definition -``` - ---- - -#### `FollowPath` - -```yaml -#goal definition -nav_msgs/Path path -string controller_id -string goal_checker_id ---- -#result definition -std_msgs/Empty result ---- -#feedback definition -float32 distance_to_goal -float32 speed -``` - ---- - -#### `FollowWaypoints` - -```yaml -#goal definition -geometry_msgs/PoseStamped[] poses ---- -#result definition -int32[] missed_waypoints ---- -#feedback definition -uint32 current_waypoint -``` - ---- - -#### `NavigateThroughPoses` - -```yaml -#goal definition -geometry_msgs/PoseStamped[] poses -string behavior_tree ---- -#result definition -std_msgs/Empty result ---- -#feedback definition -geometry_msgs/PoseStamped current_pose -builtin_interfaces/Duration navigation_time -builtin_interfaces/Duration estimated_time_remaining -int16 number_of_recoveries -float32 distance_remaining -int16 number_of_poses_remaining -``` - ---- - -#### `NavigateToPose` - -```yaml -#goal definition -geometry_msgs/PoseStamped pose -string behavior_tree ---- -#result definition -std_msgs/Empty result ---- -#feedback definition -geometry_msgs/PoseStamped current_pose -builtin_interfaces/Duration navigation_time -builtin_interfaces/Duration estimated_time_remaining -int16 number_of_recoveries -float32 distance_remaining -``` - ---- - -#### `SmoothPath` - -```yaml -#goal definition -nav_msgs/Path path -string smoother_id -builtin_interfaces/Duration max_smoothing_duration -bool check_for_collisions ---- -#result definition -nav_msgs/Path path -builtin_interfaces/Duration smoothing_duration -bool was_completed ---- -#feedback definition -``` - ---- - -#### `Spin` - -```yaml -#goal definition -float32 target_yaw -builtin_interfaces/Duration time_allowance ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback definition -float32 angular_distance_traveled -``` - ---- - -#### `Wait` (Nav2) - -> **注意**:这是 ROS2 nav2_msgs 的标准 Wait action,与 unilabos_msgs 的 Wait action 不同。 - -```yaml -#goal definition -builtin_interfaces/Duration time ---- -#result definition -builtin_interfaces/Duration total_elapsed_time ---- -#feedback definition -builtin_interfaces/Duration time_left -``` - ---- +---- diff --git a/docs/requirements.txt b/docs/requirements.txt index 1cc92477..591cc07a 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -12,3 +12,7 @@ sphinx-copybutton>=0.5.0 # 用于自动摘要生成 sphinx-autobuild>=2024.2.4 + +# 用于PDF导出 (rinohtype方案,纯Python无需LaTeX) +rinohtype>=0.5.4 +sphinx-simplepdf>=1.6.0 \ No newline at end of file diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 6738b2f8..3ad7310e 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -156,6 +156,11 @@ def parse_args(): default=False, help="Complete registry information", ) + parser.add_argument( + "--no_update_feedback", + action="store_true", + help="Disable sending update feedback to server", + ) # workflow upload subcommand workflow_parser = subparsers.add_parser( "workflow_upload", @@ -297,6 +302,7 @@ def main(): BasicConfig.is_host_mode = not args_dict.get("is_slave", False) BasicConfig.slave_no_host = args_dict.get("slave_no_host", False) BasicConfig.upload_registry = args_dict.get("upload_registry", False) + BasicConfig.no_update_feedback = args_dict.get("no_update_feedback", False) BasicConfig.communication_protocol = "websocket" machine_name = os.popen("hostname").read().strip() machine_name = "".join([c if c.isalnum() or c == "_" else "_" for c in machine_name]) diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 8a00a9ee..4933b617 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -488,7 +488,11 @@ class MessageProcessor: async for message in self.websocket: try: data = json.loads(message) - await self._process_message(data) + if self.session_id and self.session_id == data.get("edge_session"): + await self._process_message(data) + else: + logger.trace(f"[MessageProcessor] 收到一条归属 {data.get('edge_session')} 的旧消息:{data}") + logger.debug(f"[MessageProcessor] 跳过了一条归属 {data.get('edge_session')} 的旧消息: {data.get('action')}") except json.JSONDecodeError: logger.error(f"[MessageProcessor] Invalid JSON received: {message}") except Exception as e: diff --git a/unilabos/config/config.py b/unilabos/config/config.py index 1e409662..f3dba5da 100644 --- a/unilabos/config/config.py +++ b/unilabos/config/config.py @@ -16,6 +16,7 @@ class BasicConfig: upload_registry = False machine_name = "undefined" vis_2d_enable = False + no_update_feedback = False enable_resource_load = True communication_protocol = "websocket" startup_json_path = None # 填写绝对路径 diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 5d7379e7..89c4d39b 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -20,6 +20,8 @@ from rclpy.callback_groups import ReentrantCallbackGroup from rclpy.service import Service from unilabos_msgs.action import SendCmd from unilabos_msgs.srv._serial_command import SerialCommand_Request, SerialCommand_Response + +from unilabos.config.config import BasicConfig from unilabos.utils.decorator import get_topic_config, get_all_subscriptions from unilabos.resources.container import RegularContainer @@ -911,13 +913,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): else: plr_resources.append(ResourceTreeSet([tree]).to_plr_resources()[0]) result, original_instances = _handle_update(plr_resources, tree_set, additional_add_params) - # new_tree_set = ResourceTreeSet.from_plr_resources(original_instances) - # r = SerialCommand.Request() - # r.command = json.dumps( - # {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 - # response: SerialCommand_Response = await self._resource_clients[ - # "c2s_update_resource_tree"].call_async(r) # type: ignore - # self.lab_logger().info(f"确认资源云端 Update 结果: {response.response}") + if not BasicConfig.no_update_feedback: + new_tree_set = ResourceTreeSet.from_plr_resources(original_instances) + r = SerialCommand.Request() + r.command = json.dumps( + {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 + response: SerialCommand_Response = await self._resource_clients[ + "c2s_update_resource_tree"].call_async(r) # type: ignore + self.lab_logger().info(f"确认资源云端 Update 结果: {response.response}") results.append(result) elif action == "remove": result = _handle_remove(resources_uuid) From 965bf36e8d55f1c6298360d13cc83fb240277cad Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Sun, 11 Jan 2026 21:25:36 +0800 Subject: [PATCH 25/40] Add restart. Temp allow action message. --- unilabos/app/main.py | 15 ++- unilabos/app/utils.py | 144 ++++++++++++++++++++++++ unilabos/app/web/server.py | 42 ++++++- unilabos/app/ws_client.py | 66 ++++++++--- unilabos/ros/main_slave_run.py | 9 +- unilabos/ros/nodes/presets/host_node.py | 105 ++++++++++++++--- 6 files changed, 342 insertions(+), 39 deletions(-) create mode 100644 unilabos/app/utils.py diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 3ad7310e..8ec26c03 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -19,6 +19,11 @@ if unilabos_dir not in sys.path: from unilabos.utils.banner_print import print_status, print_unilab_banner from unilabos.config.config import load_config, BasicConfig, HTTPConfig +from unilabos.app.utils import cleanup_for_restart + +# Global restart flags (used by ws_client and web/server) +_restart_requested: bool = False +_restart_reason: str = "" def load_config_from_file(config_path): @@ -503,13 +508,19 @@ def main(): time.sleep(1) else: start_backend(**args_dict) - start_server( + restart_requested = start_server( open_browser=not args_dict["disable_browser"], port=BasicConfig.port, ) + if restart_requested: + print_status("[Main] Restart requested, cleaning up...", "info") + cleanup_for_restart() + return else: start_backend(**args_dict) - start_server( + + # 启动服务器(默认支持WebSocket触发重启) + restart_requested = start_server( open_browser=not args_dict["disable_browser"], port=BasicConfig.port, ) diff --git a/unilabos/app/utils.py b/unilabos/app/utils.py new file mode 100644 index 00000000..d10c2e05 --- /dev/null +++ b/unilabos/app/utils.py @@ -0,0 +1,144 @@ +""" +UniLabOS 应用工具函数 + +提供清理、重启等工具函数 +""" + +import gc +import os +import threading +import time + +from unilabos.utils.banner_print import print_status + + +def cleanup_for_restart() -> bool: + """ + Clean up all resources for restart without exiting the process. + + This function prepares the system for re-initialization by: + 1. Stopping all communication clients + 2. Destroying ROS nodes + 3. Resetting singletons + 4. Waiting for threads to finish + + Returns: + bool: True if cleanup was successful, False otherwise + """ + print_status("[Restart] Starting cleanup for restart...", "info") + + # Step 1: Stop WebSocket communication client + print_status("[Restart] Step 1: Stopping WebSocket client...", "info") + try: + from unilabos.app.communication import get_communication_client + + comm_client = get_communication_client() + if comm_client is not None: + comm_client.stop() + print_status("[Restart] WebSocket client stopped", "info") + except Exception as e: + print_status(f"[Restart] Error stopping WebSocket: {e}", "warning") + + # Step 2: Get HostNode and cleanup ROS + print_status("[Restart] Step 2: Cleaning up ROS nodes...", "info") + try: + from unilabos.ros.nodes.presets.host_node import HostNode + import rclpy + from rclpy.timer import Timer + + host_instance = HostNode.get_instance(timeout=5) + if host_instance is not None: + print_status(f"[Restart] Found HostNode: {host_instance.device_id}", "info") + + # Gracefully shutdown background threads + print_status("[Restart] Shutting down background threads...", "info") + HostNode.shutdown_background_threads(timeout=5.0) + print_status("[Restart] Background threads shutdown complete", "info") + + # Stop discovery timer + if hasattr(host_instance, "_discovery_timer") and isinstance(host_instance._discovery_timer, Timer): + host_instance._discovery_timer.cancel() + print_status("[Restart] Discovery timer cancelled", "info") + + # Destroy device nodes + device_count = len(host_instance.devices_instances) + print_status(f"[Restart] Destroying {device_count} device instances...", "info") + for device_id, device_node in list(host_instance.devices_instances.items()): + try: + if hasattr(device_node, "ros_node_instance") and device_node.ros_node_instance is not None: + device_node.ros_node_instance.destroy_node() + print_status(f"[Restart] Device {device_id} destroyed", "info") + except Exception as e: + print_status(f"[Restart] Error destroying device {device_id}: {e}", "warning") + + # Clear devices instances + host_instance.devices_instances.clear() + host_instance.devices_names.clear() + + # Destroy host node + try: + host_instance.destroy_node() + print_status("[Restart] HostNode destroyed", "info") + except Exception as e: + print_status(f"[Restart] Error destroying HostNode: {e}", "warning") + + # Reset HostNode state + HostNode.reset_state() + print_status("[Restart] HostNode state reset", "info") + + # Shutdown executor first (to stop executor.spin() gracefully) + if hasattr(rclpy, "__executor") and rclpy.__executor is not None: + try: + rclpy.__executor.shutdown() + rclpy.__executor = None # Clear for restart + print_status("[Restart] ROS executor shutdown complete", "info") + except Exception as e: + print_status(f"[Restart] Error shutting down executor: {e}", "warning") + + # Shutdown rclpy + if rclpy.ok(): + rclpy.shutdown() + print_status("[Restart] rclpy shutdown complete", "info") + + except ImportError as e: + print_status(f"[Restart] ROS modules not available: {e}", "warning") + except Exception as e: + print_status(f"[Restart] Error in ROS cleanup: {e}", "warning") + return False + + # Step 3: Reset communication client singleton + print_status("[Restart] Step 3: Resetting singletons...", "info") + try: + from unilabos.app import communication + + if hasattr(communication, "_communication_client"): + communication._communication_client = None + print_status("[Restart] Communication client singleton reset", "info") + except Exception as e: + print_status(f"[Restart] Error resetting communication singleton: {e}", "warning") + + # Step 4: Wait for threads to finish + print_status("[Restart] Step 4: Waiting for threads to finish...", "info") + time.sleep(3) # Give threads time to finish + + # Check remaining threads + remaining_threads = [] + for t in threading.enumerate(): + if t.name != "MainThread" and t.is_alive(): + remaining_threads.append(t.name) + + if remaining_threads: + print_status( + f"[Restart] Warning: {len(remaining_threads)} threads still running: {remaining_threads}", "warning" + ) + else: + print_status("[Restart] All threads stopped", "info") + + # Step 5: Force garbage collection + print_status("[Restart] Step 5: Running garbage collection...", "info") + gc.collect() + gc.collect() # Run twice for weak references + print_status("[Restart] Garbage collection complete", "info") + + print_status("[Restart] Cleanup complete. Ready for re-initialization.", "info") + return True diff --git a/unilabos/app/web/server.py b/unilabos/app/web/server.py index 2a85d107..8d090162 100644 --- a/unilabos/app/web/server.py +++ b/unilabos/app/web/server.py @@ -6,7 +6,6 @@ Web服务器模块 import webbrowser -import uvicorn from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from starlette.responses import Response @@ -96,7 +95,7 @@ def setup_server() -> FastAPI: return app -def start_server(host: str = "0.0.0.0", port: int = 8002, open_browser: bool = True) -> None: +def start_server(host: str = "0.0.0.0", port: int = 8002, open_browser: bool = True) -> bool: """ 启动服务器 @@ -104,7 +103,14 @@ def start_server(host: str = "0.0.0.0", port: int = 8002, open_browser: bool = T host: 服务器主机 port: 服务器端口 open_browser: 是否自动打开浏览器 + + Returns: + bool: True if restart was requested, False otherwise """ + import threading + import time + from uvicorn import Config, Server + # 设置服务器 setup_server() @@ -123,7 +129,37 @@ def start_server(host: str = "0.0.0.0", port: int = 8002, open_browser: bool = T # 启动服务器 info(f"[Web] 启动FastAPI服务器: {host}:{port}") - uvicorn.run(app, host=host, port=port, log_config=log_config) + + # 使用支持重启的模式 + config = Config(app=app, host=host, port=port, log_config=log_config) + server = Server(config) + + # 启动服务器线程 + server_thread = threading.Thread(target=server.run, daemon=True, name="uvicorn_server") + server_thread.start() + + info("[Web] Server started, monitoring for restart requests...") + + # 监控重启标志 + import unilabos.app.main as main_module + + while server_thread.is_alive(): + if hasattr(main_module, "_restart_requested") and main_module._restart_requested: + info( + f"[Web] Restart requested via WebSocket, reason: {getattr(main_module, '_restart_reason', 'unknown')}" + ) + main_module._restart_requested = False + + # 停止服务器 + server.should_exit = True + server_thread.join(timeout=5) + + info("[Web] Server stopped, ready for restart") + return True + + time.sleep(1) + + return False # 当脚本直接运行时启动服务器 diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 4933b617..4c87d362 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -488,11 +488,16 @@ class MessageProcessor: async for message in self.websocket: try: data = json.loads(message) + message_type = data.get("action", "") + message_data = data.get("data") if self.session_id and self.session_id == data.get("edge_session"): - await self._process_message(data) + await self._process_message(message_type, message_data) else: - logger.trace(f"[MessageProcessor] 收到一条归属 {data.get('edge_session')} 的旧消息:{data}") - logger.debug(f"[MessageProcessor] 跳过了一条归属 {data.get('edge_session')} 的旧消息: {data.get('action')}") + if message_type.endswith("_material"): + logger.trace(f"[MessageProcessor] 收到一条归属 {data.get('edge_session')} 的旧消息:{data}") + logger.debug(f"[MessageProcessor] 跳过了一条归属 {data.get('edge_session')} 的旧消息: {data.get('action')}") + else: + await self._process_message(message_type, message_data) except json.JSONDecodeError: logger.error(f"[MessageProcessor] Invalid JSON received: {message}") except Exception as e: @@ -558,11 +563,8 @@ class MessageProcessor: finally: logger.debug("[MessageProcessor] Send handler stopped") - async def _process_message(self, data: Dict[str, Any]): + async def _process_message(self, message_type: str, message_data: Dict[str, Any]): """处理收到的消息""" - message_type = data.get("action", "") - message_data = data.get("data") - logger.debug(f"[MessageProcessor] Processing message: {message_type}") try: @@ -575,16 +577,19 @@ class MessageProcessor: elif message_type == "cancel_action" or message_type == "cancel_task": await self._handle_cancel_action(message_data) elif message_type == "add_material": + # noinspection PyTypeChecker await self._handle_resource_tree_update(message_data, "add") elif message_type == "update_material": + # noinspection PyTypeChecker await self._handle_resource_tree_update(message_data, "update") elif message_type == "remove_material": + # noinspection PyTypeChecker await self._handle_resource_tree_update(message_data, "remove") # elif message_type == "session_id": # self.session_id = message_data.get("session_id") # logger.info(f"[MessageProcessor] Session ID: {self.session_id}") - elif message_type == "request_reload": - await self._handle_request_reload(message_data) + elif message_type == "request_restart": + await self._handle_request_restart(message_data) else: logger.debug(f"[MessageProcessor] Unknown message type: {message_type}") @@ -894,19 +899,48 @@ class MessageProcessor: ) thread.start() - async def _handle_request_reload(self, data: Dict[str, Any]): + async def _handle_request_restart(self, data: Dict[str, Any]): """ - 处理重载请求 + 处理重启请求 - 当LabGo发送request_reload时,重新发送设备注册信息 + 当LabGo发送request_restart时,执行清理并触发重启 """ reason = data.get("reason", "unknown") - logger.info(f"[MessageProcessor] Received reload request, reason: {reason}") + delay = data.get("delay", 2) # 默认延迟2秒 + logger.info(f"[MessageProcessor] Received restart request, reason: {reason}, delay: {delay}s") - # 重新发送host_node_ready信息 + # 发送确认消息 if self.websocket_client: - self.websocket_client.publish_host_ready() - logger.info("[MessageProcessor] Re-sent host_node_ready after reload request") + await self.websocket_client.send_message({ + "action": "restart_acknowledged", + "data": {"reason": reason, "delay": delay} + }) + + # 设置全局重启标志 + import unilabos.app.main as main_module + main_module._restart_requested = True + main_module._restart_reason = reason + + # 延迟后执行清理 + await asyncio.sleep(delay) + + # 在新线程中执行清理,避免阻塞当前事件循环 + def do_cleanup(): + import time + time.sleep(0.5) # 给当前消息处理完成的时间 + logger.info(f"[MessageProcessor] Starting cleanup for restart, reason: {reason}") + try: + from unilabos.app.utils import cleanup_for_restart + if cleanup_for_restart(): + logger.info("[MessageProcessor] Cleanup successful, main() will restart") + else: + logger.error("[MessageProcessor] Cleanup failed") + except Exception as e: + logger.error(f"[MessageProcessor] Error during cleanup: {e}") + + cleanup_thread = threading.Thread(target=do_cleanup, name="RestartCleanupThread", daemon=True) + cleanup_thread.start() + logger.info(f"[MessageProcessor] Restart cleanup scheduled") async def _send_action_state_response( self, device_id: str, action_name: str, task_id: str, job_id: str, typ: str, free: bool, need_more: int diff --git a/unilabos/ros/main_slave_run.py b/unilabos/ros/main_slave_run.py index b79c3683..c24f9e8e 100644 --- a/unilabos/ros/main_slave_run.py +++ b/unilabos/ros/main_slave_run.py @@ -1,4 +1,5 @@ import json + # from nt import device_encoding import threading import time @@ -55,7 +56,11 @@ def main( ) -> None: """主函数""" - rclpy.init(args=rclpy_init_args) + # Support restart - check if rclpy is already initialized + if not rclpy.ok(): + rclpy.init(args=rclpy_init_args) + else: + logger.info("[ROS] rclpy already initialized, reusing context") executor = rclpy.__executor = MultiThreadedExecutor() # 创建主机节点 host_node = HostNode( @@ -88,7 +93,7 @@ def main( joint_republisher = JointRepublisher("joint_republisher", host_node.resource_tracker) # lh_joint_pub = LiquidHandlerJointPublisher( # resources_config=resources_list, resource_tracker=host_node.resource_tracker - # ) + # ) executor.add_node(resource_mesh_manager) executor.add_node(joint_republisher) # executor.add_node(lh_joint_pub) diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index e0a66bf8..69c12f89 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -70,6 +70,8 @@ class HostNode(BaseROS2DeviceNode): _instance: ClassVar[Optional["HostNode"]] = None _ready_event: ClassVar[threading.Event] = threading.Event() + _shutting_down: ClassVar[bool] = False # Flag to signal shutdown to background threads + _background_threads: ClassVar[List[threading.Thread]] = [] # Track all background threads for cleanup _device_action_status: ClassVar[collections.defaultdict[str, DeviceActionStatus]] = collections.defaultdict( DeviceActionStatus ) @@ -81,6 +83,48 @@ class HostNode(BaseROS2DeviceNode): return cls._instance return None + @classmethod + def shutdown_background_threads(cls, timeout: float = 5.0) -> None: + """ + Gracefully shutdown all background threads for clean exit or restart. + + This method: + 1. Sets shutdown flag to stop background operations + 2. Waits for background threads to finish with timeout + 3. Cleans up finished threads from tracking list + + Args: + timeout: Maximum time to wait for each thread (seconds) + """ + cls._shutting_down = True + + # Wait for background threads to finish + active_threads = [] + for t in cls._background_threads: + if t.is_alive(): + t.join(timeout=timeout) + if t.is_alive(): + active_threads.append(t.name) + + if active_threads: + logger.warning(f"[Host Node] Some background threads still running: {active_threads}") + + # Clear the thread list + cls._background_threads.clear() + logger.info(f"[Host Node] Background threads shutdown complete") + + @classmethod + def reset_state(cls) -> None: + """ + Reset the HostNode singleton state for restart or clean exit. + Call this after destroying the instance. + """ + cls._instance = None + cls._ready_event.clear() + cls._shutting_down = False + cls._background_threads.clear() + logger.info("[Host Node] State reset complete") + def __init__( self, device_id: str, @@ -294,12 +338,37 @@ class HostNode(BaseROS2DeviceNode): bridge.publish_host_ready() self.lab_logger().debug(f"Host ready signal sent via {bridge.__class__.__name__}") - def _send_re_register(self, sclient): - sclient.wait_for_service() - request = SerialCommand.Request() - request.command = "" - future = sclient.call_async(request) - response = future.result() + def _send_re_register(self, sclient, device_namespace: str): + """ + Send re-register command to a device. This is a one-time operation. + + Args: + sclient: The service client + device_namespace: The device namespace for logging + """ + try: + # Use timeout to prevent indefinite blocking + if not sclient.wait_for_service(timeout_sec=10.0): + self.lab_logger().debug(f"[Host Node] Re-register timeout for {device_namespace}") + return + + # Check shutdown flag after wait + if self._shutting_down: + self.lab_logger().debug(f"[Host Node] Re-register aborted for {device_namespace} (shutdown)") + return + + request = SerialCommand.Request() + request.command = "" + future = sclient.call_async(request) + # Use timeout for result as well + future.result(timeout_sec=5.0) + self.lab_logger().debug(f"[Host Node] Re-register completed for {device_namespace}") + except Exception as e: + # Gracefully handle destruction during shutdown + if "destruction was requested" in str(e) or self._shutting_down: + self.lab_logger().debug(f"[Host Node] Re-register aborted for {device_namespace} (cleanup)") + else: + self.lab_logger().warning(f"[Host Node] Re-register failed for {device_namespace}: {e}") def _discover_devices(self) -> None: """ @@ -331,23 +400,27 @@ class HostNode(BaseROS2DeviceNode): self._create_action_clients_for_device(device_id, namespace) self._online_devices.add(device_key) sclient = self.create_client(SerialCommand, f"/srv{namespace}/re_register_device") - threading.Thread( + t = threading.Thread( target=self._send_re_register, - args=(sclient,), + args=(sclient, namespace), daemon=True, name=f"ROSDevice{self.device_id}_re_register_device_{namespace}", - ).start() + ) + self._background_threads.append(t) + t.start() elif device_key not in self._online_devices: # 设备重新上线 self.lab_logger().info(f"[Host Node] Device reconnected: {device_key}") self._online_devices.add(device_key) sclient = self.create_client(SerialCommand, f"/srv{namespace}/re_register_device") - threading.Thread( + t = threading.Thread( target=self._send_re_register, - args=(sclient,), + args=(sclient, namespace), daemon=True, name=f"ROSDevice{self.device_id}_re_register_device_{namespace}", - ).start() + ) + self._background_threads.append(t) + t.start() # 检测离线设备 offline_devices = self._online_devices - current_devices @@ -705,13 +778,14 @@ class HostNode(BaseROS2DeviceNode): raise ValueError(f"ActionClient {action_id} not found.") action_client: ActionClient = self._action_clients[action_id] + # 遍历action_kwargs下的所有子dict,将"sample_uuid"的值赋给"sample_id" def assign_sample_id(obj): if isinstance(obj, dict): if "sample_uuid" in obj: obj["sample_id"] = obj["sample_uuid"] obj.pop("sample_uuid") - for k,v in obj.items(): + for k, v in obj.items(): if k != "unilabos_extra": assign_sample_id(v) elif isinstance(obj, list): @@ -742,9 +816,7 @@ class HostNode(BaseROS2DeviceNode): self.lab_logger().info(f"[Host Node] Goal {action_id} ({item.job_id}) accepted") self._goals[item.job_id] = goal_handle goal_future = goal_handle.get_result_async() - goal_future.add_done_callback( - lambda f: self.get_result_callback(item, action_id, f) - ) + goal_future.add_done_callback(lambda f: self.get_result_callback(item, action_id, f)) goal_future.result() def feedback_callback(self, item: "QueueItem", action_id: str, feedback_msg) -> None: @@ -1167,6 +1239,7 @@ class HostNode(BaseROS2DeviceNode): """ try: from unilabos.app.web import http_client + data = json.loads(request.command) if "uuid" in data and data["uuid"] is not None: http_req = http_client.resource_tree_get([data["uuid"]], data["with_children"]) From ec015e16cda0ed41db4cfcf36a34dc89fe530714 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 12 Jan 2026 21:17:28 +0800 Subject: [PATCH 26/40] Add create_resource and test_resource example. --- unilabos/registry/registry.py | 34 ++++++-- unilabos/resources/graphio.py | 6 +- unilabos/resources/resource_tracker.py | 50 ++++++++++-- unilabos/ros/nodes/base_device_node.py | 101 ++++++++++++++---------- unilabos/ros/nodes/presets/host_node.py | 19 +++-- 5 files changed, 144 insertions(+), 66 deletions(-) diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index 20e02451..ee0b460e 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -124,11 +124,25 @@ class Registry: "output": [ { "handler_key": "labware", - "label": "Labware", "data_type": "resource", - "data_source": "handle", - "data_key": "liquid", - } + "label": "Labware", + "data_source": "executor", + "data_key": "created_resource_tree", + }, + { + "handler_key": "liquid_slots", + "data_type": "resource", + "label": "LiquidSlots", + "data_source": "executor", + "data_key": "liquid_input_resource_tree", + }, + { + "handler_key": "materials", + "data_type": "resource", + "label": "AllMaterials", + "data_source": "executor", + "data_key": "[created_resource_tree,liquid_input_resource_tree].@flatten.@flatten", + }, ] }, "placeholder_keys": { @@ -186,7 +200,17 @@ class Registry: "resources": "unilabos_resources", }, "goal_default": {}, - "handles": {}, + "handles": { + "input": [ + { + "handler_key": "input_resources", + "data_type": "resource", + "label": "InputResources", + "data_source": "handle", + "data_key": "resources", # 不为空 + }, + ] + }, }, }, }, diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index faf0482a..252c8f45 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -1151,11 +1151,7 @@ def initialize_resource(resource_config: dict, resource_type: Any = None) -> Uni if resource_class_config["type"] == "pylabrobot": resource_plr = RESOURCE(name=resource_config["name"]) if resource_type != ResourcePLR: - tree_sets = ResourceTreeSet.from_plr_resources([resource_plr]) - # r = resource_plr_to_ulab(resource_plr=resource_plr, parent_name=resource_config.get("parent", None)) - # # r = resource_plr_to_ulab(resource_plr=resource_plr) - # if resource_config.get("position") is not None: - # r["position"] = resource_config["position"] + tree_sets = ResourceTreeSet.from_plr_resources([resource_plr], known_newly_created=True) r = tree_sets.dump() else: r = resource_plr diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index 610ba3dd..d93cb4ec 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -147,17 +147,17 @@ class ResourceDictInstance(object): if not content.get("extra"): # MagicCode content["extra"] = {} if "position" in content: - pose = content.get("pose",{}) - if "position" not in pose : + pose = content.get("pose", {}) + if "position" not in pose: if "position" in content["position"]: pose["position"] = content["position"]["position"] else: pose["position"] = {"x": 0, "y": 0, "z": 0} if "size" not in pose: pose["size"] = { - "width": content["config"].get("size_x", 0), - "height": content["config"].get("size_y", 0), - "depth": content["config"].get("size_z", 0) + "width": content["config"].get("size_x", 0), + "height": content["config"].get("size_y", 0), + "depth": content["config"].get("size_z", 0), } content["pose"] = pose return ResourceDictInstance(ResourceDict.model_validate(content)) @@ -322,7 +322,7 @@ class ResourceTreeSet(object): ) @classmethod - def from_plr_resources(cls, resources: List["PLRResource"]) -> "ResourceTreeSet": + def from_plr_resources(cls, resources: List["PLRResource"], known_newly_created=False) -> "ResourceTreeSet": """ 从plr资源创建ResourceTreeSet """ @@ -349,7 +349,8 @@ class ResourceTreeSet(object): if not uid: uid = str(uuid.uuid4()) res.unilabos_uuid = uid - logger.warning(f"{res}没有uuid,请设置后再传入,默认填充{uid}!\n{traceback.format_exc()}") + if not known_newly_created: + logger.warning(f"{res}没有uuid,请设置后再传入,默认填充{uid}!\n{traceback.format_exc()}") # 获取unilabos_extra,默认为空字典 extra = getattr(res, "unilabos_extra", {}) @@ -448,7 +449,13 @@ class ResourceTreeSet(object): from pylabrobot.utils.object_parsing import find_subclass # 类型映射 - TYPE_MAP = {"plate": "Plate", "well": "Well", "deck": "Deck", "container": "RegularContainer", "tip_spot": "TipSpot"} + TYPE_MAP = { + "plate": "Plate", + "well": "Well", + "deck": "Deck", + "container": "RegularContainer", + "tip_spot": "TipSpot", + } def collect_node_data(node: ResourceDictInstance, name_to_uuid: dict, all_states: dict, name_to_extra: dict): """一次遍历收集 name_to_uuid, all_states 和 name_to_extra""" @@ -918,6 +925,33 @@ class DeviceNodeResourceTracker(object): return self._traverse_and_process(resource, process) + def loop_find_with_uuid(self, resource, target_uuid: str): + """ + 递归遍历资源树,根据 uuid 查找并返回对应的资源 + + Args: + resource: 资源对象(可以是list、dict或实例) + target_uuid: 要查找的uuid + + Returns: + 找到的资源对象,未找到则返回None + """ + found_resource = None + + def process(res): + nonlocal found_resource + if found_resource is not None: + return 0 # 已找到,跳过后续处理 + current_uuid = self._get_resource_attr(res, "uuid", "unilabos_uuid") + if current_uuid and current_uuid == target_uuid: + found_resource = res + logger.trace(f"找到资源UUID: {target_uuid}") + return 1 + return 0 + + self._traverse_and_process(resource, process) + return found_resource + def loop_set_extra(self, resource, name_to_extra_map: Dict[str, dict]) -> int: """ 递归遍历资源树,根据 name 设置所有节点的 extra diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 89c4d39b..3b08707f 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -431,10 +431,11 @@ class BaseROS2DeviceNode(Node, Generic[T]): tree_response: SerialCommand.Response = await client.call_async(request) uuid_maps = json.loads(tree_response.response) self.resource_tracker.loop_update_uuid(input_resources, uuid_maps) + rts: ResourceTreeSet = ResourceTreeSet.from_raw_dict_list(input_resources) self.lab_logger().info(f"Resource tree added. UUID mapping: {len(uuid_maps)} nodes") final_response = { - "created_resources": rts.dump(), - "liquid_input_resources": [], + "created_resource_tree": rts.dump(), + "liquid_input_resource_tree": [], } res.response = json.dumps(final_response) # 如果driver自己就有assign的方法,那就使用driver自己的assign方法 @@ -485,7 +486,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): input_wells = [] for r in LIQUID_INPUT_SLOT: input_wells.append(plr_instance.children[r]) - final_response["liquid_input_resources"] = ResourceTreeSet.from_plr_resources(input_wells).dump() + final_response["liquid_input_resource_tree"] = ResourceTreeSet.from_plr_resources(input_wells).dump() res.response = json.dumps(final_response) if issubclass(parent_resource.__class__, Deck) and hasattr(parent_resource, "assign_child_at_slot") and "slot" in other_calling_param: other_calling_param["slot"] = int(other_calling_param["slot"]) @@ -1263,7 +1264,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): ACTION, action_paramtypes = self.get_real_function(self.driver_instance, action_name) action_kwargs = convert_from_ros_msg_with_mapping(goal, action_value_mapping["goal"]) - self.lab_logger().debug(f"任务 {ACTION.__name__} 接收到原始目标: {action_kwargs}") + self.lab_logger().debug(f"任务 {ACTION.__name__} 接收到原始目标: {str(action_kwargs)[:1000]}") + self.lab_logger().trace(f"任务 {ACTION.__name__} 接收到原始目标: {action_kwargs}") error_skip = False # 向Host查询物料当前状态,如果是host本身的增加物料的请求,则直接跳过 if action_name not in ["create_resource_detailed", "create_resource"]: @@ -1330,9 +1332,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): execution_success = True except Exception as _: execution_error = traceback.format_exc() - error( - f"异步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{action_kwargs}" - ) + error(f"异步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{str(action_kwargs)[:1000]}") + trace(f"异步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{action_kwargs}") future = ROS2DeviceNode.run_async_func(ACTION, trace_error=False, **action_kwargs) future.add_done_callback(_handle_future_exception) @@ -1352,8 +1353,9 @@ class BaseROS2DeviceNode(Node, Generic[T]): except Exception as _: execution_error = traceback.format_exc() error( - f"同步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{action_kwargs}" - ) + f"同步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{str(action_kwargs)[:1000]}") + trace( + f"同步任务 {ACTION.__name__} 报错了\n{traceback.format_exc()}\n原始输入:{action_kwargs}") future.add_done_callback(_handle_future_exception) @@ -1497,8 +1499,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): resource_data = function_args[arg_name] if isinstance(resource_data, dict) and "id" in resource_data: try: - converted_resource = self._convert_resource_sync(resource_data) - function_args[arg_name] = converted_resource + function_args[arg_name] = self._convert_resources_sync(resource_data["uuid"])[0] except Exception as e: self.lab_logger().error( f"转换ResourceSlot参数 {arg_name} 失败: {e}\n{traceback.format_exc()}" @@ -1512,12 +1513,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): resource_list = function_args[arg_name] if isinstance(resource_list, list): try: - converted_resources = [] - for resource_data in resource_list: - if isinstance(resource_data, dict) and "id" in resource_data: - converted_resource = self._convert_resource_sync(resource_data) - converted_resources.append(converted_resource) - function_args[arg_name] = converted_resources + uuids = [r["uuid"] for r in resource_list if isinstance(r, dict) and "id" in r] + function_args[arg_name] = self._convert_resources_sync(*uuids) if uuids else [] except Exception as e: self.lab_logger().error( f"转换ResourceSlot列表参数 {arg_name} 失败: {e}\n{traceback.format_exc()}" @@ -1530,20 +1527,27 @@ class BaseROS2DeviceNode(Node, Generic[T]): f"执行动作时JSON缺少function_name或function_args: {ex}\n原JSON: {string}\n{traceback.format_exc()}" ) - def _convert_resource_sync(self, resource_data: Dict[str, Any]): - """同步转换资源数据为实例""" - # 创建资源查询请求 - r = SerialCommand.Request() - r.command = json.dumps( - { - "id": resource_data.get("id", None), - "uuid": resource_data.get("uuid", None), - "with_children": True, - } - ) - - # 同步调用资源查询服务 - future = self._resource_clients["resource_get"].call_async(r) + def _convert_resources_sync(self, *uuids: str) -> List["ResourcePLR"]: + """同步转换资源 UUID 为实例 + + Args: + *uuids: 一个或多个资源 UUID + + Returns: + 单个 UUID 时返回单个资源实例,多个 UUID 时返回资源实例列表 + """ + if not uuids: + raise ValueError("至少需要提供一个 UUID") + + uuids_list = list(uuids) + future = self._resource_clients["c2s_update_resource_tree"].call_async(SerialCommand.Request( + command=json.dumps( + { + "data": {"data": uuids_list, "with_children": True}, + "action": "get", + } + ) + )) # 等待结果(使用while循环,每次sleep 0.05秒,最多等待30秒) timeout = 30.0 @@ -1553,27 +1557,40 @@ class BaseROS2DeviceNode(Node, Generic[T]): elapsed += 0.05 if not future.done(): - raise Exception(f"资源查询超时: {resource_data}") + raise Exception(f"资源查询超时: {uuids_list}") response = future.result() if response is None: - raise Exception(f"资源查询返回空结果: {resource_data}") + raise Exception(f"资源查询返回空结果: {uuids_list}") raw_data = json.loads(response.response) # 转换为 PLR 资源 tree_set = ResourceTreeSet.from_raw_dict_list(raw_data) - plr_resource = tree_set.to_plr_resources()[0] + if not len(tree_set.trees): + raise Exception(f"资源查询返回空树: {raw_data}") + plr_resources = tree_set.to_plr_resources() # 通过资源跟踪器获取本地实例 - res = self.resource_tracker.figure_resource(plr_resource, try_mode=True) - if len(res) == 0: - self.lab_logger().warning(f"资源转换未能索引到实例: {resource_data},返回新建实例") - return plr_resource - elif len(res) == 1: - return res[0] - else: - raise ValueError(f"资源转换得到多个实例: {res}") + figured_resources: List[ResourcePLR] = [] + for plr_resource, tree in zip(plr_resources, tree_set.trees): + res = self.resource_tracker.figure_resource(plr_resource, try_mode=True) + if len(res) == 0: + self.lab_logger().warning(f"资源转换未能索引到实例: {tree.root_node.res_content},返回新建实例") + figured_resources.append(plr_resource) + elif len(res) == 1: + figured_resources.append(res[0]) + else: + raise ValueError(f"资源转换得到多个实例: {res}") + + mapped_plr_resources = [] + for uuid in uuids_list: + for plr_resource in figured_resources: + r = self.resource_tracker.loop_find_with_uuid(plr_resource, uuid) + mapped_plr_resources.append(r) + break + + return mapped_plr_resources async def _execute_driver_command_async(self, string: str): try: diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 69c12f89..b31f59bc 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -23,6 +23,7 @@ from unilabos_msgs.srv._serial_command import SerialCommand_Request, SerialComma from unique_identifier_msgs.msg import UUID from unilabos.registry.registry import lab_registry +from unilabos.resources.container import RegularContainer from unilabos.resources.graphio import initialize_resource from unilabos.resources.registry import add_schema from unilabos.ros.initialize_device import initialize_device_from_dict @@ -586,11 +587,10 @@ class HostNode(BaseROS2DeviceNode): ) try: - new_li = [] + assert len(response) == 1, "Create Resource应当只返回一个结果" for i in response: res = json.loads(i) - new_li.append(res) - return {"resources": new_li, "liquid_input_resources": new_li} + return res except Exception as ex: pass _n = "\n" @@ -795,7 +795,8 @@ class HostNode(BaseROS2DeviceNode): assign_sample_id(action_kwargs) goal_msg = convert_to_ros_msg(action_client._action_type.Goal(), action_kwargs) - self.lab_logger().info(f"[Host Node] Sending goal for {action_id}: {goal_msg}") + self.lab_logger().info(f"[Host Node] Sending goal for {action_id}: {str(goal_msg)[:1000]}") + self.lab_logger().trace(f"[Host Node] Sending goal for {action_id}: {goal_msg}") action_client.wait_for_server() goal_uuid_obj = UUID(uuid=list(u.bytes)) @@ -1133,11 +1134,11 @@ class HostNode(BaseROS2DeviceNode): 接收序列化的 ResourceTreeSet 数据并进行处理 """ - self.lab_logger().info(f"[Host Node-Resource] Resource tree add request received") try: # 解析请求数据 data = json.loads(request.command) action = data["action"] + self.lab_logger().info(f"[Host Node-Resource] Resource tree {action} request received") data = data["data"] if action == "add": await self._resource_tree_action_add_callback(data, response) @@ -1453,8 +1454,14 @@ class HostNode(BaseROS2DeviceNode): } def test_resource( - self, resource: ResourceSlot, resources: List[ResourceSlot], device: DeviceSlot, devices: List[DeviceSlot] + self, resource: ResourceSlot = None, resources: List[ResourceSlot] = None, device: DeviceSlot = None, devices: List[DeviceSlot] = None ) -> TestResourceReturn: + if resources is None: + resources = [] + if devices is None: + devices = [] + if resource is None: + resource = RegularContainer("test_resource传入None") return { "resources": ResourceTreeSet.from_plr_resources([resource, *resources]).dump(), "devices": [device, *devices], From a66603ec1cbf7a4d93bf4964fa1b25531159aa9a Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 12 Jan 2026 22:24:01 +0800 Subject: [PATCH 27/40] Add set_liquid example. --- unilabos/registry/devices/liquid_handler.yaml | 8 ++++++- unilabos/registry/registry.py | 4 ++-- unilabos/ros/msgs/message_converter.py | 6 +++++- unilabos/ros/nodes/base_device_node.py | 21 ++++++++++++------- unilabos/ros/nodes/presets/host_node.py | 4 ++-- 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index b0656d12..298eb701 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -9278,7 +9278,13 @@ liquid_handler.prcxi: z: 0.0 sample_id: '' type: '' - handles: {} + handles: + input: + - data_key: wells + data_source: handle + data_type: resource + handler_key: input_wells + label: InputWells placeholder_keys: wells: unilabos_resources result: {} diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index ee0b460e..64aba3c8 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -127,14 +127,14 @@ class Registry: "data_type": "resource", "label": "Labware", "data_source": "executor", - "data_key": "created_resource_tree", + "data_key": "created_resource_tree.@flatten", }, { "handler_key": "liquid_slots", "data_type": "resource", "label": "LiquidSlots", "data_source": "executor", - "data_key": "liquid_input_resource_tree", + "data_key": "liquid_input_resource_tree.@flatten", }, { "handler_key": "materials", diff --git a/unilabos/ros/msgs/message_converter.py b/unilabos/ros/msgs/message_converter.py index e8570d31..632d5e1a 100644 --- a/unilabos/ros/msgs/message_converter.py +++ b/unilabos/ros/msgs/message_converter.py @@ -159,10 +159,14 @@ _msg_converter: Dict[Type, Any] = { else Pose() ), config=json.dumps(x.get("config", {})), - data=json.dumps(x.get("data", {})), + data=json.dumps(obtain_data_with_uuid(x)), ), } +def obtain_data_with_uuid(x: dict): + data = x.get("data", {}) + data["unilabos_uuid"] = x.get("uuid", None) + return data def json_or_yaml_loads(data: str) -> Any: try: diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 3b08707f..8dd4a285 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -430,8 +430,10 @@ class BaseROS2DeviceNode(Node, Generic[T]): }) tree_response: SerialCommand.Response = await client.call_async(request) uuid_maps = json.loads(tree_response.response) - self.resource_tracker.loop_update_uuid(input_resources, uuid_maps) - rts: ResourceTreeSet = ResourceTreeSet.from_raw_dict_list(input_resources) + plr_instances = rts.to_plr_resources() + for plr_instance in plr_instances: + self.resource_tracker.loop_update_uuid(plr_instance, uuid_maps) + rts: ResourceTreeSet = ResourceTreeSet.from_plr_resources(plr_instances) self.lab_logger().info(f"Resource tree added. UUID mapping: {len(uuid_maps)} nodes") final_response = { "created_resource_tree": rts.dump(), @@ -461,7 +463,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): return res try: if len(rts.root_nodes) == 1 and parent_resource is not None: - plr_instance = rts.to_plr_resources()[0] + plr_instance = plr_instances[0] if isinstance(plr_instance, Plate): empty_liquid_info_in: List[Tuple[Optional[str], float]] = [(None, 0)] * plr_instance.num_items if len(ADD_LIQUID_TYPE) == 1 and len(LIQUID_VOLUME) == 1 and len(LIQUID_INPUT_SLOT) > 1: @@ -1281,9 +1283,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): # 批量查询资源 queried_resources = [] for resource_data in resource_inputs: - plr_resource = await self.get_resource_with_dir( - resource_id=resource_data["id"], with_children=True - ) + unilabos_uuid = resource_data.get("data", {}).get("unilabos_uuid") + if unilabos_uuid is None: + plr_resource = await self.get_resource_with_dir( + resource_id=resource_data["id"], with_children=True + ) + else: + resource_tree = await self.get_resource([unilabos_uuid]) + plr_resource = resource_tree.to_plr_resources()[0] if "sample_id" in resource_data: plr_resource.unilabos_extra["sample_uuid"] = resource_data["sample_id"] queried_resources.append(plr_resource) @@ -1423,7 +1430,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): for r in rs: res = self.resource_tracker.parent_resource(r) # 获取 resource 对象 else: - res = self.resource_tracker.parent_resource(r) + res = self.resource_tracker.parent_resource(rs) if id(res) not in seen: seen.add(id(res)) unique_resources.append(res) diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index b31f59bc..0f6b6973 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -1244,7 +1244,7 @@ class HostNode(BaseROS2DeviceNode): data = json.loads(request.command) if "uuid" in data and data["uuid"] is not None: http_req = http_client.resource_tree_get([data["uuid"]], data["with_children"]) - elif "id" in data and data["id"].startswith("/"): + elif "id" in data: http_req = http_client.resource_get(data["id"], data["with_children"]) else: raise ValueError("没有使用正确的物料 id 或 uuid") @@ -1463,7 +1463,7 @@ class HostNode(BaseROS2DeviceNode): if resource is None: resource = RegularContainer("test_resource传入None") return { - "resources": ResourceTreeSet.from_plr_resources([resource, *resources]).dump(), + "resources": ResourceTreeSet.from_plr_resources([resource, *resources], known_newly_created=True).dump(), "devices": [device, *devices], } From 02cd8de4c51cbe8e9d8e1febed3827b4aca8d068 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:49:11 +0800 Subject: [PATCH 28/40] Add None conversion for tube rack etc. --- unilabos/resources/container.py | 2 +- unilabos/resources/resource_tracker.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/unilabos/resources/container.py b/unilabos/resources/container.py index f9772442..fe19bacf 100644 --- a/unilabos/resources/container.py +++ b/unilabos/resources/container.py @@ -27,7 +27,7 @@ class RegularContainer(Container): def get_regular_container(name="container"): r = RegularContainer(name=name) r.category = "container" - return RegularContainer(name=name) + return r # # class RegularContainer(object): diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index d93cb4ec..ea8e5cf5 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -1,7 +1,7 @@ import inspect import traceback import uuid -from pydantic import BaseModel, field_serializer, field_validator +from pydantic import BaseModel, field_serializer, field_validator, ValidationError from pydantic import Field from typing import List, Tuple, Any, Dict, Literal, Optional, cast, TYPE_CHECKING, Union @@ -160,7 +160,11 @@ class ResourceDictInstance(object): "depth": content["config"].get("size_z", 0), } content["pose"] = pose - return ResourceDictInstance(ResourceDict.model_validate(content)) + try: + res_dict = ResourceDict.model_validate(content) + return ResourceDictInstance(res_dict) + except ValidationError as err: + raise err def get_plr_nested_dict(self) -> Dict[str, Any]: """获取资源实例的嵌套字典表示""" @@ -339,6 +343,8 @@ class ResourceTreeSet(object): } if source in replace_info: return replace_info[source] + elif source is None: + return "" else: print("转换pylabrobot的时候,出现未知类型", source) return source From 31c9f9a17236d9fc1b349f44e8df0156e3c622fc Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:21:37 +0800 Subject: [PATCH 29/40] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B9=9F=E6=98=AF=E7=94=A8=E7=88=B6=E8=8A=82=E7=82=B9=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E6=8A=A5=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unilabos/app/ws_client.py | 6 +- unilabos/resources/resource_tracker.py | 2 +- unilabos/ros/nodes/base_device_node.py | 185 ++++++++++++++---------- unilabos/ros/nodes/presets/host_node.py | 9 +- 4 files changed, 114 insertions(+), 88 deletions(-) diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 4c87d362..ea8c8e77 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -848,7 +848,7 @@ class MessageProcessor: device_action_groups[key_add].append(item["uuid"]) logger.info( - f"[MessageProcessor] Resource migrated: {item['uuid'][:8]} from {device_old_id} to {device_id}" + f"[资源同步] 跨站Transfer: {item['uuid'][:8]} from {device_old_id} to {device_id}" ) else: # 正常update @@ -863,11 +863,11 @@ class MessageProcessor: device_action_groups[key] = [] device_action_groups[key].append(item["uuid"]) - logger.info(f"触发物料更新 {action} 分组数量: {len(device_action_groups)}, 总数量: {len(resource_uuid_list)}") + logger.trace(f"[资源同步] 动作 {action} 分组数量: {len(device_action_groups)}, 总数量: {len(resource_uuid_list)}") # 为每个(device_id, action)创建独立的更新线程 for (device_id, actual_action), items in device_action_groups.items(): - logger.info(f"设备 {device_id} 物料更新 {actual_action} 数量: {len(items)}") + logger.trace(f"[资源同步] {device_id} 物料动作 {actual_action} 数量: {len(items)}") def _notify_resource_tree(dev_id, act, item_list): try: diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index ea8e5cf5..afd4c3b9 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -1143,7 +1143,7 @@ class DeviceNodeResourceTracker(object): for key in keys_to_remove: self.resource2parent_resource.pop(key, None) - logger.debug(f"成功移除资源: {resource}") + logger.trace(f"[ResourceTracker] 成功移除资源: {resource}") return True def clear_resource(self): diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 8dd4a285..c99df6c4 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -656,61 +656,71 @@ class BaseROS2DeviceNode(Node, Generic[T]): def transfer_to_new_resource( self, plr_resource: "ResourcePLR", tree: ResourceTreeInstance, additional_add_params: Dict[str, Any] - ): + ) -> Optional["ResourcePLR"]: parent_uuid = tree.root_node.res_content.parent_uuid - if parent_uuid: - parent_resource: ResourcePLR = self.resource_tracker.uuid_to_resources.get(parent_uuid) - if parent_resource is None: + if not parent_uuid: + self.lab_logger().warning( + f"物料{plr_resource} parent未知,挂载到当前节点下,额外参数:{additional_add_params}" + ) + return None + if parent_uuid == self.uuid: + self.lab_logger().warning( + f"物料{plr_resource}请求挂载到{self.identifier},额外参数:{additional_add_params}" + ) + return None + parent_resource: ResourcePLR = self.resource_tracker.uuid_to_resources.get(parent_uuid) + if parent_resource is None: + self.lab_logger().warning( + f"物料{plr_resource}请求挂载{tree.root_node.res_content.name}的父节点{parent_uuid}不存在" + ) + else: + try: + # 特殊兼容所有plr的物料的assign方法,和create_resource append_resource后期同步 + additional_params = {} + extra = getattr(plr_resource, "unilabos_extra", {}) + if len(extra): + self.lab_logger().info(f"发现物料{plr_resource}额外参数: " + str(extra)) + if "update_resource_site" in extra: + additional_add_params["site"] = extra["update_resource_site"] + site = additional_add_params.get("site", None) + spec = inspect.signature(parent_resource.assign_child_resource) + if "spot" in spec.parameters: + ordering_dict: Dict[str, Any] = getattr(parent_resource, "_ordering") + if ordering_dict: + site = list(ordering_dict.keys()).index(site) + additional_params["spot"] = site + old_parent = plr_resource.parent + if old_parent is not None: + # plr并不支持同一个deck的加载和卸载 + self.lab_logger().warning(f"物料{plr_resource}请求从{old_parent}卸载") + old_parent.unassign_child_resource(plr_resource) self.lab_logger().warning( - f"物料{plr_resource}请求挂载{tree.root_node.res_content.name}的父节点{parent_uuid}不存在" + f"物料{plr_resource}请求挂载到{parent_resource},额外参数:{additional_params}" ) - else: - try: - # 特殊兼容所有plr的物料的assign方法,和create_resource append_resource后期同步 - additional_params = {} - extra = getattr(plr_resource, "unilabos_extra", {}) - if len(extra): - self.lab_logger().info(f"发现物料{plr_resource}额外参数: " + str(extra)) - if "update_resource_site" in extra: - additional_add_params["site"] = extra["update_resource_site"] - site = additional_add_params.get("site", None) - spec = inspect.signature(parent_resource.assign_child_resource) - if "spot" in spec.parameters: - ordering_dict: Dict[str, Any] = getattr(parent_resource, "_ordering") - if ordering_dict: - site = list(ordering_dict.keys()).index(site) - additional_params["spot"] = site - old_parent = plr_resource.parent - if old_parent is not None: - # plr并不支持同一个deck的加载和卸载 - self.lab_logger().warning(f"物料{plr_resource}请求从{old_parent}卸载") - old_parent.unassign_child_resource(plr_resource) - self.lab_logger().warning( - f"物料{plr_resource}请求挂载到{parent_resource},额外参数:{additional_params}" - ) - # ⭐ assign 之前,需要从 resources 列表中移除 - # 因为资源将不再是顶级资源,而是成为 parent_resource 的子资源 - # 如果不移除,figure_resource 会找到两次:一次在 resources,一次在 parent 的 children - resource_id = id(plr_resource) - for i, r in enumerate(self.resource_tracker.resources): - if id(r) == resource_id: - self.resource_tracker.resources.pop(i) - self.lab_logger().debug( - f"从顶级资源列表中移除 {plr_resource.name}(即将成为 {parent_resource.name} 的子资源)" - ) - break + # ⭐ assign 之前,需要从 resources 列表中移除 + # 因为资源将不再是顶级资源,而是成为 parent_resource 的子资源 + # 如果不移除,figure_resource 会找到两次:一次在 resources,一次在 parent 的 children + resource_id = id(plr_resource) + for i, r in enumerate(self.resource_tracker.resources): + if id(r) == resource_id: + self.resource_tracker.resources.pop(i) + self.lab_logger().debug( + f"从顶级资源列表中移除 {plr_resource.name}(即将成为 {parent_resource.name} 的子资源)" + ) + break - parent_resource.assign_child_resource(plr_resource, location=None, **additional_params) + parent_resource.assign_child_resource(plr_resource, location=None, **additional_params) - func = getattr(self.driver_instance, "resource_tree_transfer", None) - if callable(func): - # 分别是 物料的原来父节点,当前物料的状态,物料的新父节点(此时物料已经重新assign了) - func(old_parent, plr_resource, parent_resource) - except Exception as e: - self.lab_logger().warning( - f"物料{plr_resource}请求挂载{tree.root_node.res_content.name}的父节点{parent_resource}[{parent_uuid}]失败!\n{traceback.format_exc()}" - ) + func = getattr(self.driver_instance, "resource_tree_transfer", None) + if callable(func): + # 分别是 物料的原来父节点,当前物料的状态,物料的新父节点(此时物料已经重新assign了) + func(old_parent, plr_resource, parent_resource) + return parent_resource + except Exception as e: + self.lab_logger().warning( + f"物料{plr_resource}请求挂载{tree.root_node.res_content.name}的父节点{parent_resource}[{parent_uuid}]失败!\n{traceback.format_exc()}" + ) async def s2c_resource_tree(self, req: SerialCommand_Request, res: SerialCommand_Response): """ @@ -725,7 +735,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): def _handle_add( plr_resources: List[ResourcePLR], tree_set: ResourceTreeSet, additional_add_params: Dict[str, Any] - ) -> Dict[str, Any]: + ) -> Tuple[Dict[str, Any], List[ResourcePLR]]: """ 处理资源添加操作的内部函数 @@ -737,15 +747,20 @@ class BaseROS2DeviceNode(Node, Generic[T]): Returns: 操作结果字典 """ + parents = [] # 放的是被变更的物料 / 被变更的物料父级 for plr_resource, tree in zip(plr_resources, tree_set.trees): self.resource_tracker.add_resource(plr_resource) - self.transfer_to_new_resource(plr_resource, tree, additional_add_params) + parent = self.transfer_to_new_resource(plr_resource, tree, additional_add_params) + if parent is not None: + parents.append(parent) + else: + parents.append(plr_resource) func = getattr(self.driver_instance, "resource_tree_add", None) if callable(func): func(plr_resources) - return {"success": True, "action": "add"} + return {"success": True, "action": "add"}, parents def _handle_remove(resources_uuid: List[str]) -> Dict[str, Any]: """ @@ -780,11 +795,11 @@ class BaseROS2DeviceNode(Node, Generic[T]): if plr_resource.parent is not None: plr_resource.parent.unassign_child_resource(plr_resource) self.resource_tracker.remove_resource(plr_resource) - self.lab_logger().info(f"移除物料 {plr_resource} 及其子节点") + self.lab_logger().info(f"[资源同步] 移除物料 {plr_resource} 及其子节点") for other_plr_resource in other_plr_resources: self.resource_tracker.remove_resource(other_plr_resource) - self.lab_logger().info(f"移除物料 {other_plr_resource} 及其子节点") + self.lab_logger().info(f"[资源同步] 移除物料 {other_plr_resource} 及其子节点") return { "success": True, @@ -816,11 +831,16 @@ class BaseROS2DeviceNode(Node, Generic[T]): original_instance: ResourcePLR = self.resource_tracker.figure_resource( {"uuid": tree.root_node.res_content.uuid}, try_mode=False ) + original_parent_resource = original_instance.parent + original_parent_resource_uuid = getattr(original_parent_resource, "unilabos_uuid", None) + target_parent_resource_uuid = tree.root_node.res_content.uuid_parent + not_same_parent = original_parent_resource_uuid != target_parent_resource_uuid and original_parent_resource is not None + old_name = original_instance.name + new_name = plr_resource.name + parent_appended = False - # Update操作中包含改名:需要先remove再add - if original_instance.name != plr_resource.name: - old_name = original_instance.name - new_name = plr_resource.name + # Update操作中包含改名:需要先remove再add,这里更新父节点即可 + if not not_same_parent and old_name != new_name: self.lab_logger().info(f"物料改名操作:{old_name} -> {new_name}") # 收集所有相关的uuid(包括子节点) @@ -829,12 +849,10 @@ class BaseROS2DeviceNode(Node, Generic[T]): _handle_add([original_instance], tree_set, additional_add_params) self.lab_logger().info(f"物料改名完成:{old_name} -> {new_name}") + original_instances.append(original_parent_resource) + parent_appended = True # 常规更新:不涉及改名 - original_parent_resource = original_instance.parent - original_parent_resource_uuid = getattr(original_parent_resource, "unilabos_uuid", None) - target_parent_resource_uuid = tree.root_node.res_content.uuid_parent - self.lab_logger().info( f"物料{original_instance} 原始父节点{original_parent_resource_uuid} " f"目标父节点{target_parent_resource_uuid} 更新" @@ -845,13 +863,12 @@ class BaseROS2DeviceNode(Node, Generic[T]): original_instance.unilabos_extra = getattr(plr_resource, "unilabos_extra") # type: ignore # noqa: E501 # 如果父节点变化,需要重新挂载 - if ( - original_parent_resource_uuid != target_parent_resource_uuid - and original_parent_resource is not None - ): - self.transfer_to_new_resource(original_instance, tree, additional_add_params) + if not_same_parent: + parent = self.transfer_to_new_resource(original_instance, tree, additional_add_params) + original_instances.append(parent) + parent_appended = True else: - # 判断是否变更了resource_site + # 判断是否变更了resource_site,重新登记 target_site = original_instance.unilabos_extra.get("update_resource_site") sites = original_instance.parent.sites if original_instance.parent is not None and hasattr(original_instance.parent, "sites") else None site_names = list(original_instance.parent._ordering.keys()) if original_instance.parent is not None and hasattr(original_instance.parent, "sites") else [] @@ -859,7 +876,10 @@ class BaseROS2DeviceNode(Node, Generic[T]): site_index = sites.index(original_instance) site_name = site_names[site_index] if site_name != target_site: - self.transfer_to_new_resource(original_instance, tree, additional_add_params) + parent = self.transfer_to_new_resource(original_instance, tree, additional_add_params) + if parent is not None: + original_instances.append(parent) + parent_appended = True # 加载状态 original_instance.load_all_state(states) @@ -867,7 +887,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): self.lab_logger().info( f"更新了资源属性 {plr_resource}[{tree.root_node.res_content.uuid}] " f"及其子节点 {child_count} 个" ) - original_instances.append(original_instance) + if not parent_appended: + original_instances.append(original_instance) # 调用driver的update回调 func = getattr(self.driver_instance, "resource_tree_update", None) @@ -884,8 +905,8 @@ class BaseROS2DeviceNode(Node, Generic[T]): action = i.get("action") # remove, add, update resources_uuid: List[str] = i.get("data") # 资源数据 additional_add_params = i.get("additional_add_params", {}) # 额外参数 - self.lab_logger().info( - f"[Resource Tree Update] Processing {action} operation, " f"resources count: {len(resources_uuid)}" + self.lab_logger().trace( + f"[资源同步] 处理 {action}, " f"resources count: {len(resources_uuid)}" ) tree_set = None if action in ["add", "update"]: @@ -897,8 +918,13 @@ class BaseROS2DeviceNode(Node, Generic[T]): if tree_set is None: raise ValueError("tree_set不能为None") plr_resources = tree_set.to_plr_resources() - result = _handle_add(plr_resources, tree_set, additional_add_params) - new_tree_set = ResourceTreeSet.from_plr_resources(plr_resources) + result, parents = _handle_add(plr_resources, tree_set, additional_add_params) + parents: List[Optional["ResourcePLR"]] = [i for i in parents if i is not None] + de_dupe_parents = list(set(parents)) + new_tree_set = ResourceTreeSet.from_plr_resources(de_dupe_parents) # 去重 + for tree in new_tree_set.trees: + if tree.root_node.res_content.uuid_parent is None and self.node_name != "host_node": + tree.root_node.res_content.parent_uuid = self.uuid r = SerialCommand.Request() r.command = json.dumps( {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 @@ -917,7 +943,10 @@ class BaseROS2DeviceNode(Node, Generic[T]): plr_resources.append(ResourceTreeSet([tree]).to_plr_resources()[0]) result, original_instances = _handle_update(plr_resources, tree_set, additional_add_params) if not BasicConfig.no_update_feedback: - new_tree_set = ResourceTreeSet.from_plr_resources(original_instances) + new_tree_set = ResourceTreeSet.from_plr_resources(original_instances) # 去重 + for tree in new_tree_set.trees: + if tree.root_node.res_content.uuid_parent is None and self.node_name != "host_node": + tree.root_node.res_content.parent_uuid = self.uuid r = SerialCommand.Request() r.command = json.dumps( {"data": {"data": new_tree_set.dump()}, "action": "update"}) # 和Update Resource一致 @@ -937,15 +966,15 @@ class BaseROS2DeviceNode(Node, Generic[T]): # 返回处理结果 result_json = {"results": results, "total": len(data)} res.response = json.dumps(result_json, ensure_ascii=False, cls=TypeEncoder) - self.lab_logger().info(f"[Resource Tree Update] Completed processing {len(data)} operations") + # self.lab_logger().info(f"[Resource Tree Update] Completed processing {len(data)} operations") except json.JSONDecodeError as e: error_msg = f"Invalid JSON format: {str(e)}" - self.lab_logger().error(f"[Resource Tree Update] {error_msg}") + self.lab_logger().error(f"[资源同步] {error_msg}") res.response = json.dumps({"success": False, "error": error_msg}, ensure_ascii=False) except Exception as e: error_msg = f"Unexpected error: {str(e)}" - self.lab_logger().error(f"[Resource Tree Update] {error_msg}") + self.lab_logger().error(f"[资源同步] {error_msg}") self.lab_logger().error(traceback.format_exc()) res.response = json.dumps({"success": False, "error": error_msg}, ensure_ascii=False) diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 0f6b6973..cf9fd704 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -362,8 +362,7 @@ class HostNode(BaseROS2DeviceNode): request.command = "" future = sclient.call_async(request) # Use timeout for result as well - future.result(timeout_sec=5.0) - self.lab_logger().debug(f"[Host Node] Re-register completed for {device_namespace}") + future.result() except Exception as e: # Gracefully handle destruction during shutdown if "destruction was requested" in str(e) or self._shutting_down: @@ -1515,7 +1514,7 @@ class HostNode(BaseROS2DeviceNode): # 构建服务地址 srv_address = f"/srv{namespace}/s2c_resource_tree" - self.lab_logger().info(f"[Host Node-Resource] Notifying {device_id} for resource tree {action} operation") + self.lab_logger().trace(f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation started -------") # 创建服务客户端 sclient = self.create_client(SerialCommand, srv_address) @@ -1550,9 +1549,7 @@ class HostNode(BaseROS2DeviceNode): time.sleep(0.05) response = future.result() - self.lab_logger().info( - f"[Host Node-Resource] Resource tree {action} notification completed for {device_id}" - ) + self.lab_logger().trace(f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation completed -------") return True except Exception as e: From 9dfd58e9af00b3525d1b4e0cc5c17abe820d9758 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:17:29 +0800 Subject: [PATCH 30/40] fix parent_uuid fetch when bind_parent_id == node_name --- unilabos/ros/nodes/base_device_node.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index c99df6c4..efe287d8 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -392,9 +392,12 @@ class BaseROS2DeviceNode(Node, Generic[T]): parent_resource = self.resource_tracker.figure_resource( {"name": bind_parent_id} ) - for r in rts.root_nodes: - # noinspection PyUnresolvedReferences - r.res_content.parent_uuid = parent_resource.unilabos_uuid + for r in rts.root_nodes: + # noinspection PyUnresolvedReferences + r.res_content.parent_uuid = parent_resource.unilabos_uuid + else: + for r in rts.root_nodes: + r.res_content.parent_uuid = self.uuid if len(LIQUID_INPUT_SLOT) and LIQUID_INPUT_SLOT[0] == -1 and len(rts.root_nodes) == 1 and isinstance(rts.root_nodes[0], RegularContainer): # noinspection PyTypeChecker From ad21644db0692dbe922e218e9ebdbf745a32c554 Mon Sep 17 00:00:00 2001 From: ZiWei <131428629+ZiWei09@users.noreply.github.com> Date: Wed, 14 Jan 2026 18:42:14 +0800 Subject: [PATCH 31/40] =?UTF-8?q?fix:=20WareHouse=20=E7=9A=84=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E5=93=88=E5=B8=8C=E7=B1=BB=E5=9E=8B=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E7=88=B6=E8=8A=82=E7=82=B9=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- unilabos/ros/nodes/base_device_node.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index efe287d8..c248882b 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -923,7 +923,14 @@ class BaseROS2DeviceNode(Node, Generic[T]): plr_resources = tree_set.to_plr_resources() result, parents = _handle_add(plr_resources, tree_set, additional_add_params) parents: List[Optional["ResourcePLR"]] = [i for i in parents if i is not None] - de_dupe_parents = list(set(parents)) + # de_dupe_parents = list(set(parents)) + # Fix unhashable type error for WareHouse + de_dupe_parents = [] + _seen_ids = set() + for p in parents: + if id(p) not in _seen_ids: + _seen_ids.add(id(p)) + de_dupe_parents.append(p) new_tree_set = ResourceTreeSet.from_plr_resources(de_dupe_parents) # 去重 for tree in new_tree_set.trees: if tree.root_node.res_content.uuid_parent is None and self.node_name != "host_node": @@ -1568,16 +1575,16 @@ class BaseROS2DeviceNode(Node, Generic[T]): def _convert_resources_sync(self, *uuids: str) -> List["ResourcePLR"]: """同步转换资源 UUID 为实例 - + Args: *uuids: 一个或多个资源 UUID - + Returns: 单个 UUID 时返回单个资源实例,多个 UUID 时返回资源实例列表 """ if not uuids: raise ValueError("至少需要提供一个 UUID") - + uuids_list = list(uuids) future = self._resource_clients["c2s_update_resource_tree"].call_async(SerialCommand.Request( command=json.dumps( From 4c8022ee955bb506df67770f652051b7e78b588b Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Sat, 17 Jan 2026 15:44:18 +0800 Subject: [PATCH 32/40] Workstation yb merge dev ready 260113 (#216) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(bioyond): 添加计算实验设计功能,支持化合物配比和滴定比例参数 * feat(bioyond): 添加测量小瓶功能,支持基本参数配置 * feat(bioyond): 添加测量小瓶配置,支持新设备参数 * feat(bioyond): 更新仓库布局和尺寸,支持竖向排列的测量小瓶和试剂存放堆栈 * feat(bioyond): 优化任务创建流程,确保无论成功与否都清理任务队列以避免重复累积 * feat(bioyond): 添加设置反应器温度功能,支持温度范围和异常处理 * feat(bioyond): 调整反应器位置配置,统一坐标格式 * feat(bioyond): 添加调度器启动功能,支持任务队列执行并处理异常 * feat(bioyond): 优化调度器启动功能,添加异常处理并更新相关配置 * feat(opcua): 增强节点ID解析兼容性和数据类型处理 改进节点ID解析逻辑以支持多种格式,包括字符串和数字标识符 添加数据类型转换处理,确保写入值时类型匹配 优化错误提示信息,便于调试节点连接问题 * feat(registry): 新增后处理站的设备配置文件 添加后处理站的YAML配置文件,包含动作映射、状态类型和设备描述 * 添加调度器启动功能,合并物料参数配置,优化物料参数处理逻辑 * 添加从 Bioyond 系统自动同步工作流序列的功能,并更新相关配置 * fix:兼容 BioyondReactionStation 中 workflow_sequence 被重写为 property * fix:同步工作流序列 * feat: remove commented workflow synchronization from `reaction_station.py`. * 添加时间约束功能及相关配置 * fix:自动更新物料缓存功能,添加物料时更新缓存并在删除时移除缓存项 * fix:在添加物料时处理字符串和字典返回值,确保正确更新缓存 * fix:更新奔曜错误处理报送为物料变更报送,调整日志记录和响应消息 * feat:添加实验报告简化功能,去除冗余信息并保留关键信息 * feat: 添加任务状态事件发布功能,监控并报告任务运行、超时、完成和错误状态 * fix: 修复添加物料时数据格式错误 * Refactor bioyond_dispensing_station and reaction_station_bioyond YAML configurations - Removed redundant action value mappings from bioyond_dispensing_station. - Updated goal properties in bioyond_dispensing_station to use enums for target_stack and other parameters. - Changed data types for end_point and start_point in reaction_station_bioyond to use string enums (Start, End). - Simplified descriptions and updated measurement units from μL to mL where applicable. - Removed unused commands from reaction_station_bioyond to streamline the configuration. * fix:Change the material unit from μL to mL * fix:refresh_material_cache * feat: 动态获取工作流步骤ID,优化工作流配置 * feat: 添加清空服务端所有非核心工作流功能 * fix:修复Bottle类的序列化和反序列化方法 * feat:增强材料缓存更新逻辑,支持处理返回数据中的详细信息 * Add debug log * feat(workstation): update bioyond config migration and coin cell material search logic - Migrate bioyond_cell config to JSON structure and remove global variable dependencies - Implement material search confirmation dialog auto-handling - Add documentation: 20260113_物料搜寻确认弹窗自动处理功能.md and 20260113_配置迁移修改总结.md * Refactor module paths for Bioyond devices in YAML configuration files - Updated the module path for BioyondDispensingStation in bioyond_dispensing_station.yaml to reflect the new directory structure. - Updated the module path for BioyondReactionStation and BioyondReactor in reaction_station_bioyond.yaml to align with the revised organization of the codebase. * fix: WareHouse 的不可哈希类型错误,优化父节点去重逻辑 * refactor: Move config from module to instance initialization * fix: 修正 reaction_station 目录名拼写错误 * feat: Integrate material search logic and cleanup deprecated files - Update coin_cell_assembly.py with material search dialog handling - Update YB_warehouses.py with latest warehouse configurations - Remove outdated documentation and test data files * Refactor: Use instance attributes for action names and workflow step IDs * refactor: Split tipbox storage into left and right warehouses * refactor: Merge tipbox storage left and right into single warehouse --------- Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> Co-authored-by: Andy6M --- unilabos/app/ws_client.py | 20 +- unilabos/device_comms/opcua_client/client.py | 558 +- .../opcua_client/node/uniopcua.py | 30 +- unilabos/devices/workstation/README.md | 4 - .../bioyond_cell/20251229_多订单返回说明.md | 113 + .../bioyond_cell/202601091.xlsx | Bin 0 -> 10149 bytes .../bioyond_cell/20260113_JSON配置迁移经验.md | 204 + .../bioyond_cell/20260113_配置迁移修改总结.md | 312 + .../bioyond_cell/bioyond_cell_workstation.py | 2112 +++ .../bioyond_cell/material_template.xlsx | Bin 0 -> 10674 bytes .../bioyond_cell/outbound_template.xlsx | Bin 0 -> 9125 bytes .../bioyond_cell/批量出库模板使用说明.md | 157 + .../workstation/bioyond_studio/bioyond_rpc.py | 69 +- .../workstation/bioyond_studio/config.py | 142 - .../bioyond_studio/config.py.deprecated | 329 + .../dispensing_station.py | 510 +- .../reaction_station.py | 1034 +- .../workstation/bioyond_studio/station.py | 289 +- .../20251230_Modbus_CSV_Mapping_Guide.md | 84 + .../20260113_物料搜寻确认弹窗自动处理功能.md | 352 + .../coin_cell_assembly/YB_YH_materials.py | 645 + .../button_battery_station.py | 1289 -- .../coin_cell_assembly/coin_cell_assembly.py | 1350 +- .../coin_cell_assembly_b.csv | 133 + .../coin_cell_assembly/new_cellconfig4.json | 14472 ---------------- .../workstation/workstation_http_service.py | 8 +- unilabos/registry/devices/bioyond_cell.yaml | 847 + .../devices/bioyond_dispensing_station.yaml | 410 +- .../devices/coin_cell_workstation.yaml | 850 + .../devices/reaction_station_bioyond.yaml | 418 +- .../bioyond/README_RESOURCE_ARCHITECTURE.md | 170 + .../registry/resources/bioyond/YB_bottle.yaml | 92 + .../resources/bioyond/YB_bottle_carriers.yaml | 182 + .../registry/resources/bioyond/bottles.yaml | 11 + unilabos/registry/resources/bioyond/deck.yaml | 16 +- unilabos/resources/battery/__init__.py | 0 unilabos/resources/battery/bottle_carriers.py | 56 + unilabos/resources/battery/electrode_sheet.py | 195 + unilabos/resources/battery/magazine.py | 344 + .../resources/bioyond/README_WAREHOUSE.md | 548 + .../resources/bioyond/YB_bottle_carriers.py | 653 + unilabos/resources/bioyond/YB_bottles.py | 163 + unilabos/resources/bioyond/YB_warehouses.py | 384 + unilabos/resources/bioyond/bottles.py | 17 + unilabos/resources/bioyond/decks.py | 44 +- unilabos/resources/bioyond/warehouses.py | 64 +- unilabos/resources/graphio.py | 69 +- unilabos/resources/itemized_carrier.py | 38 +- unilabos/resources/resource_tracker.py | 10 + unilabos/resources/warehouse.py | 9 +- unilabos/ros/nodes/base_device_node.py | 2 +- unilabos/ros/nodes/presets/host_node.py | 2 +- .../dispensing_station_bioyond.json | 162 +- .../experiments/reaction_station_bioyond.json | 280 +- unilabos/utils/README_LOGGING.md | 187 + unilabos/utils/log.py | 16 + yibin_electrolyte_config_example.json | 126 + 57 files changed, 13468 insertions(+), 17113 deletions(-) create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/20251229_多订单返回说明.md create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/202601091.xlsx create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_JSON配置迁移经验.md create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_配置迁移修改总结.md create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/outbound_template.xlsx create mode 100644 unilabos/devices/workstation/bioyond_studio/bioyond_cell/批量出库模板使用说明.md delete mode 100644 unilabos/devices/workstation/bioyond_studio/config.py create mode 100644 unilabos/devices/workstation/bioyond_studio/config.py.deprecated rename unilabos/devices/workstation/bioyond_studio/{ => dispensing_station}/dispensing_station.py (79%) rename unilabos/devices/workstation/bioyond_studio/{ => reaction_station}/reaction_station.py (55%) create mode 100644 unilabos/devices/workstation/coin_cell_assembly/20251230_Modbus_CSV_Mapping_Guide.md create mode 100644 unilabos/devices/workstation/coin_cell_assembly/20260113_物料搜寻确认弹窗自动处理功能.md create mode 100644 unilabos/devices/workstation/coin_cell_assembly/YB_YH_materials.py delete mode 100644 unilabos/devices/workstation/coin_cell_assembly/button_battery_station.py create mode 100644 unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_b.csv delete mode 100644 unilabos/devices/workstation/coin_cell_assembly/new_cellconfig4.json create mode 100644 unilabos/registry/devices/bioyond_cell.yaml create mode 100644 unilabos/registry/devices/coin_cell_workstation.yaml create mode 100644 unilabos/registry/resources/bioyond/README_RESOURCE_ARCHITECTURE.md create mode 100644 unilabos/registry/resources/bioyond/YB_bottle.yaml create mode 100644 unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml create mode 100644 unilabos/resources/battery/__init__.py create mode 100644 unilabos/resources/battery/bottle_carriers.py create mode 100644 unilabos/resources/battery/electrode_sheet.py create mode 100644 unilabos/resources/battery/magazine.py create mode 100644 unilabos/resources/bioyond/README_WAREHOUSE.md create mode 100644 unilabos/resources/bioyond/YB_bottle_carriers.py create mode 100644 unilabos/resources/bioyond/YB_bottles.py create mode 100644 unilabos/resources/bioyond/YB_warehouses.py create mode 100644 unilabos/utils/README_LOGGING.md create mode 100644 yibin_electrolyte_config_example.json diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index ea8c8e77..95526f0c 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -902,28 +902,28 @@ class MessageProcessor: async def _handle_request_restart(self, data: Dict[str, Any]): """ 处理重启请求 - + 当LabGo发送request_restart时,执行清理并触发重启 """ reason = data.get("reason", "unknown") delay = data.get("delay", 2) # 默认延迟2秒 logger.info(f"[MessageProcessor] Received restart request, reason: {reason}, delay: {delay}s") - + # 发送确认消息 if self.websocket_client: await self.websocket_client.send_message({ "action": "restart_acknowledged", "data": {"reason": reason, "delay": delay} }) - + # 设置全局重启标志 import unilabos.app.main as main_module main_module._restart_requested = True main_module._restart_reason = reason - + # 延迟后执行清理 await asyncio.sleep(delay) - + # 在新线程中执行清理,避免阻塞当前事件循环 def do_cleanup(): import time @@ -937,7 +937,7 @@ class MessageProcessor: logger.error("[MessageProcessor] Cleanup failed") except Exception as e: logger.error(f"[MessageProcessor] Error during cleanup: {e}") - + cleanup_thread = threading.Thread(target=do_cleanup, name="RestartCleanupThread", daemon=True) cleanup_thread.start() logger.info(f"[MessageProcessor] Restart cleanup scheduled") @@ -1375,7 +1375,7 @@ class WebSocketClient(BaseCommunicationClient): # 收集设备信息 devices = [] machine_name = BasicConfig.machine_name - + try: host_node = HostNode.get_instance(0) if host_node: @@ -1383,7 +1383,7 @@ class WebSocketClient(BaseCommunicationClient): for device_id, namespace in host_node.devices_names.items(): device_key = f"{namespace}/{device_id}" if namespace.startswith("/") else f"/{namespace}/{device_id}" is_online = device_key in host_node._online_devices - + # 获取设备的动作信息 actions = {} for action_id, client in host_node._action_clients.items(): @@ -1394,7 +1394,7 @@ class WebSocketClient(BaseCommunicationClient): "action_path": action_id, "action_type": str(type(client).__name__), } - + devices.append({ "device_id": device_id, "namespace": namespace, @@ -1403,7 +1403,7 @@ class WebSocketClient(BaseCommunicationClient): "machine_name": host_node.device_machine_names.get(device_id, machine_name), "actions": actions, }) - + logger.info(f"[WebSocketClient] Collected {len(devices)} devices for host_ready") except Exception as e: logger.warning(f"[WebSocketClient] Error collecting device info: {e}") diff --git a/unilabos/device_comms/opcua_client/client.py b/unilabos/device_comms/opcua_client/client.py index b45cded2..27a401ff 100644 --- a/unilabos/device_comms/opcua_client/client.py +++ b/unilabos/device_comms/opcua_client/client.py @@ -141,7 +141,7 @@ class BaseClient(UniversalDriver): try: self.client.connect() logger.info('client connected!') - + # 连接后开始查找节点 if self._variables_to_find: self._find_nodes() @@ -150,36 +150,36 @@ class BaseClient(UniversalDriver): raise else: raise ValueError('client is not initialized') - + def _find_nodes(self) -> None: """查找服务器中的节点""" if not self.client: raise ValueError('client is not connected') - + logger.info(f'开始查找 {len(self._variables_to_find)} 个节点...') try: # 获取根节点 root = self.client.get_root_node() objects = root.get_child(["0:Objects"]) - + # 记录查找前的状态 before_count = len(self._node_registry) - + # 查找节点 self._find_nodes_recursive(objects) - + # 记录查找后的状态 after_count = len(self._node_registry) newly_found = after_count - before_count - + logger.info(f"本次查找新增 {newly_found} 个节点,当前共 {after_count} 个") - + # 检查是否所有节点都已找到 not_found = [] for var_name, var_info in self._variables_to_find.items(): if var_name not in self._node_registry: not_found.append(var_name) - + if not_found: logger.warning(f"⚠ 以下 {len(not_found)} 个节点未找到: {', '.join(not_found[:10])}{'...' if len(not_found) > 10 else ''}") logger.warning(f"提示:请检查这些节点名称是否与服务器的 BrowseName 完全匹配(包括大小写、空格等)") @@ -188,7 +188,7 @@ class BaseClient(UniversalDriver): logger.info(f"尝试在服务器中查找第一个未找到的节点 '{not_found[0]}' 的相似节点...") else: logger.info(f"✓ 所有 {len(self._variables_to_find)} 个节点均已找到并注册") - + except Exception as e: logger.error(f"查找节点失败: {e}") traceback.print_exc() @@ -199,14 +199,14 @@ class BaseClient(UniversalDriver): # 获取当前节点的浏览名称 browse_name = node.get_browse_name() node_name = browse_name.Name - + # 检查是否是我们要找的变量 if node_name in self._variables_to_find and node_name not in self._node_registry: var_info = self._variables_to_find[node_name] node_type = var_info.get("node_type") data_type = var_info.get("data_type") node_id_str = str(node.nodeid) - + # 根据节点类型创建相应的对象 if node_type == NodeType.VARIABLE: self._node_registry[node_name] = Variable(self.client, node_name, node_id_str, data_type) @@ -219,11 +219,11 @@ class BaseClient(UniversalDriver): parent_node_id = str(parent_node.nodeid) self._node_registry[node_name] = Method(self.client, node_name, node_id_str, parent_node_id, data_type) logger.info(f"✓ 找到方法节点: '{node_name}', NodeId: {node_id_str}, ParentId: {parent_node_id}") - + # 递归处理子节点 for child in node.get_children(): self._find_nodes_recursive(child) - + except Exception as e: # 忽略处理单个节点时的错误,继续处理其他节点 pass @@ -238,50 +238,50 @@ class BaseClient(UniversalDriver): df = pd.read_csv(file_path) df = df.drop_duplicates(subset='Name', keep='first') # 重复的数据应该报错 nodes = [] - + # 检查是否包含英文名称列和节点语言列 has_english_name = 'EnglishName' in df.columns has_node_language = 'NodeLanguage' in df.columns - + # 如果存在英文名称列,创建名称映射字典 name_mapping = {} reverse_mapping = {} - + for _, row in df.iterrows(): name = row.get('Name') node_type_str = row.get('NodeType') data_type_str = row.get('DataType') - + # 获取英文名称和节点语言(如果有) english_name = row.get('EnglishName') if has_english_name else None node_language = row.get('NodeLanguage') if has_node_language else 'English' # 默认为英文 - + # 如果有英文名称,添加到映射字典 if english_name and not pd.isna(english_name) and node_language == 'Chinese': name_mapping[english_name] = name reverse_mapping[name] = english_name - + if not name or not node_type_str: logger.warning(f"跳过无效行: 名称或节点类型缺失") continue - + # 只支持VARIABLE和METHOD两种类型 if node_type_str not in ['VARIABLE', 'METHOD']: logger.warning(f"不支持的节点类型: {node_type_str},仅支持VARIABLE和METHOD") continue - + try: node_type = NodeType[node_type_str] except KeyError: logger.warning(f"无效的节点类型: {node_type_str}") continue - + # 对于VARIABLE节点,必须指定数据类型 if node_type == NodeType.VARIABLE: if not data_type_str or pd.isna(data_type_str): logger.warning(f"变量节点 {name} 必须指定数据类型") continue - + try: data_type = DataType[data_type_str] except KeyError: @@ -295,14 +295,14 @@ class BaseClient(UniversalDriver): data_type = DataType[data_type_str] except KeyError: logger.warning(f"无效的数据类型: {data_type_str},将使用默认值") - + # 创建节点对象,节点ID留空,将通过自动查找功能获取 nodes.append(OpcUaNode( name=name, node_type=node_type, data_type=data_type )) - + # 返回节点列表和名称映射字典 return nodes, name_mapping, reverse_mapping @@ -328,7 +328,7 @@ class BaseClient(UniversalDriver): logger.info(f"重新查找成功: '{chinese_name}', NodeId: {node.node_id}") return node raise ValueError(f'节点 {chinese_name} (英文名: {name}) 未注册或未找到') - + # 直接使用原始名称查找 if name not in self._node_registry: if name in self._variables_to_find: @@ -368,14 +368,14 @@ class BaseClient(UniversalDriver): for node in node_list: if node is None: continue - + if node.name in self._node_registry: logger.debug(f'节点 "{node.name}" 已存在于注册表') exist = self._node_registry[node.name] if exist.type != node.node_type: raise ValueError(f'节点 {node.name} 类型 {node.node_type} 与已存在的类型 {exist.type} 不一致') continue - + # 将节点添加到待查找列表 self._variables_to_find[node.name] = { "node_type": node.node_type, @@ -385,11 +385,11 @@ class BaseClient(UniversalDriver): logger.debug(f'添加节点 "{node.name}" ({node.node_type}) 到待查找列表') logger.info(f'节点注册完成:新增 {new_nodes_count} 个待查找节点,总计 {len(self._variables_to_find)} 个') - + # 如果客户端已连接,立即开始查找 if self.client: self._find_nodes() - + return self def run_opcua_workflow(self, workflow: OpcUaWorkflow) -> None: @@ -480,7 +480,7 @@ class BaseClient(UniversalDriver): def create_node_function(self, func_name: str = None, node_name: str = None, mode: str = None, value: Any = None, **kwargs) -> Callable[[Callable[[str], OpcUaNodeBase]], bool]: def execute_node_function(use_node: Callable[[str], OpcUaNodeBase]) -> Union[bool, Tuple[Any, bool]]: target_node = use_node(node_name) - + # 检查是否有对应的参数值可用 current_value = value if hasattr(self, '_workflow_params') and func_name in self._workflow_params: @@ -488,19 +488,21 @@ class BaseClient(UniversalDriver): print(f"使用参数值 {func_name} = {current_value}") else: print(f"执行 {node_name}, {type(target_node).__name__}, {target_node.node_id}, {mode}, {current_value}") - + if mode == 'read': result_str = self.read_node(node_name) - + try: # 将字符串转换为字典 result_str = result_str.replace("'", '"') # 替换单引号为双引号以便JSON解析 result_dict = json.loads(result_str) - + # 从字典获取值和错误标志 val = result_dict.get("value") err = result_dict.get("error") - + + print(f"读取 {node_name} 返回值 = {val} (类型: {type(val).__name__}), 错误 = {err}") + print(f"读取 {node_name} 返回值 = {val} (类型: {type(val).__name__}, 错误 = {err}") return val, err except Exception as e: @@ -510,7 +512,7 @@ class BaseClient(UniversalDriver): # 构造完整的JSON输入,包含node_name和value input_json = json.dumps({"node_name": node_name, "value": current_value}) result_str = self.write_node(input_json) - + try: # 解析返回的字符串为字典 result_str = result_str.replace("'", '"') # 替换单引号为双引号以便JSON解析 @@ -527,19 +529,19 @@ class BaseClient(UniversalDriver): print(f"调用方法 {node_name} 参数 = {args}, 返回值 = {result}") return result return False - + if func_name is None: func_name = f"{node_name}_{mode}_{str(value)}" - + print(f"创建 node function: {mode}, {func_name}") self.function_name[func_name] = execute_node_function - + return execute_node_function - + def create_init_function(self, func_name: str = None, write_nodes: Union[Dict[str, Any], List[str]] = None): """ 创建初始化函数 - + 参数: func_name: 函数名称 write_nodes: 写节点配置,可以是节点名列表[节点1,节点2]或节点值映射{节点1:值1,节点2:值2} @@ -599,25 +601,25 @@ class BaseClient(UniversalDriver): except Exception as e: print(f"初始化函数: 解析写入结果失败: {e}, 原始结果: {result_str}") return True - + if func_name is None: func_name = f"init_function_{str(time.time())}" - + print(f"创建初始化函数: {func_name}") self.function_name[func_name] = execute_init_function return execute_init_function - + def create_stop_function(self, func_name: str = None, write_nodes: Union[Dict[str, Any], List[str]] = None): """ 创建停止函数 - + 参数: func_name: 函数名称 write_nodes: 写节点配置,可以是节点名列表[节点1,节点2]或节点值映射{节点1:值1,节点2:值2} """ if write_nodes is None: raise ValueError("必须提供write_nodes参数") - + def execute_stop_function(use_node: Callable[[str], OpcUaNodeBase]) -> bool: if isinstance(write_nodes, list): # 处理节点列表,默认值都是False @@ -647,25 +649,25 @@ class BaseClient(UniversalDriver): except Exception as e: print(f"停止函数: 解析写入结果失败: {e}, 原始结果: {result_str}") return True - + if func_name is None: func_name = f"stop_function_{str(time.time())}" - + print(f"创建停止函数: {func_name}") self.function_name[func_name] = execute_stop_function return execute_stop_function - + def create_cleanup_function(self, func_name: str = None, write_nodes: Union[Dict[str, Any], List[str]] = None): """ 创建清理函数 - + 参数: func_name: 函数名称 write_nodes: 写节点配置,可以是节点名列表[节点1,节点2]或节点值映射{节点1:值1,节点2:值2} """ if write_nodes is None: raise ValueError("必须提供write_nodes参数") - + def execute_cleanup_function(use_node: Callable[[str], OpcUaNodeBase]) -> bool: if isinstance(write_nodes, list): # 处理节点列表,默认值都是False @@ -695,10 +697,10 @@ class BaseClient(UniversalDriver): except Exception as e: print(f"清理函数: 解析写入结果失败: {e}, 原始结果: {result_str}") return True - + if func_name is None: func_name = f"cleanup_function_{str(time.time())}" - + print(f"创建清理函数: {func_name}") self.function_name[func_name] = execute_cleanup_function return execute_cleanup_function @@ -706,7 +708,7 @@ class BaseClient(UniversalDriver): def create_start_function(self, func_name: str, stop_condition_expression: str = "True", write_nodes: Union[Dict[str, Any], List[str]] = None, condition_nodes: Union[Dict[str, str], List[str]] = None): """ 创建开始函数 - + 参数: func_name: 函数名称 stop_condition_expression: 停止条件表达式,可直接引用节点名称 @@ -756,16 +758,16 @@ class BaseClient(UniversalDriver): print(f"直接写入 {node_name} = {current_value}, 结果: {success}") except Exception as e: print(f"解析直接写入结果失败: {e}, 原始结果: {result_str}") - + # 如果没有条件节点,立即返回 if not condition_nodes: return True - + # 处理条件检查和等待 while True: next_loop = False condition_source = {} - + # 直接读取条件节点 if isinstance(condition_nodes, list): # 处理节点列表 @@ -779,11 +781,11 @@ class BaseClient(UniversalDriver): read_res = result_dict.get("value") read_err = result_dict.get("error", False) print(f"直接读取 {node_name} 返回值 = {read_res}, 错误 = {read_err}") - + if read_err: next_loop = True break - + # 将节点值存入条件源字典,使用节点名称作为键 condition_source[node_name] = read_res # 为了向后兼容,也保留read_i格式 @@ -804,11 +806,11 @@ class BaseClient(UniversalDriver): read_res = result_dict.get("value") read_err = result_dict.get("error", False) print(f"直接读取 {node_name} 返回值 = {read_res}, 错误 = {read_err}") - + if read_err: next_loop = True break - + # 将节点值存入条件源字典 condition_source[node_name] = read_res # 也保存使用函数名作为键 @@ -817,13 +819,13 @@ class BaseClient(UniversalDriver): print(f"解析直接读取结果失败: {e}, 原始结果: {result_str}") next_loop = True break - + if not next_loop: if stop_condition_expression: # 添加调试信息 print(f"条件源数据: {condition_source}") condition_source["__RESULT"] = None - + # 确保安全地执行条件表达式 try: # 先尝试使用eval更安全的方式计算表达式 @@ -837,10 +839,10 @@ class BaseClient(UniversalDriver): except Exception as e2: print(f"使用exec执行表达式也失败: {e2}") condition_source["__RESULT"] = False - + res = condition_source["__RESULT"] print(f"取得计算结果: {res}, 条件表达式: {stop_condition_expression}") - + if res: print("满足停止条件,结束工作流") break @@ -849,21 +851,21 @@ class BaseClient(UniversalDriver): break else: time.sleep(0.3) - + return True - + self.function_name[func_name] = execute_start_function return execute_start_function create_action_from_json = None - + def create_action_from_json(self, data: Union[Dict, Any]) -> WorkflowAction: """ 从JSON配置创建工作流动作 - + 参数: data: 动作JSON数据 - + 返回: WorkflowAction对象 """ @@ -874,7 +876,7 @@ class BaseClient(UniversalDriver): stop_function = None init_function = None cleanup_function = None - + # 提取start_function相关信息 if hasattr(data, "start_function") and data.start_function: start_function = data.start_function @@ -888,31 +890,31 @@ class BaseClient(UniversalDriver): write_nodes = start_function["write_nodes"] if "condition_nodes" in start_function: condition_nodes = start_function["condition_nodes"] - + # 提取stop_function信息 if hasattr(data, "stop_function") and data.stop_function: stop_function = data.stop_function elif isinstance(data, dict) and data.get("stop_function"): stop_function = data.get("stop_function") - + # 提取init_function信息 if hasattr(data, "init_function") and data.init_function: init_function = data.init_function elif isinstance(data, dict) and data.get("init_function"): init_function = data.get("init_function") - + # 提取cleanup_function信息 if hasattr(data, "cleanup_function") and data.cleanup_function: cleanup_function = data.cleanup_function elif isinstance(data, dict) and data.get("cleanup_function"): cleanup_function = data.get("cleanup_function") - + # 创建工作流动作组件 init = None start = None stop = None cleanup = None - + # 处理init function if init_function: init_params = {"func_name": init_function.get("func_name")} @@ -921,9 +923,9 @@ class BaseClient(UniversalDriver): else: # 如果没有write_nodes,创建一个空字典 init_params["write_nodes"] = {} - + init = self.create_init_function(**init_params) - + # 处理start function if start_function: start_params = { @@ -933,7 +935,7 @@ class BaseClient(UniversalDriver): "condition_nodes": condition_nodes } start = self.create_start_function(**start_params) - + # 处理stop function if stop_function: stop_params = { @@ -941,7 +943,7 @@ class BaseClient(UniversalDriver): "write_nodes": stop_function.get("write_nodes", {}) } stop = self.create_stop_function(**stop_params) - + # 处理cleanup function if cleanup_function: cleanup_params = { @@ -949,22 +951,22 @@ class BaseClient(UniversalDriver): "write_nodes": cleanup_function.get("write_nodes", {}) } cleanup = self.create_cleanup_function(**cleanup_params) - + return WorkflowAction(init=init, start=start, stop=stop, cleanup=cleanup) - + workflow_name: Dict[str, OpcUaWorkflowModel] = {} def create_workflow_from_json(self, data: List[Dict]) -> None: """ 从JSON配置创建工作流程序 - + 参数: data: 工作流配置列表 """ for ind, flow_dict in enumerate(data): print(f"正在创建 workflow {ind}, {flow_dict['name']}") actions = [] - + for i in flow_dict["action"]: if isinstance(i, str): print(f"沿用已有 workflow 作为 action: {i}") @@ -973,14 +975,14 @@ class BaseClient(UniversalDriver): print("创建 action") # 直接将字典转换为SimplifiedActionJson对象或直接使用字典 action = self.create_action_from_json(i) - + actions.append(action) - + # 获取参数 parameters = flow_dict.get("parameters", []) - + flow_instance = OpcUaWorkflowModel( - name=flow_dict["name"], + name=flow_dict["name"], actions=actions, parameters=parameters, description=flow_dict.get("description", "") @@ -1005,19 +1007,19 @@ class BaseClient(UniversalDriver): register_params = data.register_node_list_from_csv_path create_flow = data.create_flow execute_flow = data.execute_flow if hasattr(data, "execute_flow") else [] - + # 注册节点 if register_params: print(f"注册节点 csv: {register_params}") self.register_node_list_from_csv_path(**register_params) - + # 创建工作流 print("创建工作流") self.create_workflow_from_json(create_flow) - + # 注册工作流为实例方法 self.register_workflows_as_methods() - + # 如果存在execute_flow字段,则执行指定的工作流(向后兼容) if execute_flow: print("执行工作流") @@ -1029,12 +1031,12 @@ class BaseClient(UniversalDriver): # 获取工作流的参数信息(如果存在) workflow_params = getattr(workflow, 'parameters', []) or [] workflow_desc = getattr(workflow, 'description', None) or f"执行工作流: {workflow_name}" - + # 创建执行工作流的方法 def create_workflow_method(wf_name=workflow_name, wf=workflow, params=workflow_params): def workflow_method(*args, **kwargs): logger.info(f"执行工作流: {wf_name}, 参数: {args}, {kwargs}") - + # 处理传入的参数 if params and (args or kwargs): # 将位置参数转换为关键字参数 @@ -1042,31 +1044,31 @@ class BaseClient(UniversalDriver): for i, param_name in enumerate(params): if i < len(args): params_dict[param_name] = args[i] - + # 合并关键字参数 params_dict.update(kwargs) - + # 保存参数,供节点函数使用 self._workflow_params = params_dict else: self._workflow_params = {} - + # 执行工作流 result = self.run_opcua_workflow_model(wf) - + # 清理参数 self._workflow_params = {} - + return result - + # 设置方法的文档字符串 workflow_method.__doc__ = workflow_desc if params: param_doc = ", ".join(params) workflow_method.__doc__ += f"\n参数: {param_doc}" - + return workflow_method - + # 注册为实例方法 method = create_workflow_method() setattr(self, workflow_name, method) @@ -1082,7 +1084,7 @@ class BaseClient(UniversalDriver): try: node = self.use_node(node_name) value, error = node.read() - + # 创建结果字典 result = { "value": value, @@ -1090,7 +1092,7 @@ class BaseClient(UniversalDriver): "node_name": node_name, "timestamp": time.time() } - + # 返回JSON字符串 return json.dumps(result) except Exception as e: @@ -1104,7 +1106,7 @@ class BaseClient(UniversalDriver): "timestamp": time.time() } return json.dumps(result) - + def write_node(self, json_input: str) -> str: """ 写入节点值的便捷方法 @@ -1118,24 +1120,24 @@ class BaseClient(UniversalDriver): # 解析JSON格式的输入 if not isinstance(json_input, str): json_input = str(json_input) - + try: input_data = json.loads(json_input) if not isinstance(input_data, dict): return json.dumps({"error": True, "error_message": "输入必须是包含node_name和value的JSON对象", "success": False}) - + # 从JSON中提取节点名称和值 node_name = input_data.get("node_name") value = input_data.get("value") - + if node_name is None: return json.dumps({"error": True, "error_message": "JSON中缺少node_name字段", "success": False}) except json.JSONDecodeError as e: return json.dumps({"error": True, "error_message": f"JSON解析错误: {str(e)}", "success": False}) - + node = self.use_node(node_name) error = node.write(value) - + # 创建结果字典 result = { "value": value, @@ -1144,7 +1146,7 @@ class BaseClient(UniversalDriver): "timestamp": time.time(), "success": not error } - + return json.dumps(result) except Exception as e: logger.error(f"写入节点失败: {e}") @@ -1155,7 +1157,7 @@ class BaseClient(UniversalDriver): "success": False } return json.dumps(result) - + def call_method(self, node_name: str, *args) -> Tuple[Any, bool]: """ 调用方法节点的便捷方法 @@ -1175,11 +1177,11 @@ class BaseClient(UniversalDriver): class OpcUaClient(BaseClient): def __init__( - self, - url: str, + self, + url: str, deck: Optional[Union[post_process_deck, Dict[str, Any]]] = None, - config_path: str = None, - username: str = None, + config_path: str = None, + username: str = None, password: str = None, use_subscription: bool = True, cache_timeout: float = 5.0, @@ -1190,9 +1192,10 @@ class OpcUaClient(BaseClient): # 降低OPCUA库的日志级别 import logging logging.getLogger("opcua").setLevel(logging.WARNING) - + super().__init__() + # ===== 关键修改:参照 BioyondWorkstation 处理 deck ===== super().__init__() @@ -1215,15 +1218,15 @@ class OpcUaClient(BaseClient): if hasattr(self.deck, 'children'): warehouse_count = len(self.deck.children) logger.info(f"Deck 初始化完成,加载 {warehouse_count} 个资源") - - + + # OPC UA 客户端初始化 client = Client(url) - + if username and password: client.set_user(username) client.set_password(password) - + self._set_client(client) # 订阅相关属性 @@ -1231,30 +1234,30 @@ class OpcUaClient(BaseClient): self._subscription = None self._subscription_handles = {} self._subscription_interval = subscription_interval - + # 缓存相关属性 self._node_values = {} # 修改为支持时间戳的缓存结构 self._cache_timeout = cache_timeout - + # 连接状态监控 self._connection_check_interval = 30.0 # 连接检查间隔(秒) self._connection_monitor_running = False self._connection_monitor_thread = None - + # 添加线程锁,保护OPC UA客户端的并发访问 import threading self._client_lock = threading.RLock() - + # 连接到服务器 self._connect() - + # 如果提供了配置文件路径,则加载配置并注册工作流 if config_path: self.load_config(config_path) - + # 启动连接监控 self._start_connection_monitor() - + def _connect(self) -> None: """连接到OPC UA服务器""" @@ -1263,23 +1266,23 @@ class OpcUaClient(BaseClient): try: self.client.connect() logger.info('✓ 客户端已连接!') - + # 连接后开始查找节点 if self._variables_to_find: self._find_nodes() - + # 如果启用订阅模式,设置订阅 if self._use_subscription: self._setup_subscriptions() else: logger.info("订阅模式已禁用,将使用按需读取模式") - + except Exception as e: logger.error(f'客户端连接失败: {e}') raise else: raise ValueError('客户端未初始化') - + class SubscriptionHandler: """freeopcua订阅处理器:必须实现 datachange_notification 方法""" def __init__(self, outer): @@ -1300,22 +1303,22 @@ class OpcUaClient(BaseClient): """设置 OPC UA 订阅""" if not self.client or not self._use_subscription: return - + with self._client_lock: try: logger.info(f"开始设置订阅 (发布间隔: {self._subscription_interval}ms)...") - + # 创建订阅 handler = OpcUaClient.SubscriptionHandler(self) self._subscription = self.client.create_subscription( self._subscription_interval, handler ) - + # 为所有变量节点创建监控项 subscribed_count = 0 skipped_count = 0 - + for node_name, node in self._node_registry.items(): # 只为变量节点创建订阅 if node.type == NodeType.VARIABLE and node.node_id: @@ -1333,16 +1336,16 @@ class OpcUaClient(BaseClient): logger.warning(f"✗ 订阅节点 {node_name} 失败: {e}") else: skipped_count += 1 - + logger.info(f"订阅设置完成: 成功 {subscribed_count} 个, 跳过 {skipped_count} 个") - + except Exception as e: logger.error(f"设置订阅失败: {e}") traceback.print_exc() # 订阅失败时回退到按需读取模式 self._use_subscription = False logger.warning("订阅模式设置失败,已自动切换到按需读取模式") - + def _on_subscription_datachange(self, node, val, data): """订阅数据变化处理器(供内部 SubscriptionHandler 调用)""" try: @@ -1360,11 +1363,11 @@ class OpcUaClient(BaseClient): break except Exception as e: logger.error(f"处理订阅数据失败: {e}") - + def get_node_value(self, name, use_cache=True, force_read=False): """ 获取节点值(智能缓存版本) - + 参数: name: 节点名称(支持中文名或英文名) use_cache: 是否使用缓存 @@ -1373,11 +1376,28 @@ class OpcUaClient(BaseClient): # 处理名称映射 if name in self._name_mapping: chinese_name = self._name_mapping[name] + # 优先从缓存获取值 + if chinese_name in self._node_values: + return self._node_values[chinese_name] + # 缓存中没有则直接读取 + value, _ = self.use_node(chinese_name).read() + return value + # 如果提供的是中文名,直接使用 + elif name in self._node_registry: + # 优先从缓存获取值 + if name in self._node_values: + return self._node_values[name] + # 缓存中没有则直接读取 + value, _ = self.use_node(name).read() + return value + else: + raise ValueError(f"未找到名称为 '{name}' 的节点") + elif name in self._node_registry: chinese_name = name else: raise ValueError(f"未找到名称为 '{name}' 的节点") - + # 如果强制读取,直接从服务器读取 if force_read: with self._client_lock: @@ -1389,18 +1409,18 @@ class OpcUaClient(BaseClient): 'source': 'forced_read' } return value - + # 检查缓存 if use_cache and chinese_name in self._node_values: cache_entry = self._node_values[chinese_name] cache_age = time.time() - cache_entry['timestamp'] - + # 如果是订阅模式,缓存永久有效(由订阅更新) # 如果是按需读取模式,检查缓存超时 if cache_entry.get('source') == 'subscription' or cache_age < self._cache_timeout: logger.debug(f"从缓存读取: {chinese_name} = {cache_entry['value']} (age: {cache_age:.2f}s, source: {cache_entry.get('source', 'unknown')})") return cache_entry['value'] - + # 缓存过期或不存在,从服务器读取 with self._client_lock: try: @@ -1419,7 +1439,7 @@ class OpcUaClient(BaseClient): except Exception as e: logger.error(f"读取节点 {chinese_name} 出错: {e}") return None - + def set_node_value(self, name, value): """ 设置节点值 @@ -1432,12 +1452,28 @@ class OpcUaClient(BaseClient): chinese_name = name else: raise ValueError(f"未找到名称为 '{name}' 的节点") - + + # 写入值 + error = node.write(value) + if not error: + # 更新缓存 + if hasattr(node, 'name'): + self._node_values[node.name] = value + return True + return False + + def _refresh_worker(self): + """节点值刷新线程的工作函数""" + self._refresh_running = True + logger.info(f"节点值刷新线程已启动,刷新间隔: {self._refresh_interval}秒") + + while self._refresh_running: + with self._client_lock: try: node = self.use_node(chinese_name) error = node.write(value) - + if not error: # 写入成功,立即更新缓存 self._node_values[chinese_name] = { @@ -1453,7 +1489,7 @@ class OpcUaClient(BaseClient): except Exception as e: logger.error(f"写入节点 {chinese_name} 出错: {e}") return False - + def _check_connection(self) -> bool: """检查连接状态""" try: @@ -1466,22 +1502,33 @@ class OpcUaClient(BaseClient): logger.warning(f"连接检查失败: {e}") return False return False - + def _connection_monitor_worker(self): """连接监控线程工作函数""" self._connection_monitor_running = True logger.info(f"连接监控线程已启动 (检查间隔: {self._connection_check_interval}秒)") - + reconnect_attempts = 0 max_reconnect_attempts = 5 - + while self._connection_monitor_running: try: + self.refresh_node_values() + except Exception as e: + logger.error(f"节点值刷新过程出错: {e}") + + # 等待下一次刷新 + time.sleep(self._refresh_interval) + + def start_node_refresh(self): + """启动节点值刷新线程""" + if self._refresh_thread is not None and self._refresh_thread.is_alive(): + logger.warning("节点值刷新线程已在运行") # 检查连接状态 if not self._check_connection(): logger.warning("检测到连接断开,尝试重新连接...") reconnect_attempts += 1 - + if reconnect_attempts <= max_reconnect_attempts: try: # 尝试重新连接 @@ -1491,14 +1538,14 @@ class OpcUaClient(BaseClient): self.client.disconnect() except: pass - + self.client.connect() logger.info("✓ 重新连接成功") - + # 重新设置订阅 if self._use_subscription: self._setup_subscriptions() - + reconnect_attempts = 0 except Exception as e: logger.error(f"重新连接失败 (尝试 {reconnect_attempts}/{max_reconnect_attempts}): {e}") @@ -1509,34 +1556,44 @@ class OpcUaClient(BaseClient): else: # 连接正常,重置重连计数 reconnect_attempts = 0 - + except Exception as e: logger.error(f"连接监控出错: {e}") - + # 等待下次检查 time.sleep(self._connection_check_interval) - + def _start_connection_monitor(self): """启动连接监控线程""" if self._connection_monitor_thread is not None and self._connection_monitor_thread.is_alive(): logger.warning("连接监控线程已在运行") return - + import threading + self._refresh_thread = threading.Thread(target=self._refresh_worker, daemon=True) + self._refresh_thread.start() + + def stop_node_refresh(self): + """停止节点值刷新线程""" + self._refresh_running = False + if self._refresh_thread and self._refresh_thread.is_alive(): + self._refresh_thread.join(timeout=2.0) + logger.info("节点值刷新线程已停止") + self._connection_monitor_thread = threading.Thread( - target=self._connection_monitor_worker, + target=self._connection_monitor_worker, daemon=True, name="OpcUaConnectionMonitor" ) self._connection_monitor_thread.start() - + def _stop_connection_monitor(self): """停止连接监控线程""" self._connection_monitor_running = False if self._connection_monitor_thread and self._connection_monitor_thread.is_alive(): self._connection_monitor_thread.join(timeout=2.0) logger.info("连接监控线程已停止") - + def read_node(self, node_name: str) -> str: """ 读取节点值的便捷方法(使用缓存) @@ -1545,11 +1602,11 @@ class OpcUaClient(BaseClient): try: # 使用get_node_value方法,自动处理缓存 value = self.get_node_value(node_name, use_cache=True) - + # 获取缓存信息 chinese_name = self._name_mapping.get(node_name, node_name) cache_info = self._node_values.get(chinese_name, {}) - + result = { "value": value, "error": False, @@ -1558,7 +1615,7 @@ class OpcUaClient(BaseClient): "cache_age": time.time() - cache_info.get('timestamp', time.time()), "source": cache_info.get('source', 'unknown') } - + return json.dumps(result) except Exception as e: logger.error(f"读取节点 {node_name} 失败: {e}") @@ -1582,21 +1639,21 @@ class OpcUaClient(BaseClient): 'cache_timeout': self._cache_timeout, 'using_subscription': self._use_subscription } - + for node_name, cache_entry in self._node_values.items(): source = cache_entry.get('source', 'unknown') cache_age = current_time - cache_entry['timestamp'] - + if source == 'subscription': stats['subscription_nodes'] += 1 elif source in ['on_demand_read', 'forced_read', 'write']: stats['on_demand_nodes'] += 1 - + if cache_age > self._cache_timeout: stats['expired_nodes'] += 1 - + return stats - + def print_cache_stats(self): """打印缓存统计信息""" stats = self.get_cache_stats() @@ -1610,37 +1667,41 @@ class OpcUaClient(BaseClient): print(f" - 已过期节点: {stats['expired_nodes']}") print(f"缓存超时时间: {stats['cache_timeout']}秒") print("="*80 + "\n") - + def load_config(self, config_path: str) -> None: """从JSON配置文件加载并注册工作流""" try: with open(config_path, 'r', encoding='utf-8') as f: config_data = json.load(f) - + # 处理节点注册 if "register_node_list_from_csv_path" in config_data: config_dir = os.path.dirname(os.path.abspath(config_path)) - + + # 处理CSV路径,如果是相对路径,则相对于配置文件所在目录 + if "path" in config_data["register_node_list_from_csv_path"]: csv_path = config_data["register_node_list_from_csv_path"]["path"] if not os.path.isabs(csv_path): csv_path = os.path.join(config_dir, csv_path) config_data["register_node_list_from_csv_path"]["path"] = csv_path - + + # 直接使用字典 + self.register_node_list_from_csv_path(**config_data["register_node_list_from_csv_path"]) - + if self.client and self._variables_to_find: logger.info("CSV加载完成,开始查找服务器节点...") self._find_nodes() - + # 处理工作流创建 if "create_flow" in config_data: self.create_workflow_from_json(config_data["create_flow"]) self.register_workflows_as_methods() - - # 将所有节点注册为属性 + + # 将所有节点注册为属性(只注册已找到的节点) self._register_nodes_as_attributes() - + # 打印统计信息 found_count = len(self._node_registry) total_count = len(self._variables_to_find) @@ -1648,23 +1709,114 @@ class OpcUaClient(BaseClient): logger.warning(f"节点查找完成:找到 {found_count}/{total_count} 个节点") else: logger.info(f"✓ 节点查找完成:所有 {found_count} 个节点均已找到") - + # 如果使用订阅模式,重新设置订阅(确保新节点被订阅) if self._use_subscription and found_count > 0: self._setup_subscriptions() - + logger.info(f"成功从 {config_path} 加载配置") except Exception as e: logger.error(f"加载配置文件 {config_path} 失败: {e}") traceback.print_exc() - + + def print_node_registry_status(self): + """打印节点注册状态,用于调试""" + print("\n" + "="*80) + print("节点注册状态诊断报告") + print("="*80) + print(f"\n待查找节点总数: {len(self._variables_to_find)}") + print(f"已找到节点总数: {len(self._node_registry)}") + print(f"未找到节点总数: {len(self._variables_to_find) - len(self._node_registry)}") + + # 显示已找到的节点(前10个) + if self._node_registry: + print(f"\n✓ 已找到的节点 (显示前10个):") + for i, (name, node) in enumerate(list(self._node_registry.items())[:10]): + eng_name = self._reverse_mapping.get(name, "") + eng_info = f" ({eng_name})" if eng_name else "" + print(f" {i+1}. '{name}'{eng_info}") + print(f" NodeId: {node.node_id}") + print(f" Type: {node.type}") + + # 显示未找到的节点 + not_found = [name for name in self._variables_to_find if name not in self._node_registry] + if not_found: + print(f"\n✗ 未找到的节点 (显示前20个):") + for i, name in enumerate(not_found[:20]): + eng_name = self._reverse_mapping.get(name, "") + eng_info = f" ({eng_name})" if eng_name else "" + node_info = self._variables_to_find[name] + print(f" {i+1}. '{name}'{eng_info} - {node_info['node_type']}") + + print("\n" + "="*80) + print("提示:") + print("1. 如果大量节点未找到,请检查CSV中的节点名称是否与服务器BrowseName完全匹配") + print("2. 可以使用 client.browse_server_nodes() 查看服务器的实际节点结构") + print("3. 节点名称区分大小写,且包括所有空格和特殊字符") + print("="*80 + "\n") + + def browse_server_nodes(self, max_depth=3, start_path=["0:Objects"]): + """浏览服务器节点树,用于调试和对比""" + if not self.client: + print("客户端未连接") + return + + print("\n" + "="*80) + print(f"服务器节点浏览 (最大深度: {max_depth})") + print("="*80 + "\n") + + try: + root = self.client.get_root_node() + start_node = root.get_child(start_path) + self._browse_node_recursive(start_node, depth=0, max_depth=max_depth) + except Exception as e: + print(f"浏览失败: {e}") + traceback.print_exc() + + def _browse_node_recursive(self, node, depth=0, max_depth=3): + """递归浏览节点""" + if depth > max_depth: + return + + try: + browse_name = node.get_browse_name() + node_class = node.get_node_class() + indent = " " * depth + + # 显示节点信息 + print(f"{indent}├─ {browse_name.Name}") + print(f"{indent}│ NodeId: {str(node.nodeid)}") + print(f"{indent}│ NodeClass: {node_class}") + + # 如果是变量,显示数据类型 + if node_class == NodeClass.Variable: + try: + data_type = node.get_data_type() + print(f"{indent}│ DataType: {data_type}") + except: + pass + + # 递归处理子节点(限制数量避免输出过多) + if depth < max_depth: + children = node.get_children() + for i, child in enumerate(children[:20]): # 每层最多显示20个子节点 + self._browse_node_recursive(child, depth + 1, max_depth) + if len(children) > 20: + print(f"{indent} ... ({len(children) - 20} more children)") + except Exception as e: + # 忽略单个节点的错误 + pass + def disconnect(self): + # 停止刷新线程 + self.stop_node_refresh() + """断开连接并清理资源""" logger.info("正在断开连接...") - + # 停止连接监控 self._stop_connection_monitor() - + # 删除订阅 if self._subscription: try: @@ -1673,7 +1825,7 @@ class OpcUaClient(BaseClient): logger.info("订阅已删除") except Exception as e: logger.warning(f"删除订阅失败: {e}") - + # 断开客户端连接 if self.client: try: @@ -1682,22 +1834,22 @@ class OpcUaClient(BaseClient): logger.info("✓ OPC UA 客户端已断开连接") except Exception as e: logger.error(f"断开连接失败: {e}") - + def _register_nodes_as_attributes(self): """将所有节点注册为实例属性""" for node_name, node in self._node_registry.items(): if not node.node_id or node.node_id == "": logger.warning(f"⚠ 节点 '{node_name}' 的 node_id 为空,跳过注册为属性") continue - + eng_name = self._reverse_mapping.get(node_name) attr_name = eng_name if eng_name else node_name.replace(' ', '_').replace('-', '_') - + def create_property_getter(node_key): def getter(self): return self.get_node_value(node_key, use_cache=True) return getter - + setattr(OpcUaClient, attr_name, property(create_property_getter(node_name))) logger.debug(f"已注册节点 '{node_name}' 为属性 '{attr_name}'") @@ -1705,14 +1857,14 @@ class OpcUaClient(BaseClient): """ROS2 节点就绪后的初始化""" if not (hasattr(self, 'deck') and self.deck): return - + if not (hasattr(ros_node, 'resource_tracker') and ros_node.resource_tracker): logger.warning("resource_tracker 不存在,无法注册 deck") return - + # 1. 本地注册(必需) ros_node.resource_tracker.add_resource(self.deck) - + # 2. 上传云端 try: from unilabos.ros.nodes.base_device_node import ROS2DeviceNode @@ -1728,30 +1880,30 @@ class OpcUaClient(BaseClient): if __name__ == '__main__': # 示例用法 - + # 使用配置文件创建客户端并自动注册工作流 import os current_dir = os.path.dirname(os.path.abspath(__file__)) config_path = os.path.join(current_dir, "opcua_huairou.json") - + # 创建OPC UA客户端并加载配置 try: client = OpcUaClient( url="opc.tcp://192.168.1.88:4840/freeopcua/server/", # 替换为实际的OPC UA服务器地址 config_path="D:\\Uni-Lab-OS\\unilabos\\device_comms\\opcua_client\\opcua_huairou.json" # 传入配置文件路径 ) - + # 列出所有已注册的工作流 print("\n已注册的工作流:") for workflow_name in client.workflow_name: print(f" - {workflow_name}") - + # 测试trigger_grab_action工作流 - 使用英文参数名 print("\n测试trigger_grab_action工作流 - 使用英文参数名:") client.trigger_grab_action(reaction_tank_number=2, raw_tank_number=2) # client.set_node_value("reaction_tank_number", 2) - + # 读取节点值 - 使用英文节点名 grab_complete = client.get_node_value("grab_complete") reaction_tank = client.get_node_value("reaction_tank_number") @@ -1761,19 +1913,19 @@ if __name__ == '__main__': print(f" - 抓取完成状态: {grab_complete}") print(f" - 当前反应罐号码: {reaction_tank}") print(f" - 当前原料罐号码: {raw_tank}") - + # 测试节点值写入 - 使用英文节点名 print("\n测试节点值写入 (使用英文节点名):") success = client.set_node_value("atomization_fast_speed", 150.5) print(f" - 写入搅拌浆雾化快速 = 150.5, 结果: {success}") - + # 读取写入的值 atomization_speed = client.get_node_value("atomization_fast_speed") print(f" - 读取搅拌浆雾化快速: {atomization_speed}") - + # 断开连接 client.disconnect() - + except Exception as e: print(f"错误: {e}") traceback.print_exc() diff --git a/unilabos/device_comms/opcua_client/node/uniopcua.py b/unilabos/device_comms/opcua_client/node/uniopcua.py index d99a5fd7..a06d780c 100644 --- a/unilabos/device_comms/opcua_client/node/uniopcua.py +++ b/unilabos/device_comms/opcua_client/node/uniopcua.py @@ -43,7 +43,7 @@ class Base(ABC): self._type = typ self._data_type = data_type self._node: Optional[Node] = None - + def _get_node(self) -> Node: if self._node is None: try: @@ -66,7 +66,7 @@ class Base(ABC): # 直接以字符串形式处理 if isinstance(nid, str): nid = nid.strip() - + # 处理包含类名的格式,如 'StringNodeId(ns=4;s=...)' 或 'NumericNodeId(ns=2;i=...)' # 提取括号内的内容 match_wrapped = re.match(r'(String|Numeric|Byte|Guid|TwoByteNode|FourByteNode)NodeId\((.*)\)', nid) @@ -116,16 +116,16 @@ class Base(ABC): def read(self) -> Tuple[Any, bool]: """读取节点值,返回(值, 是否出错)""" pass - + @abstractmethod def write(self, value: Any) -> bool: """写入节点值,返回是否出错""" pass - + @property def type(self) -> NodeType: return self._type - + @property def node_id(self) -> str: return self._node_id @@ -210,15 +210,15 @@ class Method(Base): super().__init__(client, name, node_id, NodeType.METHOD, data_type) self._parent_node_id = parent_node_id self._parent_node = None - + def _get_parent_node(self) -> Node: if self._parent_node is None: try: # 处理父节点ID,使用与_get_node相同的解析逻辑 import re - + nid = self._parent_node_id - + # 如果已经是 NodeId 对象,直接使用 try: from opcua.ua import NodeId as UaNodeId @@ -227,16 +227,16 @@ class Method(Base): return self._parent_node except Exception: pass - + # 字符串处理 if isinstance(nid, str): nid = nid.strip() - + # 处理包含类名的格式 match_wrapped = re.match(r'(String|Numeric|Byte|Guid|TwoByteNode|FourByteNode)NodeId\((.*)\)', nid) if match_wrapped: nid = match_wrapped.group(2).strip() - + # 常见短格式 if re.match(r'^ns=\d+;[is]=', nid): self._parent_node = self._client.get_node(nid) @@ -271,7 +271,7 @@ class Method(Base): def write(self, value: Any) -> bool: """方法节点不支持写入操作""" return True - + def call(self, *args) -> Tuple[Any, bool]: """调用方法,返回(返回值, 是否出错)""" try: @@ -285,7 +285,7 @@ class Method(Base): class Object(Base): def __init__(self, client: Client, name: str, node_id: str): super().__init__(client, name, node_id, NodeType.OBJECT, None) - + def read(self) -> Tuple[Any, bool]: """对象节点不支持直接读取操作""" return None, True @@ -293,7 +293,7 @@ class Object(Base): def write(self, value: Any) -> bool: """对象节点不支持直接写入操作""" return True - + def get_children(self) -> Tuple[List[Node], bool]: """获取子节点列表,返回(子节点列表, 是否出错)""" try: @@ -301,4 +301,4 @@ class Object(Base): return children, False except Exception as e: print(f"获取对象 {self._name} 的子节点失败: {e}") - return [], True \ No newline at end of file + return [], True diff --git a/unilabos/devices/workstation/README.md b/unilabos/devices/workstation/README.md index f96ed7f0..1c38f401 100644 --- a/unilabos/devices/workstation/README.md +++ b/unilabos/devices/workstation/README.md @@ -1,9 +1,5 @@ # 工作站抽象基类物料系统架构说明 -## 设计理念 - -基于用户需求"请你帮我系统思考一下,工作站抽象基类的物料系统基类该如何构建",我们最终确定了一个**PyLabRobot Deck为中心**的简化架构。 - ### 核心原则 1. **PyLabRobot为物料管理核心**:使用PyLabRobot的Deck系统作为物料管理的基础,利用其成熟的Resource体系 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20251229_多订单返回说明.md b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20251229_多订单返回说明.md new file mode 100644 index 00000000..baecac95 --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20251229_多订单返回说明.md @@ -0,0 +1,113 @@ +# Bioyond Cell 工作站 - 多订单返回示例 + +本文档说明了 `create_orders` 函数如何收集并返回所有订单的完成报文。 + +## 问题描述 + +之前的实现只会等待并返回第一个订单的完成报文,如果有多个订单(例如从 Excel 解析出 3 个订单),只能得到第一个订单的推送信息。 + +## 解决方案 + +修改后的 `create_orders` 函数现在会: + +1. **提取所有 orderCode**:从 LIMS 接口返回的 `data` 列表中提取所有订单编号 +2. **逐个等待完成**:遍历所有 orderCode,调用 `wait_for_order_finish` 等待每个订单完成 +3. **收集所有报文**:将每个订单的完成报文存入 `all_reports` 列表 +4. **统一返回**:返回包含所有订单报文的 JSON 格式数据 + +## 返回格式 + +```json +{ + "status": "all_completed", + "total_orders": 3, + "reports": [ + { + "token": "", + "request_time": "2025-12-24T15:32:09.2148671+08:00", + "data": { + "orderId": "3a1e614d-a082-c44a-60be-68647a35e6f1", + "orderCode": "BSO2025122400024", + "orderName": "DP20251224001", + "status": "30", + "workflowStatus": "completed", + "usedMaterials": [...] + } + }, + { + "token": "", + "request_time": "2025-12-24T15:32:09.9999039+08:00", + "data": { + "orderId": "3a1e614d-a0a2-f7a9-9360-610021c9479d", + "orderCode": "BSO2025122400025", + "orderName": "DP20251224002", + "status": "30", + "workflowStatus": "completed", + "usedMaterials": [...] + } + }, + { + "token": "", + "request_time": "2025-12-24T15:34:00.4139986+08:00", + "data": { + "orderId": "3a1e614d-a0cd-81ca-9f7f-2f4e93af01cd", + "orderCode": "BSO2025122400026", + "orderName": "DP20251224003", + "status": "30", + "workflowStatus": "completed", + "usedMaterials": [...] + } + } + ], + "original_response": {...} +} +``` + +## 使用示例 + +```python +# 调用 create_orders +result = workstation.create_orders("20251224.xlsx") + +# 访问返回数据 +print(f"总订单数: {result['total_orders']}") +print(f"状态: {result['status']}") + +# 遍历所有订单的报文 +for i, report in enumerate(result['reports'], 1): + order_data = report.get('data', {}) + print(f"\n订单 {i}:") + print(f" orderCode: {order_data.get('orderCode')}") + print(f" orderName: {order_data.get('orderName')}") + print(f" status: {order_data.get('status')}") + print(f" 使用物料数: {len(order_data.get('usedMaterials', []))}") +``` + +## 控制台输出示例 + +``` +[create_orders] 即将提交订单数量: 3 +[create_orders] 接口返回: {...} +[create_orders] 等待 3 个订单完成: ['BSO2025122400024', 'BSO2025122400025', 'BSO2025122400026'] +[create_orders] 正在等待第 1/3 个订单: BSO2025122400024 +[create_orders] ✓ 订单 BSO2025122400024 完成 +[create_orders] 正在等待第 2/3 个订单: BSO2025122400025 +[create_orders] ✓ 订单 BSO2025122400025 完成 +[create_orders] 正在等待第 3/3 个订单: BSO2025122400026 +[create_orders] ✓ 订单 BSO2025122400026 完成 +[create_orders] 所有订单已完成,共收集 3 个报文 +实验记录本========================create_orders======================== +返回报文数量: 3 +报文 1: orderCode=BSO2025122400024, status=30 +报文 2: orderCode=BSO2025122400025, status=30 +报文 3: orderCode=BSO2025122400026, status=30 +======================== +``` + +## 关键改进 + +1. ✅ **等待所有订单**:不再只等待第一个订单,而是遍历所有 orderCode +2. ✅ **收集完整报文**:每个订单的完整推送报文都被保存在 `reports` 数组中 +3. ✅ **详细日志**:清晰显示正在等待哪个订单,以及完成情况 +4. ✅ **错误处理**:即使某个订单失败,也会记录其状态信息 +5. ✅ **统一格式**:返回的 JSON 格式便于后续处理和分析 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/202601091.xlsx b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/202601091.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9088a16ae42e97f3319e4a0b83882ba690962975 GIT binary patch literal 10149 zcmeHN^;?u{*Bu&%8oDH_*UUY8t+nsHZxsb3WC8#x0384T&;ar=ciqhq001l$0019=j;JSP z3v~iRonEQC+kqVoINWTksk4z0nKA*0@caM0{)<Nq;wEs)bcpJI%HTkFb4u8E}S7i(xC zP(IhUm)mTH5@RP%a+nDrm*6LT^(qpQ3ef%l4dJs2?L^vQ(yKsZrE1Sj?|sh7wA3qv z^OU3e;pP5oyS`jk`V0&!d~?cTUDYuY?0eO4dFu0$f@sHnCsjs4 z#gM}$MIwkMKxGy&noq-!m9=K!M!bEr=hF#KbH%%Z+p6!lRB^2W-@U|Eo+bz(KAR_L zSBMe|r+idT8{mo!aDu*a09!k9 za{TuAFERg%+4$2>FNsl7K;i}k9|qjh47G?Xu+UCeb4qV3ncgCBC*QsnNRIx{czYou z>6BGR>5*3Mn&F;&2C2$%%K>@1;3Y^u2uOoWHfeS$+%`0z;l?`1MDEFU`qNq$?G~T$ zMzVa(nmrQ_D_PGDp;dN<3OlEsdKdXDKK4Q!qNAiu&&&4u7alNk$ zcJvh3J1C@$Rk$PT(V>X7Whi(5*6_-a?Vbp;i7F!4Uzbn|QFfVPT-R|$wB{qXDXCal zq1C(Wh8GTMg_t^|FFhEIQW$7-Lkda87lMeYOm&H{;HW%i*gG44$ZIvVmczK&~$aVmiPB1=dk-x2yhEx6!}^)G&&>I zC%sEw0o6Y1I~==xhL*Cz4Lb;NwSyAAa%lVOTB!`}E2SnJ>4_Q@_3F6TW< z%;bGkX-S#HpHenL9CFtA*d9X_o$^$XX|n!)@H^;WGNR1OM1>^ zY(dd*o6N3+q(n(|m0FEG&X`kbzivosoLPb+XD*#^5G z4)?iS@L{hb;h%M|7KGs;d*E9iilEpIp9~|R8}FA=20TZ>$J_h1TfC2fo#Kf9Q9R}o zTLyvP<|Pw7X-G~U?X%O56Ty!yN4T7MEFH%v29$J`2WvL`t^?KfN&{-@>#0+iAz$x5 zN-dnDz7KGx8b2X@ASa6D4jAA5Ov8HFA$^X1-24NgU$c{&G!ECCp56>Fw=EpA4W1rCHv0Rf{<&6?edPRP1up#c7ytkXJQw~H zen)dK*vXOe_b2Y(93U;$z&4eOAo!4R|A}@h4(jn#X0)XxVQGr6(!#uf$R?;{Hfe4o zG4J+*LQ0keO#Bjew)fn9`C_%}$6Y4joWJwLXCbBRB)ozkX496Dox#zst8ekP+zsr& zmY;TTAGW;m`oXnA-egbc$0%E1pv-!h8o|xTGPWq4=TD|3Z^CzRX*n~*N8~n+YSA+x zn87s+RuXv%u{BDnibJG~oV6_QMyt$hcz$0N6S-@lyBILJ2(25IAX%a|rjI}EBa#m# znwxCoPbeqY^p=&;kB0S#^q9>K)|_a`>jJIPn7so{r`=nXeS0Ah;k-M-_o-a{Z**q+ z?fi(0ppV}j&~P%?EC^tPJ1rescagJ}#KD z{#1`$$KDH>vBGOy^D)q)lPSex)tH-MZpht;*rRHPc)JDmc zy_GNan{c_PMG6vmlrrGUW#;vqQZF;5z7bko#jfV;d7rlAVz@n=5_LSEly75h*xLD_ zq^^8LXG#66cFEoG$&spt&SChPjK$E6SbFhlMp5RsIm0SYasu1a1UaHdBC-k8BJy<- zE-}`jdu(&SIq53Cszsu+0xNUs592}lt)vNPc{^DLpK_sAd9s$~PmHp%PXmLl2O_|W zgcN%S)aiTN9*Zc#lWO@BnY@_U^oeF%hg(;1hE5)PQF_5uCW%$0SMRGB*_>c-*dTvG z+aT&Ea9=Fgl_e1i*0A^c-8BW1g3O7k14`5kXANdr8|l?Ad}qOMwr(;HYK!tX#ohlcEwptTP(RyELdy6pX9Na z(@ydqH;W>AqopViN0LO{U)}1^P}+?Wwi!{Xo1{$S$c2}7AK+k1gQ8Z=;(EAUX{pkC zt^!RyLxS-N8h1e0JMnzSyTe~wWyvOjE%{-wWd@N|Ge_BP(7Z5TP1@@m=gS?iQ2~Huir+dMzl(yCIoJlw`TOJVda$RXU`s9lY9-$Gr9RKluA=Yb zr$tL(qqkY_u81cPQf>OoVRGOgsaogE8e`&*C_R~-h}d$bQiBx@X!+3AYZJzga!f2t zr&XLQeHD-FEsf?$wSu`dOnNY76~Zia^GtT2T2rM>9|P3?lyaO6isE|HqQHs}12n^h zh(0QPt!Qdzb9;MHw$2wH9Y>uxxg0_;cv@-!1zMrCYsmovVX`0agVJ5(;!v1+&k-sh4gYc1@% zIMzn@@bFQ4&Lwq}e@-AL5652iV`~+H+13aMr-RXKC5YNYVTT4f2G9mKBzcnIbI90y zR*PXrOCY9D(^^nDz$;g?J)h}KFi+zto>WGmdu75pn*J#u(;t&Hg@$jW9~1)Wp-96< z?(slqma+R9=}j<@{M>_`PD;{o3Mf9rZQ32TQoOa&=5a^R;&HdJy;hwQ@`OUn!|C+< z^T9!yX8-C2`OD*l(YqhlCZ~Oqwua(&ol%JzKgyqY9S@GazwwWjR0}oqy4t8WdtvBx zwsW{5cHS<4OsT%+oq`t%jYX>IQX3m4>5Wgr?7m{UevpTaqU={6;;coF{r#MTm#R!j z|H~4-il|rnZVuYplBQ4+=5IPzkQm{1_7R;_jB*6%w^|mWgQ%+6wgwUndl8buo9Tnq zA$uFwIH{>L*<);t1>q$ol-pa`kOdMWP(opUnsC}Dt4i64c5Le$8m$p%CVc41U z$Cp*hCV!057U3-nE2dbmUXrpI@zS-8@g{!oz(4uvyra-vXO!L8)YB_H74v$nLW+qrVIcg3PDyJ2=GGy$q zIEYV%$PwQ7FTy}Q=BcbyUg1ro*@qoCf~mU)o^gT);w_-X+{#B2k0nl1-+jM47G8sj zznuf&tAR5=h{Ox$&dGsOUluGJ4xF1(E%+%7C5j5XCERsy@HGlu?#{7JmCzi5zC2_( zZ30sK*kV0x*7rGacGnHdl7Hc8GwGi1NPb8Iw$_Ry{YbBL$Zmub=J99^|AdEMY-H4drA^8FsUFys z@lwXMJ&$hO3WaSGtcOlXQ)1g&CABltW)~cAB(0U&GVRqi{e>eIA$8K zkX*j3YRNGi|M*0sy_u@6W*BK`&C))bxP7?cHT%bcv3Zu5)i>J2LQ$+`#pEkWPtEZR zC}+|~Q>G+@4AAk3V(rg5Wiq&u$aM0TDy@xm`0BNTv2{Bv9VWoSZxu`6GNd z7`sj&#}Df>hHPaGBF%BV9D<9JfkLnpUQtms>x-evAOwQ==qLi*COIcRRBJjHt_CXW zqO;I~KqQRVv1?T2nVQ;R*7`ak=TeV6u-&;3#62L~vhal&1F6{>!-_oVP!wx*9n!PVTPrfzG68J2> z;y)j@dIBS)lvIB;p@Bs!ODyZj=hxaNUeobGXO1vz^OW61@@r#sF0qCBsKs7Ys6(Qo z!_h|TrdKZq+um#=*>g%Ym|0YQ0W^xi@r`}N)tJUDQ4bnU`*^C|wNYW)0u{EzUEb>$j1$jS7dQY4`i zF0m`D_e_Q=0IPZ8_F`rq7F?0EUsOId6`N0vcjh&#oz}uvsN8c_bU|Iy+2l=j9T6_> z-^+B%&f$2?5i(O@9Fp9pTN-I zGk`zb(b37>8tnK-r$hm|zy(?&-ljl5AoRBWSVzNL@C6-x3=t&;acKe%jKB6g(_9NW zZs2Ng4q9?fSF)W1h{=S+ShLDbL{(RQTKhhn>Yirrq>J&EUtLSFpX7#-QbrxZV&*{l zrCzI$x3_@j*=8WCoJn&op}11UlW>;mucr>ug^~c8Vv_O*=KL}}Fe{6!bGAIo+6NU~ z5RzVtQ?aUAjMjO~DsuaKHDB0>5Eq0 zbQ5D!PF*Elf}ucqr68W#1cqKDYD)#KmV|Hc)W&66bf*;M>2KM(~XbGQjwb~$IWl(w? zYsNy@R9&=Ay%GekoO}Xas9Ko2m;WQ!vl3Q;l4C)ts1OeM`M(V3+DA zSEC{va=sJ_J+o1g>$WhGz!*+oz2PegTnXYq&2Yo}8o?G%w^&r$G|o<)9^v3)q4&eU z9<7NZT0dMpDO|Ldi>+j&iJoqPU9Z{24P!)M zP@xp1Oa_#E{5Vh5ds*S5}u*is(z!RyA?# zl{=ZBi7mfNFcO(?tR25==h~dL_zOnE)pYM~N<)l8gOGMu`<0V@#}DV z+miwDc?kALiKbC+yolz+tV5xl_LKCrHxcPa<{)8ImaQa@ znl$(VJKw*vK{`w`2+!INJk;JGB$&zDOIS!h1OSgLaii;GMNov(7lwzLZWeB7>x;MG znU;l=(z2Qir30T82?Hqx86=p;Sk_P_m^0NwTU2`H1SAxY)XeG%9eJD0!*+vb8;H01 zgg5fAZ!XDaifzJMZVL4YaHcO{BQW!fFj&svV;_-{n>7ta!NrJ)^#hJsU0kKMnP$0) zERq&`yo2T7^r-_mcI{XAJ~vl|lo_?z&P(~46&g1!$|)$N&+VJ$Z1{YR!)N-jo_*n& z7Z6BSiZfQbxbL?`OB7Kh&@i_o2t~LGo%>NCjJL}NQ;(Yf4HQ^z#ybu2&@FNdxebWY zdlfOgz#wSd8`uD) z?v6bw25xn@SQwS3u1g>AQmkiG<<5r3dVZPj7sQm}F*S*Ze!u>8{m$YcAM^~Wg{V@y z@S-pMRiH+hZnVI{H+x)mj2|~`(Z-6sfhY%(GFik6j3O+YbNdEj&o$&H29qX|Vp2Bu zXw7u)bXTd)rjXS`Ht+FIl8}uxV_6e$6CjM;k21*|ecN2m9{iJh%s_J*7U3x;0+$ca z&nahQXZLT$!Bg$eD=k*iih!G-?=WD+=u=B-GK+MAVpxqlP8dehzSwZ{92O*&MlQsl zT(z)K8png_lvZ_HQXix~cD~?Lx8Gm>8qy0jD`n*D8oar`IvE@!uM#F3phhzZ(&P@) zr2$IVr=w3rjYAICCd3G|`_wx>Xo7OMwQJ;US7<46c)67Qu)G4RxXA<)Yq{&Z08$V= zLrp`uT2h{^sJtlW6d?9)$|0ttQ1ioJRuUO(b;N#Eew=5{#v-ow8v90?8+%S2y1|3B^`y!Yl?ppahhYn<8lo z)nMcIs>U?AU@uzWYab0o*^r_v3_T6S&q*Wgh&$2FEfrU<9V+3ix%6>z@o+m@OL|>C z(^6!un_AnTkTb9vE^R`p;^=1du7WWQ`G#(v>&qR&Lq31jV6qFG^|h$Ej>o{T(b&1= zg}K3~t;5!9ilY@{4~LIUPj1e?&h&5WZM{6&ocen5#rROV^8W6}S$_DW1@~MjmH=wxg2FDd?)5&*!5cLoYw zTqHqW+h>YbzcFgt?!-WEnY$)AzR<`2DOCz zU`dMQ8mNWOsX;~KHsvm)ULK2?$cQFZQ`0a_TG(@=Ri3t1`9nsru>SK-K!^$h%+sn5 zr8jR5Lx+5{XMjFE!_;O;Xusm1u@yHL3So}xiHJrQsIJt_J|ahZ;vNpWWv!YT?jNzH ziprTBp5(m5b(%Q0L0uWBU>b}Le527U5jV!SE*^y|hi+u0X?0AOc!2A+ksn)tK*$vdal>Au8(kt{zI!;FP6p2iW+Z|gwjPs1(J>MPk#`_>B)xqM3 z3v|!pAjE|=kIE+^5VOZ{^(E(8=zS_is~687ZQkFU9s!XZUZMT-d8WVC^p98naJuQ& z0DnJk@pFJIxR(EP`r=pMuT$s0pr7I0$6sd9zk>fh?D`7|0Hgqa2me2#uV3T*Isy4B z(lF-#eTn~=hx{7l*OuvDQPx5K*g*X?z^}W?zXJR=mw~UvUwh17p}!X1e?dv$y7C+J z*E0Oq2!Aj4{=x$Q8xH}1|0w=`h5y~Ue}-#O{RIEh$bUuuUFLp9ThRW5Hu*o%Q&B*H Ur^jz+doTbUaBUo+`|aKT07o<`HUIzs literal 0 HcmV?d00001 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_JSON配置迁移经验.md b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_JSON配置迁移经验.md new file mode 100644 index 00000000..c48cd439 --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_JSON配置迁移经验.md @@ -0,0 +1,204 @@ +# BioyondCellWorkstation JSON 配置迁移经验总结 + +**日期**: 2026-01-13 +**目的**: 从 `config.py` 迁移到 JSON 配置文件 + +--- + +## 问题背景 + +原系统通过 `config.py` 管理配置,导致: +1. HTTP 服务重复启动(父类 `BioyondWorkstation` 和子类都启动) +2. 配置分散在代码中,不便于管理 +3. 无法通过 JSON 统一配置所有参数 + +--- + +## 解决方案:嵌套配置结构 + +### JSON 结构设计 + +**正确示例** (嵌套在 `config` 中): +```json +{ + "nodes": [{ + "id": "bioyond_cell_workstation", + "config": { + "deck": {...}, + "protocol_type": [], + "bioyond_config": { + "api_host": "http://172.16.11.219:44388", + "api_key": "8A819E5C", + "timeout": 30, + "HTTP_host": "172.16.11.206", + "HTTP_port": 8080, + "debug_mode": false, + "material_type_mappings": {...}, + "warehouse_mapping": {...}, + "solid_liquid_mappings": {...} + } + }, + "data": {} + }] +} +``` + +**关键点**: +- ✅ `bioyond_config` 放在 `config` 中(会传递到 `__init__`) +- ❌ **不要**放在 `data` 中(`data` 是运行时状态,不会传递) + +--- + +## Python 代码适配 + +### 1. 修改 `BioyondCellWorkstation.__init__` 签名 + +**文件**: `bioyond_cell_workstation.py` + +```python +def __init__(self, bioyond_config: dict = None, deck=None, protocol_type=None, **kwargs): + """ + Args: + bioyond_config: 从 JSON 加载的配置字典 + deck: Deck 配置 + protocol_type: 协议类型 + """ + # 验证配置 + if bioyond_config is None: + raise ValueError("需要 bioyond_config 参数") + + # 保存配置 + self.bioyond_config = bioyond_config + + # 设置 HTTP 服务去重标志 + self.bioyond_config["_disable_auto_http_service"] = True + + # 调用父类 + super().__init__(bioyond_config=self.bioyond_config, deck=deck, **kwargs) +``` + +### 2. 替换全局变量引用 + +**修改前**(使用全局变量): +```python +from config import MATERIAL_TYPE_MAPPINGS, WAREHOUSE_MAPPING + +def create_sample(self, board_type, ...): + carrier_type_id = MATERIAL_TYPE_MAPPINGS[board_type][1] + location_id = WAREHOUSE_MAPPING[warehouse_name]["site_uuids"][location_code] +``` + +**修改后**(从配置读取): +```python +def create_sample(self, board_type, ...): + carrier_type_id = self.bioyond_config['material_type_mappings'][board_type][1] + location_id = self.bioyond_config['warehouse_mapping'][warehouse_name]["site_uuids"][location_code] +``` + +### 3. 修复父类配置访问 + +在 `station.py` 中安全访问配置默认值: + +```python +# 修改前(会 KeyError) +self._http_service_config = { + "host": bioyond_config.get("http_service_host", HTTP_SERVICE_CONFIG["http_service_host"]) +} + +# 修改后(安全访问) +self._http_service_config = { + "host": bioyond_config.get("http_service_host", HTTP_SERVICE_CONFIG.get("http_service_host", "")) +} +``` + +--- + +## 常见陷阱 + +### ❌ 错误1:将配置放在 `data` 字段 +```json +"config": {"deck": {...}}, +"data": {"bioyond_config": {...}} // ❌ 不会传递到 __init__ +``` + +### ❌ 错误2:扁平化配置(已废弃方案) +虽然扁平化也能工作,但不推荐: +```json +"config": { + "deck": {...}, + "api_host": "...", // ❌ 不够清晰 + "api_key": "...", + "HTTP_host": "..." +} +``` + +### ❌ 错误3:忘记替换全局变量引用 +代码中直接使用 `MATERIAL_TYPE_MAPPINGS` 等全局变量会导致 `NameError`。 + +--- + +## 云端同步注意事项 + +使用 `--upload_registry` 时,云端配置可能覆盖本地配置: +- 首次上传时确保 JSON 完整 +- 或使用新的 `ak/sk` 避免旧配置干扰 +- 调试时可暂时移除 `--upload_registry` 参数 + +--- + +## 验证清单 + +启动成功后应看到: +``` +✅ 从 JSON 配置加载 bioyond_config 成功 + API Host: http://... + HTTP Service: ... +✅ BioyondCellWorkstation 初始化完成 +Loaded ResourceTreeSet with ... nodes +``` + +运行时不应出现: +- ❌ `NameError: name 'MATERIAL_TYPE_MAPPINGS' is not defined` +- ❌ `KeyError: 'http_service_host'` +- ❌ `bioyond_config 缺少必需参数` + +--- + +## 调试经验 + +1. **添加调试日志**查看参数传递链路: + - `graphio.py`: JSON 加载后的 config 内容 + - `initialize_device.py`: `device_config.res_content.config` 的键 + - `bioyond_cell_workstation.py`: `__init__` 接收到的参数 + +2. **config vs data 区别**: + - `config`: 初始化参数,传递给 `__init__` + - `data`: 运行时状态,不传递给 `__init__` + +3. **参数名必须匹配**: + - JSON 中的键名必须与 `__init__` 参数名完全一致 + +4. **调试代码清理**:完成后记得删除调试日志(🔍 DEBUG 标记) + +--- + +## 修改文件清单 + +| 文件 | 修改内容 | +|------|----------| +| `yibin_electrolyte_config.json` | 创建嵌套 `config.bioyond_config` 结构 | +| `bioyond_cell_workstation.py` | 修改 `__init__` 接收 `bioyond_config`,替换所有全局变量引用 | +| `station.py` | 安全访问 `HTTP_SERVICE_CONFIG` 默认值 | + +--- + +## 参考代码位置 + +- JSON 配置示例: `yibin_electrolyte_config.json` L12-L353 +- `__init__` 实现: `bioyond_cell_workstation.py` L39-L94 +- 全局变量替换示例: `bioyond_cell_workstation.py` L2005, L1863, L1966 +- HTTP 服务配置: `station.py` L629-L634 + +--- + +**总结**: 使用嵌套结构将所有配置放在 `config.bioyond_config` 中,修改 `__init__` 直接接收该参数,并替换所有全局变量引用为 `self.bioyond_config` 访问。 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_配置迁移修改总结.md b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_配置迁移修改总结.md new file mode 100644 index 00000000..1113549e --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/20260113_配置迁移修改总结.md @@ -0,0 +1,312 @@ +# BioyondCell 配置迁移修改总结 + +**日期**: 2026-01-13 +**目标**: 从 `config.py` 完全迁移到 JSON 配置,消除所有全局变量依赖 + +--- + +## 📋 修改概览 + +本次修改完成了 BioyondCell 模块从 Python 配置文件到 JSON 配置的完整迁移,并清理了所有对 `config.py` 全局变量的依赖。 + +### 核心成果 + +- ✅ 完全移除对 `config.py` 的导入依赖 +- ✅ 使用嵌套 JSON 结构 `config.bioyond_config` +- ✅ 修复 7 处 `bioyond_cell_workstation.py` 中的全局变量引用 +- ✅ 修复 3 处其他文件中的全局变量引用 +- ✅ HTTP 服务去重机制完善 +- ✅ 系统成功启动并正常运行 + +--- + +## 🔧 修改文件清单 + +### 1. JSON 配置文件 + +**文件**: `yibin_electrolyte_config.json` + +**修改**: +- 采用嵌套结构将所有配置放在 `config.bioyond_config` 中 +- 包含:`api_host`, `api_key`, `HTTP_host`, `HTTP_port`, `material_type_mappings`, `warehouse_mapping`, `solid_liquid_mappings` 等 + +**示例结构**: +```json +{ + "nodes": [{ + "id": "bioyond_cell_workstation", + "config": { + "deck": {...}, + "protocol_type": [], + "bioyond_config": { + "api_host": "http://172.16.11.219:44388", + "api_key": "8A819E5C", + "HTTP_host": "172.16.11.206", + "HTTP_port": 8080, + "material_type_mappings": {...}, + "warehouse_mapping": {...}, + "solid_liquid_mappings": {...} + } + } + }] +} +``` + +--- + +### 2. bioyond_cell_workstation.py + +**位置**: `unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py` + +#### 修改 A: `__init__` 方法签名 (L39-99) + +**修改前**: +```python +def __init__(self, deck=None, protocol_type=None, **kwargs): + # 从 kwargs 收集配置字段 + self.bioyond_config = {} + for field in bioyond_field_names: + if field in kwargs: + self.bioyond_config[field] = kwargs.pop(field) +``` + +**修改后**: +```python +def __init__(self, bioyond_config: dict = None, deck=None, protocol_type=None, **kwargs): + """直接接收 bioyond_config 参数""" + if bioyond_config is None: + raise ValueError("需要 bioyond_config 参数") + + self.bioyond_config = bioyond_config + + # 设置 HTTP 服务去重标志 + self.bioyond_config["_disable_auto_http_service"] = True + + super().__init__(bioyond_config=self.bioyond_config, deck=deck, **kwargs) +``` + +#### 修改 B: 替换全局变量引用 (7 处) + +| 位置 | 原代码 | 修改后 | +|------|--------|--------| +| L2005 | `MATERIAL_TYPE_MAPPINGS[board_type][1]` | `self.bioyond_config['material_type_mappings'][board_type][1]` | +| L2006 | `MATERIAL_TYPE_MAPPINGS[bottle_type][1]` | `self.bioyond_config['material_type_mappings'][bottle_type][1]` | +| L2009 | `WAREHOUSE_MAPPING` | `self.bioyond_config['warehouse_mapping']` | +| L2013 | `WAREHOUSE_MAPPING[warehouse_name]` | `self.bioyond_config['warehouse_mapping'][warehouse_name]` | +| L2017 | `WAREHOUSE_MAPPING[warehouse_name]["site_uuids"]` | `self.bioyond_config['warehouse_mapping'][warehouse_name]["site_uuids"]` | +| L1863 | `SOLID_LIQUID_MAPPINGS.get(material_name)` | `self.bioyond_config.get('solid_liquid_mappings', {}).get(material_name)` | +| L1966, L1976 | `MATERIAL_TYPE_MAPPINGS.items()` | `self.bioyond_config['material_type_mappings'].items()` | + +--- + +### 3. station.py + +**位置**: `unilabos/devices/workstation/bioyond_studio/station.py` + +#### 修改 A: 删除 config 导入 (L26-28) + +**修改前**: +```python +from unilabos.devices.workstation.bioyond_studio.config import ( + API_CONFIG, WORKFLOW_MAPPINGS, MATERIAL_TYPE_MAPPINGS, WAREHOUSE_MAPPING, HTTP_SERVICE_CONFIG +) +``` + +**修改后**: +```python +# 已删除此导入 +``` + +#### 修改 B: `_create_communication_module` 方法 (L691-702) + +**修改前**: +```python +def _create_communication_module(self, config: Optional[Dict[str, Any]] = None) -> None: + default_config = { + **API_CONFIG, + "workflow_mappings": WORKFLOW_MAPPINGS, + "material_type_mappings": MATERIAL_TYPE_MAPPINGS, + "warehouse_mapping": WAREHOUSE_MAPPING + } + if config: + self.bioyond_config = {**default_config, **config} + else: + self.bioyond_config = default_config +``` + +**修改后**: +```python +def _create_communication_module(self, config: Optional[Dict[str, Any]] = None) -> None: + """创建Bioyond通信模块""" + # 使用传入的 config 参数(来自 bioyond_config) + # 不再依赖全局变量 API_CONFIG 等 + if config: + self.bioyond_config = config + else: + # 如果没有传入配置,创建空配置(用于测试或兼容性) + self.bioyond_config = {} + + self.hardware_interface = BioyondV1RPC(self.bioyond_config) +``` + +#### 修改 C: HTTP 服务配置 (L627-632) + +**修改前**: +```python +self._http_service_config = { + "host": bioyond_config.get("http_service_host", HTTP_SERVICE_CONFIG.get("http_service_host", "")), + "port": bioyond_config.get("http_service_port", HTTP_SERVICE_CONFIG.get("http_service_port", 0)) +} +``` + +**修改后**: +```python +self._http_service_config = { + "host": bioyond_config.get("http_service_host", bioyond_config.get("HTTP_host", "")), + "port": bioyond_config.get("http_service_port", bioyond_config.get("HTTP_port", 0)) +} +``` + +--- + +### 4. bioyond_rpc.py + +**位置**: `unilabos/devices/workstation/bioyond_studio/bioyond_rpc.py` + +#### 修改 A: 删除 config 导入 (L12) + +**修改前**: +```python +from unilabos.devices.workstation.bioyond_studio.config import LOCATION_MAPPING +``` + +**修改后**: +```python +# 已删除此导入 +``` + +#### 修改 B: `material_outbound` 方法 (L278-280) + +**修改前**: +```python +def material_outbound(self, material_id: str, location_name: str, quantity: int) -> dict: + """指定库位出库物料(通过库位名称)""" + location_id = LOCATION_MAPPING.get(location_name, location_name) +``` + +**修改后**: +```python +def material_outbound(self, material_id: str, location_name: str, quantity: int) -> dict: + """指定库位出库物料(通过库位名称)""" + # location_name 参数实际上应该直接是 location_id (UUID) + location_id = location_name +``` + +**说明**: `LOCATION_MAPPING` 在 `config-0113.py` 中本来就是空字典 `{}`,所以直接使用 `location_name` 逻辑等价。 + +--- + +## 🎯 关键设计决策 + +### 1. 嵌套 vs 扁平配置 + +**选择**: 嵌套结构 `config.bioyond_config` + +**理由**: +- ✅ 语义清晰,配置分组明确 +- ✅ 参数传递直观,直接对应 `__init__` 参数 +- ✅ 易于维护,不需要硬编码字段列表 +- ✅ 符合 UniLab 设计模式 + +### 2. HTTP 服务去重 + +**实现**: 子类设置 `_disable_auto_http_service` 标志 + +```python +# bioyond_cell_workstation.py +self.bioyond_config["_disable_auto_http_service"] = True + +# station.py (post_init) +if self.bioyond_config.get("_disable_auto_http_service"): + logger.info("子类已自行管理HTTP服务,跳过自动启动") + return +``` + +### 3. 全局变量替换策略 + +**原则**: 所有配置从 `self.bioyond_config` 获取 + +**模式**: +```python +# 修改前 +from config import MATERIAL_TYPE_MAPPINGS +carrier_type_id = MATERIAL_TYPE_MAPPINGS[board_type][1] + +# 修改后 +carrier_type_id = self.bioyond_config['material_type_mappings'][board_type][1] +``` + +--- + +## ✅ 验证结果 + +### 启动成功日志 +``` +✅ 从 JSON 配置加载 bioyond_config 成功 + API Host: http://172.16.11.219:44388 + HTTP Service: 172.16.11.206:8080 +🔧 已设置 _disable_auto_http_service 标志,防止 HTTP 服务重复启动 +✅ BioyondCellWorkstation 初始化完成 +Loaded ResourceTreeSet with 1 trees, 1785 total nodes +``` + +### 功能验证 +- ✅ 订单创建 (`create_orders_v2`) +- ✅ 质量比计算 +- ✅ 物料转移 (`transfer_3_to_2_to_1`) +- ✅ HTTP 报送接收 (step_finish, sample_finish, order_finish) +- ✅ 等待机制 (`wait_for_order_finish`) +- ✅ 仓库 UUID 映射 +- ✅ 物料类型映射 + +--- + +## 📚 相关文档 + +- **配置迁移经验**: `2026-01-13_JSON配置迁移经验.md` +- **任务清单**: `C:\Users\AndyXie\.gemini\antigravity\brain\...\task.md` +- **实施计划**: `C:\Users\AndyXie\.gemini\antigravity\brain\...\implementation_plan.md` + +--- + +## ⚠️ 注意事项 + +### 其他工作站模块 + +以下文件仍在使用 `config.py` 全局变量(未包含在本次修改中): +- `reaction_station.py` - 使用 `API_CONFIG` +- `experiment.py` - 使用 `API_CONFIG`, `WORKFLOW_MAPPINGS`, `MATERIAL_TYPE_MAPPINGS` +- `dispensing_station.py` - 使用 `API_CONFIG`, `WAREHOUSE_MAPPING` +- `station.py` L176, L177, L529, L530 - 动态导入 `WAREHOUSE_MAPPING` + +**建议**: 后续可以统一迁移这些模块到 JSON 配置。 + +### config.py 文件 + +`config.py` 文件已恢复但**不再被 bioyond_cell 使用**。可以: +- 保留作为其他模块的参考 +- 或者完全删除(如果其他模块也迁移完成) + +--- + +## 🚀 下一步建议 + +1. **清理调试代码** ✅ (已完成) +2. **提交代码到 Git** +3. **迁移其他工作站模块** (可选) +4. **更新文档和启动脚本** + +--- + +**修改完成日期**: 2026-01-13 +**系统状态**: ✅ 稳定运行 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py new file mode 100644 index 00000000..333b7b28 --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py @@ -0,0 +1,2112 @@ +# -*- coding: utf-8 -*- +from cgi import print_arguments +from doctest import debug +from typing import Dict, Any, List, Optional +import requests +from pylabrobot.resources.resource import Resource as ResourcePLR +from pathlib import Path +import pandas as pd +import time +from datetime import datetime, timedelta +import re +import threading +import json +from copy import deepcopy +from urllib3 import response +from unilabos.devices.workstation.bioyond_studio.station import BioyondWorkstation, BioyondResourceSynchronizer +# ⚠️ config.py 已废弃 - 所有配置现在从 JSON 文件加载 +# from unilabos.devices.workstation.bioyond_studio.config import API_CONFIG, ... +from unilabos.devices.workstation.workstation_http_service import WorkstationHTTPService +from unilabos.resources.bioyond.decks import BIOYOND_YB_Deck +from unilabos.utils.log import logger +from unilabos.registry.registry import lab_registry + +def _iso_local_now_ms() -> str: + # 文档要求:到毫秒 + Z,例如 2025-08-15T05:43:22.814Z + dt = datetime.now() + # print(dt) + return dt.strftime("%Y-%m-%dT%H:%M:%S.") + f"{int(dt.microsecond/1000):03d}Z" + + +class BioyondCellWorkstation(BioyondWorkstation): + """ + 集成 Bioyond LIMS 的工作站示例, + 覆盖:入库(2.17/2.18) → 新建实验(2.14) → 启动调度(2.7) → + 运行中推送:物料变更(2.24)、步骤完成(2.21)、订单完成(2.23) → + 查询实验(2.5/2.6) → 3-2-1 转运(2.32) → 样品/废料取出(2.28) + """ + + def __init__(self, bioyond_config: dict = None, deck=None, protocol_type=None, **kwargs): + """ + 初始化 BioyondCellWorkstation + + Args: + bioyond_config: 从 JSON 文件加载的 bioyond 配置字典 + 包含 api_host, api_key, HTTP_host, HTTP_port 等配置 + deck: Deck 配置(可选,会从 JSON 中自动处理) + protocol_type: 协议类型(可选) + **kwargs: 其他参数(如 children 等) + """ + + # ⚠️ 配置验证:确保传入了必需的配置 + if bioyond_config is None: + raise ValueError( + "BioyondCellWorkstation 需要 bioyond_config 参数!\n" + "请在 JSON 配置文件的 config 中添加 bioyond_config 字段,例如:\n" + "\"config\": {\n" + " \"bioyond_config\": {\n" + " \"api_host\": \"http://...\",\n" + " \"api_key\": \"...\",\n" + " ...\n" + " }\n" + "}" + ) + + # 验证 bioyond_config 的类型 + if not isinstance(bioyond_config, dict): + raise ValueError( + f"bioyond_config 必须是字典类型,实际类型: {type(bioyond_config).__name__}" + ) + + # 保存配置 + self.bioyond_config = bioyond_config + + # 验证必需的配置参数 + required_keys = ['api_host', 'api_key', 'HTTP_host', 'HTTP_port', + 'material_type_mappings', 'warehouse_mapping'] + missing_keys = [key for key in required_keys if key not in self.bioyond_config] + if missing_keys: + raise ValueError( + f"bioyond_config 缺少必需参数: {', '.join(missing_keys)}\n" + f"请检查 JSON 配置文件中的 bioyond_config 字段" + ) + + logger.info("✅ 从 JSON 配置加载 bioyond_config 成功") + logger.info(f" API Host: {self.bioyond_config.get('api_host')}") + logger.info(f" HTTP Service: {self.bioyond_config.get('HTTP_host')}:{self.bioyond_config.get('HTTP_port')}") + + # 设置调试模式 + self.debug_mode = self.bioyond_config.get("debug_mode", False) + self.http_service_started = self.debug_mode + self._device_id = "bioyond_cell_workstation" # 默认值,后续会从_ros_node获取 + + # ⚠️ 关键:设置标志位,告诉父类不要在 post_init 中启动 HTTP 服务 + # 因为子类会在这里自己启动 HTTP 服务 + self.bioyond_config["_disable_auto_http_service"] = True + logger.info("🔧 已设置 _disable_auto_http_service 标志,防止 HTTP 服务重复启动") + + # 调用父类初始化(传入完整的 bioyond_config) + super().__init__(bioyond_config=self.bioyond_config, deck=deck, **kwargs) + + # 更新奔耀端的报送 IP 地址 + self.update_push_ip() + logger.info("已更新奔耀端推送 IP 地址") + + # 启动 HTTP 服务线程(子类自己管理) + t = threading.Thread(target=self._start_http_service, daemon=True, name="unilab_http") + t.start() + logger.info("HTTP 服务线程已启动") + + # 初始化订单报送事件 + self.order_finish_event = threading.Event() + self.last_order_status = None + self.last_order_code = None + + logger.info(f"✅ BioyondCellWorkstation 初始化完成 (debug_mode={self.debug_mode})") + + @property + def device_id(self): + """获取设备ID,优先从_ros_node获取,否则返回默认值""" + if hasattr(self, '_ros_node') and self._ros_node is not None: + return getattr(self._ros_node, 'device_id', self._device_id) + return self._device_id + + def _start_http_service(self): + """启动 HTTP 服务""" + host = self.bioyond_config.get("HTTP_host", "") + port = self.bioyond_config.get("HTTP_port", None) + try: + self.service = WorkstationHTTPService(self, host=host, port=port) + self.service.start() + self.http_service_started = True + logger.info(f"WorkstationHTTPService 成功启动: {host}:{port}") + while True: + time.sleep(1) #一直挂着,直到进程退出 + except Exception as e: + self.http_service_started = False + logger.error(f"启动 WorkstationHTTPService 失败: {e}", exc_info=True) + + + # http报送服务,返回数据部分 + def process_step_finish_report(self, report_request): + stepId = report_request.data.get("stepId") + logger.info(f"步骤完成: stepId: {stepId}, stepName:{report_request.data.get('stepName')}") + return report_request.data.get('executionStatus') + + def process_sample_finish_report(self, report_request): + logger.info(f"通量完成: {report_request.data.get('sampleId')}") + return {"status": "received"} + + def process_order_finish_report(self, report_request, used_materials=None): + order_code = report_request.data.get("orderCode") + status = report_request.data.get("status") + + # 🔍 详细调试日志 + logger.info(f"[DEBUG] ========== 收到 order_finish 报送 ==========") + logger.info(f"[DEBUG] 报送的 orderCode: '{order_code}' (type: {type(order_code).__name__})") + logger.info(f"[DEBUG] 当前等待的 last_order_code: '{self.last_order_code}' (type: {type(self.last_order_code).__name__})") + logger.info(f"[DEBUG] 报送状态: {status}") + logger.info(f"[DEBUG] orderCode 是否匹配: {self.last_order_code == order_code}") + logger.info(f"[DEBUG] Event 当前状态 (触发前): is_set={self.order_finish_event.is_set()}") + logger.info(f"report_request: {report_request}") + logger.info(f"任务完成: {order_code}, status={status}") + + # 保存完整报文 + self.last_order_report = report_request.data + + # 如果是当前等待的订单,触发事件 + if self.last_order_code == order_code: + logger.info(f"[DEBUG] ✅ orderCode 匹配!触发 order_finish_event") + self.order_finish_event.set() + logger.info(f"[DEBUG] Event 状态 (触发后): is_set={self.order_finish_event.is_set()}") + else: + logger.warning(f"[DEBUG] ❌ orderCode 不匹配,不触发 event") + logger.warning(f"[DEBUG] 期望: '{self.last_order_code}'") + logger.warning(f"[DEBUG] 实际: '{order_code}'") + + logger.info(f"[DEBUG] ========================================") + return {"status": "received"} + + def wait_for_order_finish(self, order_code: str, timeout: int = 36000) -> Dict[str, Any]: + """ + 等待指定 orderCode 的 /report/order_finish 报送。 + Args: + order_code: 任务编号 + timeout: 超时时间(秒) + Returns: + 完整的报送数据 + 状态判断结果 + """ + if not order_code: + logger.error("wait_for_order_finish() 被调用,但 order_code 为空!") + return {"status": "error", "message": "empty order_code"} + + self.last_order_code = order_code + self.last_order_report = None + self.order_finish_event.clear() + + logger.info(f"等待任务完成报送: orderCode={order_code} (timeout={timeout}s)") + + if not self.order_finish_event.wait(timeout=timeout): + logger.error(f"等待任务超时: orderCode={order_code}") + return {"status": "timeout", "orderCode": order_code} + + # 报送数据匹配验证 + report = self.last_order_report or {} + report_code = report.get("orderCode") + status = str(report.get("status", "")) + + if report_code != order_code: + logger.warning(f"收到的报送 orderCode 不匹配: {report_code} ≠ {order_code}") + return {"status": "mismatch", "report": report} + + if status == "30": + logger.info(f"任务成功完成 (orderCode={order_code})") + return {"status": "success", "report": report} + elif status == "-11": + logger.error(f"任务异常停止 (orderCode={order_code})") + return {"status": "abnormal_stop", "report": report} + elif status == "-12": + logger.warning(f"任务人工停止 (orderCode={order_code})") + return {" status": "manual_stop", "report": report} + else: + logger.warning(f"任务未知状态 ({status}) (orderCode={order_code})") + return {"status": f"unknown_{status}", "report": report} + + def wait_for_order_finish_polling(self, order_code: str, timeout: int = 36000, poll_interval: float = 0.5) -> Dict[str, Any]: + """ + 等待指定 orderCode 的 /report/order_finish 报送(非阻塞轮询版本)。 + + 与 wait_for_order_finish 的区别: + - 使用轮询而非阻塞等待,每隔 poll_interval 秒检查一次 + - 允许 ROS2 在等待期间处理 feedback 消息 + - 适用于长时间运行的 ROS2 Action + + Args: + order_code: 任务编号 + timeout: 超时时间(秒) + poll_interval: 轮询间隔(秒),默认 0.5 秒 + Returns: + 完整的报送数据 + 状态判断结果 + """ + if not order_code: + logger.error("wait_for_order_finish_polling() 被调用,但 order_code 为空!") + return {"status": "error", "message": "empty order_code"} + + self.last_order_code = order_code + self.last_order_report = None + self.order_finish_event.clear() + + logger.info(f"[轮询模式] 等待任务完成报送: orderCode={order_code} (timeout={timeout}s, poll_interval={poll_interval}s)") + logger.info(f"[轮询模式] [DEBUG] last_order_code 已设置为: '{self.last_order_code}'") + logger.info(f"[轮询模式] [DEBUG] Event 初始状态: is_set={self.order_finish_event.is_set()}") + + start_time = time.time() + poll_count = 0 + while not self.order_finish_event.is_set(): + poll_count += 1 + elapsed = time.time() - start_time + + # 每 10 次轮询(约 5 秒)输出一次状态 + if poll_count % 10 == 0: + logger.info(f"[轮询模式] [DEBUG] 轮询中... 已等待 {elapsed:.1f}s (第{poll_count}次检查)") + logger.info(f"[轮询模式] [DEBUG] Event.is_set() = {self.order_finish_event.is_set()}") + + # 检查是否超时 + if elapsed > timeout: + logger.error(f"[轮询模式] 等待任务超时: orderCode={order_code}") + logger.error(f"[轮询模式] [DEBUG] 总共轮询了 {poll_count} 次,耗时 {elapsed:.1f}s") + return {"status": "timeout", "orderCode": order_code} + + # 短暂 sleep,让出控制权给 ROS2 处理 feedback + time.sleep(poll_interval) + + # 事件已触发,获取报送数据 + logger.info(f"[轮询模式] [DEBUG] ✅ Event 已触发!共轮询 {poll_count} 次") + report = self.last_order_report or {} + report_code = report.get("orderCode") + status = str(report.get("status", "")) + + logger.info(f"[轮询模式] [DEBUG] 报送数据: orderCode='{report_code}', status={status}") + + # 报送数据匹配验证 + if report_code != order_code: + logger.warning(f"[轮询模式] 收到的报送 orderCode 不匹配: {report_code} ≠ {order_code}") + return {"status": "mismatch", "report": report} + + # 状态判断 + if status == "30": + logger.info(f"[轮询模式] 任务成功完成 (orderCode={order_code})") + return {"status": "success", "report": report} + elif status == "-11": + logger.error(f"[轮询模式] 任务异常停止 (orderCode={order_code})") + return {"status": "abnormal_stop", "report": report} + elif status == "-12": + logger.warning(f"[轮询模式] 任务人工停止 (orderCode={order_code})") + return {"status": "manual_stop", "report": report} + else: + logger.warning(f"[轮询模式] 任务未知状态 ({status}) (orderCode={order_code})") + return {"status": f"unknown_{status}", "report": report} + + + def get_material_info(self, material_id: str) -> Dict[str, Any]: + """查询物料详细信息(物料详情接口) + + Args: + material_id: 物料 ID (GUID) + + Returns: + 物料详情,包含 name, typeName, locations 等 + """ + result = self._post_lims("/api/lims/storage/material-info", material_id) + return result.get("data", {}) + + def _process_order_reagents(self, report: Dict[str, Any]) -> Dict[str, Any]: + """处理订单完成报文中的试剂数据,计算质量比 + + Args: + report: 订单完成推送的 report 数据 + + Returns: + { + "real_mass_ratio": {"试剂A": 0.6, "试剂B": 0.4}, + "target_mass_ratio": {"试剂A": 0.6, "试剂B": 0.4}, + "reagent_details": [...] # 详细数据 + } + """ + used_materials = report.get("usedMaterials", []) + + # 1. 筛选试剂(typemode="2",注意是小写且是字符串) + reagents = [m for m in used_materials if str(m.get("typemode")) == "2"] + + if not reagents: + logger.warning("订单完成报文中没有试剂(typeMode=2)") + return { + "real_mass_ratio": {}, + "target_mass_ratio": {}, + "reagent_details": [] + } + + # 2. 查询试剂名称 + reagent_data = [] + for reagent in reagents: + material_id = reagent.get("materialId") + if not material_id: + continue + + try: + info = self.get_material_info(material_id) + name = info.get("name", f"Unknown_{material_id[:8]}") + real_qty = float(reagent.get("realQuantity", 0.0)) + used_qty = float(reagent.get("usedQuantity", 0.0)) + + reagent_data.append({ + "name": name, + "material_id": material_id, + "real_quantity": real_qty, + "used_quantity": used_qty + }) + logger.info(f"试剂: {name}, 目标={used_qty}g, 实际={real_qty}g") + except Exception as e: + logger.error(f"查询物料信息失败: {material_id}, {e}") + continue + + if not reagent_data: + return { + "real_mass_ratio": {}, + "target_mass_ratio": {}, + "reagent_details": [] + } + + # 3. 计算质量比 + def calculate_mass_ratio(items: List[Dict], key: str) -> Dict[str, float]: + total = sum(item[key] for item in items) + if total == 0: + logger.warning(f"总质量为0,无法计算{key}质量比") + return {item["name"]: 0.0 for item in items} + return {item["name"]: round(item[key] / total, 4) for item in items} + + real_mass_ratio = calculate_mass_ratio(reagent_data, "real_quantity") + target_mass_ratio = calculate_mass_ratio(reagent_data, "used_quantity") + + logger.info(f"真实质量比: {real_mass_ratio}") + logger.info(f"目标质量比: {target_mass_ratio}") + + return { + "real_mass_ratio": real_mass_ratio, + "target_mass_ratio": target_mass_ratio, + "reagent_details": reagent_data + } + + + # -------------------- 基础HTTP封装 -------------------- + def _url(self, path: str) -> str: + return f"{self.bioyond_config['api_host'].rstrip('/')}/{path.lstrip('/')}" + + def _post_lims(self, path: str, data: Optional[Any] = None) -> Dict[str, Any]: + """LIMS API:大多数接口用 {apiKey/requestTime,data} 包装""" + payload = { + "apiKey": self.bioyond_config["api_key"], + "requestTime": _iso_local_now_ms() + } + if data is not None: + payload["data"] = data + + if self.debug_mode: + # 模拟返回,不发真实请求 + logger.info(f"[DEBUG] POST {path} with payload={payload}") + + return {"debug": True, "url": self._url(path), "payload": payload, "status": "ok"} + + try: + logger.info(json.dumps(payload, ensure_ascii=False)) + response = requests.post( + self._url(path), + json=payload, + timeout=self.bioyond_config.get("timeout", 30), + headers={"Content-Type": "application/json"} + ) # 拼接网址+post bioyond接口 + response.raise_for_status() + return response.json() + except Exception as e: + logger.info(f"{self.bioyond_config['api_host'].rstrip('/')}/{path.lstrip('/')}") + logger.error(f"POST {path} 失败: {e}") + return {"error": str(e)} + + def _put_lims(self, path: str, data: Optional[Any] = None) -> Dict[str, Any]: + """LIMS API:PUT {apiKey/requestTime,data} 包装""" + payload = { + "apiKey": self.bioyond_config["api_key"], + "requestTime": _iso_local_now_ms() + } + if data is not None: + payload["data"] = data + + if self.debug_mode: + logger.info(f"[DEBUG] PUT {path} with payload={payload}") + return {"debug_mode": True, "url": self._url(path), "payload": payload, "status": "ok"} + + try: + response = requests.put( + self._url(path), + json=payload, + timeout=self.bioyond_config.get("timeout", 30), + headers={"Content-Type": "application/json"} + ) + response.raise_for_status() + return response.json() + except Exception as e: + logger.info(f"{self.bioyond_config['api_host'].rstrip('/')}/{path.lstrip('/')}") + logger.error(f"PUT {path} 失败: {e}") + return {"error": str(e)} + + # -------------------- 3.36 更新推送 IP 地址 -------------------- + def update_push_ip(self, ip: Optional[str] = None, port: Optional[int] = None) -> Dict[str, Any]: + """ + 3.36 更新推送 IP 地址接口(PUT) + URL: /api/lims/order/ip-config + 请求体:{ apiKey, requestTime, data: { ip, port } } + """ + target_ip = ip or self.bioyond_config.get("HTTP_host", "") + target_port = int(port or self.bioyond_config.get("HTTP_port", 0)) + data = {"ip": target_ip, "port": target_port} + + # 固定接口路径,不做其他路径兼容 + path = "/api/lims/order/ip-config" + return self._put_lims(path, data) + + # -------------------- 单点接口封装 -------------------- + # 2.17 入库物料(单个) + def storage_inbound(self, material_id: str, location_id: str) -> Dict[str, Any]: + return self._post_lims("/api/lims/storage/inbound", { + "materialId": material_id, + "locationId": location_id + }) + + # 2.18 批量入库(多个) + def storage_batch_inbound(self, items: List[Dict[str, str]]) -> Dict[str, Any]: + """ + items = [{"materialId": "...", "locationId": "..."}, ...] + """ + return self._post_lims("/api/lims/storage/batch-inbound", items) + + + def auto_feeding4to3( + self, + # ★ 修改点:默认模板路径 + xlsx_path: Optional[str] = "D:\\UniLab\\Uni-Lab-OS\\unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\material_template.xlsx", + # ---------------- WH4 - 加样头面 (Z=1, 12个点位) ---------------- + WH4_x1_y1_z1_1_materialName: str = "", WH4_x1_y1_z1_1_quantity: float = 0.0, + WH4_x2_y1_z1_2_materialName: str = "", WH4_x2_y1_z1_2_quantity: float = 0.0, + WH4_x3_y1_z1_3_materialName: str = "", WH4_x3_y1_z1_3_quantity: float = 0.0, + WH4_x4_y1_z1_4_materialName: str = "", WH4_x4_y1_z1_4_quantity: float = 0.0, + WH4_x5_y1_z1_5_materialName: str = "", WH4_x5_y1_z1_5_quantity: float = 0.0, + WH4_x1_y2_z1_6_materialName: str = "", WH4_x1_y2_z1_6_quantity: float = 0.0, + WH4_x2_y2_z1_7_materialName: str = "", WH4_x2_y2_z1_7_quantity: float = 0.0, + WH4_x3_y2_z1_8_materialName: str = "", WH4_x3_y2_z1_8_quantity: float = 0.0, + WH4_x4_y2_z1_9_materialName: str = "", WH4_x4_y2_z1_9_quantity: float = 0.0, + WH4_x5_y2_z1_10_materialName: str = "", WH4_x5_y2_z1_10_quantity: float = 0.0, + WH4_x1_y3_z1_11_materialName: str = "", WH4_x1_y3_z1_11_quantity: float = 0.0, + WH4_x2_y3_z1_12_materialName: str = "", WH4_x2_y3_z1_12_quantity: float = 0.0, + + # ---------------- WH4 - 原液瓶面 (Z=2, 9个点位) ---------------- + WH4_x1_y1_z2_1_materialName: str = "", WH4_x1_y1_z2_1_quantity: float = 0.0, WH4_x1_y1_z2_1_materialType: str = "", WH4_x1_y1_z2_1_targetWH: str = "", + WH4_x2_y1_z2_2_materialName: str = "", WH4_x2_y1_z2_2_quantity: float = 0.0, WH4_x2_y1_z2_2_materialType: str = "", WH4_x2_y1_z2_2_targetWH: str = "", + WH4_x3_y1_z2_3_materialName: str = "", WH4_x3_y1_z2_3_quantity: float = 0.0, WH4_x3_y1_z2_3_materialType: str = "", WH4_x3_y1_z2_3_targetWH: str = "", + WH4_x1_y2_z2_4_materialName: str = "", WH4_x1_y2_z2_4_quantity: float = 0.0, WH4_x1_y2_z2_4_materialType: str = "", WH4_x1_y2_z2_4_targetWH: str = "", + WH4_x2_y2_z2_5_materialName: str = "", WH4_x2_y2_z2_5_quantity: float = 0.0, WH4_x2_y2_z2_5_materialType: str = "", WH4_x2_y2_z2_5_targetWH: str = "", + WH4_x3_y2_z2_6_materialName: str = "", WH4_x3_y2_z2_6_quantity: float = 0.0, WH4_x3_y2_z2_6_materialType: str = "", WH4_x3_y2_z2_6_targetWH: str = "", + WH4_x1_y3_z2_7_materialName: str = "", WH4_x1_y3_z2_7_quantity: float = 0.0, WH4_x1_y3_z2_7_materialType: str = "", WH4_x1_y3_z2_7_targetWH: str = "", + WH4_x2_y3_z2_8_materialName: str = "", WH4_x2_y3_z2_8_quantity: float = 0.0, WH4_x2_y3_z2_8_materialType: str = "", WH4_x2_y3_z2_8_targetWH: str = "", + WH4_x3_y3_z2_9_materialName: str = "", WH4_x3_y3_z2_9_quantity: float = 0.0, WH4_x3_y3_z2_9_materialType: str = "", WH4_x3_y3_z2_9_targetWH: str = "", + + # ---------------- WH3 - 人工堆栈 (Z=3, 15个点位) ---------------- + WH3_x1_y1_z3_1_materialType: str = "", WH3_x1_y1_z3_1_materialId: str = "", WH3_x1_y1_z3_1_quantity: float = 0, + WH3_x2_y1_z3_2_materialType: str = "", WH3_x2_y1_z3_2_materialId: str = "", WH3_x2_y1_z3_2_quantity: float = 0, + WH3_x3_y1_z3_3_materialType: str = "", WH3_x3_y1_z3_3_materialId: str = "", WH3_x3_y1_z3_3_quantity: float = 0, + WH3_x1_y2_z3_4_materialType: str = "", WH3_x1_y2_z3_4_materialId: str = "", WH3_x1_y2_z3_4_quantity: float = 0, + WH3_x2_y2_z3_5_materialType: str = "", WH3_x2_y2_z3_5_materialId: str = "", WH3_x2_y2_z3_5_quantity: float = 0, + WH3_x3_y2_z3_6_materialType: str = "", WH3_x3_y2_z3_6_materialId: str = "", WH3_x3_y2_z3_6_quantity: float = 0, + WH3_x1_y3_z3_7_materialType: str = "", WH3_x1_y3_z3_7_materialId: str = "", WH3_x1_y3_z3_7_quantity: float = 0, + WH3_x2_y3_z3_8_materialType: str = "", WH3_x2_y3_z3_8_materialId: str = "", WH3_x2_y3_z3_8_quantity: float = 0, + WH3_x3_y3_z3_9_materialType: str = "", WH3_x3_y3_z3_9_materialId: str = "", WH3_x3_y3_z3_9_quantity: float = 0, + WH3_x1_y4_z3_10_materialType: str = "", WH3_x1_y4_z3_10_materialId: str = "", WH3_x1_y4_z3_10_quantity: float = 0, + WH3_x2_y4_z3_11_materialType: str = "", WH3_x2_y4_z3_11_materialId: str = "", WH3_x2_y4_z3_11_quantity: float = 0, + WH3_x3_y4_z3_12_materialType: str = "", WH3_x3_y4_z3_12_materialId: str = "", WH3_x3_y4_z3_12_quantity: float = 0, + WH3_x1_y5_z3_13_materialType: str = "", WH3_x1_y5_z3_13_materialId: str = "", WH3_x1_y5_z3_13_quantity: float = 0, + WH3_x2_y5_z3_14_materialType: str = "", WH3_x2_y5_z3_14_materialId: str = "", WH3_x2_y5_z3_14_quantity: float = 0, + WH3_x3_y5_z3_15_materialType: str = "", WH3_x3_y5_z3_15_materialId: str = "", WH3_x3_y5_z3_15_quantity: float = 0, + ): + """ + 自动化上料(支持两种模式) + - Excel 路径存在 → 从 Excel 模板解析 + - Excel 路径不存在 → 使用手动参数 + """ + items: List[Dict[str, Any]] = [] + + # ---------- 模式 1: Excel 导入 ---------- + if xlsx_path: + path = Path(__file__).parent / Path(xlsx_path) + if path.exists(): # ★ 修改点:路径存在才加载 + try: + df = pd.read_excel(path, sheet_name=0, header=None, engine="openpyxl") + except Exception as e: + raise RuntimeError(f"读取 Excel 失败:{e}") + + # 四号手套箱加样头面 + for _, row in df.iloc[1:13, 2:7].iterrows(): + if pd.notna(row[5]): + items.append({ + "sourceWHName": "四号手套箱堆栈", + "posX": int(row[2]), "posY": int(row[3]), "posZ": int(row[4]), + "materialName": str(row[5]).strip(), + "quantity": float(row[6]) if pd.notna(row[6]) else 0.0, + }) + # 四号手套箱原液瓶面 + for _, row in df.iloc[14:23, 2:9].iterrows(): + if pd.notna(row[5]): + items.append({ + "sourceWHName": "四号手套箱堆栈", + "posX": int(row[2]), "posY": int(row[3]), "posZ": int(row[4]), + "materialName": str(row[5]).strip(), + "quantity": float(row[6]) if pd.notna(row[6]) else 0.0, + "materialType": str(row[7]).strip() if pd.notna(row[7]) else "", + "targetWH": str(row[8]).strip() if pd.notna(row[8]) else "", + }) + # 三号手套箱人工堆栈 + for _, row in df.iloc[25:40, 2:7].iterrows(): + if pd.notna(row[5]) or pd.notna(row[6]): + items.append({ + "sourceWHName": "三号手套箱人工堆栈", + "posX": int(row[2]), "posY": int(row[3]), "posZ": int(row[4]), + "materialType": str(row[5]).strip() if pd.notna(row[5]) else "", + "materialId": str(row[6]).strip() if pd.notna(row[6]) else "", + "quantity": 1 + }) + else: + logger.warning(f"未找到 Excel 文件 {xlsx_path},自动切换到手动参数模式。") + + # ---------- 模式 2: 手动填写 ---------- + if not items: + params = locals() + for name, value in params.items(): + if name.startswith("四号手套箱堆栈") and "materialName" in name and value: + idx = name.split("_") + items.append({ + "sourceWHName": "四号手套箱堆栈", + "posX": int(idx[1][1:]), "posY": int(idx[2][1:]), "posZ": int(idx[3][1:]), + "materialName": value, + "quantity": float(params.get(name.replace("materialName", "quantity"), 0.0)) + }) + elif name.startswith("四号手套箱堆栈") and "materialType" in name and (value or params.get(name.replace("materialType", "materialName"), "")): + idx = name.split("_") + items.append({ + "sourceWHName": "四号手套箱堆栈", + "posX": int(idx[1][1:]), "posY": int(idx[2][1:]), "posZ": int(idx[3][1:]), + "materialName": params.get(name.replace("materialType", "materialName"), ""), + "quantity": float(params.get(name.replace("materialType", "quantity"), 0.0)), + "materialType": value, + "targetWH": params.get(name.replace("materialType", "targetWH"), ""), + }) + elif name.startswith("三号手套箱人工堆栈") and "materialType" in name and (value or params.get(name.replace("materialType", "materialId"), "")): + idx = name.split("_") + items.append({ + "sourceWHName": "三号手套箱人工堆栈", + "posX": int(idx[1][1:]), "posY": int(idx[2][1:]), "posZ": int(idx[3][1:]), + "materialType": value, + "materialId": params.get(name.replace("materialType", "materialId"), ""), + "quantity": int(params.get(name.replace("materialType", "quantity"), 1)), + }) + + if not items: + logger.warning("没有有效的上料条目,已跳过提交。") + return {"code": 0, "message": "no valid items", "data": []} + logger.info(items) + response = self._post_lims("/api/lims/order/auto-feeding4to3", items) + + # 等待任务报送成功 + order_code = response.get("data", {}).get("orderCode") + if not order_code: + logger.error("上料任务未返回有效 orderCode!") + return response + # 等待完成报送 + result = self.wait_for_order_finish(order_code) + print("\n" + "="*60) + print("实验记录本结果auto_feeding4to3") + print("="*60) + print(json.dumps(result, indent=2, ensure_ascii=False)) + print("="*60 + "\n") + return result + + def auto_batch_outbound_from_xlsx(self, xlsx_path: str) -> Dict[str, Any]: + """ + 3.31 自动化下料(Excel -> JSON -> POST /api/lims/storage/auto-batch-out-bound) + """ + path = Path(xlsx_path) + if not path.exists(): + raise FileNotFoundError(f"未找到 Excel 文件:{path}") + + try: + df = pd.read_excel(path, sheet_name=0, engine="openpyxl") + except Exception as e: + raise RuntimeError(f"读取 Excel 失败:{e}") + + def pick(names: List[str]) -> Optional[str]: + for n in names: + if n in df.columns: + return n + return None + + c_loc = pick(["locationId", "库位ID", "库位Id", "库位id"]) + c_wh = pick(["warehouseId", "仓库ID", "仓库Id", "仓库id"]) + c_qty = pick(["数量", "quantity"]) + c_x = pick(["x", "X", "posX", "坐标X"]) + c_y = pick(["y", "Y", "posY", "坐标Y"]) + c_z = pick(["z", "Z", "posZ", "坐标Z"]) + + required = [c_loc, c_wh, c_qty, c_x, c_y, c_z] + if any(c is None for c in required): + raise KeyError("Excel 缺少必要列:locationId/warehouseId/数量/x/y/z(支持多别名,至少要能匹配到)。") + + def as_int(v, d=0): + try: + if pd.isna(v): return d + return int(v) + except Exception: + try: + return int(float(v)) + except Exception: + return d + + def as_float(v, d=0.0): + try: + if pd.isna(v): return d + return float(v) + except Exception: + return d + + def as_str(v, d=""): + if v is None or (isinstance(v, float) and pd.isna(v)): return d + s = str(v).strip() + return s if s else d + + items: List[Dict[str, Any]] = [] + for _, row in df.iterrows(): + items.append({ + "locationId": as_str(row[c_loc]), + "warehouseId": as_str(row[c_wh]), + "quantity": as_float(row[c_qty]), + "x": as_int(row[c_x]), + "y": as_int(row[c_y]), + "z": as_int(row[c_z]), + }) + + response = self._post_lims("/api/lims/storage/auto-batch-out-bound", items) + self.wait_for_response_orders(response, "auto_batch_outbound_from_xlsx") + return response + + # 2.14 新建实验 + def create_orders(self, xlsx_path: str) -> Dict[str, Any]: + """ + 从 Excel 解析并创建实验(2.14) + 约定: + - batchId = Excel 文件名(不含扩展名) + - 物料列:所有以 "(g)" 结尾(不再读取“总质量(g)”列) + - totalMass 自动计算为所有物料质量之和 + - createTime 缺失或为空时自动填充为当前日期(YYYY/M/D) + """ + default_path = Path("D:\\UniLab\\Uni-Lab-OS\\unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\2025122301.xlsx") + path = Path(xlsx_path) if xlsx_path else default_path + print(f"[create_orders] 使用 Excel 路径: {path}") + if path != default_path: + print("[create_orders] 来源: 调用方传入自定义路径") + else: + print("[create_orders] 来源: 使用默认模板路径") + + if not path.exists(): + print(f"[create_orders] ⚠️ Excel 文件不存在: {path}") + raise FileNotFoundError(f"未找到 Excel 文件:{path}") + + try: + df = pd.read_excel(path, sheet_name=0, engine="openpyxl") + except Exception as e: + raise RuntimeError(f"读取 Excel 失败:{e}") + print(f"[create_orders] Excel 读取成功,行数: {len(df)}, 列: {list(df.columns)}") + + # 列名容错:返回可选列名,找不到则返回 None + def _pick(col_names: List[str]) -> Optional[str]: + for c in col_names: + if c in df.columns: + return c + return None + + col_order_name = _pick(["配方ID", "orderName", "订单编号"]) + col_create_time = _pick(["创建日期", "createTime"]) + col_bottle_type = _pick(["配液瓶类型", "bottleType"]) + col_mix_time = _pick(["混匀时间(s)", "mixTime"]) + col_load = _pick(["扣电组装分液体积", "loadSheddingInfo"]) + col_pouch = _pick(["软包组装分液体积", "pouchCellInfo"]) + col_cond = _pick(["电导测试分液体积", "conductivityInfo"]) + col_cond_cnt = _pick(["电导测试分液瓶数", "conductivityBottleCount"]) + print("[create_orders] 列匹配结果:", { + "order_name": col_order_name, + "create_time": col_create_time, + "bottle_type": col_bottle_type, + "mix_time": col_mix_time, + "load": col_load, + "pouch": col_pouch, + "conductivity": col_cond, + "conductivity_bottle_count": col_cond_cnt, + }) + + # 物料列:所有以 (g) 结尾 + material_cols = [c for c in df.columns if isinstance(c, str) and c.endswith("(g)")] + print(f"[create_orders] 识别到的物料列: {material_cols}") + if not material_cols: + raise KeyError("未发现任何以“(g)”结尾的物料列,请检查表头。") + + batch_id = path.stem + + def _to_ymd_slash(v) -> str: + # 统一为 "YYYY/M/D";为空或解析失败则用当前日期 + if v is None or (isinstance(v, float) and pd.isna(v)) or str(v).strip() == "": + ts = datetime.now() + else: + try: + ts = pd.to_datetime(v) + except Exception: + ts = datetime.now() + return f"{ts.year}/{ts.month}/{ts.day}" + + def _as_int(val, default=0) -> int: + try: + if pd.isna(val): + return default + return int(val) + except Exception: + return default + + def _as_float(val, default=0.0) -> float: + try: + if pd.isna(val): + return default + return float(val) + except Exception: + return default + + def _as_str(val, default="") -> str: + if val is None or (isinstance(val, float) and pd.isna(val)): + return default + s = str(val).strip() + return s if s else default + + orders: List[Dict[str, Any]] = [] + + for idx, row in df.iterrows(): + mats: List[Dict[str, Any]] = [] + total_mass = 0.0 + + for mcol in material_cols: + val = row.get(mcol, None) + if val is None or (isinstance(val, float) and pd.isna(val)): + continue + try: + mass = float(val) + except Exception: + continue + if mass > 0: + mats.append({"name": mcol.replace("(g)", ""), "mass": mass}) + total_mass += mass + else: + if mass < 0: + print(f"[create_orders] 第 {idx+1} 行物料 {mcol} 数值为负数: {mass}") + + order_data = { + "batchId": batch_id, + "orderName": _as_str(row[col_order_name], default=f"{batch_id}_order_{idx+1}") if col_order_name else f"{batch_id}_order_{idx+1}", + "createTime": _to_ymd_slash(row[col_create_time]) if col_create_time else _to_ymd_slash(None), + "bottleType": _as_str(row[col_bottle_type], default="配液小瓶") if col_bottle_type else "配液小瓶", + "mixTime": _as_int(row[col_mix_time]) if col_mix_time else 0, + "loadSheddingInfo": _as_float(row[col_load]) if col_load else 0.0, + "pouchCellInfo": _as_float(row[col_pouch]) if col_pouch else 0, + "conductivityInfo": _as_float(row[col_cond]) if col_cond else 0, + "conductivityBottleCount": _as_int(row[col_cond_cnt]) if col_cond_cnt else 0, + "materialInfos": mats, + "totalMass": round(total_mass, 4) # 自动汇总 + } + print(f"[create_orders] 第 {idx+1} 行解析结果: orderName={order_data['orderName']}, " + f"loadShedding={order_data['loadSheddingInfo']}, pouchCell={order_data['pouchCellInfo']}, " + f"conductivity={order_data['conductivityInfo']}, totalMass={order_data['totalMass']}, " + f"material_count={len(mats)}") + + if order_data["totalMass"] <= 0: + print(f"[create_orders] ⚠️ 第 {idx+1} 行总质量 <= 0,可能导致 LIMS 校验失败") + if not mats: + print(f"[create_orders] ⚠️ 第 {idx+1} 行未找到有效物料") + + orders.append(order_data) + print("================================================") + print("orders:", orders) + + print(f"[create_orders] 即将提交订单数量: {len(orders)}") + response = self._post_lims("/api/lims/order/orders", orders) + print(f"[create_orders] 接口返回: {response}") + + # 提取所有返回的 orderCode + data_list = response.get("data", []) + if not data_list: + logger.error("创建订单未返回有效数据!") + return response + + # 收集所有 orderCode + order_codes = [] + for order_item in data_list: + code = order_item.get("orderCode") + if code: + order_codes.append(code) + + if not order_codes: + logger.error("未找到任何有效的 orderCode!") + return response + + print(f"[create_orders] 等待 {len(order_codes)} 个订单完成: {order_codes}") + + # 等待所有订单完成并收集报文 + all_reports = [] + for idx, order_code in enumerate(order_codes, 1): + print(f"[create_orders] 正在等待第 {idx}/{len(order_codes)} 个订单: {order_code}") + result = self.wait_for_order_finish(order_code) + + # 提取报文数据 + if result.get("status") == "success": + report = result.get("report", {}) + + # [新增] 处理试剂数据,计算质量比 + try: + mass_ratios = self._process_order_reagents(report) + report["mass_ratios"] = mass_ratios # 添加到报文中 + logger.info(f"已计算订单 {order_code} 的试剂质量比") + except Exception as e: + logger.error(f"计算试剂质量比失败: {e}") + report["mass_ratios"] = { + "real_mass_ratio": {}, + "target_mass_ratio": {}, + "reagent_details": [], + "error": str(e) + } + + all_reports.append(report) + print(f"[create_orders] ✓ 订单 {order_code} 完成") + else: + logger.warning(f"订单 {order_code} 状态异常: {result.get('status')}") + # 即使订单失败,也记录下这个结果 + all_reports.append({ + "orderCode": order_code, + "status": result.get("status"), + "error": result.get("message", "未知错误") + }) + + print(f"[create_orders] 所有订单已完成,共收集 {len(all_reports)} 个报文") + print("实验记录本========================create_orders========================") + + # 返回所有订单的完成报文 + final_result = { + "status": "all_completed", + "total_orders": len(order_codes), + "reports": all_reports, + "original_response": response + } + + print(f"返回报文数量: {len(all_reports)}") + for i, report in enumerate(all_reports, 1): + print(f"报文 {i}: orderCode={report.get('orderCode', 'N/A')}, status={report.get('status', 'N/A')}") + print("========================") + + return final_result + + def create_orders_v2(self, xlsx_path: str) -> Dict[str, Any]: + """ + 从 Excel 解析并创建实验(2.14)- V2版本 + 约定: + - batchId = Excel 文件名(不含扩展名) + - 物料列:所有以 "(g)" 结尾(不再读取"总质量(g)"列) + - totalMass 自动计算为所有物料质量之和 + - createTime 缺失或为空时自动填充为当前日期(YYYY/M/D) + """ + default_path = Path("D:\\UniLab\\Uni-Lab-OS\\unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\2025122301.xlsx") + path = Path(xlsx_path) if xlsx_path else default_path + print(f"[create_orders_v2] 使用 Excel 路径: {path}") + if path != default_path: + print("[create_orders_v2] 来源: 调用方传入自定义路径") + else: + print("[create_orders_v2] 来源: 使用默认模板路径") + + if not path.exists(): + print(f"[create_orders_v2] ⚠️ Excel 文件不存在: {path}") + raise FileNotFoundError(f"未找到 Excel 文件:{path}") + + try: + df = pd.read_excel(path, sheet_name=0, engine="openpyxl") + except Exception as e: + raise RuntimeError(f"读取 Excel 失败:{e}") + print(f"[create_orders_v2] Excel 读取成功,行数: {len(df)}, 列: {list(df.columns)}") + + # 列名容错:返回可选列名,找不到则返回 None + def _pick(col_names: List[str]) -> Optional[str]: + for c in col_names: + if c in df.columns: + return c + return None + + col_order_name = _pick(["配方ID", "orderName", "订单编号"]) + col_create_time = _pick(["创建日期", "createTime"]) + col_bottle_type = _pick(["配液瓶类型", "bottleType"]) + col_mix_time = _pick(["混匀时间(s)", "mixTime"]) + col_load = _pick(["扣电组装分液体积", "loadSheddingInfo"]) + col_pouch = _pick(["软包组装分液体积", "pouchCellInfo"]) + col_cond = _pick(["电导测试分液体积", "conductivityInfo"]) + col_cond_cnt = _pick(["电导测试分液瓶数", "conductivityBottleCount"]) + print("[create_orders_v2] 列匹配结果:", { + "order_name": col_order_name, + "create_time": col_create_time, + "bottle_type": col_bottle_type, + "mix_time": col_mix_time, + "load": col_load, + "pouch": col_pouch, + "conductivity": col_cond, + "conductivity_bottle_count": col_cond_cnt, + }) + + # 物料列:所有以 (g) 结尾 + material_cols = [c for c in df.columns if isinstance(c, str) and c.endswith("(g)")] + print(f"[create_orders_v2] 识别到的物料列: {material_cols}") + if not material_cols: + raise KeyError("未发现任何以“(g)”结尾的物料列,请检查表头。") + + batch_id = path.stem + + def _to_ymd_slash(v) -> str: + # 统一为 "YYYY/M/D";为空或解析失败则用当前日期 + if v is None or (isinstance(v, float) and pd.isna(v)) or str(v).strip() == "": + ts = datetime.now() + else: + try: + ts = pd.to_datetime(v) + except Exception: + ts = datetime.now() + return f"{ts.year}/{ts.month}/{ts.day}" + + def _as_int(val, default=0) -> int: + try: + if pd.isna(val): + return default + return int(val) + except Exception: + return default + + def _as_float(val, default=0.0) -> float: + try: + if pd.isna(val): + return default + return float(val) + except Exception: + return default + + def _as_str(val, default="") -> str: + if val is None or (isinstance(val, float) and pd.isna(val)): + return default + s = str(val).strip() + return s if s else default + + orders: List[Dict[str, Any]] = [] + + for idx, row in df.iterrows(): + mats: List[Dict[str, Any]] = [] + total_mass = 0.0 + + for mcol in material_cols: + val = row.get(mcol, None) + if val is None or (isinstance(val, float) and pd.isna(val)): + continue + try: + mass = float(val) + except Exception: + continue + if mass > 0: + mats.append({"name": mcol.replace("(g)", ""), "mass": mass}) + total_mass += mass + else: + if mass < 0: + print(f"[create_orders_v2] 第 {idx+1} 行物料 {mcol} 数值为负数: {mass}") + + order_data = { + "batchId": batch_id, + "orderName": _as_str(row[col_order_name], default=f"{batch_id}_order_{idx+1}") if col_order_name else f"{batch_id}_order_{idx+1}", + "createTime": _to_ymd_slash(row[col_create_time]) if col_create_time else _to_ymd_slash(None), + "bottleType": _as_str(row[col_bottle_type], default="配液小瓶") if col_bottle_type else "配液小瓶", + "mixTime": _as_int(row[col_mix_time]) if col_mix_time else 0, + "loadSheddingInfo": _as_float(row[col_load]) if col_load else 0.0, + "pouchCellInfo": _as_float(row[col_pouch]) if col_pouch else 0, + "conductivityInfo": _as_float(row[col_cond]) if col_cond else 0, + "conductivityBottleCount": _as_int(row[col_cond_cnt]) if col_cond_cnt else 0, + "materialInfos": mats, + "totalMass": round(total_mass, 4) # 自动汇总 + } + print(f"[create_orders_v2] 第 {idx+1} 行解析结果: orderName={order_data['orderName']}, " + f"loadShedding={order_data['loadSheddingInfo']}, pouchCell={order_data['pouchCellInfo']}, " + f"conductivity={order_data['conductivityInfo']}, totalMass={order_data['totalMass']}, " + f"material_count={len(mats)}") + + if order_data["totalMass"] <= 0: + print(f"[create_orders_v2] ⚠️ 第 {idx+1} 行总质量 <= 0,可能导致 LIMS 校验失败") + if not mats: + print(f"[create_orders_v2] ⚠️ 第 {idx+1} 行未找到有效物料") + + orders.append(order_data) + print("================================================") + print("orders:", orders) + + print(f"[create_orders_v2] 即将提交订单数量: {len(orders)}") + response = self._post_lims("/api/lims/order/orders", orders) + print(f"[create_orders_v2] 接口返回: {response}") + + # 提取所有返回的 orderCode + data_list = response.get("data", []) + if not data_list: + logger.error("创建订单未返回有效数据!") + return response + + # 收集所有 orderCode + order_codes = [] + for order_item in data_list: + code = order_item.get("orderCode") + if code: + order_codes.append(code) + + if not order_codes: + logger.error("未找到任何有效的 orderCode!") + return response + + print(f"[create_orders_v2] 等待 {len(order_codes)} 个订单完成: {order_codes}") + + # ========== 步骤1: 等待所有订单完成并收集报文(不计算质量比)========== + all_reports = [] + for idx, order_code in enumerate(order_codes, 1): + print(f"[create_orders_v2] 正在等待第 {idx}/{len(order_codes)} 个订单: {order_code}") + result = self.wait_for_order_finish(order_code) + + # 提取报文数据 + if result.get("status") == "success": + report = result.get("report", {}) + all_reports.append(report) + print(f"[create_orders_v2] ✓ 订单 {order_code} 完成") + else: + logger.warning(f"订单 {order_code} 状态异常: {result.get('status')}") + # 即使订单失败,也记录下这个结果 + all_reports.append({ + "orderCode": order_code, + "status": result.get("status"), + "error": result.get("message", "未知错误") + }) + + print(f"[create_orders_v2] 所有订单已完成,共收集 {len(all_reports)} 个报文") + + # ========== 步骤2: 统一计算所有订单的质量比 ========== + print(f"[create_orders_v2] 开始统一计算 {len(all_reports)} 个订单的质量比...") + all_mass_ratios = [] # 存储所有订单的质量比,与reports顺序一致 + + for idx, report in enumerate(all_reports, 1): + order_code = report.get("orderCode", "N/A") + print(f"[create_orders_v2] 计算第 {idx}/{len(all_reports)} 个订单 {order_code} 的质量比...") + + # 只为成功完成的订单计算质量比 + if "error" not in report: + try: + mass_ratios = self._process_order_reagents(report) + # 精简输出,只保留核心质量比信息 + all_mass_ratios.append({ + "orderCode": order_code, + "orderName": report.get("orderName", "N/A"), + "real_mass_ratio": mass_ratios.get("real_mass_ratio", {}), + "target_mass_ratio": mass_ratios.get("target_mass_ratio", {}) + }) + logger.info(f"✓ 已计算订单 {order_code} 的试剂质量比") + except Exception as e: + logger.error(f"计算订单 {order_code} 质量比失败: {e}") + all_mass_ratios.append({ + "orderCode": order_code, + "orderName": report.get("orderName", "N/A"), + "real_mass_ratio": {}, + "target_mass_ratio": {}, + "error": str(e) + }) + else: + # 失败的订单不计算质量比 + all_mass_ratios.append({ + "orderCode": order_code, + "orderName": report.get("orderName", "N/A"), + "real_mass_ratio": {}, + "target_mass_ratio": {}, + "error": "订单未成功完成" + }) + + print(f"[create_orders_v2] 质量比计算完成") + print("实验记录本========================create_orders_v2========================") + + # 返回所有订单的完成报文 + final_result = { + "status": "all_completed", + "total_orders": len(order_codes), + "bottle_count": len(order_codes), # 明确标注瓶数,用于下游check + "reports": all_reports, # 原始订单报文(不含质量比) + "mass_ratios": all_mass_ratios, # 所有质量比统一放在这里 + "original_response": response + } + + print(f"返回报文数量: {len(all_reports)}") + for i, report in enumerate(all_reports, 1): + print(f"报文 {i}: orderCode={report.get('orderCode', 'N/A')}, status={report.get('status', 'N/A')}") + print("========================") + + return final_result + + # 2.7 启动调度 + def scheduler_start(self) -> Dict[str, Any]: + return self._post_lims("/api/lims/scheduler/start") + # 3.10 停止调度 + def scheduler_stop(self) -> Dict[str, Any]: + + """ + 停止调度 (3.10) + 请求体只包含 apiKey 和 requestTime + """ + return self._post_lims("/api/lims/scheduler/stop") + + # 2.9 继续调度 + def scheduler_continue(self) -> Dict[str, Any]: + """ + 继续调度 (2.9) + 请求体只包含 apiKey 和 requestTime + """ + return self._post_lims("/api/lims/scheduler/continue") + def scheduler_reset(self) -> Dict[str, Any]: + """ + 复位调度 (2.11) + 请求体只包含 apiKey 和 requestTime + """ + return self._post_lims("/api/lims/scheduler/reset") + + def scheduler_start_and_auto_feeding( + self, + # ★ Excel路径参数 + xlsx_path: Optional[str] = "D:\\UniLab\\Uni-Lab-OS\\unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\material_template.xlsx", + # ---------------- WH4 - 加样头面 (Z=1, 12个点位) ---------------- + WH4_x1_y1_z1_1_materialName: str = "", WH4_x1_y1_z1_1_quantity: float = 0.0, + WH4_x2_y1_z1_2_materialName: str = "", WH4_x2_y1_z1_2_quantity: float = 0.0, + WH4_x3_y1_z1_3_materialName: str = "", WH4_x3_y1_z1_3_quantity: float = 0.0, + WH4_x4_y1_z1_4_materialName: str = "", WH4_x4_y1_z1_4_quantity: float = 0.0, + WH4_x5_y1_z1_5_materialName: str = "", WH4_x5_y1_z1_5_quantity: float = 0.0, + WH4_x1_y2_z1_6_materialName: str = "", WH4_x1_y2_z1_6_quantity: float = 0.0, + WH4_x2_y2_z1_7_materialName: str = "", WH4_x2_y2_z1_7_quantity: float = 0.0, + WH4_x3_y2_z1_8_materialName: str = "", WH4_x3_y2_z1_8_quantity: float = 0.0, + WH4_x4_y2_z1_9_materialName: str = "", WH4_x4_y2_z1_9_quantity: float = 0.0, + WH4_x5_y2_z1_10_materialName: str = "", WH4_x5_y2_z1_10_quantity: float = 0.0, + WH4_x1_y3_z1_11_materialName: str = "", WH4_x1_y3_z1_11_quantity: float = 0.0, + WH4_x2_y3_z1_12_materialName: str = "", WH4_x2_y3_z1_12_quantity: float = 0.0, + + # ---------------- WH4 - 原液瓶面 (Z=2, 9个点位) ---------------- + WH4_x1_y1_z2_1_materialName: str = "", WH4_x1_y1_z2_1_quantity: float = 0.0, WH4_x1_y1_z2_1_materialType: str = "", WH4_x1_y1_z2_1_targetWH: str = "", + WH4_x2_y1_z2_2_materialName: str = "", WH4_x2_y1_z2_2_quantity: float = 0.0, WH4_x2_y1_z2_2_materialType: str = "", WH4_x2_y1_z2_2_targetWH: str = "", + WH4_x3_y1_z2_3_materialName: str = "", WH4_x3_y1_z2_3_quantity: float = 0.0, WH4_x3_y1_z2_3_materialType: str = "", WH4_x3_y1_z2_3_targetWH: str = "", + WH4_x1_y2_z2_4_materialName: str = "", WH4_x1_y2_z2_4_quantity: float = 0.0, WH4_x1_y2_z2_4_materialType: str = "", WH4_x1_y2_z2_4_targetWH: str = "", + WH4_x2_y2_z2_5_materialName: str = "", WH4_x2_y2_z2_5_quantity: float = 0.0, WH4_x2_y2_z2_5_materialType: str = "", WH4_x2_y2_z2_5_targetWH: str = "", + WH4_x3_y2_z2_6_materialName: str = "", WH4_x3_y2_z2_6_quantity: float = 0.0, WH4_x3_y2_z2_6_materialType: str = "", WH4_x3_y2_z2_6_targetWH: str = "", + WH4_x1_y3_z2_7_materialName: str = "", WH4_x1_y3_z2_7_quantity: float = 0.0, WH4_x1_y3_z2_7_materialType: str = "", WH4_x1_y3_z2_7_targetWH: str = "", + WH4_x2_y3_z2_8_materialName: str = "", WH4_x2_y3_z2_8_quantity: float = 0.0, WH4_x2_y3_z2_8_materialType: str = "", WH4_x2_y3_z2_8_targetWH: str = "", + WH4_x3_y3_z2_9_materialName: str = "", WH4_x3_y3_z2_9_quantity: float = 0.0, WH4_x3_y3_z2_9_materialType: str = "", WH4_x3_y3_z2_9_targetWH: str = "", + + # ---------------- WH3 - 人工堆栈 (Z=3, 15个点位) ---------------- + WH3_x1_y1_z3_1_materialType: str = "", WH3_x1_y1_z3_1_materialId: str = "", WH3_x1_y1_z3_1_quantity: float = 0, + WH3_x2_y1_z3_2_materialType: str = "", WH3_x2_y1_z3_2_materialId: str = "", WH3_x2_y1_z3_2_quantity: float = 0, + WH3_x3_y1_z3_3_materialType: str = "", WH3_x3_y1_z3_3_materialId: str = "", WH3_x3_y1_z3_3_quantity: float = 0, + WH3_x1_y2_z3_4_materialType: str = "", WH3_x1_y2_z3_4_materialId: str = "", WH3_x1_y2_z3_4_quantity: float = 0, + WH3_x2_y2_z3_5_materialType: str = "", WH3_x2_y2_z3_5_materialId: str = "", WH3_x2_y2_z3_5_quantity: float = 0, + WH3_x3_y2_z3_6_materialType: str = "", WH3_x3_y2_z3_6_materialId: str = "", WH3_x3_y2_z3_6_quantity: float = 0, + WH3_x1_y3_z3_7_materialType: str = "", WH3_x1_y3_z3_7_materialId: str = "", WH3_x1_y3_z3_7_quantity: float = 0, + WH3_x2_y3_z3_8_materialType: str = "", WH3_x2_y3_z3_8_materialId: str = "", WH3_x2_y3_z3_8_quantity: float = 0, + WH3_x3_y3_z3_9_materialType: str = "", WH3_x3_y3_z3_9_materialId: str = "", WH3_x3_y3_z3_9_quantity: float = 0, + WH3_x1_y4_z3_10_materialType: str = "", WH3_x1_y4_z3_10_materialId: str = "", WH3_x1_y4_z3_10_quantity: float = 0, + WH3_x2_y4_z3_11_materialType: str = "", WH3_x2_y4_z3_11_materialId: str = "", WH3_x2_y4_z3_11_quantity: float = 0, + WH3_x3_y4_z3_12_materialType: str = "", WH3_x3_y4_z3_12_materialId: str = "", WH3_x3_y4_z3_12_quantity: float = 0, + WH3_x1_y5_z3_13_materialType: str = "", WH3_x1_y5_z3_13_materialId: str = "", WH3_x1_y5_z3_13_quantity: float = 0, + WH3_x2_y5_z3_14_materialType: str = "", WH3_x2_y5_z3_14_materialId: str = "", WH3_x2_y5_z3_14_quantity: float = 0, + WH3_x3_y5_z3_15_materialType: str = "", WH3_x3_y5_z3_15_materialId: str = "", WH3_x3_y5_z3_15_quantity: float = 0, + ) -> Dict[str, Any]: + """ + 组合函数:先启动调度,然后执行自动化上料 + + 此函数简化了工作流操作,将两个有顺序依赖的操作组合在一起: + 1. 启动调度(scheduler_start) + 2. 自动化上料(auto_feeding4to3) + + 参数与 auto_feeding4to3 完全相同,支持 Excel 和手动参数两种模式 + + Returns: + 包含调度启动结果和上料结果的字典 + """ + logger.info("=" * 60) + logger.info("开始执行组合操作:启动调度 + 自动化上料") + logger.info("=" * 60) + + # 步骤1: 启动调度 + logger.info("【步骤 1/2】启动调度...") + scheduler_result = self.scheduler_start() + logger.info(f"调度启动结果: {scheduler_result}") + + # 检查调度是否启动成功 + if scheduler_result.get("code") != 1: + logger.error(f"调度启动失败: {scheduler_result}") + return { + "success": False, + "step": "scheduler_start", + "scheduler_result": scheduler_result, + "error": "调度启动失败" + } + + logger.info("✓ 调度启动成功") + + # 步骤2: 执行自动化上料 + logger.info("【步骤 2/2】执行自动化上料...") + feeding_result = self.auto_feeding4to3( + xlsx_path=xlsx_path, + WH4_x1_y1_z1_1_materialName=WH4_x1_y1_z1_1_materialName, WH4_x1_y1_z1_1_quantity=WH4_x1_y1_z1_1_quantity, + WH4_x2_y1_z1_2_materialName=WH4_x2_y1_z1_2_materialName, WH4_x2_y1_z1_2_quantity=WH4_x2_y1_z1_2_quantity, + WH4_x3_y1_z1_3_materialName=WH4_x3_y1_z1_3_materialName, WH4_x3_y1_z1_3_quantity=WH4_x3_y1_z1_3_quantity, + WH4_x4_y1_z1_4_materialName=WH4_x4_y1_z1_4_materialName, WH4_x4_y1_z1_4_quantity=WH4_x4_y1_z1_4_quantity, + WH4_x5_y1_z1_5_materialName=WH4_x5_y1_z1_5_materialName, WH4_x5_y1_z1_5_quantity=WH4_x5_y1_z1_5_quantity, + WH4_x1_y2_z1_6_materialName=WH4_x1_y2_z1_6_materialName, WH4_x1_y2_z1_6_quantity=WH4_x1_y2_z1_6_quantity, + WH4_x2_y2_z1_7_materialName=WH4_x2_y2_z1_7_materialName, WH4_x2_y2_z1_7_quantity=WH4_x2_y2_z1_7_quantity, + WH4_x3_y2_z1_8_materialName=WH4_x3_y2_z1_8_materialName, WH4_x3_y2_z1_8_quantity=WH4_x3_y2_z1_8_quantity, + WH4_x4_y2_z1_9_materialName=WH4_x4_y2_z1_9_materialName, WH4_x4_y2_z1_9_quantity=WH4_x4_y2_z1_9_quantity, + WH4_x5_y2_z1_10_materialName=WH4_x5_y2_z1_10_materialName, WH4_x5_y2_z1_10_quantity=WH4_x5_y2_z1_10_quantity, + WH4_x1_y3_z1_11_materialName=WH4_x1_y3_z1_11_materialName, WH4_x1_y3_z1_11_quantity=WH4_x1_y3_z1_11_quantity, + WH4_x2_y3_z1_12_materialName=WH4_x2_y3_z1_12_materialName, WH4_x2_y3_z1_12_quantity=WH4_x2_y3_z1_12_quantity, + WH4_x1_y1_z2_1_materialName=WH4_x1_y1_z2_1_materialName, WH4_x1_y1_z2_1_quantity=WH4_x1_y1_z2_1_quantity, + WH4_x1_y1_z2_1_materialType=WH4_x1_y1_z2_1_materialType, WH4_x1_y1_z2_1_targetWH=WH4_x1_y1_z2_1_targetWH, + WH4_x2_y1_z2_2_materialName=WH4_x2_y1_z2_2_materialName, WH4_x2_y1_z2_2_quantity=WH4_x2_y1_z2_2_quantity, + WH4_x2_y1_z2_2_materialType=WH4_x2_y1_z2_2_materialType, WH4_x2_y1_z2_2_targetWH=WH4_x2_y1_z2_2_targetWH, + WH4_x3_y1_z2_3_materialName=WH4_x3_y1_z2_3_materialName, WH4_x3_y1_z2_3_quantity=WH4_x3_y1_z2_3_quantity, + WH4_x3_y1_z2_3_materialType=WH4_x3_y1_z2_3_materialType, WH4_x3_y1_z2_3_targetWH=WH4_x3_y1_z2_3_targetWH, + WH4_x1_y2_z2_4_materialName=WH4_x1_y2_z2_4_materialName, WH4_x1_y2_z2_4_quantity=WH4_x1_y2_z2_4_quantity, + WH4_x1_y2_z2_4_materialType=WH4_x1_y2_z2_4_materialType, WH4_x1_y2_z2_4_targetWH=WH4_x1_y2_z2_4_targetWH, + WH4_x2_y2_z2_5_materialName=WH4_x2_y2_z2_5_materialName, WH4_x2_y2_z2_5_quantity=WH4_x2_y2_z2_5_quantity, + WH4_x2_y2_z2_5_materialType=WH4_x2_y2_z2_5_materialType, WH4_x2_y2_z2_5_targetWH=WH4_x2_y2_z2_5_targetWH, + WH4_x3_y2_z2_6_materialName=WH4_x3_y2_z2_6_materialName, WH4_x3_y2_z2_6_quantity=WH4_x3_y2_z2_6_quantity, + WH4_x3_y2_z2_6_materialType=WH4_x3_y2_z2_6_materialType, WH4_x3_y2_z2_6_targetWH=WH4_x3_y2_z2_6_targetWH, + WH4_x1_y3_z2_7_materialName=WH4_x1_y3_z2_7_materialName, WH4_x1_y3_z2_7_quantity=WH4_x1_y3_z2_7_quantity, + WH4_x1_y3_z2_7_materialType=WH4_x1_y3_z2_7_materialType, WH4_x1_y3_z2_7_targetWH=WH4_x1_y3_z2_7_targetWH, + WH4_x2_y3_z2_8_materialName=WH4_x2_y3_z2_8_materialName, WH4_x2_y3_z2_8_quantity=WH4_x2_y3_z2_8_quantity, + WH4_x2_y3_z2_8_materialType=WH4_x2_y3_z2_8_materialType, WH4_x2_y3_z2_8_targetWH=WH4_x2_y3_z2_8_targetWH, + WH4_x3_y3_z2_9_materialName=WH4_x3_y3_z2_9_materialName, WH4_x3_y3_z2_9_quantity=WH4_x3_y3_z2_9_quantity, + WH4_x3_y3_z2_9_materialType=WH4_x3_y3_z2_9_materialType, WH4_x3_y3_z2_9_targetWH=WH4_x3_y3_z2_9_targetWH, + WH3_x1_y1_z3_1_materialType=WH3_x1_y1_z3_1_materialType, WH3_x1_y1_z3_1_materialId=WH3_x1_y1_z3_1_materialId, WH3_x1_y1_z3_1_quantity=WH3_x1_y1_z3_1_quantity, + WH3_x2_y1_z3_2_materialType=WH3_x2_y1_z3_2_materialType, WH3_x2_y1_z3_2_materialId=WH3_x2_y1_z3_2_materialId, WH3_x2_y1_z3_2_quantity=WH3_x2_y1_z3_2_quantity, + WH3_x3_y1_z3_3_materialType=WH3_x3_y1_z3_3_materialType, WH3_x3_y1_z3_3_materialId=WH3_x3_y1_z3_3_materialId, WH3_x3_y1_z3_3_quantity=WH3_x3_y1_z3_3_quantity, + WH3_x1_y2_z3_4_materialType=WH3_x1_y2_z3_4_materialType, WH3_x1_y2_z3_4_materialId=WH3_x1_y2_z3_4_materialId, WH3_x1_y2_z3_4_quantity=WH3_x1_y2_z3_4_quantity, + WH3_x2_y2_z3_5_materialType=WH3_x2_y2_z3_5_materialType, WH3_x2_y2_z3_5_materialId=WH3_x2_y2_z3_5_materialId, WH3_x2_y2_z3_5_quantity=WH3_x2_y2_z3_5_quantity, + WH3_x3_y2_z3_6_materialType=WH3_x3_y2_z3_6_materialType, WH3_x3_y2_z3_6_materialId=WH3_x3_y2_z3_6_materialId, WH3_x3_y2_z3_6_quantity=WH3_x3_y2_z3_6_quantity, + WH3_x1_y3_z3_7_materialType=WH3_x1_y3_z3_7_materialType, WH3_x1_y3_z3_7_materialId=WH3_x1_y3_z3_7_materialId, WH3_x1_y3_z3_7_quantity=WH3_x1_y3_z3_7_quantity, + WH3_x2_y3_z3_8_materialType=WH3_x2_y3_z3_8_materialType, WH3_x2_y3_z3_8_materialId=WH3_x2_y3_z3_8_materialId, WH3_x2_y3_z3_8_quantity=WH3_x2_y3_z3_8_quantity, + WH3_x3_y3_z3_9_materialType=WH3_x3_y3_z3_9_materialType, WH3_x3_y3_z3_9_materialId=WH3_x3_y3_z3_9_materialId, WH3_x3_y3_z3_9_quantity=WH3_x3_y3_z3_9_quantity, + WH3_x1_y4_z3_10_materialType=WH3_x1_y4_z3_10_materialType, WH3_x1_y4_z3_10_materialId=WH3_x1_y4_z3_10_materialId, WH3_x1_y4_z3_10_quantity=WH3_x1_y4_z3_10_quantity, + WH3_x2_y4_z3_11_materialType=WH3_x2_y4_z3_11_materialType, WH3_x2_y4_z3_11_materialId=WH3_x2_y4_z3_11_materialId, WH3_x2_y4_z3_11_quantity=WH3_x2_y4_z3_11_quantity, + WH3_x3_y4_z3_12_materialType=WH3_x3_y4_z3_12_materialType, WH3_x3_y4_z3_12_materialId=WH3_x3_y4_z3_12_materialId, WH3_x3_y4_z3_12_quantity=WH3_x3_y4_z3_12_quantity, + WH3_x1_y5_z3_13_materialType=WH3_x1_y5_z3_13_materialType, WH3_x1_y5_z3_13_materialId=WH3_x1_y5_z3_13_materialId, WH3_x1_y5_z3_13_quantity=WH3_x1_y5_z3_13_quantity, + WH3_x2_y5_z3_14_materialType=WH3_x2_y5_z3_14_materialType, WH3_x2_y5_z3_14_materialId=WH3_x2_y5_z3_14_materialId, WH3_x2_y5_z3_14_quantity=WH3_x2_y5_z3_14_quantity, + WH3_x3_y5_z3_15_materialType=WH3_x3_y5_z3_15_materialType, WH3_x3_y5_z3_15_materialId=WH3_x3_y5_z3_15_materialId, WH3_x3_y5_z3_15_quantity=WH3_x3_y5_z3_15_quantity, + ) + + logger.info("=" * 60) + logger.info("组合操作完成") + logger.info("=" * 60) + + return { + "success": True, + "scheduler_result": scheduler_result, + "feeding_result": feeding_result + } + + + def scheduler_start_and_auto_feeding_v2( + self, + # ★ Excel路径参数 + xlsx_path: Optional[str] = "D:\\UniLab\\Uni-Lab-OS\\unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\material_template.xlsx", + # ---------------- WH4 - 加样头面 (Z=1, 12个点位) ---------------- + WH4_x1_y1_z1_1_materialName: str = "", WH4_x1_y1_z1_1_quantity: float = 0.0, + WH4_x2_y1_z1_2_materialName: str = "", WH4_x2_y1_z1_2_quantity: float = 0.0, + WH4_x3_y1_z1_3_materialName: str = "", WH4_x3_y1_z1_3_quantity: float = 0.0, + WH4_x4_y1_z1_4_materialName: str = "", WH4_x4_y1_z1_4_quantity: float = 0.0, + WH4_x5_y1_z1_5_materialName: str = "", WH4_x5_y1_z1_5_quantity: float = 0.0, + WH4_x1_y2_z1_6_materialName: str = "", WH4_x1_y2_z1_6_quantity: float = 0.0, + WH4_x2_y2_z1_7_materialName: str = "", WH4_x2_y2_z1_7_quantity: float = 0.0, + WH4_x3_y2_z1_8_materialName: str = "", WH4_x3_y2_z1_8_quantity: float = 0.0, + WH4_x4_y2_z1_9_materialName: str = "", WH4_x4_y2_z1_9_quantity: float = 0.0, + WH4_x5_y2_z1_10_materialName: str = "", WH4_x5_y2_z1_10_quantity: float = 0.0, + WH4_x1_y3_z1_11_materialName: str = "", WH4_x1_y3_z1_11_quantity: float = 0.0, + WH4_x2_y3_z1_12_materialName: str = "", WH4_x2_y3_z1_12_quantity: float = 0.0, + + # ---------------- WH4 - 原液瓶面 (Z=2, 9个点位) ---------------- + WH4_x1_y1_z2_1_materialName: str = "", WH4_x1_y1_z2_1_quantity: float = 0.0, WH4_x1_y1_z2_1_materialType: str = "", WH4_x1_y1_z2_1_targetWH: str = "", + WH4_x2_y1_z2_2_materialName: str = "", WH4_x2_y1_z2_2_quantity: float = 0.0, WH4_x2_y1_z2_2_materialType: str = "", WH4_x2_y1_z2_2_targetWH: str = "", + WH4_x3_y1_z2_3_materialName: str = "", WH4_x3_y1_z2_3_quantity: float = 0.0, WH4_x3_y1_z2_3_materialType: str = "", WH4_x3_y1_z2_3_targetWH: str = "", + WH4_x1_y2_z2_4_materialName: str = "", WH4_x1_y2_z2_4_quantity: float = 0.0, WH4_x1_y2_z2_4_materialType: str = "", WH4_x1_y2_z2_4_targetWH: str = "", + WH4_x2_y2_z2_5_materialName: str = "", WH4_x2_y2_z2_5_quantity: float = 0.0, WH4_x2_y2_z2_5_materialType: str = "", WH4_x2_y2_z2_5_targetWH: str = "", + WH4_x3_y2_z2_6_materialName: str = "", WH4_x3_y2_z2_6_quantity: float = 0.0, WH4_x3_y2_z2_6_materialType: str = "", WH4_x3_y2_z2_6_targetWH: str = "", + WH4_x1_y3_z2_7_materialName: str = "", WH4_x1_y3_z2_7_quantity: float = 0.0, WH4_x1_y3_z2_7_materialType: str = "", WH4_x1_y3_z2_7_targetWH: str = "", + WH4_x2_y3_z2_8_materialName: str = "", WH4_x2_y3_z2_8_quantity: float = 0.0, WH4_x2_y3_z2_8_materialType: str = "", WH4_x2_y3_z2_8_targetWH: str = "", + WH4_x3_y3_z2_9_materialName: str = "", WH4_x3_y3_z2_9_quantity: float = 0.0, WH4_x3_y3_z2_9_materialType: str = "", WH4_x3_y3_z2_9_targetWH: str = "", + + # ---------------- WH3 - 人工堆栈 (Z=3, 15个点位) ---------------- + WH3_x1_y1_z3_1_materialType: str = "", WH3_x1_y1_z3_1_materialId: str = "", WH3_x1_y1_z3_1_quantity: float = 0, + WH3_x2_y1_z3_2_materialType: str = "", WH3_x2_y1_z3_2_materialId: str = "", WH3_x2_y1_z3_2_quantity: float = 0, + WH3_x3_y1_z3_3_materialType: str = "", WH3_x3_y1_z3_3_materialId: str = "", WH3_x3_y1_z3_3_quantity: float = 0, + WH3_x1_y2_z3_4_materialType: str = "", WH3_x1_y2_z3_4_materialId: str = "", WH3_x1_y2_z3_4_quantity: float = 0, + WH3_x2_y2_z3_5_materialType: str = "", WH3_x2_y2_z3_5_materialId: str = "", WH3_x2_y2_z3_5_quantity: float = 0, + WH3_x3_y2_z3_6_materialType: str = "", WH3_x3_y2_z3_6_materialId: str = "", WH3_x3_y2_z3_6_quantity: float = 0, + WH3_x1_y3_z3_7_materialType: str = "", WH3_x1_y3_z3_7_materialId: str = "", WH3_x1_y3_z3_7_quantity: float = 0, + WH3_x2_y3_z3_8_materialType: str = "", WH3_x2_y3_z3_8_materialId: str = "", WH3_x2_y3_z3_8_quantity: float = 0, + WH3_x3_y3_z3_9_materialType: str = "", WH3_x3_y3_z3_9_materialId: str = "", WH3_x3_y3_z3_9_quantity: float = 0, + WH3_x1_y4_z3_10_materialType: str = "", WH3_x1_y4_z3_10_materialId: str = "", WH3_x1_y4_z3_10_quantity: float = 0, + WH3_x2_y4_z3_11_materialType: str = "", WH3_x2_y4_z3_11_materialId: str = "", WH3_x2_y4_z3_11_quantity: float = 0, + WH3_x3_y4_z3_12_materialType: str = "", WH3_x3_y4_z3_12_materialId: str = "", WH3_x3_y4_z3_12_quantity: float = 0, + WH3_x1_y5_z3_13_materialType: str = "", WH3_x1_y5_z3_13_materialId: str = "", WH3_x1_y5_z3_13_quantity: float = 0, + WH3_x2_y5_z3_14_materialType: str = "", WH3_x2_y5_z3_14_materialId: str = "", WH3_x2_y5_z3_14_quantity: float = 0, + WH3_x3_y5_z3_15_materialType: str = "", WH3_x3_y5_z3_15_materialId: str = "", WH3_x3_y5_z3_15_quantity: float = 0, + ) -> Dict[str, Any]: + """ + 组合函数 V2 版本(测试版):先启动调度,然后执行自动化上料 + + ⚠️ 这是测试版本,使用非阻塞轮询等待方式,避免 ROS2 Action feedback publisher 失效 + + 与 V1 的区别: + - 使用 wait_for_order_finish_polling 替代原有的阻塞等待 + - 允许 ROS2 在等待期间正常发布 feedback 消息 + - 适用于长时间运行的任务 + + 参数与 scheduler_start_and_auto_feeding 完全相同 + + Returns: + 包含调度启动结果和上料结果的字典 + """ + logger.info("=" * 60) + logger.info("[V2测试版本] 开始执行组合操作:启动调度 + 自动化上料") + logger.info("=" * 60) + + # 步骤1: 启动调度 + logger.info("【步骤 1/2】启动调度...") + scheduler_result = self.scheduler_start() + logger.info(f"调度启动结果: {scheduler_result}") + + # 检查调度是否启动成功 + if scheduler_result.get("code") != 1: + logger.error(f"调度启动失败: {scheduler_result}") + return { + "success": False, + "step": "scheduler_start", + "scheduler_result": scheduler_result, + "error": "调度启动失败" + } + + logger.info("✓ 调度启动成功") + + # 步骤2: 执行自动化上料(这里会调用 auto_feeding4to3,内部使用轮询等待) + logger.info("【步骤 2/2】执行自动化上料...") + + # 临时替换 wait_for_order_finish 为轮询版本 + original_wait_func = self.wait_for_order_finish + self.wait_for_order_finish = self.wait_for_order_finish_polling + + try: + feeding_result = self.auto_feeding4to3( + xlsx_path=xlsx_path, + WH4_x1_y1_z1_1_materialName=WH4_x1_y1_z1_1_materialName, WH4_x1_y1_z1_1_quantity=WH4_x1_y1_z1_1_quantity, + WH4_x2_y1_z1_2_materialName=WH4_x2_y1_z1_2_materialName, WH4_x2_y1_z1_2_quantity=WH4_x2_y1_z1_2_quantity, + WH4_x3_y1_z1_3_materialName=WH4_x3_y1_z1_3_materialName, WH4_x3_y1_z1_3_quantity=WH4_x3_y1_z1_3_quantity, + WH4_x4_y1_z1_4_materialName=WH4_x4_y1_z1_4_materialName, WH4_x4_y1_z1_4_quantity=WH4_x4_y1_z1_4_quantity, + WH4_x5_y1_z1_5_materialName=WH4_x5_y1_z1_5_materialName, WH4_x5_y1_z1_5_quantity=WH4_x5_y1_z1_5_quantity, + WH4_x1_y2_z1_6_materialName=WH4_x1_y2_z1_6_materialName, WH4_x1_y2_z1_6_quantity=WH4_x1_y2_z1_6_quantity, + WH4_x2_y2_z1_7_materialName=WH4_x2_y2_z1_7_materialName, WH4_x2_y2_z1_7_quantity=WH4_x2_y2_z1_7_quantity, + WH4_x3_y2_z1_8_materialName=WH4_x3_y2_z1_8_materialName, WH4_x3_y2_z1_8_quantity=WH4_x3_y2_z1_8_quantity, + WH4_x4_y2_z1_9_materialName=WH4_x4_y2_z1_9_materialName, WH4_x4_y2_z1_9_quantity=WH4_x4_y2_z1_9_quantity, + WH4_x5_y2_z1_10_materialName=WH4_x5_y2_z1_10_materialName, WH4_x5_y2_z1_10_quantity=WH4_x5_y2_z1_10_quantity, + WH4_x1_y3_z1_11_materialName=WH4_x1_y3_z1_11_materialName, WH4_x1_y3_z1_11_quantity=WH4_x1_y3_z1_11_quantity, + WH4_x2_y3_z1_12_materialName=WH4_x2_y3_z1_12_materialName, WH4_x2_y3_z1_12_quantity=WH4_x2_y3_z1_12_quantity, + WH4_x1_y1_z2_1_materialName=WH4_x1_y1_z2_1_materialName, WH4_x1_y1_z2_1_quantity=WH4_x1_y1_z2_1_quantity, + WH4_x1_y1_z2_1_materialType=WH4_x1_y1_z2_1_materialType, WH4_x1_y1_z2_1_targetWH=WH4_x1_y1_z2_1_targetWH, + WH4_x2_y1_z2_2_materialName=WH4_x2_y1_z2_2_materialName, WH4_x2_y1_z2_2_quantity=WH4_x2_y1_z2_2_quantity, + WH4_x2_y1_z2_2_materialType=WH4_x2_y1_z2_2_materialType, WH4_x2_y1_z2_2_targetWH=WH4_x2_y1_z2_2_targetWH, + WH4_x3_y1_z2_3_materialName=WH4_x3_y1_z2_3_materialName, WH4_x3_y1_z2_3_quantity=WH4_x3_y1_z2_3_quantity, + WH4_x3_y1_z2_3_materialType=WH4_x3_y1_z2_3_materialType, WH4_x3_y1_z2_3_targetWH=WH4_x3_y1_z2_3_targetWH, + WH4_x1_y2_z2_4_materialName=WH4_x1_y2_z2_4_materialName, WH4_x1_y2_z2_4_quantity=WH4_x1_y2_z2_4_quantity, + WH4_x1_y2_z2_4_materialType=WH4_x1_y2_z2_4_materialType, WH4_x1_y2_z2_4_targetWH=WH4_x1_y2_z2_4_targetWH, + WH4_x2_y2_z2_5_materialName=WH4_x2_y2_z2_5_materialName, WH4_x2_y2_z2_5_quantity=WH4_x2_y2_z2_5_quantity, + WH4_x2_y2_z2_5_materialType=WH4_x2_y2_z2_5_materialType, WH4_x2_y2_z2_5_targetWH=WH4_x2_y2_z2_5_targetWH, + WH4_x3_y2_z2_6_materialName=WH4_x3_y2_z2_6_materialName, WH4_x3_y2_z2_6_quantity=WH4_x3_y2_z2_6_quantity, + WH4_x3_y2_z2_6_materialType=WH4_x3_y2_z2_6_materialType, WH4_x3_y2_z2_6_targetWH=WH4_x3_y2_z2_6_targetWH, + WH4_x1_y3_z2_7_materialName=WH4_x1_y3_z2_7_materialName, WH4_x1_y3_z2_7_quantity=WH4_x1_y3_z2_7_quantity, + WH4_x1_y3_z2_7_materialType=WH4_x1_y3_z2_7_materialType, WH4_x1_y3_z2_7_targetWH=WH4_x1_y3_z2_7_targetWH, + WH4_x2_y3_z2_8_materialName=WH4_x2_y3_z2_8_materialName, WH4_x2_y3_z2_8_quantity=WH4_x2_y3_z2_8_quantity, + WH4_x2_y3_z2_8_materialType=WH4_x2_y3_z2_8_materialType, WH4_x2_y3_z2_8_targetWH=WH4_x2_y3_z2_8_targetWH, + WH4_x3_y3_z2_9_materialName=WH4_x3_y3_z2_9_materialName, WH4_x3_y3_z2_9_quantity=WH4_x3_y3_z2_9_quantity, + WH4_x3_y3_z2_9_materialType=WH4_x3_y3_z2_9_materialType, WH4_x3_y3_z2_9_targetWH=WH4_x3_y3_z2_9_targetWH, + WH3_x1_y1_z3_1_materialType=WH3_x1_y1_z3_1_materialType, WH3_x1_y1_z3_1_materialId=WH3_x1_y1_z3_1_materialId, WH3_x1_y1_z3_1_quantity=WH3_x1_y1_z3_1_quantity, + WH3_x2_y1_z3_2_materialType=WH3_x2_y1_z3_2_materialType, WH3_x2_y1_z3_2_materialId=WH3_x2_y1_z3_2_materialId, WH3_x2_y1_z3_2_quantity=WH3_x2_y1_z3_2_quantity, + WH3_x3_y1_z3_3_materialType=WH3_x3_y1_z3_3_materialType, WH3_x3_y1_z3_3_materialId=WH3_x3_y1_z3_3_materialId, WH3_x3_y1_z3_3_quantity=WH3_x3_y1_z3_3_quantity, + WH3_x1_y2_z3_4_materialType=WH3_x1_y2_z3_4_materialType, WH3_x1_y2_z3_4_materialId=WH3_x1_y2_z3_4_materialId, WH3_x1_y2_z3_4_quantity=WH3_x1_y2_z3_4_quantity, + WH3_x2_y2_z3_5_materialType=WH3_x2_y2_z3_5_materialType, WH3_x2_y2_z3_5_materialId=WH3_x2_y2_z3_5_materialId, WH3_x2_y2_z3_5_quantity=WH3_x2_y2_z3_5_quantity, + WH3_x3_y2_z3_6_materialType=WH3_x3_y2_z3_6_materialType, WH3_x3_y2_z3_6_materialId=WH3_x3_y2_z3_6_materialId, WH3_x3_y2_z3_6_quantity=WH3_x3_y2_z3_6_quantity, + WH3_x1_y3_z3_7_materialType=WH3_x1_y3_z3_7_materialType, WH3_x1_y3_z3_7_materialId=WH3_x1_y3_z3_7_materialId, WH3_x1_y3_z3_7_quantity=WH3_x1_y3_z3_7_quantity, + WH3_x2_y3_z3_8_materialType=WH3_x2_y3_z3_8_materialType, WH3_x2_y3_z3_8_materialId=WH3_x2_y3_z3_8_materialId, WH3_x2_y3_z3_8_quantity=WH3_x2_y3_z3_8_quantity, + WH3_x3_y3_z3_9_materialType=WH3_x3_y3_z3_9_materialType, WH3_x3_y3_z3_9_materialId=WH3_x3_y3_z3_9_materialId, WH3_x3_y3_z3_9_quantity=WH3_x3_y3_z3_9_quantity, + WH3_x1_y4_z3_10_materialType=WH3_x1_y4_z3_10_materialType, WH3_x1_y4_z3_10_materialId=WH3_x1_y4_z3_10_materialId, WH3_x1_y4_z3_10_quantity=WH3_x1_y4_z3_10_quantity, + WH3_x2_y4_z3_11_materialType=WH3_x2_y4_z3_11_materialType, WH3_x2_y4_z3_11_materialId=WH3_x2_y4_z3_11_materialId, WH3_x2_y4_z3_11_quantity=WH3_x2_y4_z3_11_quantity, + WH3_x3_y4_z3_12_materialType=WH3_x3_y4_z3_12_materialType, WH3_x3_y4_z3_12_materialId=WH3_x3_y4_z3_12_materialId, WH3_x3_y4_z3_12_quantity=WH3_x3_y4_z3_12_quantity, + WH3_x1_y5_z3_13_materialType=WH3_x1_y5_z3_13_materialType, WH3_x1_y5_z3_13_materialId=WH3_x1_y5_z3_13_materialId, WH3_x1_y5_z3_13_quantity=WH3_x1_y5_z3_13_quantity, + WH3_x2_y5_z3_14_materialType=WH3_x2_y5_z3_14_materialType, WH3_x2_y5_z3_14_materialId=WH3_x2_y5_z3_14_materialId, WH3_x2_y5_z3_14_quantity=WH3_x2_y5_z3_14_quantity, + WH3_x3_y5_z3_15_materialType=WH3_x3_y5_z3_15_materialType, WH3_x3_y5_z3_15_materialId=WH3_x3_y5_z3_15_materialId, WH3_x3_y5_z3_15_quantity=WH3_x3_y5_z3_15_quantity, + ) + finally: + # 恢复原有函数 + self.wait_for_order_finish = original_wait_func + + logger.info("=" * 60) + logger.info("[V2测试版本] 组合操作完成") + logger.info("=" * 60) + + return { + "success": True, + "scheduler_result": scheduler_result, + "feeding_result": feeding_result, + "version": "v2_polling" + } + + + # 2.24 物料变更推送 + def report_material_change(self, material_obj: Dict[str, Any]) -> Dict[str, Any]: + """ + material_obj 按 2.24 的裸对象格式(包含 id/typeName/locations/detail 等) + """ + return self._post_report_raw("/report/material_change", material_obj) + + # 2.32 3-2-1 物料转运 + def transfer_3_to_2_to_1(self, + # source_wh_id: Optional[str] = None, + source_wh_id: Optional[str] = '3a19debc-84b4-0359-e2d4-b3beea49348b', + source_x: int = 1, source_y: int = 1, source_z: int = 1) -> Dict[str, Any]: + payload: Dict[str, Any] = { + "sourcePosX": source_x, "sourcePosY": source_y, "sourcePosZ": source_z + } + if source_wh_id: + payload["sourceWHID"] = source_wh_id + + response = self._post_lims("/api/lims/order/transfer-task3To2To1", payload) + # 等待任务报送成功 + order_code = response.get("data", {}).get("orderCode") + if not order_code: + logger.error("上料任务未返回有效 orderCode!") + return response + # 等待完成报送 + result = self.wait_for_order_finish(order_code) + return result + + def transfer_3_to_2(self, + source_wh_id: Optional[str] = '3a19debc-84b4-0359-e2d4-b3beea49348b', + source_x: int = 1, + source_y: int = 1, + source_z: int = 1) -> Dict[str, Any]: + """ + 2.34 3-2 物料转运接口 + + 新建从 3 -> 2 的搬运任务 + + Args: + source_wh_id: 来源仓库 Id (默认为3号仓库) + source_x: 来源位置 X 坐标 + source_y: 来源位置 Y 坐标 + source_z: 来源位置 Z 坐标 + + Returns: + dict: 包含任务 orderId 和 orderCode 的响应 + """ + payload: Dict[str, Any] = { + "sourcePosX": source_x, + "sourcePosY": source_y, + "sourcePosZ": source_z + } + if source_wh_id: + payload["sourceWHID"] = source_wh_id + + logger.info(f"[transfer_3_to_2] 开始转运: 仓库={source_wh_id}, 位置=({source_x}, {source_y}, {source_z})") + response = self._post_lims("/api/lims/order/transfer-task3To2", payload) + + # 等待任务报送成功 + order_code = response.get("data", {}).get("orderCode") + if not order_code: + logger.error("[transfer_3_to_2] 转运任务未返回有效 orderCode!") + return response + + logger.info(f"[transfer_3_to_2] 转运任务已创建: {order_code}") + # 等待完成报送 + result = self.wait_for_order_finish(order_code) + logger.info(f"[transfer_3_to_2] 转运任务完成: {order_code}") + return result + + # 3.35 1→2 物料转运 + def transfer_1_to_2(self) -> Dict[str, Any]: + """ + 1→2 物料转运 + URL: /api/lims/order/transfer-task1To2 + 只需要 apiKey 和 requestTime + """ + logger.info("[transfer_1_to_2] 开始 1→2 物料转运") + response = self._post_lims("/api/lims/order/transfer-task1To2") + logger.info(f"[transfer_1_to_2] API Response: {response}") + + # 等待任务报送成功 - 处理不同的响应格式 + order_code = None + data_field = response.get("data") + + if isinstance(data_field, dict): + order_code = data_field.get("orderCode") + elif isinstance(data_field, str): + # 某些接口可能直接返回 orderCode 字符串 + order_code = data_field + + if not order_code: + logger.error(f"[transfer_1_to_2] 转运任务未返回有效 orderCode!响应: {response}") + return response + + logger.info(f"[transfer_1_to_2] 转运任务已创建: {order_code}") + # 等待完成报送 + result = self.wait_for_order_finish(order_code) + logger.info(f"[transfer_1_to_2] 转运任务完成: {order_code}") + return result + + # 2.5 批量查询实验报告(post过滤关键字查询) + def order_list_v2(self, + timeType: str = "", + beginTime: str = "", + endTime: str = "", + status: str = "", # 60表示正在运行,80表示完成,90表示失败 + filter: str = "", + skipCount: int = 0, + pageCount: int = 1, # 显示多少页数据 + sorting: str = "") -> Dict[str, Any]: + """ + 批量查询实验报告的详细信息 (2.5) + URL: /api/lims/order/order-list + 参数默认值和接口文档保持一致 + """ + data: Dict[str, Any] = { + "timeType": timeType, + "beginTime": beginTime, + "endTime": endTime, + "status": status, + "filter": filter, + "skipCount": skipCount, + "pageCount": pageCount, + "sorting": sorting + } + return self._post_lims("/api/lims/order/order-list", data) + + # 一直post执行bioyond接口查询任务状态 + def wait_for_transfer_task(self, timeout: int = 3000, interval: int = 5, filter_text: Optional[str] = None) -> bool: + """ + 轮询查询物料转移任务是否成功完成 (status=80) + - timeout: 最大等待秒数 (默认600秒) + - interval: 轮询间隔秒数 (默认3秒) + 返回 True 表示找到并成功完成,False 表示超时未找到 + """ + now = datetime.now() + beginTime = now.strftime("%Y-%m-%dT%H:%M:%SZ") + endTime = (now + timedelta(minutes=5)).strftime("%Y-%m-%dT%H:%M:%SZ") + print(beginTime, endTime) + + deadline = time.time() + timeout + + while time.time() < deadline: + result = self.order_list_v2( + timeType="", + beginTime=beginTime, + endTime=endTime, + status="", + filter=filter_text, + skipCount=0, + pageCount=1, + sorting="" + ) + print(result) + + items = result.get("data", {}).get("items", []) + for item in items: + name = item.get("name", "") + status = item.get("status") + # 改成用 filter_text 判断 + if (not filter_text or filter_text in name) and status == 80: + logger.info(f"硬件转移动作完成: {name}, status={status}") + return True + + logger.info(f"等待中: {name}, status={status}") + time.sleep(interval) + + logger.warning("超时未找到成功的物料转移任务") + return False + + def create_materials(self, mappings: Dict[str, Dict[str, Any]]) -> List[Dict[str, Any]]: + """ + 将 SOLID_LIQUID_MAPPINGS 中的所有物料逐个 POST 到 /api/lims/storage/material + """ + results = [] + + for name, data in mappings.items(): + data = { + "typeId": data["typeId"], + "code": data.get("code", ""), + "barCode": data.get("barCode", ""), + "name": data["name"], + "unit": data.get("unit", "g"), + "parameters": data.get("parameters", ""), + "quantity": data.get("quantity", ""), + "warningQuantity": data.get("warningQuantity", ""), + "details": data.get("details", []) + } + + logger.info(f"正在创建第 {i}/{total} 个固体物料: {name}") + result = self._post_lims("/api/lims/storage/material", material_data) + + if result and result.get("code") == 1: + # data 字段可能是字符串(物料ID)或字典(包含id字段) + data = result.get("data") + if isinstance(data, str): + # data 直接是物料ID字符串 + material_id = data + elif isinstance(data, dict): + # data 是字典,包含id字段 + material_id = data.get("id") + else: + material_id = None + + if material_id: + created_materials.append({ + "name": name, + "materialId": material_id, + "typeId": type_id + }) + logger.info(f"✓ 成功创建物料: {name}, ID: {material_id}") + else: + logger.error(f"✗ 创建物料失败: {name}, 未返回ID") + logger.error(f" 响应数据: {result}") + else: + error_msg = result.get("error") or result.get("message", "未知错误") + logger.error(f"✗ 创建物料失败: {name}") + logger.error(f" 错误信息: {error_msg}") + logger.error(f" 完整响应: {result}") + + # 避免请求过快 + time.sleep(0.3) + + logger.info(f"物料创建完成,成功创建 {len(created_materials)}/{total} 个固体物料") + return created_materials + + def _sync_materials_safe(self) -> bool: + """仅使用 BioyondResourceSynchronizer 执行同步(与 station.py 保持一致)。""" + if hasattr(self, 'resource_synchronizer') and self.resource_synchronizer: + try: + return bool(self.resource_synchronizer.sync_from_external()) + except Exception as e: + logger.error(f"同步失败: {e}") + return False + logger.warning("资源同步器未初始化") + return False + + def _load_warehouse_locations(self, warehouse_name: str) -> tuple[List[str], List[str]]: + """从配置加载仓库位置信息 + + Args: + warehouse_name: 仓库名称 + + Returns: + (location_ids, position_names) 元组 + """ + warehouse_mapping = self.bioyond_config.get("warehouse_mapping", WAREHOUSE_MAPPING) + + if warehouse_name not in warehouse_mapping: + raise ValueError(f"配置中未找到仓库: {warehouse_name}。可用: {list(warehouse_mapping.keys())}") + + site_uuids = warehouse_mapping[warehouse_name].get("site_uuids", {}) + if not site_uuids: + raise ValueError(f"仓库 {warehouse_name} 没有配置位置") + + # 按顺序获取位置ID和名称 + location_ids = [] + position_names = [] + for key in sorted(site_uuids.keys()): + location_ids.append(site_uuids[key]) + position_names.append(key) + + return location_ids, position_names + + + def create_and_inbound_materials( + self, + material_names: Optional[List[str]] = None, + type_id: str = "3a190ca0-b2f6-9aeb-8067-547e72c11469", + warehouse_name: str = "粉末加样头堆栈" + ) -> Dict[str, Any]: + """ + 传参与默认列表方式创建物料并入库(不使用CSV)。 + + Args: + material_names: 物料名称列表;默认使用 [LiPF6, LiDFOB, DTD, LiFSI, LiPO2F2] + type_id: 物料类型ID + warehouse_name: 目标仓库名(用于取位置信息) + + Returns: + 执行结果字典 + """ + logger.info("=" * 60) + logger.info(f"开始执行:从参数创建物料并批量入库到 {warehouse_name}") + logger.info("=" * 60) + + try: + # 1) 准备物料名称(默认值) + default_materials = ["LiPF6", "LiDFOB", "DTD", "LiFSI", "LiPO2F2"] + mat_names = [m.strip() for m in (material_names or default_materials) if str(m).strip()] + if not mat_names: + return {"success": False, "error": "物料名称列表为空"} + + # 2) 加载仓库位置信息 + all_location_ids, position_names = self._load_warehouse_locations(warehouse_name) + logger.info(f"✓ 加载 {len(all_location_ids)} 个位置 ({position_names[0]} ~ {position_names[-1]})") + + # 限制数量不超过可用位置 + if len(mat_names) > len(all_location_ids): + logger.warning(f"物料数量超出位置数量,仅处理前 {len(all_location_ids)} 个") + mat_names = mat_names[:len(all_location_ids)] + + # 3) 创建物料 + logger.info(f"\n【步骤1/3】创建 {len(mat_names)} 个固体物料...") + created_materials = self.create_solid_materials(mat_names, type_id) + if not created_materials: + return {"success": False, "error": "没有成功创建任何物料"} + + # 4) 批量入库 + logger.info(f"\n【步骤2/3】批量入库物料...") + location_ids = all_location_ids[:len(created_materials)] + selected_positions = position_names[:len(created_materials)] + + inbound_items = [ + {"materialId": mat["materialId"], "locationId": loc_id} + for mat, loc_id in zip(created_materials, location_ids) + ] + + for material, position in zip(created_materials, selected_positions): + logger.info(f" - {material['name']} → {position}") + + result = self.storage_batch_inbound(inbound_items) + if result.get("code") != 1: + logger.error(f"✗ 批量入库失败: {result}") + return {"success": False, "error": "批量入库失败", "created_materials": created_materials, "inbound_result": result} + + logger.info("✓ 批量入库成功") + + # 5) 同步 + logger.info(f"\n【步骤3/3】同步物料数据...") + if self._sync_materials_safe(): + logger.info("✓ 物料数据同步完成") + else: + logger.warning("⚠ 物料数据同步未完成(可忽略,不影响已创建与入库的数据)") + + logger.info("\n" + "=" * 60) + logger.info("流程完成") + logger.info("=" * 60 + "\n") + + return { + "success": True, + "created_materials": created_materials, + "inbound_result": result, + "total_created": len(created_materials), + "total_inbound": len(inbound_items), + "warehouse": warehouse_name, + "positions": selected_positions + } + + except Exception as e: + logger.error(f"✗ 执行失败: {e}") + return {"success": False, "error": str(e)} + + def create_material( + self, + material_name: str, + type_id: str, + warehouse_name: str, + location_name_or_id: Optional[str] = None + ) -> Dict[str, Any]: + """创建单个物料并可选入库。 + Args: + material_name: 物料名称(会优先匹配配置模板)。 + type_id: 物料类型 ID(若为空则尝试从配置推断)。 + warehouse_name: 需要入库的仓库名称;若为空则仅创建不入库。 + location_name_or_id: 具体库位名称(如 A01)或库位 UUID,由用户指定。 + Returns: + 包含创建结果、物料ID以及入库结果的字典。 + """ + material_name = (material_name or "").strip() + + resolved_type_id = (type_id or "").strip() + # 优先从配置中获取模板数据 + template = self.bioyond_config.get('solid_liquid_mappings', {}).get(material_name) + if not template: + raise ValueError(f"在配置中未找到物料 {material_name} 的模板,请检查 bioyond_config.solid_liquid_mappings。") + material_data: Dict[str, Any] + material_data = deepcopy(template) + # 最终确保 typeId 为调用方传入的值 + if resolved_type_id: + material_data["typeId"] = resolved_type_id + material_data["name"] = material_name + # 生成唯一编码 + def _generate_code(prefix: str) -> str: + normalized = re.sub(r"\W+", "_", prefix) + normalized = normalized.strip("_") or "material" + return f"{normalized}_{datetime.now().strftime('%Y%m%d%H%M%S')}" + if not material_data.get("code"): + material_data["code"] = _generate_code(material_name) + if not material_data.get("barCode"): + material_data["barCode"] = "" + # 处理数量字段类型 + def _to_number(value: Any, default: float = 0.0) -> float: + try: + if value is None: + return default + if isinstance(value, (int, float)): + return float(value) + if isinstance(value, str) and value.strip() == "": + return default + return float(value) + except (TypeError, ValueError): + return default + material_data["quantity"] = _to_number(material_data.get("quantity"), 1.0) + material_data["warningQuantity"] = _to_number(material_data.get("warningQuantity"), 0.0) + unit = material_data.get("unit") or "个" + material_data["unit"] = unit + if not material_data.get("parameters"): + material_data["parameters"] = json.dumps({"unit": unit}, ensure_ascii=False) + # 补充子物料信息 + details = material_data.get("details") or [] + if not isinstance(details, list): + logger.warning("details 字段不是列表,已忽略。") + details = [] + else: + for idx, detail in enumerate(details, start=1): + if not isinstance(detail, dict): + continue + if not detail.get("code"): + detail["code"] = f"{material_data['code']}_{idx:02d}" + if not detail.get("name"): + detail["name"] = f"{material_name}_detail_{idx:02d}" + if not detail.get("unit"): + detail["unit"] = unit + if not detail.get("parameters"): + detail["parameters"] = json.dumps({"unit": detail.get("unit", unit)}, ensure_ascii=False) + if "quantity" in detail: + detail["quantity"] = _to_number(detail.get("quantity"), 1.0) + material_data["details"] = details + create_result = self._post_lims("/api/lims/storage/material", material_data) + # 解析创建结果中的物料 ID + material_id: Optional[str] = None + if isinstance(create_result, dict): + data_field = create_result.get("data") + if isinstance(data_field, str): + material_id = data_field + elif isinstance(data_field, dict): + material_id = data_field.get("id") or data_field.get("materialId") + inbound_result: Optional[Dict[str, Any]] = None + location_id: Optional[str] = None + # 按用户指定位置入库 + if warehouse_name and material_id and location_name_or_id: + try: + location_ids, position_names = self._load_warehouse_locations(warehouse_name) + position_to_id = {name: loc_id for name, loc_id in zip(position_names, location_ids)} + target_location_id = position_to_id.get(location_name_or_id, location_name_or_id) + if target_location_id: + location_id = target_location_id + inbound_result = self.storage_inbound(material_id, target_location_id) + else: + inbound_result = {"error": f"未找到匹配的库位: {location_name_or_id}"} + except Exception as exc: + logger.error(f"获取仓库 {warehouse_name} 位置失败: {exc}") + inbound_result = {"error": str(exc)} + return { + "success": bool(isinstance(create_result, dict) and create_result.get("code") == 1 and material_id), + "material_name": material_name, + "material_id": material_id, + "warehouse": warehouse_name, + "location_id": location_id, + "location_name_or_id": location_name_or_id, + "create_result": create_result, + "inbound_result": inbound_result, + } + def resource_tree_transfer(self, old_parent: ResourcePLR, plr_resource: ResourcePLR, parent_resource: ResourcePLR): + # ROS2DeviceNode.run_async_func(self._ros_node.resource_tree_transfer, True, **{ + # "old_parent": old_parent, + # "plr_resource": plr_resource, + # "parent_resource": parent_resource, + # }) + print("resource_tree_transfer", plr_resource, parent_resource) + if hasattr(plr_resource, "unilabos_extra") and plr_resource.unilabos_extra: + if "update_resource_site" in plr_resource.unilabos_extra: + site = plr_resource.unilabos_extra["update_resource_site"] + plr_model = plr_resource.model + board_type = None + for key, (moudle_name,moudle_uuid) in self.bioyond_config['material_type_mappings'].items(): + if plr_model == moudle_name: + board_type = key + break + if board_type is None: + pass + bottle1 = plr_resource.children[0] + + bottle_moudle = bottle1.model + bottle_type = None + for key, (moudle_name, moudle_uuid) in self.bioyond_config['material_type_mappings'].items(): + if bottle_moudle == moudle_name: + bottle_type = key + break + + # 从 parent_resource 获取仓库名称 + warehouse_name = parent_resource.name if parent_resource else "手动堆栈" + logger.info(f"拖拽上料: {plr_resource.name} -> {warehouse_name} / {site}") + + self.create_sample(plr_resource.name, board_type, bottle_type, site, warehouse_name) + return + self.lab_logger().warning(f"无库位的上料,不处理,{plr_resource} 挂载到 {parent_resource}") + + def create_sample( + self, + name: str, + board_type: str, + bottle_type: str, + location_code: str, + warehouse_name: str = "手动堆栈" + ) -> Dict[str, Any]: + """创建配液板物料并自动入库。 + Args: + name: 物料名称 + board_type: 板类型,如 "5ml分液瓶板"、"配液瓶(小)板" + bottle_type: 瓶类型,如 "5ml分液瓶"、"配液瓶(小)" + location_code: 库位编号,例如 "A01" + warehouse_name: 仓库名称,默认为 "手动堆栈",支持 "自动堆栈-左"、"自动堆栈-右" 等 + """ + carrier_type_id = self.bioyond_config['material_type_mappings'][board_type][1] + bottle_type_id = self.bioyond_config['material_type_mappings'][bottle_type][1] + + # 从指定仓库获取库位UUID + if warehouse_name not in self.bioyond_config['warehouse_mapping']: + logger.error(f"未找到仓库: {warehouse_name},回退到手动堆栈") + warehouse_name = "手动堆栈" + + if location_code not in self.bioyond_config['warehouse_mapping'][warehouse_name]["site_uuids"]: + logger.error(f"仓库 {warehouse_name} 中未找到库位 {location_code}") + raise ValueError(f"库位 {location_code} 在仓库 {warehouse_name} 中不存在") + + location_id = self.bioyond_config['warehouse_mapping'][warehouse_name]["site_uuids"][location_code] + logger.info(f"创建样品入库: {name} -> {warehouse_name}/{location_code} (UUID: {location_id})") + + # 新建小瓶 + details = [] + for y in range(1, 5): + for x in range(1, 3): + details.append({ + "typeId": bottle_type_id, + "code": "", + "name": str(bottle_type) + str(x) + str(y), + "quantity": "1", + "x": x, + "y": y, + "z": 1, + "unit": "个", + "parameters": json.dumps({"unit": "个"}, ensure_ascii=False), + }) + + data = { + "typeId": carrier_type_id, + "code": "", + "barCode": "", + "name": name, + "unit": "块", + "parameters": json.dumps({"unit": "块"}, ensure_ascii=False), + "quantity": "1", + "details": details, + } + # print("xxx:",data) + create_result = self._post_lims("/api/lims/storage/material", data) + sample_uuid = create_result.get("data") + + final_result = self._post_lims("/api/lims/storage/inbound", { + "materialId": sample_uuid, + "locationId": location_id, + }) + return final_result + + + + +if __name__ == "__main__": + lab_registry.setup() + deck = BIOYOND_YB_Deck(setup=True) + ws = BioyondCellWorkstation(deck=deck) + # ws.create_sample(name="test", board_type="配液瓶(小)板", bottle_type="配液瓶(小)", location_code="B01") + # logger.info(ws.scheduler_stop()) + # logger.info(ws.scheduler_start()) + + # 继续后续流程 + logger.info(ws.auto_feeding4to3()) #搬运物料到3号箱 + # # # 使用正斜杠或 Path 对象来指定文件路径 + # excel_path = Path("unilabos\\devices\\workstation\\bioyond_studio\\bioyond_cell\\2025092701.xlsx") + # logger.info(ws.create_orders(excel_path)) + # logger.info(ws.transfer_3_to_2_to_1()) + + # logger.info(ws.transfer_1_to_2()) + # logger.info(ws.scheduler_start()) + + + while True: + time.sleep(1) + # re=ws.scheduler_stop() + # re = ws.transfer_3_to_2_to_1() + + # print(re) + # logger.info("调度启动完成") + + # ws.scheduler_continue() + # 3.30 上料:读取模板 Excel 自动解析并 POST + # r1 = ws.auto_feeding4to3_from_xlsx(r"C:\ML\GitHub\Uni-Lab-OS\unilabos\devices\workstation\bioyond_cell\样品导入模板.xlsx") + # ws.wait_for_transfer_task(filter_text="物料转移任务") + # logger.info("4号箱向3号箱转运物料转移任务已完成") + + # ws.scheduler_start() + # print(r1["payload"]["data"]) # 调试模式下可直接看到要发的 JSON items + + # # 新建实验 + # response = ws.create_orders("C:/ML/GitHub/Uni-Lab-OS/unilabos/devices/workstation/bioyond_cell/2025092701.xlsx") + # logger.info(response) + # data_list = response.get("data", []) + # order_name = data_list[0].get("orderName", "") + + # ws.wait_for_transfer_task(filter_text=order_name) + # ws.wait_for_transfer_task(filter_text='DP20250927001') + # logger.info("3号站内实验完成") + # # ws.scheduler_start() + # # print(res) + # ws.transfer_3_to_2_to_1() + # ws.wait_for_transfer_task(filter_text="物料转移任务") + # logger.info("3号站向2号站向1号站转移任务完成") + # r321 = self.wait_for_transfer_task() + #1号站启动 + # ws.transfer_1_to_2() + # ws.wait_for_transfer_task(filter_text="物料转移任务") + # logger.info("1号站向2号站转移任务完成") + # logger.info("全流程结束") + + # 3.31 下料:同理 + # r2 = ws.auto_batch_outbound_from_xlsx(r"C:/path/样品导入模板 (8).xlsx") + # print(r2["payload"]["data"]) diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..88b233daa2fae48e13e53695798580f473a95c90 GIT binary patch literal 10674 zcmeHN%;4^X1a}zRf;+(>XmEEYNRR-*B@hT22yR1g4R^A; z_wH_X?_cn~{o$OMIbHQT)BQYE)m5bmMnEJ0AOlbV000%B1Y_UJ3Jw6kL;?Wt0jTf> zQjQL;<_@kVnqE%k5F<8EdppW}M0kc=06c8|f5(6D3REVKIP`Mh$Xuq}U?;R_z1Ybw zXM&FwO=VTzMQObV(Y>Ob5MP7t153-9kf`QAfP^6vV;}emh88kjAmKK7@Q`RDXa^)2 zTl3X?89XTJutZ990s*1979`@lL?$M&7MTFuLWgi3+sIyoZ3cr{cxH<3qU-@VW`^Yf z0c=UO52ROz&z%N~JP==l_MXjqo*~BS5;Nt@?SB8PfEZlqxkTt*nGuN-lNyw$(dDv- zU9^N-K9g=+I}7KSh&kYcwmkk2V63AJ3y@%*@=lcq`gH(f{$3tD`pI=)V3Kmm;}~@7PylRWeloUU~u8 z4UQ9uCV$#O9pqi|Cehg$;e8YKwfwdPv0ry`E^3L2DMdncJB9)(we=O6!m8;lRqXK7=)furTMrKi0M)+{6yLbZ93Do{RT%#s!3b*NVr~av zXZv~mFERgv+4z^gUYV!_M&QH=g9bfNjdltxGEq<4vCHfzncc&2rr$s3OOG#ncYi4> z;hNV>?wwWRk>izqZc$(0S%Bl?j+ZKf7L;Z2sa?AleBauNf}7+b8+#z%8%S+ezF%?9 z9m}+tH-9b~Rk@xY!bbZL0Cbbn?hg`aGqmQ{O>qJ0pMkK;X$@00$--8NRmYz7kISP9 zK@jpquR5+fc=?oStVg^Zhl-vu#}`YF$Ln3if05if<;mC1E28PC^&j4i7`~-`i9k-T zfB$v|YCEN_E=wDlfsnm*eZY^@*ik40!GE=sF6+C^(ZPjXqU*pulz+)tC-QP!XMzuJ ze5L;8Un%n;dwN6?0RUJ>0RXUJGd%6sJse$ZUpPA2{`6;sT40Ao4xHsDJ7kDQk0YB| z7A2GOf1qNdE#gf0jfod-YKc>v7rWo7UK=bFKA@_ySB^qBZqNponVhN_K}Iq$7FHfo(Gz z0U$ZZz*ih2tWqMt8X=lU`}nz@ycP}u*lmATT`h4pOI^dMX7e^r2Zv5I7^h5%W8+1S zx?rNUmZ~W+j*I}OxXE_q3`rxk2x2wmUNzIQCLyi(D3Rq>9Z^mk$%PIyMV}fb-SWcJM-aqGV<~TT{{tT&wD5V;+u*)%h5>|StH$H zTEB%IN;$2~+!v&kRsNIc2_E$+r=c$5_l-U8hSPH@-5j#T@u6*bARMW1bzuBg!NP|W zgIJMK+K9z##rK+uYCDYagdu286`pd*F_&~V90RK z8d+byEN6i*bfu}2Gn@OGQik_a@$j1^HjUxyv-HFv|HZrDR0W%c4T+2l)r{LT#^4Ce z#;N^KHLRt#ug7yO(l*GMPz8rRWBQ}h_8z9oYlT>v-1bqT`TX$V+qv-NtM%w~Zh^i| z`pyBo3Ve$Z?1&SCUZ9ycykYCCy8}eZ4H5Yypl8oAAIFp`GIh0A!#+389u|9;i8)Um z%ooFUo)mL1t*7+n;|7hh+Y?y`Zg{Z1~CW6V*k()%tBulDJ zjQdp#u_&5hHJSUB=LG8PAS+IVrQ8hb$<_V#w;Bqk>cxUqWzI%vv(-FhZo@REQ(cg! zjRAb|LS5Xw_Nw<}iomDh9En7X9ZbQ_z}2IcCCZ*ilCND*EM(KK?y?H)pZW{dT9fAY z<|kwt>m#Cda^OX3{4?-0Br@l*%H|TtlFpCZAyamhQmeR-GcPkKJ+XVfLGTr+i+3)> z1(N&i_}lgDbzqm}w~8+`Wwxh-Rw4|jjf=%BD_f_&CnW#op#nvd(@tSDdk6DS!~j${ z7~Ot%Qhz1g|2ix3#;YBRGb6LB|H&FL|)m5%AA@m`kJZ5WVs3ph8HFW2a*Xs4oty$b;mN z@bM1z_A3q_VP!z@+e8yTvg8o(Z(T9a5``BOQ%j$h?TjyD}?>G8|P0`os~H9(^Sh`BAsA=IA8@u9exhl%$1Ml zHF~^jtEBNXnu7ve;l1kFDt98YPynASVr0HWDFhnN{eF>Tta&Hcr8$H}AuuncTHRf% zx8`kJfl9X|K{MWh9?Mz)+z}xk#g@?aT%JTs3@UH(>Lu5Ve)lkl0v`W#l#GIO3UyI;R3D98Iz{7{42+29~Q(HDP< z675yA6VhJ(X7F9egx+`iEO?XATjZN6rzb0;dITdBrE0P?2^hL_Z^7H2mwV~ai$XB& zgRmIQGz~iBs=!y0N4;QnNe#TO^r0=M5{Grr9cYf0ZglMHOXUYOEj!Q~+E2dlQg>et zyYlsU5)Kp-F__czzX z_Gus=y@!PB8T7=+4VUwumMxq{UhlI-0G|H+fG)Uc^^G&mZx;)_=gV&;fN z2^!8MO!0D3Q>c+(r>gjUPKUi(I?9ujGsz1;8N4(aW9YMS@lB)XVd2)&!s$r_vlK!_ zyi@}5Ex+hd;nt6ZOtT1P=>TgmJ=)`RY*wz*uhF9@<)(?wND;sPm=gSLwE3+A(5Se9 z;9|liB)OOcesj4@T-Rf6J$aeqoqQ4e^3$q9Nf!GU#JYvX=2nC4!e#yoj=~h}h)qBA zx{S|sVlH2qJ9HAX^{G-lm_OL)8yN0>Q9$^v^&WAh4--GcWst^nmP(C z^o*AgHvRiBl!*IhlO1xz3vlDxj33Q40ZK1rZ*Z!le)^0!uBy+d@qa%cDc#NgHj}3=Zu~?OjoP z{kI}BE*W!J3{SW*XkVgy9Kec?C3|Y!AuW( zl|JLBjru=`T5|J%OR#C)>p}@@YI|A^(!*7-nd;HeWAW&014hPxVX-dC%@v|jx+dT( zM%lEzq*hsXbm>E+>D}~c!yPk@$-@gx?qpB{npR%@Yi&+lxe7$h^cgMZa_h3buO|jL z?;pg;RG8F_U*)p6>G^~2V1e@=X<+4QYv&;*#;5q zCNdaOy5m&Atlhscp?=o!^firS+U5MqWy&}Qo)+m7sb`HK#^IMp%s4p9nO zTAzTtLo5}ENCZ)v5$@H(T8a(R&eb5 z%8MM`dfGu=YLrwKTKn}6wJ8Jw>g_XZFOOU#)SKOy6JG|x%Y4dDgYP_7ZN!WRbQZoJ zu#e(JI(Z^Uqf=2NbDe_dCxhZcv5K)hMszf58_p5DJ1CqyW zCzu&75#18kLilObb44>J`}_OL>UEx!_+-l5i49^0q)7Gah29{HHO|yDFJ&%Iz76Vr zbO)IZ95i2muSRpNZUrlQ;TsFMVJCDuC`R}*n$j9Q@0I8?JI=mHiUDB?n2AnLlXceU{JAkD$|6lW6?^^ab>{4CJR)#O3$|S z3jLvoC|zgq&>hkg-_ONE>GS1HPt8m!2}v~8N&rijK(J#YpJ28*ilaE;d*NWHk)Dx5 zt0w{oICfz%xscas+|wC?A<(`SS_AMc((W!{hzR3)cZMgGQ|48dx{hLa2FMM>V9uc8 z86Uz4$LS}_!b0r#hU<`Z+Klxh7*3b-W~GsmfXt$cj&hoPNM5bjUVZQVgP_y<$HvZD zLqWJ0nTWUR*|FTn2vtX5Lo4X&WO3rh-ObCh!B39HqCa}$(zNbs#C%UiCf?o##!F~K z8v9;vv{u5p|_upzK%NEdn8NEW+4{6yj7MYkcZ&`S0*h+y zh|1V2cGB&B3dEP!$R~M*^ghNn7qw6py2r8-aE`9;TSJYghQKK+QeOq zV3#SbJ?fwaWjbp|C%fBbKI<^_KXvockIDn7_}G8)DuIwdsm$$kVu{*lm7uJq2vOe0 zlNd-ATr4Pc!hs|CV;)X*-C@XR)uQ=KUzD7%{Ct*U66#oV2k|xydpoSiGXqmezuC)b zqF1%2^JaQu)ul+iXzG7@>scn~m})nAMwFTEUO$;=;qFg&Xs%VMAN_Y^+r= zgJ5|IQ!uurR&aO`PhNw>Bz9m*n(4t@eP2f~QDo!tA&aPUwDApVTj}HiQ{vYM-6sNZ z%+(bnt4fkqct+%N*%KMF;sQpf_=HK$=e@Ey9B+vAN|x*FUg+_(=!RkG_t-${h;nhZ ztDd7Ku^AQ%@GI>Z<1_$YM@!P$&E#Z6(=8Me*W478V}(EAO|ZxxR`_Np-xO*7!q3Y1 zarKMz^pV)R=&>-YX1;;|%$Y~>b&c>;CoKwa?yg4QFe$w9@&;y=(YjDLf|U3;0^D{5 z*8pTY8h4IX3cK?2$kGsmM@f@6$jWn#O=HY0&4g}M-o@rl7XlVuLD4p4DwcFamTPpY zAfnOil+O_;@4U?UhOH6C+DBNxh_Du%lGEJXh5$S*-6Sof0QVP>G8?$pb} zqqA)hYiRmyU5b@vl)pK%?s*G0Js(g5cf1~MWY?wn#h6vcd{+DEj&{|;#D)`A$Qi}_ zLn&(dy>TAjjOc3MLe$sO;K$?=nkLg)nAGx53Ez z#9DL0`k+42B@N>8eWPp3cYuxMVE!Gk9JxlYWn4+ALmV9>!a3%8QtO_u9|gO6D${9C z?8U`?^61+5hC~;uqARB7Gd8yLMw04SL6N?BI`eQ0+*mC7)4@84f~$EAUfuxSr+A3^ z3auL?#DuUVPs%;p|or}lql zo$0kGn4z#I!LUdG^LOtEarLq@hy0#E>--t;uRJ;hQ(YvKZOzk5Uf?NNRH$6KNbUForonrf|8)=LUkT@e*ze#W*ODdeo+E)Ks@ zLUo=7R$WYDvDv4f$zaWtT-NlAlN_LC5VV`3NnvIaC%!h$99bS`CB?4` ze?X^J+&cX+z*SXXRi6g8@x1l=`}y32W9(ei4myD&J671|&pXRr=*Y7zvU6P4*QC@+ zG%n-ueMeYni?GY zgs|(|5`I%DY0yc!wkGC(>B#FIhCnQs8Ty>;xq@_^C#82jK`(#t1x{6NSbHT1KuSrb1)c4-<cYV<1-KS#mWI&Cb zylAE=(EB)U=Rudx$DUE#^MtszSgk#xd0xC!B1Zbwo~vQQfWKaSc+`7o^&vfdd-I{P zsdh6ZR*670?JElhy+*fqt9TUK%EzFlyAx?-V6s5#PBNOTUTrLcZmpag3n-mx;zb4$ z?Z6!$&a@<&7gjcnXs@~+ec(37HIbe89?D0?X*|hM=DspbCQOmR{%(eNbc>Vawr3nn z^Y@w(ZEqAU1MJo2n%|5Wu=>yAHwnJKA#`)_Y^Cp=AT(=6dW*20yYpQaxh(lDS!C^v zDA6nV0g9%Ib{^-2ExFsN8nJTT$|LNG@C6wYN!*L8&BNmZ$yvq6W||yDLDr8)OP^~a z!ER;GjlnEMxU4!FBe4{BI3CNT&S|RU1jw&QhGL_ecD4fF&NYR#2)ft=ha*Gz8pB#t z@{b~gS&wSG9!i+lyT+{VXZI3In&=mmx>_oxd;AVxZDZc}t+adhziP5|Uh*x<(FMDf z@;|Wp;Wc%YJ3inKNH=gVU5i#L$u)$QUH8t!B$#-o#SQMIZAfyr)Di>t5gStS4W*vf z+M75C&xA*cH(^Y<50)K*%6CX@_`DEOW3I*1fuF%o5l2*WZaAj zT@yDiB5+SNIt-V@Fbj%fzd%9o>$mrfz2P#3o8@qB4d3FT&Ggn+ABqyCxai0t08Ejc z^Hg6HycivzdjjhML-dSAjAORywJ(NIy;#4;d5glI*Ihq+um)Lys%;aw1x@?UiM}I# zl{$i6ZoP#q+&?i#=G8Ql1jF1t40AYt#hj^=(|;icTe3e!R^kMRnUi4PG6>3H=E$v; z03MS5Al9ntkT>f$nq?hq%|$bq=l1GtcU5LPjxU15u|0t=#>A*qb~&@hb{6z_GmRa$ z{WM*P33bXdt&q1TjsjON|XvZ=b*PxTUyl zj>klpf*k~(`l5!VY6^Wf^<-w}YXLilK$dN7kcW(f>(fb{p0AR{K^_L2)5E=@L?e=4 zP=j7!ec&t=Y|P`L0;#R#!pDlzOc`p}WwNxX;@V`zXfXjd<7@YtnyqaNWHC-Q*N(1t zFU}u2zZSMM6dzQ(+cvP?j=?{!h;EV?k?3Vwo6ilsY5|r9hygC!yD_DrZ(mq z+(Q z_}G>pg@i%-=ihYqPt#^kzkIn|=Ar6lG$B)TC5&!OCBYEp%c~vx<17~8ZAX94kH=q_ z{Oh?F2fuB&Mjt%#KYKTIVUM-Kq_6#0W`>@J*)QgJ!IBE>n@lbJxp1jg>mI9PSCg(g zX>6x>HQ8WLaK4|T6Ik&`(V8@rs*mP10~ky?P5kW*?NE6+QF+eO#2&Cnux0Ek^ia#Z z#c-jPhU_+@iTg>1&>w4ZIJEwF(r{SnsbTNix<}}ve-`uV=|W6+9vSO~Ich%U?x*4YvOj z<%FeeVJiXoHT3>f!{6hyKji@cehL8KA5q({;(vF!e-*E!`iuA<4)|B;zuURLO1shg dMf&CcSv^%S5)2+c8@(O@dSJ$Jk?!ZW{{ea^KXL#7 literal 0 HcmV?d00001 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/outbound_template.xlsx b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/outbound_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f2c42f25a4b0951ab506851ed038cff7acc45936 GIT binary patch literal 9125 zcmeHtg;yNe_I2a#4Z+UIEokE|zn;vz zZ)TYJ{(|?aSJz#=y7pOB_nv*ux%-rwA{;yrfCxYa002|~(}N6aLl^)c8Xf?^10cg1 zNI5yWTR6HKX?Z(axPjQc9PBA`;b9rG0kF{P|9AWs&p>f}ze+nNw#OdFer%y&1~k~#Rc{1v#v^S<0igVvRf4&Q>qyXrO2BZ7Kb zv<*r4IXb)d=$fAp#k%V2L9&4);#@>VMjtHG0Ld;j?HWAND-sID#Mbx(qJe7}v)wv4 zOI_d5KkI`9d*)h~Rdg0{1p11`u-8WL#%*nwd<{?5*yQ0OsD0-NJPh;IsB|@%Of|l{ zUMDFwxiQv0oiH|oUE~alZp2&|T0*RE;wM+;A+9WXfBIR!E832w+3%&FPc!4kh*P!e zIzD`BBQ}Ff@gS<;(P@C1T|^Z@3Af|0e}@=;o>Ko|8|A_c-3lIQ#}bKoU1n6Yxe6h* z1M6~rcc!$eAU|{P>%yMiT7eeTeKS%&$AS^0b$FS}2jDr*cHK#fBzA8L6|Mi<{pFr* zVc)$U8wPINVE^s>KRW&w zbMP;ZUL32e+Rlj{29djc+jB9o5REOV=qVvrPo?!bP<|e(`a>Qq$wD&&DYh2z8@T5I zjjwO}<`zUg?DSBbuksW}-~xqdzIm2}C0)C`LSm+OO_X&hUg^N`m^hm_PkFB3&FIk> z#r&lfoTJ#gL?b(PBwc|$%>IHH1uvg8jNn;Hkbal4-lFMcDa?eV=6*?7c@2N|PTX)> zz*J(vHilTZpwixG3Vx59sntxWUynW2*%h(2rnR6=xoM`W5Vg0FxqZutbXqgsogbS@ zdXEM*5AG%R@bhlE?6UyHQvT$jq|&=+)NV`GTcnzE!5y@r3txsX|7Hl z5ptv#GSr+gi`1i$dKh9JJce8Xmh8^BfP5s7G*k_#{RRm9f}F4aBxemQkT0n2o10B4 zqDkeJ+ZzA$Ieu)cbbkDfh?~e1MtVBuN81p!CU_~OLe>I*oFu`GI>Zg_1=y0K!rFlMS`Ad-~R#1=b{EAADF5wS5*;x%w=$-c)n5`;+ z3QA|>;=;V!8J88i#tjL<8;+QUVe7)NLn%coVF~Dlz0A|b2vNq<{!fV!ZM5}KsJzRh z?Hp>o!EQVjM2+BlyO`WdC0ETNbUh+3P8 zw5@@&o==tO7*fySrzop=&uaQUw;kleO56MAFDcS9onp!%w*@71P^ExzMvAoiSS9bA z{f1_qbIbpnPq!DCH5%%ovm#1C<_+@=)G!8l9LR{O$T`yB`2hUK+Rk!&LRVA?uot2R@bST}9N^HJ`!s~iKtG@GR>q%5U)}ycNdg91vq5R|-+dHoC@XewVmG4Qzvc8y^T5ZMap$1k z)855G?yX{)qo;cM`gDnexelZ|smKB66y^;X?Dn|e#axBMJ8NYDzsH65!Lx@5BRCD7 z48kFs?w61UKS#jB-P_syvX6$D>W24SG`5E|6DY8G$w)`^Hm`tM`t-1gwH|mKqPbTRTvby;naX6j@$g-0?i?{I*qdVHga}1m1j8FJ@^hSu<+4@g z9QnB6)>7Gf$gVZ-8hwNGiz4}F-e-Pc?v!tPo>K%c#ky_erqpXgR@^0T`k0#Mj#>Lp zA(rdC-4jdDmHuap4EJMr{T2=YNJ9Yt2%%T}5hLBKEiByKIDQRWzXi+mc#zW^B`^%a zurEe=fVU?wsKcVdTe72L^JJnf$}Tv{3}Nk4ummG4U#O%$-UCD8m32byc6jSp zNL&fC`)LG0xf_KpJCrHk5dZY1=Iw~DLi$$S`iBv92W2#3D`qqNi%aVl1JwjxL^7XE;%HO2I`a#jQPoUwDrw8ZT*$hkRzau; zhz~}ZzgX;I^3avGGC59xgmGo7!*%;)ul++ba;5KUN4t(K-grYsnVy(i9i=Xd35UE} zvxWR?;)*o-0i6A)}S` zZ)UKfT?-Svrr8_&L0h=VdGVHgGrxljQx6ACTSDy9RUwl_gm-Zk1@57F-oDW(gu%n&_d_}RS$E<>Jw7n>gb344H&-aK z^^`532-rO&iT7D=(So-rlgSX0$Qnr|&BWk)?svmG#~+~KtRpWt_@a-~H?+u>C6idzyoi7V}yO~}fcWrG=GC?(*I z&LYM+^;*s8;*W7wjP~O_Y2@!FOSqvPb8#5}w*><7!VsN(SQUkSoSkZB&O06P}@bj7G9! z!QSc03G3L(E|PQO|F~&Wzm2tC_38GB)L9jcXAseW(EusIq-tXqPI*@G@BvEWw*mV# zl7A!bb^%?jCA7HFg#L^7J9*u$EgUR3ew}~uc2956k%S++>B&!FY+qH@nOIYz7&yhm zRX!KfX@&QsMIhTG9MA8ROu}{ey%pj?xi%w;L5n_&vxstmhNFcpX}QWl4U%uy74-GB z>=_WRpOD$JU98;>JBQWz>`V0hpu&kgF2>j5cmXS28U36m!k{(dHDuH$@Kc*!2+^<{ zOENam%Q?S?#xGt{bhLEH=T@$8HNnzFer6UjVdaq<7MXGAix}VKDuSQmlu5%?d`8bhryrm_8Pk>H1scXX=-qUD3Mx^cFdTRkAOepxKax%WlIg{ z!yLZ5RL>GogE7@*_8LKD-oz`mHw3kkbkY|j?y>Ffrl?kwO=Ex1!BEA)vQ+xgsDILT z9@zxLSslLXQJ>-XN_H6FOc-3ClgK@&@6%dU?+)Mn>C-lxZT@x zAA~a^^PZWHPns|f&lF&?@+gTdNAmU1y$cdM_1{C>M&JSwxr?pC#%UR(NF{-u&O+Eg zJ4CNH%cCUqz`jtrL9|}AA1|wevE0y!xC$?Jt}eQRHM|w`s1H`&I$3@3^klw)r_I0#>^Fx$mbaM6WishVR6CvcF4nH2EFReP!Tix<0*t zkozthz+&|siYmX8uIa&<-D3J_iN2gr8C}sB^xW$0vggwLo0)Ev^JzeyXe;2vtsYEm>2DOE4oOQE?Bz% z(G8qBmhEo8Bp*(*N#35)#?>1xc}+%vvpRA>p8pZ#X~S5%E){y9KHfEM7b{985X7@o zC8c@T-%h05rZiPFYymey6>PcWg}E z#$C#S?2&`)oA^@fn3FO1g<%b(QhtXzG?#{AFfI9n+chmp2t~!MY=B3x zZyIYISrVA{tkmxibYL0&8c}T7zNj9ev08g`D(U>T>!aKWV8p2_7d)$Sr)+axXF9;B zwdUFB2bk;x(|Z!ZU!uSYn7HXu zQ6OF#BUZH03TeS4&bbter+%?`Rf7WZIfHz0CZJ*TZ{%{t9^U3jQ+;1oA|q3PW={iD zh)Qf=tt`HIZ0sj%muM*tZhqF`%}vqR0`qAS`PG7nS%->IK*+(12*vY(IG}#auPBzZ zqaHPGC*y3XXQ6d+^a9kOQB{i(qMwNwl+7%NWyvYF1tCC+gj!zSnVMw}0)~W{iNx|W zABaN(51HeZ;i$JSHJP4{ib`Tmp3aZrvPn4LY6CvHNpWbI4W?mI-BCMhSbdHf3dwmP z{a2K!@BC@^<;88vq189RZ7O6vp;~jg^n5%6U#Q`AEyJ8?9&E`5eAH2=AJ$ zIGpsc4atlqaFnADm6|0o)H2ox$rPs8uh2(XaVImdl;B{wpY%D#3pX>TzIX18wC3~+8Ijptb4)%|<<$mO2M z8IU9W5SWo6QA&+>(0zY!-ZsZr8^bQNKxEW2%D?SCY_q55wpr=sdUUq1brlKHovwKG zee5imIQHE9{m!|yP!C~uvQc%Pn8;D9zw;^I%cH22*mK(ln3qSb@g@PZf$KFxyaxQg zR|b#8sfrx&gmh?4S&s?;VEmqz+}yqGE!=)9BnNZ`9oP7NPe=_c*A?s481fOXNMX?I zgJ9)@3~k=UzRQ;j%GLCaSoE1QqsXnvycn(7hV_rcWa=HImXE7r{6R|XDsX!_IMB_t zHU%0Sd8W-4N8Ng#@D>OEJ8Lo+_jUoaSM;XC;-3ax?_7kNaF)Q zvI<4idcpo>%^+44{eFTyI50uubEdlW({hG0%`bXHdkFzPi^y0Bf#MO$g|n!v0-LPHLOdZIW6}**9vq+5dL!!YJ~Eylt0iBQGbS!Cq^L zWwei(JI04hC1S{jDX;j2F^c@p{=r{YhWC8-8g9k4&`@{Zv9}@pq&dE33K3ij#W=<3 zc@TL2#Dy@{QjCo@%H?(GdK(Y}-3C2&O6wguy*1%d1~Fqw;M|N=_w}cio1Ysb z`n`H4x>{2@j8bQ9huY2#Un&D^TQk)8M$1q4kaFi0wZ$Ps_#`bTjZ7Z|*?7T{6+6aF z`h1509MxerDP0IO3BVAN>JP%3!Z}tFz6#}{;=V)^${+PHS3NLp1MiE=HjJ4>c2Rkr zCk|hqw~CPWV*@`i7N#$y8aHtadvhn%vcw2X>Xj@JpoEn=9Lx)ZkYcrqGTe2n+kTuh z8#Zo_Fjjw&d6Y%H0oNR)6*wY|y0_*iof?*QJIva78l2tUmTyia5^Y zJ*Gwl7QnpD0CN|ZDt6mplQ_&uPXf9cKDi7$mZ^%oWv8sZeApaOK)|Rkhu3TSjRIM)N!i(Sg0B9ahDwJ#_hAHk zx@E(LOO?JwY|_DnN5W&yxA}r^Jgz}#AlRm#VBO$=hM6XPh+}1op7&e=9=r8=ao+yW zySCkZ$E1?Rmil{}^U=#E5cC^PSnunVf{jCBb*XZx@R~Tb*01uaOMD*L&$gN{6BpBZ zF4FB+u2gDiS*)sGN~;iDwK@_xI_0vax1BLzf?%Nu>esD z0`NkFb=oovGq#O>)wGXkydE;hrQB>7IDmo{!r4!1(GH6!92W>ZB)Y1xwAlD=drKYLQ4K1QwcF=XQDDU80RO@e8_L_2c)xOcvX#_j!r!7(w7S!iFU5{ujs zDZ1gXjv-x_?z%^Uyo-&)SJ|Q%y79K+9mIGy)P>2mx{8II0vn0-0{HT?NbcbXYc}T4 znDLCtQvNou=7b|s8d}gAE0=cS^j@BI&Ui*piAWBg;?KNW^L-D=nZBX!>qT9!#AynK z>xi|Li;cU9v%|aHX|xcEEoyY+EG0n`7u{%)_pqxcYL^;_k;)B6Ll5m7?O8^iVgaYm z-(I{}x{iA@*KBn+IHTxh-hMK&&^fr@Jhri=6f8j7fNa(##TeM@g^J+oGMKi(OBu*1 zh(jBWsv-~~dX&6A#>kvb*Tvi3Yx8hbDJDidB*u1<*x*=@Uyj+;>BOJkKBVJXFB7Wc z!J^95-ZMnfojaPQ&oOtmCW@@fZ&TbrL zPOcVzwC?^V13{-QGFDx&of8zh_UqA8gc)R#%hs6yHly6(urXCs#jdT6w% zpTP7#PST>zaRTvDO%`dQ|K_OXMCmDM*87%Q8)7F3a> zdAE5Ov!}QtC`_H4fdkiV&T5vnT}v4upUll{_0ijSt-2t zROQyIs=*_OkMY?E5@io#NRHI$*JHl=fazlF{!x3JLR$J0<+|*XNXzv`65o-fP!iM~ zp4+Srl2qspK~e-xH|yqDs@&;cozKtAg)|H5d~nc80Q;}bXX5PqKi`8+*&j!GY^w?h z7j_sV;Tn@==^Z~XhxwRTTde~|`V;N^2T#6=ooNW^9NFb_Q5%9xV8o44A}O1xVzyk^Qz+8clmxN1Cx3ZlP9R2Wz`X#V^6 z7b5<%i2oV?<@E?P#lIW)d+YW;z~9CsC{zB@$bAfa+|K$F+5pvn9yPZfga6(d_!9~M zlt3T!|KBKhZ0E6F{HLX5wEuS#|4@$~TX`&8{b?lwn#rJd^H|1uY~b-0<4*%T1iuXY zx#4&WeO%W33B4iu9s0P)d2HeDY4uM$0MG~(;{K6jAH)A182<_vBL55gk1(mGhyYz( R000&G354cxEUMpr{T~X}>jD4( literal 0 HcmV?d00001 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/批量出库模板使用说明.md b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/批量出库模板使用说明.md new file mode 100644 index 00000000..5d11c7ba --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/批量出库模板使用说明.md @@ -0,0 +1,157 @@ +# 批量出库 Excel 模板使用说明 + +**文件**: `outbound_template.xlsx` +**用途**: 配合 `auto_batch_outbound_from_xlsx()` 方法进行批量出库操作 +**API 端点**: `/api/lims/storage/auto-batch-out-bound` + +--- + +## 📋 Excel 列说明 + +| 列名 | 说明 | 示例 | 必填 | +|------|------|------|------| +| `locationId` | **库位 ID(UUID)** | `3a19da43-57b5-294f-d663-154a1cc32270` | ✅ 是 | +| `warehouseId` | **仓库 ID 或名称** | `配液站内试剂仓库` | ✅ 是 | +| `quantity` | **出库数量** | `1.0`, `2.0` | ✅ 是 | +| `x` | **X 坐标(库位横向位置)** | `1`, `2`, `3` | ✅ 是 | +| `y` | **Y 坐标(库位纵向位置)** | `1`, `2`, `3` | ✅ 是 | +| `z` | **Z 坐标(库位层数/高度)** | `1`, `2`, `3` | ✅ 是 | +| `备注说明` | 可选备注信息 | `配液站内试剂仓库-A01` | ❌ 否 | + +### 📐 坐标说明 + +**x, y, z** 是库位在仓库内的**三维坐标**: + +``` +仓库(例如 WH4) +├── Z=1(第1层/加样头面) +│ ├── X=1, Y=1(位置 A) +│ ├── X=2, Y=1(位置 B) +│ ├── X=3, Y=1(位置 C) +│ └── ... +│ +└── Z=2(第2层/原液瓶面) + ├── X=1, Y=1(位置 A) + ├── X=2, Y=1(位置 B) + └── ... +``` + +- **warehouseId**: 指定哪个仓库(WH3, WH4, 配液站等) +- **x, y, z**: 在该仓库内的三维坐标 +- **locationId**: 该坐标位置的唯一 UUID + +### 🎯 起点与终点 + +**重要说明**:批量出库模板**只规定了出库的"起点"**(从哪里取物料),**没有指定"终点"**(放到哪里)。 + +``` +出库流程: +起点(Excel 指定) → ?终点(LIMS/工作流决定) + ↓ +locationId, x, y, z → 由 LIMS 系统或当前工作流自动分配 +``` + +**终点由以下方式确定:** +- **LIMS 系统自动分配**:根据当前任务自动规划目标位置 +- **工作流预定义**:在创建出库任务时已绑定目标位置 +- **暂存区**:默认放到出库暂存区,等待下一步操作 + +💡 **对比**:上料操作(`auto_feeding4to3`)则有 `targetWH` 参数可以指定目标仓库 + +--- + +## 🔍 如何获取 UUID? + +### 方法 1:从配置文件获取 + +参考 `yibin_electrolyte_config.json` 中的 `warehouse_mapping`: + +```json +{ + "warehouse_mapping": { + "配液站内试剂仓库": { + "site_uuids": { + "A01": "3a19da43-57b5-294f-d663-154a1cc32270", + "B01": "3a19da43-57b5-7394-5f49-54efe2c9bef2", + "C01": "3a19da43-57b5-5e75-552f-8dbd0ad1075f" + } + }, + "手动堆栈": { + "site_uuids": { + "A01": "3a19deae-2c7a-36f5-5e41-02c5b66feaea", + "A02": "3a19deae-2c7a-dc6d-c41e-ef285d946cfe" + } + } + } +} +``` + +### 方法 2:通过 API 查询 + +```python +material_info = hardware_interface.material_id_query(workflow_id) +locations = material_info.get("locations", []) +``` + +--- + +## 📝 填写示例 + +### 示例 1:从配液站内试剂仓库出库 + +| locationId | warehouseId | quantity | x | y | z | 备注说明 | +|------------|-------------|----------|---|---|---|----------| +| `3a19da43-57b5-294f-d663-154a1cc32270` | 配液站内试剂仓库 | 1 | 1 | 1 | 1 | A01 位置 | +| `3a19da43-57b5-7394-5f49-54efe2c9bef2` | 配液站内试剂仓库 | 2 | 2 | 1 | 1 | B01 位置 | + +### 示例 2:从手动堆栈出库 + +| locationId | warehouseId | quantity | x | y | z | 备注说明 | +|------------|-------------|----------|---|---|---|----------| +| `3a19deae-2c7a-36f5-5e41-02c5b66feaea` | 手动堆栈 | 1 | 1 | 1 | 1 | A01 | +| `3a19deae-2c7a-dc6d-c41e-ef285d946cfe` | 手动堆栈 | 1 | 1 | 2 | 1 | A02 | + +--- + +## 💻 使用方法 + +```python +from bioyond_cell_workstation import BioyondCellWorkstation + +# 初始化工作站 +workstation = BioyondCellWorkstation(config=config, deck=deck) + +# 调用批量出库方法 +result = workstation.auto_batch_outbound_from_xlsx( + xlsx_path="outbound_template.xlsx" +) +``` + +--- + +## ⚠️ 注意事项 + +1. **locationId 必须是有效的 UUID**,不能使用库位名称 +2. **x, y, z 坐标必须与 locationId 对应**,表示该库位在仓库内的位置 +3. **quantity 必须是数字**,可以是整数或浮点数 +4. Excel 文件必须包含表头行 +5. 空行会被自动跳过 +6. 确保 UUID 与实际库位对应,否则 API 会报错 + +--- + +## 📚 相关文件 + +- **配置文件**: `yibin_electrolyte_config.json` +- **Python 代码**: `bioyond_cell_workstation.py` (L630-695) +- **生成脚本**: `create_outbound_template.py` +- **上料模板**: `material_template.xlsx` + +--- + +## 🔄 重新生成模板 + +```bash +conda activate newunilab +python create_outbound_template.py +``` diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_rpc.py b/unilabos/devices/workstation/bioyond_studio/bioyond_rpc.py index afd515aa..c365be7a 100644 --- a/unilabos/devices/workstation/bioyond_studio/bioyond_rpc.py +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_rpc.py @@ -9,7 +9,7 @@ from datetime import datetime, timezone from unilabos.device_comms.rpc import BaseRequest from typing import Optional, List, Dict, Any import json -from unilabos.devices.workstation.bioyond_studio.config import LOCATION_MAPPING + class SimpleLogger: @@ -49,6 +49,14 @@ class BioyondV1RPC(BaseRequest): self.config = config self.api_key = config["api_key"] self.host = config["api_host"] + + # 初始化 location_mapping + # 直接从 warehouse_mapping 构建,确保数据源所谓的单一和结构化 + self.location_mapping = {} + warehouse_mapping = self.config.get("warehouse_mapping", {}) + for warehouse_name, warehouse_config in warehouse_mapping.items(): + if "site_uuids" in warehouse_config: + self.location_mapping.update(warehouse_config["site_uuids"]) self._logger = SimpleLogger() self.material_cache = {} self._load_material_cache() @@ -176,7 +184,40 @@ class BioyondV1RPC(BaseRequest): return {} print(f"add material data: {response['data']}") - return response.get("data", {}) + + # 自动更新缓存 + data = response.get("data", {}) + if data: + if isinstance(data, str): + # 如果返回的是字符串,通常是ID + mat_id = data + name = params.get("name") + else: + # 如果返回的是字典,尝试获取name和id + name = data.get("name") or params.get("name") + mat_id = data.get("id") + + if name and mat_id: + self.material_cache[name] = mat_id + print(f"已自动更新缓存: {name} -> {mat_id}") + + # 处理返回数据中的 details (如果有) + # 有些 API 返回结构可能直接包含 details,或者在 data 字段中 + details = data.get("details", []) if isinstance(data, dict) else [] + if not details and isinstance(data, dict): + details = data.get("detail", []) + + if details: + for detail in details: + d_name = detail.get("name") + # 尝试从不同字段获取 ID + d_id = detail.get("id") or detail.get("detailMaterialId") + + if d_name and d_id: + self.material_cache[d_name] = d_id + print(f"已自动更新 detail 缓存: {d_name} -> {d_id}") + + return data def query_matial_type_id(self, data) -> list: """查找物料typeid""" @@ -203,7 +244,7 @@ class BioyondV1RPC(BaseRequest): params={ "apiKey": self.api_key, "requestTime": self.get_current_time_iso8601(), - "data": {}, + "data": 0, }) if not response or response['code'] != 1: return [] @@ -273,11 +314,19 @@ class BioyondV1RPC(BaseRequest): if not response or response['code'] != 1: return {} + + # 自动更新缓存 - 移除被删除的物料 + for name, mid in list(self.material_cache.items()): + if mid == material_id: + del self.material_cache[name] + print(f"已从缓存移除物料: {name}") + break + return response.get("data", {}) def material_outbound(self, material_id: str, location_name: str, quantity: int) -> dict: """指定库位出库物料(通过库位名称)""" - location_id = LOCATION_MAPPING.get(location_name, location_name) + location_id = self.location_mapping.get(location_name, location_name) params = { "materialId": material_id, @@ -1103,6 +1152,10 @@ class BioyondV1RPC(BaseRequest): for detail_material in detail_materials: detail_name = detail_material.get("name") detail_id = detail_material.get("detailMaterialId") + if not detail_id: + # 尝试其他可能的字段 + detail_id = detail_material.get("id") + if detail_name and detail_id: self.material_cache[detail_name] = detail_id print(f"加载detail材料: {detail_name} -> ID: {detail_id}") @@ -1123,6 +1176,14 @@ class BioyondV1RPC(BaseRequest): print(f"从缓存找到材料: {material_name_or_id} -> ID: {material_id}") return material_id + # 如果缓存中没有,尝试刷新缓存 + print(f"缓存中未找到材料 '{material_name_or_id}',尝试刷新缓存...") + self.refresh_material_cache() + if material_name_or_id in self.material_cache: + material_id = self.material_cache[material_name_or_id] + print(f"刷新缓存后找到材料: {material_name_or_id} -> ID: {material_id}") + return material_id + print(f"警告: 未在缓存中找到材料名称 '{material_name_or_id}',将使用原值") return material_name_or_id diff --git a/unilabos/devices/workstation/bioyond_studio/config.py b/unilabos/devices/workstation/bioyond_studio/config.py deleted file mode 100644 index e06c4135..00000000 --- a/unilabos/devices/workstation/bioyond_studio/config.py +++ /dev/null @@ -1,142 +0,0 @@ -# config.py -""" -配置文件 - 包含所有配置信息和映射关系 -""" - -# API配置 -API_CONFIG = { - "api_key": "", - "api_host": "" -} - -# 工作流映射配置 -WORKFLOW_MAPPINGS = { - "reactor_taken_out": "", - "reactor_taken_in": "", - "Solid_feeding_vials": "", - "Liquid_feeding_vials(non-titration)": "", - "Liquid_feeding_solvents": "", - "Liquid_feeding(titration)": "", - "liquid_feeding_beaker": "", - "Drip_back": "", -} - -# 工作流名称到DisplaySectionName的映射 -WORKFLOW_TO_SECTION_MAP = { - 'reactor_taken_in': '反应器放入', - 'liquid_feeding_beaker': '液体投料-烧杯', - 'Liquid_feeding_vials(non-titration)': '液体投料-小瓶(非滴定)', - 'Liquid_feeding_solvents': '液体投料-溶剂', - 'Solid_feeding_vials': '固体投料-小瓶', - 'Liquid_feeding(titration)': '液体投料-滴定', - 'reactor_taken_out': '反应器取出' -} - -# 库位映射配置 -WAREHOUSE_MAPPING = { - "粉末堆栈": { - "uuid": "", - "site_uuids": { - # 样品板 - "A1": "3a14198e-6929-31f0-8a22-0f98f72260df", - "A2": "3a14198e-6929-4379-affa-9a2935c17f99", - "A3": "3a14198e-6929-56da-9a1c-7f5fbd4ae8af", - "A4": "3a14198e-6929-5e99-2b79-80720f7cfb54", - "B1": "3a14198e-6929-f525-9a1b-1857552b28ee", - "B2": "3a14198e-6929-bf98-0fd5-26e1d68bf62d", - "B3": "3a14198e-6929-2d86-a468-602175a2b5aa", - "B4": "3a14198e-6929-1a98-ae57-e97660c489ad", - # 分装板 - "C1": "3a14198e-6929-46fe-841e-03dd753f1e4a", - "C2": "3a14198e-6929-1bc9-a9bd-3b7ca66e7f95", - "C3": "3a14198e-6929-72ac-32ce-9b50245682b8", - "C4": "3a14198e-6929-3bd8-e6c7-4a9fd93be118", - "D1": "3a14198e-6929-8a0b-b686-6f4a2955c4e2", - "D2": "3a14198e-6929-dde1-fc78-34a84b71afdf", - "D3": "3a14198e-6929-a0ec-5f15-c0f9f339f963", - "D4": "3a14198e-6929-7ac8-915a-fea51cb2e884" - } - }, - "溶液堆栈": { - "uuid": "", - "site_uuids": { - "A1": "3a14198e-d724-e036-afdc-2ae39a7f3383", - "A2": "3a14198e-d724-afa4-fc82-0ac8a9016791", - "A3": "3a14198e-d724-ca48-bb9e-7e85751e55b6", - "A4": "3a14198e-d724-df6d-5e32-5483b3cab583", - "B1": "3a14198e-d724-d818-6d4f-5725191a24b5", - "B2": "3a14198e-d724-be8a-5e0b-012675e195c6", - "B3": "3a14198e-d724-cc1e-5c2c-228a130f40a8", - "B4": "3a14198e-d724-1e28-c885-574c3df468d0", - "C1": "3a14198e-d724-b5bb-adf3-4c5a0da6fb31", - "C2": "3a14198e-d724-ab4e-48cb-817c3c146707", - "C3": "3a14198e-d724-7f18-1853-39d0c62e1d33", - "C4": "3a14198e-d724-28a2-a760-baa896f46b66", - "D1": "3a14198e-d724-d378-d266-2508a224a19f", - "D2": "3a14198e-d724-f56e-468b-0110a8feb36a", - "D3": "3a14198e-d724-0cf1-dea9-a1f40fe7e13c", - "D4": "3a14198e-d724-0ddd-9654-f9352a421de9" - } - }, - "试剂堆栈": { - "uuid": "", - "site_uuids": { - "A1": "3a14198c-c2cf-8b40-af28-b467808f1c36", - "A2": "3a14198c-c2d0-f3e7-871a-e470d144296f", - "A3": "3a14198c-c2d0-dc7d-b8d0-e1d88cee3094", - "A4": "3a14198c-c2d0-2070-efc8-44e245f10c6f", - "B1": "3a14198c-c2d0-354f-39ad-642e1a72fcb8", - "B2": "3a14198c-c2d0-1559-105d-0ea30682cab4", - "B3": "3a14198c-c2d0-725e-523d-34c037ac2440", - "B4": "3a14198c-c2d0-efce-0939-69ca5a7dfd39" - } - } -} - -# 物料类型配置 -MATERIAL_TYPE_MAPPINGS = { - "烧杯": ("BIOYOND_PolymerStation_1FlaskCarrier", "3a14196b-24f2-ca49-9081-0cab8021bf1a"), - "试剂瓶": ("BIOYOND_PolymerStation_1BottleCarrier", ""), - "样品板": ("BIOYOND_PolymerStation_6StockCarrier", "3a14196e-b7a0-a5da-1931-35f3000281e9"), - "分装板": ("BIOYOND_PolymerStation_6VialCarrier", "3a14196e-5dfe-6e21-0c79-fe2036d052c4"), - "样品瓶": ("BIOYOND_PolymerStation_Solid_Stock", "3a14196a-cf7d-8aea-48d8-b9662c7dba94"), - "90%分装小瓶": ("BIOYOND_PolymerStation_Solid_Vial", "3a14196c-cdcf-088d-dc7d-5cf38f0ad9ea"), - "10%分装小瓶": ("BIOYOND_PolymerStation_Liquid_Vial", "3a14196c-76be-2279-4e22-7310d69aed68"), -} - -# 步骤参数配置(各工作流的步骤UUID) -WORKFLOW_STEP_IDS = { - "reactor_taken_in": { - "config": "" - }, - "liquid_feeding_beaker": { - "liquid": "", - "observe": "" - }, - "liquid_feeding_vials_non_titration": { - "liquid": "", - "observe": "" - }, - "liquid_feeding_solvents": { - "liquid": "", - "observe": "" - }, - "solid_feeding_vials": { - "feeding": "", - "observe": "" - }, - "liquid_feeding_titration": { - "liquid": "", - "observe": "" - }, - "drip_back": { - "liquid": "", - "observe": "" - } -} - -LOCATION_MAPPING = {} - -ACTION_NAMES = {} - -HTTP_SERVICE_CONFIG = {} \ No newline at end of file diff --git a/unilabos/devices/workstation/bioyond_studio/config.py.deprecated b/unilabos/devices/workstation/bioyond_studio/config.py.deprecated new file mode 100644 index 00000000..cccd0873 --- /dev/null +++ b/unilabos/devices/workstation/bioyond_studio/config.py.deprecated @@ -0,0 +1,329 @@ +# config.py +""" +Bioyond工作站配置文件 +包含API配置、工作流映射、物料类型映射、仓库库位映射等所有配置信息 +""" + +from unilabos.resources.bioyond.decks import BIOYOND_PolymerReactionStation_Deck + +# ============================================================================ +# 基础配置 +# ============================================================================ + +# API配置 +API_CONFIG = { + "api_key": "DE9BDDA0", + "api_host": "http://192.168.1.200:44402" +} + +# HTTP 报送服务配置 +HTTP_SERVICE_CONFIG = { + "http_service_host": "127.0.0.1", # 监听地址 + "http_service_port": 8080, # 监听端口 +} + +# Deck配置 - 反应站工作台配置 +DECK_CONFIG = BIOYOND_PolymerReactionStation_Deck(setup=True) + +# ============================================================================ +# 工作流配置 +# ============================================================================ + +# 工作流ID映射 +WORKFLOW_MAPPINGS = { + "reactor_taken_out": "3a16081e-4788-ca37-eff4-ceed8d7019d1", + "reactor_taken_in": "3a160df6-76b3-0957-9eb0-cb496d5721c6", + "Solid_feeding_vials": "3a160877-87e7-7699-7bc6-ec72b05eb5e6", + "Liquid_feeding_vials(non-titration)": "3a167d99-6158-c6f0-15b5-eb030f7d8e47", + "Liquid_feeding_solvents": "3a160824-0665-01ed-285a-51ef817a9046", + "Liquid_feeding(titration)": "3a16082a-96ac-0449-446a-4ed39f3365b6", + "liquid_feeding_beaker": "3a16087e-124f-8ddb-8ec1-c2dff09ca784", + "Drip_back": "3a162cf9-6aac-565a-ddd7-682ba1796a4a", +} + +# 工作流名称到显示名称的映射 +WORKFLOW_TO_SECTION_MAP = { + 'reactor_taken_in': '反应器放入', + 'reactor_taken_out': '反应器取出', + 'Solid_feeding_vials': '固体投料-小瓶', + 'Liquid_feeding_vials(non-titration)': '液体投料-小瓶(非滴定)', + 'Liquid_feeding_solvents': '液体投料-溶剂', + 'Liquid_feeding(titration)': '液体投料-滴定', + 'liquid_feeding_beaker': '液体投料-烧杯', + 'Drip_back': '液体回滴' +} + +# 工作流步骤ID配置 +WORKFLOW_STEP_IDS = { + "reactor_taken_in": { + "config": "60a06f85-c5b3-29eb-180f-4f62dd7e2154" + }, + "liquid_feeding_beaker": { + "liquid": "6808cda7-fee7-4092-97f0-5f9c2ffa60e3", + "observe": "1753c0de-dffc-4ee6-8458-805a2e227362" + }, + "liquid_feeding_vials_non_titration": { + "liquid": "62ea6e95-3d5d-43db-bc1e-9a1802673861", + "observe": "3a167d99-6172-b67b-5f22-a7892197142e" + }, + "liquid_feeding_solvents": { + "liquid": "1fcea355-2545-462b-b727-350b69a313bf", + "observe": "0553dfb3-9ac5-4ace-8e00-2f11029919a8" + }, + "solid_feeding_vials": { + "feeding": "f7ae7448-4f20-4c1d-8096-df6fbadd787a", + "observe": "263c7ed5-7277-426b-bdff-d6fbf77bcc05" + }, + "liquid_feeding_titration": { + "liquid": "a00ec41b-e666-4422-9c20-bfcd3cd15c54", + "observe": "ac738ff6-4c58-4155-87b1-d6f65a2c9ab5" + }, + "drip_back": { + "liquid": "371be86a-ab77-4769-83e5-54580547c48a", + "observe": "ce024b9d-bd20-47b8-9f78-ca5ce7f44cf1" + } +} + +# 工作流动作名称配置 +ACTION_NAMES = { + "reactor_taken_in": { + "config": "通量-配置", + "stirring": "反应模块-开始搅拌" + }, + "solid_feeding_vials": { + "feeding": "粉末加样模块-投料", + "observe": "反应模块-观察搅拌结果" + }, + "liquid_feeding_vials_non_titration": { + "liquid": "稀释液瓶加液位-液体投料", + "observe": "反应模块-滴定结果观察" + }, + "liquid_feeding_solvents": { + "liquid": "试剂AB放置位-试剂吸液分液", + "observe": "反应模块-观察搅拌结果" + }, + "liquid_feeding_titration": { + "liquid": "稀释液瓶加液位-稀释液吸液分液", + "observe": "反应模块-滴定结果观察" + }, + "liquid_feeding_beaker": { + "liquid": "烧杯溶液放置位-烧杯吸液分液", + "observe": "反应模块-观察搅拌结果" + }, + "drip_back": { + "liquid": "试剂AB放置位-试剂吸液分液", + "observe": "反应模块-向下滴定结果观察" + } +} + +# ============================================================================ +# 仓库配置 +# ============================================================================ +# 说明: +# - 出库和入库操作都需要UUID +WAREHOUSE_MAPPING = { + # ========== 反应站仓库 ========== + + # 堆栈1左 - 反应站左侧堆栈 (4行×4列=16个库位, A01~D04) + "堆栈1左": { + "uuid": "3a14aa17-0d49-dce4-486e-4b5c85c8b366", + "site_uuids": { + "A01": "3a14aa17-0d49-11d7-a6e1-f236b3e5e5a3", + "A02": "3a14aa17-0d49-4bc5-8836-517b75473f5f", + "A03": "3a14aa17-0d49-c2bc-6222-5cee8d2d94f8", + "A04": "3a14aa17-0d49-3ce2-8e9a-008c38d116fb", + "B01": "3a14aa17-0d49-f49c-6b66-b27f185a3b32", + "B02": "3a14aa17-0d49-cf46-df85-a979c9c9920c", + "B03": "3a14aa17-0d49-7698-4a23-f7ffb7d48ba3", + "B04": "3a14aa17-0d49-1231-99be-d5870e6478e9", + "C01": "3a14aa17-0d49-be34-6fae-4aed9d48b70b", + "C02": "3a14aa17-0d49-11d7-0897-34921dcf6b7c", + "C03": "3a14aa17-0d49-9840-0bd5-9c63c1bb2c29", + "C04": "3a14aa17-0d49-8335-3bff-01da69ea4911", + "D01": "3a14aa17-0d49-2bea-c8e5-2b32094935d5", + "D02": "3a14aa17-0d49-cff4-e9e8-5f5f0bc1ef32", + "D03": "3a14aa17-0d49-4948-cb0a-78f30d1ca9b8", + "D04": "3a14aa17-0d49-fd2f-9dfb-a29b11e84099", + }, + }, + + # 堆栈1右 - 反应站右侧堆栈 (4行×4列=16个库位, A05~D08) + "堆栈1右": { + "uuid": "3a14aa17-0d49-dce4-486e-4b5c85c8b366", + "site_uuids": { + "A05": "3a14aa17-0d49-2c61-edc8-72a8ca7192dd", + "A06": "3a14aa17-0d49-60c8-2b00-40b17198f397", + "A07": "3a14aa17-0d49-ec5b-0b75-634dce8eed25", + "A08": "3a14aa17-0d49-3ec9-55b3-f3189c4ec53d", + "B05": "3a14aa17-0d49-6a4e-abcf-4c113eaaeaad", + "B06": "3a14aa17-0d49-e3f6-2dd6-28c2e8194fbe", + "B07": "3a14aa17-0d49-11a6-b861-ee895121bf52", + "B08": "3a14aa17-0d49-9c7d-1145-d554a6e482f0", + "C05": "3a14aa17-0d49-45c4-7a34-5105bc3e2368", + "C06": "3a14aa17-0d49-867e-39ab-31b3fe9014be", + "C07": "3a14aa17-0d49-ec56-c4b4-39fd9b2131e7", + "C08": "3a14aa17-0d49-1128-d7d9-ffb1231c98c0", + "D05": "3a14aa17-0d49-e843-f961-ea173326a14b", + "D06": "3a14aa17-0d49-4d26-a985-f188359c4f8b", + "D07": "3a14aa17-0d49-223a-b520-bc092bb42fe0", + "D08": "3a14aa17-0d49-4fa3-401a-6a444e1cca22", + }, + }, + + # 站内试剂存放堆栈 + "站内试剂存放堆栈": { + "uuid": "3a14aa3b-9fab-9d8e-d1a7-828f01f51f0c", + "site_uuids": { + "A01": "3a14aa3b-9fab-adac-7b9c-e1ee446b51d5", + "A02": "3a14aa3b-9fab-ca72-febc-b7c304476c78" + } + }, + + + # 测量小瓶仓库(测密度) + "测量小瓶仓库": { + "uuid": "3a15012f-705b-c0de-3f9e-950c205f9921", + "site_uuids": { + "A01": "3a15012f-705e-0524-3161-c523b5aebc97", + "A02": "3a15012f-705e-7cd1-32ab-ad4fd1ab75c8", + "A03": "3a15012f-705e-a5d6-edac-bdbfec236260", + "B01": "3a15012f-705e-e0ee-80e0-10a6b3fc500d", + "B02": "3a15012f-705e-e499-180d-de06d60d0b21", + "B03": "3a15012f-705e-eff6-63f1-09f742096b26" + } + }, + + # 站内Tip盒堆栈 - 用于存放枪头盒 (耗材) + "站内Tip盒堆栈": { + "uuid": "3a14aa3a-2d3c-b5c1-9ddf-7c4a957d459a", + "site_uuids": { + "A01": "3a14aa3a-2d3d-e700-411a-0ddf85e1f18a", + "A02": "3a14aa3a-2d3d-a7ce-099a-d5632fdafa24", + "A03": "3a14aa3a-2d3d-bdf6-a702-c60b38b08501", + "B01": "3a14aa3a-2d3d-d704-f076-2a8d5bc72cb8", + "B02": "3a14aa3a-2d3d-c350-2526-0778d173a5ac", + "B03": "3a14aa3a-2d3d-bc38-b356-f0de2e44e0c7" + } + }, + # ========== 配液站仓库 ========== + "粉末堆栈": { + "uuid": "3a14198e-6928-121f-7ca6-88ad3ae7e6a0", + "site_uuids": { + "A01": "3a14198e-6929-31f0-8a22-0f98f72260df", + "A02": "3a14198e-6929-4379-affa-9a2935c17f99", + "A03": "3a14198e-6929-56da-9a1c-7f5fbd4ae8af", + "A04": "3a14198e-6929-5e99-2b79-80720f7cfb54", + "B01": "3a14198e-6929-f525-9a1b-1857552b28ee", + "B02": "3a14198e-6929-bf98-0fd5-26e1d68bf62d", + "B03": "3a14198e-6929-2d86-a468-602175a2b5aa", + "B04": "3a14198e-6929-1a98-ae57-e97660c489ad", + "C01": "3a14198e-6929-46fe-841e-03dd753f1e4a", + "C02": "3a14198e-6929-72ac-32ce-9b50245682b8", + "C03": "3a14198e-6929-8a0b-b686-6f4a2955c4e2", + "C04": "3a14198e-6929-a0ec-5f15-c0f9f339f963", + "D01": "3a14198e-6929-1bc9-a9bd-3b7ca66e7f95", + "D02": "3a14198e-6929-3bd8-e6c7-4a9fd93be118", + "D03": "3a14198e-6929-dde1-fc78-34a84b71afdf", + "D04": "3a14198e-6929-7ac8-915a-fea51cb2e884" + } + }, + "溶液堆栈": { + "uuid": "3a14198e-d723-2c13-7d12-50143e190a23", + "site_uuids": { + "A01": "3a14198e-d724-e036-afdc-2ae39a7f3383", + "A02": "3a14198e-d724-d818-6d4f-5725191a24b5", + "A03": "3a14198e-d724-b5bb-adf3-4c5a0da6fb31", + "A04": "3a14198e-d724-d378-d266-2508a224a19f", + "B01": "3a14198e-d724-afa4-fc82-0ac8a9016791", + "B02": "3a14198e-d724-be8a-5e0b-012675e195c6", + "B03": "3a14198e-d724-ab4e-48cb-817c3c146707", + "B04": "3a14198e-d724-f56e-468b-0110a8feb36a", + "C01": "3a14198e-d724-ca48-bb9e-7e85751e55b6", + "C02": "3a14198e-d724-cc1e-5c2c-228a130f40a8", + "C03": "3a14198e-d724-7f18-1853-39d0c62e1d33", + "C04": "3a14198e-d724-0cf1-dea9-a1f40fe7e13c", + "D01": "3a14198e-d724-df6d-5e32-5483b3cab583", + "D02": "3a14198e-d724-1e28-c885-574c3df468d0", + "D03": "3a14198e-d724-28a2-a760-baa896f46b66", + "D04": "3a14198e-d724-0ddd-9654-f9352a421de9" + } + }, + "试剂堆栈": { + "uuid": "3a14198c-c2cc-0290-e086-44a428fba248", + "site_uuids": { + "A01": "3a14198c-c2cf-8b40-af28-b467808f1c36", # x=1, y=1, code=0001-0001 + "A02": "3a14198c-c2d0-dc7d-b8d0-e1d88cee3094", # x=1, y=2, code=0001-0002 + "A03": "3a14198c-c2d0-354f-39ad-642e1a72fcb8", # x=1, y=3, code=0001-0003 + "A04": "3a14198c-c2d0-725e-523d-34c037ac2440", # x=1, y=4, code=0001-0004 + "B01": "3a14198c-c2d0-f3e7-871a-e470d144296f", # x=2, y=1, code=0001-0005 + "B02": "3a14198c-c2d0-2070-efc8-44e245f10c6f", # x=2, y=2, code=0001-0006 + "B03": "3a14198c-c2d0-1559-105d-0ea30682cab4", # x=2, y=3, code=0001-0007 + "B04": "3a14198c-c2d0-efce-0939-69ca5a7dfd39" # x=2, y=4, code=0001-0008 + } + } +} + +# ============================================================================ +# 物料类型配置 +# ============================================================================ +# 说明: +# - 格式: PyLabRobot资源类型名称 → Bioyond系统typeId的UUID +# - 这个映射基于 resource.model 属性 (不是显示名称!) +# - UUID为空表示该类型暂未在Bioyond系统中定义 +MATERIAL_TYPE_MAPPINGS = { + # ================================================配液站资源============================================================ + # ==================================================样品=============================================================== + "BIOYOND_PolymerStation_1FlaskCarrier": ("烧杯", "3a14196b-24f2-ca49-9081-0cab8021bf1a"), # 配液站-样品-烧杯 + "BIOYOND_PolymerStation_1BottleCarrier": ("试剂瓶", "3a14196b-8bcf-a460-4f74-23f21ca79e72"), # 配液站-样品-试剂瓶 + "BIOYOND_PolymerStation_6StockCarrier": ("分装板", "3a14196e-5dfe-6e21-0c79-fe2036d052c4"), # 配液站-样品-分装板 + "BIOYOND_PolymerStation_Liquid_Vial": ("10%分装小瓶", "3a14196c-76be-2279-4e22-7310d69aed68"), # 配液站-样品-分装板-第一排小瓶 + "BIOYOND_PolymerStation_Solid_Vial": ("90%分装小瓶", "3a14196c-cdcf-088d-dc7d-5cf38f0ad9ea"), # 配液站-样品-分装板-第二排小瓶 + # ==================================================试剂=============================================================== + "BIOYOND_PolymerStation_8StockCarrier": ("样品板", "3a14196e-b7a0-a5da-1931-35f3000281e9"), # 配液站-试剂-样品板(8孔) + "BIOYOND_PolymerStation_Solid_Stock": ("样品瓶", "3a14196a-cf7d-8aea-48d8-b9662c7dba94"), # 配液站-试剂-样品板-样品瓶 + +} + +# ============================================================================ +# 动态生成的库位UUID映射(从WAREHOUSE_MAPPING中提取) +# ============================================================================ + +LOCATION_MAPPING = {} +for warehouse_name, warehouse_config in WAREHOUSE_MAPPING.items(): + if "site_uuids" in warehouse_config: + LOCATION_MAPPING.update(warehouse_config["site_uuids"]) + +# ============================================================================ +# 物料默认参数配置 +# ============================================================================ +# 说明: +# - 为特定物料名称自动添加默认参数(如密度、分子量、单位等) +# - 格式: 物料名称 → {参数字典} +# - 在创建或更新物料时,会自动合并这些参数到 Parameters 字段 +# - unit: 物料的计量单位(会用于 unit 字段) +# - density/densityUnit: 密度信息(会添加到 Parameters 中) + +MATERIAL_DEFAULT_PARAMETERS = { + # 溶剂类 + "NMP": { + "unit": "毫升", + "density": "1.03", + "densityUnit": "g/mL", + "description": "N-甲基吡咯烷酮 (N-Methyl-2-pyrrolidone)" + }, + # 可以继续添加其他物料... +} + +# ============================================================================ +# 物料类型默认参数配置 +# ============================================================================ +# 说明: +# - 为特定物料类型(UUID)自动添加默认参数 +# - 格式: Bioyond类型UUID → {参数字典} +# - 优先级低于按名称匹配的配置 +MATERIAL_TYPE_PARAMETERS = { + # 示例: + # "3a14196b-24f2-ca49-9081-0cab8021bf1a": { # 烧杯 + # "unit": "个" + # } +} diff --git a/unilabos/devices/workstation/bioyond_studio/dispensing_station.py b/unilabos/devices/workstation/bioyond_studio/dispensing_station/dispensing_station.py similarity index 79% rename from unilabos/devices/workstation/bioyond_studio/dispensing_station.py rename to unilabos/devices/workstation/bioyond_studio/dispensing_station/dispensing_station.py index 6d512720..dc48487b 100644 --- a/unilabos/devices/workstation/bioyond_studio/dispensing_station.py +++ b/unilabos/devices/workstation/bioyond_studio/dispensing_station/dispensing_station.py @@ -4,7 +4,8 @@ import time from typing import Optional, Dict, Any, List from typing_extensions import TypedDict import requests -from unilabos.devices.workstation.bioyond_studio.config import API_CONFIG +import pint + from unilabos.devices.workstation.bioyond_studio.bioyond_rpc import BioyondException from unilabos.devices.workstation.bioyond_studio.station import BioyondWorkstation @@ -25,13 +26,89 @@ class ComputeExperimentDesignReturn(TypedDict): class BioyondDispensingStation(BioyondWorkstation): def __init__( self, - config, - # 桌子 - deck, - *args, + config: dict = None, + deck=None, + protocol_type=None, **kwargs, - ): - super().__init__(config, deck, *args, **kwargs) + ): + """初始化配液站 + + Args: + config: 配置字典,应包含material_type_mappings等配置 + deck: Deck对象 + protocol_type: 协议类型(由ROS系统传递,此处忽略) + **kwargs: 其他可能的参数 + """ + if config is None: + config = {} + + # 将 kwargs 合并到 config 中 (处理扁平化配置如 api_key) + config.update(kwargs) + + if deck is None and config: + deck = config.get('deck') + + # 🔧 修复: 确保 Deck 上的 warehouses 具有正确的 UUID (必须在 super().__init__ 之前执行,因为父类会触发同步) + # 从配置中读取 warehouse_mapping,并应用到实际的 deck 资源上 + if config and "warehouse_mapping" in config and deck: + warehouse_mapping = config["warehouse_mapping"] + print(f"正在根据配置更新 Deck warehouse UUIDs... (共有 {len(warehouse_mapping)} 个配置)") + + user_deck = deck + # 初始化 warehouses 字典 + if not hasattr(user_deck, "warehouses") or user_deck.warehouses is None: + user_deck.warehouses = {} + + # 1. 尝试从 children 中查找匹配的资源 + for child in user_deck.children: + # 简单判断: 如果名字在 mapping 中,就认为是 warehouse + if child.name in warehouse_mapping: + user_deck.warehouses[child.name] = child + print(f" - 从子资源中找到 warehouse: {child.name}") + + # 2. 如果还是没找到,且 Deck 类有 setup 方法,尝试调用 setup (针对 Deck 对象正确但未初始化的情况) + if not user_deck.warehouses and hasattr(user_deck, "setup"): + print(" - 尝试调用 deck.setup() 初始化仓库...") + try: + user_deck.setup() + # setup 后重新检查 + if hasattr(user_deck, "warehouses") and user_deck.warehouses: + print(f" - setup() 成功,找到 {len(user_deck.warehouses)} 个仓库") + except Exception as e: + print(f" - 调用 setup() 失败: {e}") + + # 3. 如果仍然为空,可能需要手动创建 (仅针对特定已知的 Deck 类型进行补救,这里暂时只打印警告) + if not user_deck.warehouses: + print(" - ⚠️ 仍然无法找到任何 warehouse 资源!") + + for wh_name, wh_config in warehouse_mapping.items(): + target_uuid = wh_config.get("uuid") + + # 尝试在 deck.warehouses 中查找 + wh_resource = None + if hasattr(user_deck, "warehouses") and wh_name in user_deck.warehouses: + wh_resource = user_deck.warehouses[wh_name] + + # 如果没找到,尝试在所有子资源中查找 + if not wh_resource: + wh_resource = user_deck.get_resource(wh_name) + + if wh_resource: + if target_uuid: + current_uuid = getattr(wh_resource, "uuid", None) + print(f"✅ 更新仓库 '{wh_name}' UUID: {current_uuid} -> {target_uuid}") + + # 动态添加 uuid 属性 + wh_resource.uuid = target_uuid + # 同时也确保 category 正确,避免 graphio 识别错误 + # wh_resource.category = "warehouse" + else: + print(f"⚠️ 仓库 '{wh_name}' 在配置中没有 UUID") + else: + print(f"❌ 在 Deck 中未找到配置的仓库: '{wh_name}'") + + super().__init__(bioyond_config=config, deck=deck) + # self.config = config # self.api_key = config["api_key"] # self.host = config["api_host"] @@ -43,6 +120,41 @@ class BioyondDispensingStation(BioyondWorkstation): # 用于跟踪任务完成状态的字典: {orderCode: {status, order_id, timestamp}} self.order_completion_status = {} + # 初始化 pint 单位注册表 + self.ureg = pint.UnitRegistry() + + # 化合物信息 + self.compound_info = { + "MolWt": { + "MDA": 108.14 * self.ureg.g / self.ureg.mol, + "TDA": 122.16 * self.ureg.g / self.ureg.mol, + "PAPP": 521.62 * self.ureg.g / self.ureg.mol, + "BTDA": 322.23 * self.ureg.g / self.ureg.mol, + "BPDA": 294.22 * self.ureg.g / self.ureg.mol, + "6FAP": 366.26 * self.ureg.g / self.ureg.mol, + "PMDA": 218.12 * self.ureg.g / self.ureg.mol, + "MPDA": 108.14 * self.ureg.g / self.ureg.mol, + "SIDA": 248.51 * self.ureg.g / self.ureg.mol, + "ODA": 200.236 * self.ureg.g / self.ureg.mol, + "4,4'-ODA": 200.236 * self.ureg.g / self.ureg.mol, + "134": 292.34 * self.ureg.g / self.ureg.mol, + }, + "FuncGroup": { + "MDA": "Amine", + "TDA": "Amine", + "PAPP": "Amine", + "BTDA": "Anhydride", + "BPDA": "Anhydride", + "6FAP": "Amine", + "MPDA": "Amine", + "SIDA": "Amine", + "PMDA": "Anhydride", + "ODA": "Amine", + "4,4'-ODA": "Amine", + "134": "Amine", + } + } + def _post_project_api(self, endpoint: str, data: Any) -> Dict[str, Any]: """项目接口通用POST调用 @@ -54,7 +166,7 @@ class BioyondDispensingStation(BioyondWorkstation): dict: 服务端响应,失败时返回 {code:0,message,...} """ request_data = { - "apiKey": API_CONFIG["api_key"], + "apiKey": self.bioyond_config["api_key"], "requestTime": self.hardware_interface.get_current_time_iso8601(), "data": data } @@ -85,7 +197,7 @@ class BioyondDispensingStation(BioyondWorkstation): dict: 服务端响应,失败时返回 {code:0,message,...} """ request_data = { - "apiKey": API_CONFIG["api_key"], + "apiKey": self.bioyond_config["api_key"], "requestTime": self.hardware_interface.get_current_time_iso8601(), "data": data } @@ -118,20 +230,22 @@ class BioyondDispensingStation(BioyondWorkstation): ratio = json.loads(ratio) except Exception: ratio = {} - root = str(Path(__file__).resolve().parents[3]) - if root not in sys.path: - sys.path.append(root) - try: - mod = importlib.import_module("tem.compute") - except Exception as e: - raise BioyondException(f"无法导入计算模块: {e}") try: wp = float(wt_percent) if isinstance(wt_percent, str) else wt_percent mt = float(m_tot) if isinstance(m_tot, str) else m_tot tp = float(titration_percent) if isinstance(titration_percent, str) else titration_percent except Exception as e: raise BioyondException(f"参数解析失败: {e}") - res = mod.generate_experiment_design(ratio=ratio, wt_percent=wp, m_tot=mt, titration_percent=tp) + + # 2. 调用内部计算方法 + res = self._generate_experiment_design( + ratio=ratio, + wt_percent=wp, + m_tot=mt, + titration_percent=tp + ) + + # 3. 构造返回结果 out = { "solutions": res.get("solutions", []), "titration": res.get("titration", {}), @@ -140,11 +254,248 @@ class BioyondDispensingStation(BioyondWorkstation): "return_info": json.dumps(res, ensure_ascii=False) } return out + except BioyondException: raise except Exception as e: raise BioyondException(str(e)) + def _generate_experiment_design( + self, + ratio: dict, + wt_percent: float = 0.25, + m_tot: float = 70, + titration_percent: float = 0.03, + ) -> dict: + """内部方法:生成实验设计 + + 根据FuncGroup自动区分二胺和二酐,每种二胺单独配溶液,严格按照ratio顺序投料。 + + 参数: + ratio: 化合物配比字典,格式: {"compound_name": ratio_value} + wt_percent: 固体重量百分比 + m_tot: 反应混合物总质量(g) + titration_percent: 滴定溶液百分比 + + 返回: + 包含实验设计详细参数的字典 + """ + # 溶剂密度 + ρ_solvent = 1.03 * self.ureg.g / self.ureg.ml + # 二酐溶解度 + solubility = 0.02 * self.ureg.g / self.ureg.ml + # 投入固体时最小溶剂体积 + V_min = 30 * self.ureg.ml + m_tot = m_tot * self.ureg.g + + # 保持ratio中的顺序 + compound_names = list(ratio.keys()) + compound_ratios = list(ratio.values()) + + # 验证所有化合物是否在 compound_info 中定义 + undefined_compounds = [name for name in compound_names if name not in self.compound_info["MolWt"]] + if undefined_compounds: + available = list(self.compound_info["MolWt"].keys()) + raise ValueError( + f"以下化合物未在 compound_info 中定义: {undefined_compounds}。" + f"可用的化合物: {available}" + ) + + # 获取各化合物的分子量和官能团类型 + molecular_weights = [self.compound_info["MolWt"][name] for name in compound_names] + func_groups = [self.compound_info["FuncGroup"][name] for name in compound_names] + + # 记录化合物信息用于调试 + self.hardware_interface._logger.info(f"化合物名称: {compound_names}") + self.hardware_interface._logger.info(f"官能团类型: {func_groups}") + + # 按原始顺序分离二胺和二酐 + ordered_compounds = list(zip(compound_names, compound_ratios, molecular_weights, func_groups)) + diamine_compounds = [(name, ratio_val, mw, i) for i, (name, ratio_val, mw, fg) in enumerate(ordered_compounds) if fg == "Amine"] + anhydride_compounds = [(name, ratio_val, mw, i) for i, (name, ratio_val, mw, fg) in enumerate(ordered_compounds) if fg == "Anhydride"] + + if not diamine_compounds or not anhydride_compounds: + raise ValueError( + f"需要同时包含二胺(Amine)和二酐(Anhydride)化合物。" + f"当前二胺: {[c[0] for c in diamine_compounds]}, " + f"当前二酐: {[c[0] for c in anhydride_compounds]}" + ) + + # 计算加权平均分子量 (基于摩尔比) + total_molar_ratio = sum(compound_ratios) + weighted_molecular_weight = sum(ratio_val * mw for ratio_val, mw in zip(compound_ratios, molecular_weights)) + + # 取最后一个二酐用于滴定 + titration_anhydride = anhydride_compounds[-1] + solid_anhydrides = anhydride_compounds[:-1] if len(anhydride_compounds) > 1 else [] + + # 二胺溶液配制参数 - 每种二胺单独配制 + diamine_solutions = [] + total_diamine_volume = 0 * self.ureg.ml + + # 计算反应物的总摩尔量 + n_reactant = m_tot * wt_percent / weighted_molecular_weight + + for name, ratio_val, mw, order_index in diamine_compounds: + # 跳过 SIDA + if name == "SIDA": + continue + + # 计算该二胺需要的摩尔数 + n_diamine_needed = n_reactant * ratio_val + + # 二胺溶液配制参数 (每种二胺固定配制参数) + m_diamine_solid = 5.0 * self.ureg.g # 每种二胺固体质量 + V_solvent_for_this = 20 * self.ureg.ml # 每种二胺溶剂体积 + m_solvent_for_this = ρ_solvent * V_solvent_for_this + + # 计算该二胺溶液的浓度 + c_diamine = (m_diamine_solid / mw) / V_solvent_for_this + + # 计算需要移取的溶液体积 + V_diamine_needed = n_diamine_needed / c_diamine + + diamine_solutions.append({ + "name": name, + "order": order_index, + "solid_mass": m_diamine_solid.magnitude, + "solvent_volume": V_solvent_for_this.magnitude, + "concentration": c_diamine.magnitude, + "volume_needed": V_diamine_needed.magnitude, + "molar_ratio": ratio_val + }) + + total_diamine_volume += V_diamine_needed + + # 按原始顺序排序 + diamine_solutions.sort(key=lambda x: x["order"]) + + # 计算滴定二酐的质量 + titration_name, titration_ratio, titration_mw, _ = titration_anhydride + m_titration_anhydride = n_reactant * titration_ratio * titration_mw + m_titration_90 = m_titration_anhydride * (1 - titration_percent) + m_titration_10 = m_titration_anhydride * titration_percent + + # 计算其他固体二酐的质量 (按顺序) + solid_anhydride_masses = [] + for name, ratio_val, mw, order_index in solid_anhydrides: + mass = n_reactant * ratio_val * mw + solid_anhydride_masses.append({ + "name": name, + "order": order_index, + "mass": mass.magnitude, + "molar_ratio": ratio_val + }) + + # 按原始顺序排序 + solid_anhydride_masses.sort(key=lambda x: x["order"]) + + # 计算溶剂用量 + total_diamine_solution_mass = sum( + sol["volume_needed"] * ρ_solvent for sol in diamine_solutions + ) * self.ureg.ml + + # 预估滴定溶剂量、计算补加溶剂量 + m_solvent_titration = m_titration_10 / solubility * ρ_solvent + m_solvent_add = m_tot * (1 - wt_percent) - total_diamine_solution_mass - m_solvent_titration + + # 检查最小溶剂体积要求 + total_liquid_volume = (total_diamine_solution_mass + m_solvent_add) / ρ_solvent + m_tot_min = V_min / total_liquid_volume * m_tot + + # 如果需要,按比例放大 + scale_factor = 1.0 + if m_tot_min > m_tot: + scale_factor = (m_tot_min / m_tot).magnitude + m_titration_90 *= scale_factor + m_titration_10 *= scale_factor + m_solvent_add *= scale_factor + m_solvent_titration *= scale_factor + + # 更新二胺溶液用量 + for sol in diamine_solutions: + sol["volume_needed"] *= scale_factor + + # 更新固体二酐用量 + for anhydride in solid_anhydride_masses: + anhydride["mass"] *= scale_factor + + m_tot = m_tot_min + + # 生成投料顺序 + feeding_order = [] + + # 1. 固体二酐 (按顺序) + for anhydride in solid_anhydride_masses: + feeding_order.append({ + "step": len(feeding_order) + 1, + "type": "solid_anhydride", + "name": anhydride["name"], + "amount": anhydride["mass"], + "order": anhydride["order"] + }) + + # 2. 二胺溶液 (按顺序) + for sol in diamine_solutions: + feeding_order.append({ + "step": len(feeding_order) + 1, + "type": "diamine_solution", + "name": sol["name"], + "amount": sol["volume_needed"], + "order": sol["order"] + }) + + # 3. 主要二酐粉末 + feeding_order.append({ + "step": len(feeding_order) + 1, + "type": "main_anhydride", + "name": titration_name, + "amount": m_titration_90.magnitude, + "order": titration_anhydride[3] + }) + + # 4. 补加溶剂 + if m_solvent_add > 0: + feeding_order.append({ + "step": len(feeding_order) + 1, + "type": "additional_solvent", + "name": "溶剂", + "amount": m_solvent_add.magnitude, + "order": 999 + }) + + # 5. 滴定二酐溶液 + feeding_order.append({ + "step": len(feeding_order) + 1, + "type": "titration_anhydride", + "name": f"{titration_name} 滴定液", + "amount": m_titration_10.magnitude, + "titration_solvent": m_solvent_titration.magnitude, + "order": titration_anhydride[3] + }) + + # 返回实验设计结果 + results = { + "total_mass": m_tot.magnitude, + "scale_factor": scale_factor, + "solutions": diamine_solutions, + "solids": solid_anhydride_masses, + "titration": { + "name": titration_name, + "main_portion": m_titration_90.magnitude, + "titration_portion": m_titration_10.magnitude, + "titration_solvent": m_solvent_titration.magnitude, + }, + "solvents": { + "additional_solvent": m_solvent_add.magnitude, + "total_liquid_volume": total_liquid_volume.magnitude + }, + "feeding_order": feeding_order, + "minimum_required_mass": m_tot_min.magnitude + } + + return results + # 90%10%小瓶投料任务创建方法 def create_90_10_vial_feeding_task(self, order_name: str = None, @@ -961,6 +1312,108 @@ class BioyondDispensingStation(BioyondWorkstation): 'actualVolume': actual_volume } + def _simplify_report(self, report) -> Dict[str, Any]: + """简化实验报告,只保留关键信息,去除冗余的工作流参数""" + if not isinstance(report, dict): + return report + + data = report.get('data', {}) + if not isinstance(data, dict): + return report + + # 提取关键信息 + simplified = { + 'name': data.get('name'), + 'code': data.get('code'), + 'requester': data.get('requester'), + 'workflowName': data.get('workflowName'), + 'workflowStep': data.get('workflowStep'), + 'requestTime': data.get('requestTime'), + 'startPreparationTime': data.get('startPreparationTime'), + 'completeTime': data.get('completeTime'), + 'useTime': data.get('useTime'), + 'status': data.get('status'), + 'statusName': data.get('statusName'), + } + + # 提取物料信息(简化版) + pre_intakes = data.get('preIntakes', []) + if pre_intakes and isinstance(pre_intakes, list): + first_intake = pre_intakes[0] + sample_materials = first_intake.get('sampleMaterials', []) + + # 简化物料信息 + simplified_materials = [] + for material in sample_materials: + if isinstance(material, dict): + mat_info = { + 'materialName': material.get('materialName'), + 'materialTypeName': material.get('materialTypeName'), + 'materialCode': material.get('materialCode'), + 'materialLocation': material.get('materialLocation'), + } + + # 解析parameters中的关键信息(如密度、加料历史等) + params_str = material.get('parameters', '{}') + try: + params = json.loads(params_str) if isinstance(params_str, str) else params_str + if isinstance(params, dict): + # 只保留关键参数 + if 'density' in params: + mat_info['density'] = params['density'] + if 'feedingHistory' in params: + mat_info['feedingHistory'] = params['feedingHistory'] + if 'liquidVolume' in params: + mat_info['liquidVolume'] = params['liquidVolume'] + if 'm_diamine_tot' in params: + mat_info['m_diamine_tot'] = params['m_diamine_tot'] + if 'wt_diamine' in params: + mat_info['wt_diamine'] = params['wt_diamine'] + except: + pass + + simplified_materials.append(mat_info) + + simplified['sampleMaterials'] = simplified_materials + + # 提取extraProperties中的实际值 + extra_props = first_intake.get('extraProperties', {}) + if isinstance(extra_props, dict): + simplified_extra = {} + for key, value in extra_props.items(): + try: + parsed_value = json.loads(value) if isinstance(value, str) else value + simplified_extra[key] = parsed_value + except: + simplified_extra[key] = value + simplified['extraProperties'] = simplified_extra + + return { + 'data': simplified, + 'code': report.get('code'), + 'message': report.get('message'), + 'timestamp': report.get('timestamp') + } + + def scheduler_start(self) -> dict: + """启动调度器 - 启动Bioyond工作站的任务调度器,开始执行队列中的任务 + + Returns: + dict: 包含return_info的字典,return_info为整型(1=成功) + + Raises: + BioyondException: 调度器启动失败时抛出异常 + """ + result = self.hardware_interface.scheduler_start() + self.hardware_interface._logger.info(f"调度器启动结果: {result}") + + if result != 1: + error_msg = "启动调度器失败: 有未处理错误,调度无法启动。请检查Bioyond系统状态。" + self.hardware_interface._logger.error(error_msg) + raise BioyondException(error_msg) + + return {"return_info": result} + # 等待多个任务完成并获取实验报告 def wait_for_multiple_orders_and_get_reports(self, batch_create_result: str = None, @@ -1002,7 +1455,12 @@ class BioyondDispensingStation(BioyondWorkstation): # 验证batch_create_result参数 if not batch_create_result or batch_create_result == "": - raise BioyondException("batch_create_result参数为空,请确保从batch_create节点正确连接handle") + raise BioyondException( + "batch_create_result参数为空,请确保:\n" + "1. batch_create节点与wait节点之间正确连接了handle\n" + "2. batch_create节点成功执行并返回了结果\n" + "3. 检查上游batch_create任务是否成功创建了订单" + ) # 解析batch_create_result JSON对象 try: @@ -1031,7 +1489,17 @@ class BioyondDispensingStation(BioyondWorkstation): # 验证提取的数据 if not order_codes: - raise BioyondException("batch_create_result中未找到order_codes字段或为空") + self.hardware_interface._logger.error( + f"batch_create任务未生成任何订单。batch_create_result内容: {batch_create_result}" + ) + raise BioyondException( + "batch_create_result中未找到order_codes或为空。\n" + "可能的原因:\n" + "1. batch_create任务执行失败(检查任务是否报错)\n" + "2. 物料配置问题(如'物料样品板分配失败')\n" + "3. Bioyond系统状态异常\n" + f"请检查batch_create任务的执行结果" + ) if not order_ids: raise BioyondException("batch_create_result中未找到order_ids字段或为空") @@ -1114,6 +1582,8 @@ class BioyondDispensingStation(BioyondWorkstation): self.hardware_interface._logger.info( f"成功获取任务 {order_code} 的实验报告" ) + # 简化报告,去除冗余信息 + report = self._simplify_report(report) reports.append({ "order_code": order_code, @@ -1288,7 +1758,7 @@ class BioyondDispensingStation(BioyondWorkstation): f"开始执行批量物料转移: {len(transfer_groups)}组任务 -> {target_device_id}" ) - from .config import WAREHOUSE_MAPPING + warehouse_mapping = self.bioyond_config.get("warehouse_mapping", {}) results = [] successful_count = 0 failed_count = 0 diff --git a/unilabos/devices/workstation/bioyond_studio/reaction_station.py b/unilabos/devices/workstation/bioyond_studio/reaction_station/reaction_station.py similarity index 55% rename from unilabos/devices/workstation/bioyond_studio/reaction_station.py rename to unilabos/devices/workstation/bioyond_studio/reaction_station/reaction_station.py index ffb83fd3..c7f3194a 100644 --- a/unilabos/devices/workstation/bioyond_studio/reaction_station.py +++ b/unilabos/devices/workstation/bioyond_studio/reaction_station/reaction_station.py @@ -2,17 +2,15 @@ import json import time import requests from typing import List, Dict, Any +import json +import requests from pathlib import Path from datetime import datetime from unilabos.devices.workstation.bioyond_studio.station import BioyondWorkstation from unilabos.devices.workstation.bioyond_studio.bioyond_rpc import MachineState from unilabos.ros.msgs.message_converter import convert_to_ros_msg, Float64, String -from unilabos.devices.workstation.bioyond_studio.config import ( - WORKFLOW_STEP_IDS, - WORKFLOW_TO_SECTION_MAP, - ACTION_NAMES -) -from unilabos.devices.workstation.bioyond_studio.config import API_CONFIG + + class BioyondReactor: @@ -49,21 +47,84 @@ class BioyondReactor: class BioyondReactionStation(BioyondWorkstation): """Bioyond反应站类 - 继承自BioyondWorkstation,提供反应站特定的业务方法 + 继承自BioyondWorkstation,提供反应站特定的业务方法 """ def __init__(self, config: dict = None, deck=None, protocol_type=None, **kwargs): """初始化反应站 Args: - config: 配置字典,应包含workflow_mappings等配置 + config: 配置字典,应包含workflow_mappings等配置 deck: Deck对象 - protocol_type: 协议类型(由ROS系统传递,此处忽略) + protocol_type: 协议类型(由ROS系统传递,此处忽略) **kwargs: 其他可能的参数 """ + if config is None: + config = {} + + # 将 kwargs 合并到 config 中 (处理扁平化配置如 api_key) + config.update(kwargs) + if deck is None and config: deck = config.get('deck') + # 🔧 修复: 确保 Deck 上的 warehouses 具有正确的 UUID (必须在 super().__init__ 之前执行,因为父类会触发同步) + # 从配置中读取 warehouse_mapping,并应用到实际的 deck 资源上 + if config and "warehouse_mapping" in config and deck: + warehouse_mapping = config["warehouse_mapping"] + print(f"正在根据配置更新 Deck warehouse UUIDs... (共有 {len(warehouse_mapping)} 个配置)") + + user_deck = deck + # 初始化 warehouses 字典 + if not hasattr(user_deck, "warehouses") or user_deck.warehouses is None: + user_deck.warehouses = {} + + # 1. 尝试从 children 中查找匹配的资源 + for child in user_deck.children: + # 简单判断: 如果名字在 mapping 中,就认为是 warehouse + if child.name in warehouse_mapping: + user_deck.warehouses[child.name] = child + print(f" - 从子资源中找到 warehouse: {child.name}") + + # 2. 如果还是没找到,且 Deck 类有 setup 方法,尝试调用 setup (针对 Deck 对象正确但未初始化的情况) + if not user_deck.warehouses and hasattr(user_deck, "setup"): + print(" - 尝试调用 deck.setup() 初始化仓库...") + try: + user_deck.setup() + # setup 后重新检查 + if hasattr(user_deck, "warehouses") and user_deck.warehouses: + print(f" - setup() 成功,找到 {len(user_deck.warehouses)} 个仓库") + except Exception as e: + print(f" - 调用 setup() 失败: {e}") + + # 3. 如果仍然为空,可能需要手动创建 (仅针对特定已知的 Deck 类型进行补救,这里暂时只打印警告) + if not user_deck.warehouses: + print(" - ⚠️ 仍然无法找到任何 warehouse 资源!") + + for wh_name, wh_config in warehouse_mapping.items(): + target_uuid = wh_config.get("uuid") + + # 尝试在 deck.warehouses 中查找 + wh_resource = None + if hasattr(user_deck, "warehouses") and wh_name in user_deck.warehouses: + wh_resource = user_deck.warehouses[wh_name] + + # 如果没找到,尝试在所有子资源中查找 + if not wh_resource: + wh_resource = user_deck.get_resource(wh_name) + + if wh_resource: + if target_uuid: + current_uuid = getattr(wh_resource, "uuid", None) + print(f"✅ 更新仓库 '{wh_name}' UUID: {current_uuid} -> {target_uuid}") + wh_resource.uuid = target_uuid + else: + print(f"⚠️ 仓库 '{wh_name}' 在配置中没有 UUID") + else: + print(f"❌ 在 Deck 中未找到配置的仓库: '{wh_name}'") + + super().__init__(bioyond_config=config, deck=deck) + print(f"BioyondReactionStation初始化 - config包含workflow_mappings: {'workflow_mappings' in (config or {})}") if config and 'workflow_mappings' in config: print(f"workflow_mappings内容: {config['workflow_mappings']}") @@ -86,6 +147,147 @@ class BioyondReactionStation(BioyondWorkstation): self._frame_to_reactor_id = {1: "reactor_1", 2: "reactor_2", 3: "reactor_3", 4: "reactor_4", 5: "reactor_5"} + # 用于缓存从 Bioyond 查询的工作流序列 + self._cached_workflow_sequence = [] + # 用于缓存待处理的时间约束 + self.pending_time_constraints = [] + + # 从配置中获取 action_names + self.action_names = self.bioyond_config.get("action_names", {}) + + # 动态获取工作流步骤ID + self.workflow_step_ids = self._fetch_workflow_step_ids() + + def _fetch_workflow_step_ids(self) -> Dict[str, Dict[str, str]]: + """动态获取工作流步骤ID""" + print("正在从LIMS获取最新工作流步骤ID...") + + api_host = self.bioyond_config.get("api_host") + api_key = self.bioyond_config.get("api_key") + + if not api_host or not api_key: + print("API配置缺失,无法动态获取工作流步骤ID") + return {} + + def call_api(endpoint, data=None): + url = f"{api_host}{endpoint}" + payload = { + "apiKey": api_key, + "requestTime": datetime.now().isoformat(), + "data": data if data else {} + } + try: + response = requests.post(url, json=payload, headers={"Content-Type": "application/json"}, timeout=5) + return response.json() + except Exception as e: + print(f"调用API {endpoint} 失败: {e}") + return None + + # 1. 获取工作流列表 + resp = call_api("/api/lims/workflow/work-flow-list", {"type": 2, "includeDetail": True}) + if not resp: + print("无法获取工作流列表") + return {} + + workflows = resp.get("data", []) + if isinstance(workflows, dict): + if "list" in workflows: + workflows = workflows["list"] + elif "items" in workflows: + workflows = workflows["items"] + + if not workflows: + print("工作流列表为空") + return {} + + new_ids = {} + + #从配置中获取workflow_to_section_map + workflow_to_section_map = self.bioyond_config.get("workflow_to_section_map", {}) + + # 2. 遍历映射表 + for internal_name, section_name in workflow_to_section_map.items(): + # 查找对应的工作流对象 + wf_obj = next((w for w in workflows if w.get("name") == section_name), None) + if not wf_obj: + # print(f"未找到工作流: {section_name}") + continue + + # 获取 subWorkflowId + sub_wf_id = None + if wf_obj.get("subWorkflows"): + sub_wfs = wf_obj.get("subWorkflows") + if len(sub_wfs) > 0: + sub_wf_id = sub_wfs[0].get("id") + + if not sub_wf_id: + # print(f"工作流 {section_name} 没有子工作流ID") + continue + + # 3. 获取步骤参数 + step_resp = call_api("/api/lims/workflow/sub-workflow-step-parameters", sub_wf_id) + if not step_resp or not step_resp.get("data"): + # print(f"无法获取工作流 {section_name} 的步骤参数") + continue + + steps_data = step_resp.get("data", {}) + step_name_to_id = {} + + if isinstance(steps_data, dict): + for s_id, step_list in steps_data.items(): + if isinstance(step_list, list): + for step in step_list: + s_name = step.get("name") + if s_name: + step_name_to_id[s_name] = s_id + + # 4. 匹配 ACTION_NAMES + target_key = internal_name + normalized_key = internal_name.lower().replace('(', '_').replace(')', '').replace('-', '_') + + if internal_name in self.action_names: + target_key = internal_name + elif normalized_key in self.action_names: + target_key = normalized_key + elif internal_name.lower() in self.action_names: + target_key = internal_name.lower() + + if target_key in self.action_names: + new_ids[target_key] = {} + for key, action_display_name in self.action_names[target_key].items(): + step_id = step_name_to_id.get(action_display_name) + if step_id: + new_ids[target_key][key] = step_id + else: + print(f"警告: 工作流 '{section_name}' 中未找到步骤 '{action_display_name}'") + + if not new_ids: + print("未能获取任何新的步骤ID,使用默认配置") + return self.bioyond_config.get("workflow_step_ids", {}) + + print("成功更新工作流步骤ID") + return new_ids + + + @property + def workflow_sequence(self) -> str: + """工作流序列属性 - 返回初始化时查询的工作流列表 + + Returns: + str: 工作流信息的 JSON 字符串 + """ + import json + return json.dumps(self._cached_workflow_sequence, ensure_ascii=False) + + @workflow_sequence.setter + def workflow_sequence(self, value: List[str]): + """设置工作流序列 + + Args: + value: 工作流 ID 列表 + """ + self._cached_workflow_sequence = value + # ==================== 工作流方法 ==================== def reactor_taken_out(self): @@ -97,6 +299,27 @@ class BioyondReactionStation(BioyondWorkstation): print(f"当前队列长度: {len(self.pending_task_params)}") return json.dumps({"suc": True}) + def scheduler_start(self) -> dict: + """启动调度器 - 启动Bioyond工作站的任务调度器,开始执行队列中的任务 + + Returns: + dict: 包含return_info的字典,return_info为整型(1=成功) + + Raises: + BioyondException: 调度器启动失败时抛出异常 + """ + from unilabos.devices.workstation.bioyond_studio.bioyond_rpc import BioyondException + + result = self.hardware_interface.scheduler_start() + self.hardware_interface._logger.info(f"调度器启动结果: {result}") + + if result != 1: + error_msg = "启动调度器失败: 有未处理错误,调度无法启动。请检查Bioyond系统状态。" + self.hardware_interface._logger.error(error_msg) + raise BioyondException(error_msg) + + return {"return_info": result} + def reactor_taken_in( self, assign_material_name: str, @@ -106,12 +329,12 @@ class BioyondReactionStation(BioyondWorkstation): """反应器放入 Args: - assign_material_name: 物料名称(不能为空) - cutoff: 粘度上限(需为有效数字字符串,默认 "900000") - temperature: 温度设定(°C,范围:-50.00 至 100.00) + assign_material_name: 物料名称(不能为空) + cutoff: 粘度上限(需为有效数字字符串,默认 "900000") + temperature: 温度设定(C,范围:-50.00 至 100.00) Returns: - str: JSON 字符串,格式为 {"suc": True} + str: JSON 字符串,格式为 {"suc": True} Raises: ValueError: 若物料名称无效或 cutoff 格式错误 @@ -131,15 +354,16 @@ class BioyondReactionStation(BioyondWorkstation): if isinstance(temperature, str): temperature = float(temperature) - step_id = WORKFLOW_STEP_IDS["reactor_taken_in"]["config"] + + step_id = self.workflow_step_ids["reactor_taken_in"]["config"] reactor_taken_in_params = { "param_values": { step_id: { - ACTION_NAMES["reactor_taken_in"]["config"]: [ + self.action_names["reactor_taken_in"]["config"]: [ {"m": 0, "n": 3, "Key": "cutoff", "Value": cutoff}, {"m": 0, "n": 3, "Key": "assignMaterialName", "Value": material_id} ], - ACTION_NAMES["reactor_taken_in"]["stirring"]: [ + self.action_names["reactor_taken_in"]["stirring"]: [ {"m": 0, "n": 3, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -162,33 +386,40 @@ class BioyondReactionStation(BioyondWorkstation): """固体进料小瓶 Args: - material_id: 粉末类型ID,1=盐(21分钟),2=面粉(27分钟),3=BTDA(38分钟) + material_id: 粉末类型ID, Salt=1, Flour=2, BTDA=3 time: 观察时间(分钟) - torque_variation: 是否观察(int类型, 1=否, 2=是) + torque_variation: 是否观察(NO=1, YES=2) assign_material_name: 物料名称(用于获取试剂瓶位ID) - temperature: 温度设定(°C) + temperature: 温度设定(C) """ + # 参数映射 + material_map = {"Salt": "1", "Flour": "2", "BTDA": "3", "1": "1", "2": "2", "3": "3"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_material_id = material_map.get(str(material_id), str(material_id)) + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + self.append_to_workflow_sequence('{"web_workflow_name": "Solid_feeding_vials"}') material_id_m = self.hardware_interface._get_material_id_by_name(assign_material_name) if assign_material_name else None if isinstance(temperature, str): temperature = float(temperature) - feeding_step_id = WORKFLOW_STEP_IDS["solid_feeding_vials"]["feeding"] - observe_step_id = WORKFLOW_STEP_IDS["solid_feeding_vials"]["observe"] + feeding_step_id = self.workflow_step_ids["solid_feeding_vials"]["feeding"] + observe_step_id = self.workflow_step_ids["solid_feeding_vials"]["observe"] solid_feeding_vials_params = { "param_values": { feeding_step_id: { - ACTION_NAMES["solid_feeding_vials"]["feeding"]: [ - {"m": 0, "n": 3, "Key": "materialId", "Value": material_id}, + self.action_names["solid_feeding_vials"]["feeding"]: [ + {"m": 0, "n": 3, "Key": "materialId", "Value": mapped_material_id}, {"m": 0, "n": 3, "Key": "assignMaterialName", "Value": material_id_m} if material_id_m else {} ] }, observe_step_id: { - ACTION_NAMES["solid_feeding_vials"]["observe"]: [ + self.action_names["solid_feeding_vials"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -196,7 +427,7 @@ class BioyondReactionStation(BioyondWorkstation): } self.pending_task_params.append(solid_feeding_vials_params) - print(f"成功添加固体进料小瓶参数: material_id={material_id}, time={time}min, torque={torque_variation}, temp={temperature:.2f}°C") + print(f"成功添加固体进料小瓶参数: material_id={material_id}, time={time}min, torque={torque_variation}, temp={temperature:.2f}C") print(f"当前队列长度: {len(self.pending_task_params)}") return json.dumps({"suc": True}) @@ -214,11 +445,18 @@ class BioyondReactionStation(BioyondWorkstation): Args: volume_formula: 分液公式(μL) assign_material_name: 物料名称 - titration_type: 是否滴定(1=否, 2=是) + titration_type: 是否滴定(NO=1, YES=2) time: 观察时间(分钟) - torque_variation: 是否观察(int类型, 1=否, 2=是) - temperature: 温度(°C) + torque_variation: 是否观察(NO=1, YES=2) + temperature: 温度(C) """ + # 参数映射 + titration_map = {"NO": "1", "YES": "2", "1": "1", "2": "2"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_titration_type = titration_map.get(str(titration_type), "1") + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + self.append_to_workflow_sequence('{"web_workflow_name": "Liquid_feeding_vials(non-titration)"}') material_id = self.hardware_interface._get_material_id_by_name(assign_material_name) if material_id is None: @@ -227,22 +465,22 @@ class BioyondReactionStation(BioyondWorkstation): if isinstance(temperature, str): temperature = float(temperature) - liquid_step_id = WORKFLOW_STEP_IDS["liquid_feeding_vials_non_titration"]["liquid"] - observe_step_id = WORKFLOW_STEP_IDS["liquid_feeding_vials_non_titration"]["observe"] + liquid_step_id = self.workflow_step_ids["liquid_feeding_vials_non_titration"]["liquid"] + observe_step_id = self.workflow_step_ids["liquid_feeding_vials_non_titration"]["observe"] params = { "param_values": { liquid_step_id: { - ACTION_NAMES["liquid_feeding_vials_non_titration"]["liquid"]: [ + self.action_names["liquid_feeding_vials_non_titration"]["liquid"]: [ {"m": 0, "n": 3, "Key": "volumeFormula", "Value": volume_formula}, {"m": 0, "n": 3, "Key": "assignMaterialName", "Value": material_id}, - {"m": 0, "n": 3, "Key": "titrationType", "Value": titration_type} + {"m": 0, "n": 3, "Key": "titrationType", "Value": mapped_titration_type} ] }, observe_step_id: { - ACTION_NAMES["liquid_feeding_vials_non_titration"]["observe"]: [ + self.action_names["liquid_feeding_vials_non_titration"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -275,11 +513,18 @@ class BioyondReactionStation(BioyondWorkstation): "total_liquid_volume": 48.00916988195499 } 如果提供solvents,则从中提取additional_solvent并转换为μL - titration_type: 是否滴定(1=否, 2=是) + titration_type: 是否滴定(NO=1, YES=2) time: 观察时间(分钟) - torque_variation: 是否观察(int类型, 1=否, 2=是) - temperature: 温度设定(°C) + torque_variation: 是否观察(NO=1, YES=2) + temperature: 温度设定(C) """ + # 参数映射 + titration_map = {"NO": "1", "YES": "2", "1": "1", "2": "2"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_titration_type = titration_map.get(str(titration_type), "1") + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + # 处理 volume 参数:优先使用直接传入的 volume,否则从 solvents 中提取 if not volume and solvents is not None: # 参数类型转换:如果是字符串则解析为字典 @@ -311,22 +556,22 @@ class BioyondReactionStation(BioyondWorkstation): if isinstance(temperature, str): temperature = float(temperature) - liquid_step_id = WORKFLOW_STEP_IDS["liquid_feeding_solvents"]["liquid"] - observe_step_id = WORKFLOW_STEP_IDS["liquid_feeding_solvents"]["observe"] + liquid_step_id = self.workflow_step_ids["liquid_feeding_solvents"]["liquid"] + observe_step_id = self.workflow_step_ids["liquid_feeding_solvents"]["observe"] params = { "param_values": { liquid_step_id: { - ACTION_NAMES["liquid_feeding_solvents"]["liquid"]: [ - {"m": 0, "n": 1, "Key": "titrationType", "Value": titration_type}, + self.action_names["liquid_feeding_solvents"]["liquid"]: [ + {"m": 0, "n": 1, "Key": "titrationType", "Value": mapped_titration_type}, {"m": 0, "n": 1, "Key": "volume", "Value": volume}, {"m": 0, "n": 1, "Key": "assignMaterialName", "Value": material_id} ] }, observe_step_id: { - ACTION_NAMES["liquid_feeding_solvents"]["observe"]: [ + self.action_names["liquid_feeding_solvents"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -362,10 +607,10 @@ class BioyondReactionStation(BioyondWorkstation): x_value: 手工输入的x值,格式如 "1-2-3" feeding_order_data: feeding_order JSON字符串或对象,用于获取m二酐值 extracted_actuals: 从报告提取的实际加料量JSON字符串,包含actualTargetWeigh和actualVolume - titration_type: 是否滴定(1=否, 2=是),默认2 + titration_type: 是否滴定(NO=1, YES=2),默认2 time: 观察时间(分钟) - torque_variation: 是否观察(int类型, 1=否, 2=是) - temperature: 温度(°C) + torque_variation: 是否观察(NO=1, YES=2) + temperature: 温度(C) 自动公式模板: 1000*(m二酐-x)*V二酐滴定/m二酐滴定 其中: @@ -374,6 +619,13 @@ class BioyondReactionStation(BioyondWorkstation): - x = x_value (手工输入) - m二酐 = feeding_order中type为"main_anhydride"的amount值 """ + # 参数映射 + titration_map = {"NO": "1", "YES": "2", "1": "1", "2": "2"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_titration_type = titration_map.get(str(titration_type), "2") + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + self.append_to_workflow_sequence('{"web_workflow_name": "Liquid_feeding(titration)"}') material_id = self.hardware_interface._get_material_id_by_name(assign_material_name) if material_id is None: @@ -460,22 +712,22 @@ class BioyondReactionStation(BioyondWorkstation): elif not volume_formula: raise ValueError("必须提供 volume_formula 或 (x_value + feeding_order_data + extracted_actuals)") - liquid_step_id = WORKFLOW_STEP_IDS["liquid_feeding_titration"]["liquid"] - observe_step_id = WORKFLOW_STEP_IDS["liquid_feeding_titration"]["observe"] + liquid_step_id = self.workflow_step_ids["liquid_feeding_titration"]["liquid"] + observe_step_id = self.workflow_step_ids["liquid_feeding_titration"]["observe"] params = { "param_values": { liquid_step_id: { - ACTION_NAMES["liquid_feeding_titration"]["liquid"]: [ + self.action_names["liquid_feeding_titration"]["liquid"]: [ {"m": 0, "n": 3, "Key": "volumeFormula", "Value": volume_formula}, - {"m": 0, "n": 3, "Key": "titrationType", "Value": titration_type}, + {"m": 0, "n": 3, "Key": "titrationType", "Value": mapped_titration_type}, {"m": 0, "n": 3, "Key": "assignMaterialName", "Value": material_id} ] }, observe_step_id: { - ACTION_NAMES["liquid_feeding_titration"]["observe"]: [ + self.action_names["liquid_feeding_titration"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -518,6 +770,89 @@ class BioyondReactionStation(BioyondWorkstation): 'actualVolume': actual_volume } + def _simplify_report(self, report) -> Dict[str, Any]: + """简化实验报告,只保留关键信息,去除冗余的工作流参数""" + if not isinstance(report, dict): + return report + + data = report.get('data', {}) + if not isinstance(data, dict): + return report + + # 提取关键信息 + simplified = { + 'name': data.get('name'), + 'code': data.get('code'), + 'requester': data.get('requester'), + 'workflowName': data.get('workflowName'), + 'workflowStep': data.get('workflowStep'), + 'requestTime': data.get('requestTime'), + 'startPreparationTime': data.get('startPreparationTime'), + 'completeTime': data.get('completeTime'), + 'useTime': data.get('useTime'), + 'status': data.get('status'), + 'statusName': data.get('statusName'), + } + + # 提取物料信息(简化版) + pre_intakes = data.get('preIntakes', []) + if pre_intakes and isinstance(pre_intakes, list): + first_intake = pre_intakes[0] + sample_materials = first_intake.get('sampleMaterials', []) + + # 简化物料信息 + simplified_materials = [] + for material in sample_materials: + if isinstance(material, dict): + mat_info = { + 'materialName': material.get('materialName'), + 'materialTypeName': material.get('materialTypeName'), + 'materialCode': material.get('materialCode'), + 'materialLocation': material.get('materialLocation'), + } + + # 解析parameters中的关键信息 + params_str = material.get('parameters', '{}') + try: + params = json.loads(params_str) if isinstance(params_str, str) else params_str + if isinstance(params, dict): + # 只保留关键参数 + if 'density' in params: + mat_info['density'] = params['density'] + if 'feedingHistory' in params: + mat_info['feedingHistory'] = params['feedingHistory'] + if 'liquidVolume' in params: + mat_info['liquidVolume'] = params['liquidVolume'] + if 'm_diamine_tot' in params: + mat_info['m_diamine_tot'] = params['m_diamine_tot'] + if 'wt_diamine' in params: + mat_info['wt_diamine'] = params['wt_diamine'] + except: + pass + + simplified_materials.append(mat_info) + + simplified['sampleMaterials'] = simplified_materials + + # 提取extraProperties中的实际值 + extra_props = first_intake.get('extraProperties', {}) + if isinstance(extra_props, dict): + simplified_extra = {} + for key, value in extra_props.items(): + try: + parsed_value = json.loads(value) if isinstance(value, str) else value + simplified_extra[key] = parsed_value + except: + simplified_extra[key] = value + simplified['extraProperties'] = simplified_extra + + return { + 'data': simplified, + 'code': report.get('code'), + 'message': report.get('message'), + 'timestamp': report.get('timestamp') + } + def extract_actuals_from_batch_reports(self, batch_reports_result: str) -> dict: print(f"[DEBUG] extract_actuals 收到原始数据: {batch_reports_result[:500]}...") # 打印前500字符 try: @@ -671,7 +1006,12 @@ class BioyondReactionStation(BioyondWorkstation): timeout = int(timeout) if timeout else 7200 check_interval = int(check_interval) if check_interval else 10 if not batch_create_result or batch_create_result == "": - raise ValueError("batch_create_result为空") + raise ValueError( + "batch_create_result参数为空,请确保:\n" + "1. batch_create节点与wait节点之间正确连接了handle\n" + "2. batch_create节点成功执行并返回了结果\n" + "3. 检查上游batch_create任务是否成功创建了订单" + ) try: if isinstance(batch_create_result, str) and '[...]' in batch_create_result: batch_create_result = batch_create_result.replace('[...]', '[]') @@ -687,7 +1027,14 @@ class BioyondReactionStation(BioyondWorkstation): except Exception as e: raise ValueError(f"解析batch_create_result失败: {e}") if not order_codes or not order_ids: - raise ValueError("缺少order_codes或order_ids") + raise ValueError( + "batch_create_result中未找到order_codes或order_ids,或者为空。\n" + "可能的原因:\n" + "1. batch_create任务执行失败(检查任务是否报错)\n" + "2. 物料配置问题(如'物料样品板分配失败')\n" + "3. Bioyond系统状态异常\n" + f"batch_create_result内容: {batch_create_result[:200]}..." + ) if not isinstance(order_codes, list): order_codes = [order_codes] if not isinstance(order_ids, list): @@ -696,6 +1043,17 @@ class BioyondReactionStation(BioyondWorkstation): raise ValueError("order_codes与order_ids数量不匹配") total = len(order_codes) pending = {c: {"order_id": order_ids[i], "completed": False} for i, c in enumerate(order_codes)} + + # 发布初始状态事件 + for i, oc in enumerate(order_codes): + self._publish_task_status( + task_id=order_ids[i], + task_code=oc, + task_type="bioyond_workflow", + status="running", + progress=0.0 + ) + reports = [] start_time = time.time() while pending: @@ -711,6 +1069,14 @@ class BioyondReactionStation(BioyondWorkstation): "extracted": None, "elapsed_time": elapsed_time }) + # 发布超时事件 + self._publish_task_status( + task_id=pending[oc]["order_id"], + task_code=oc, + task_type="bioyond_workflow", + status="timeout", + result={"elapsed_time": elapsed_time} + ) break completed_round = [] for oc in list(pending.keys()): @@ -721,6 +1087,9 @@ class BioyondReactionStation(BioyondWorkstation): rep = self.hardware_interface.order_report(oid) if not rep: rep = {"error": "无法获取报告"} + else: + # 简化报告,去除冗余信息 + rep = self._simplify_report(rep) reports.append({ "order_code": oc, "order_id": oid, @@ -730,6 +1099,15 @@ class BioyondReactionStation(BioyondWorkstation): "extracted": self._extract_actuals_from_report(rep), "elapsed_time": elapsed_time }) + # 发布完成事件 + self._publish_task_status( + task_id=oid, + task_code=oc, + task_type="bioyond_workflow", + status="completed", + progress=1.0, + result=rep + ) completed_round.append(oc) del self.order_completion_status[oc] except Exception as e: @@ -743,6 +1121,14 @@ class BioyondReactionStation(BioyondWorkstation): "error": str(e), "elapsed_time": elapsed_time }) + # 发布错误事件 + self._publish_task_status( + task_id=oid, + task_code=oc, + task_type="bioyond_workflow", + status="error", + result={"error": str(e)} + ) completed_round.append(oc) for oc in completed_round: del pending[oc] @@ -782,9 +1168,16 @@ class BioyondReactionStation(BioyondWorkstation): assign_material_name: 物料名称(试剂瓶位) time: 观察时间(分钟) torque_variation: 是否观察(int类型, 1=否, 2=是) - titration_type: 是否滴定(1=否, 2=是) - temperature: 温度设定(°C) + titration_type: 是否滴定(NO=1, YES=2) + temperature: 温度设定(C) """ + # 参数映射 + titration_map = {"NO": "1", "YES": "2", "1": "1", "2": "2"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_titration_type = titration_map.get(str(titration_type), "1") + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + self.append_to_workflow_sequence('{"web_workflow_name": "liquid_feeding_beaker"}') material_id = self.hardware_interface._get_material_id_by_name(assign_material_name) if material_id is None: @@ -793,22 +1186,22 @@ class BioyondReactionStation(BioyondWorkstation): if isinstance(temperature, str): temperature = float(temperature) - liquid_step_id = WORKFLOW_STEP_IDS["liquid_feeding_beaker"]["liquid"] - observe_step_id = WORKFLOW_STEP_IDS["liquid_feeding_beaker"]["observe"] + liquid_step_id = self.workflow_step_ids["liquid_feeding_beaker"]["liquid"] + observe_step_id = self.workflow_step_ids["liquid_feeding_beaker"]["observe"] params = { "param_values": { liquid_step_id: { - ACTION_NAMES["liquid_feeding_beaker"]["liquid"]: [ + self.action_names["liquid_feeding_beaker"]["liquid"]: [ {"m": 0, "n": 2, "Key": "volume", "Value": volume}, {"m": 0, "n": 2, "Key": "assignMaterialName", "Value": material_id}, - {"m": 0, "n": 2, "Key": "titrationType", "Value": titration_type} + {"m": 0, "n": 2, "Key": "titrationType", "Value": mapped_titration_type} ] }, observe_step_id: { - ACTION_NAMES["liquid_feeding_beaker"]["observe"]: [ + self.action_names["liquid_feeding_beaker"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -834,11 +1227,18 @@ class BioyondReactionStation(BioyondWorkstation): Args: assign_material_name: 物料名称(液体种类) volume: 分液量(μL) - titration_type: 是否滴定(1=否, 2=是) + titration_type: 是否滴定(NO=1, YES=2) time: 观察时间(分钟) - torque_variation: 是否观察(int类型, 1=否, 2=是) - temperature: 温度(°C) + torque_variation: 是否观察(NO=1, YES=2) + temperature: 温度(C) """ + # 参数映射 + titration_map = {"NO": "1", "YES": "2", "1": "1", "2": "2"} + torque_map = {"NO": "1", "YES": "2", 1: "1", 2: "2", "1": "1", "2": "2"} + + mapped_titration_type = titration_map.get(str(titration_type), "1") + mapped_torque_variation = int(torque_map.get(str(torque_variation), "1")) + self.append_to_workflow_sequence('{"web_workflow_name": "drip_back"}') material_id = self.hardware_interface._get_material_id_by_name(assign_material_name) if material_id is None: @@ -847,22 +1247,22 @@ class BioyondReactionStation(BioyondWorkstation): if isinstance(temperature, str): temperature = float(temperature) - liquid_step_id = WORKFLOW_STEP_IDS["drip_back"]["liquid"] - observe_step_id = WORKFLOW_STEP_IDS["drip_back"]["observe"] + liquid_step_id = self.workflow_step_ids["drip_back"]["liquid"] + observe_step_id = self.workflow_step_ids["drip_back"]["observe"] params = { "param_values": { liquid_step_id: { - ACTION_NAMES["drip_back"]["liquid"]: [ - {"m": 0, "n": 1, "Key": "titrationType", "Value": titration_type}, + self.action_names["drip_back"]["liquid"]: [ + {"m": 0, "n": 1, "Key": "titrationType", "Value": mapped_titration_type}, {"m": 0, "n": 1, "Key": "assignMaterialName", "Value": material_id}, {"m": 0, "n": 1, "Key": "volume", "Value": volume} ] }, observe_step_id: { - ACTION_NAMES["drip_back"]["observe"]: [ + self.action_names["drip_back"]["observe"]: [ {"m": 1, "n": 0, "Key": "time", "Value": time}, - {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(torque_variation)}, + {"m": 1, "n": 0, "Key": "torqueVariation", "Value": str(mapped_torque_variation)}, {"m": 1, "n": 0, "Key": "temperature", "Value": f"{temperature:.2f}"} ] } @@ -874,6 +1274,53 @@ class BioyondReactionStation(BioyondWorkstation): print(f"当前队列长度: {len(self.pending_task_params)}") return json.dumps({"suc": True}) + def add_time_constraint( + self, + duration: int, + start_step_key: str = "", + end_step_key: str = "", + start_point: int = 0, + end_point: int = 0 + ): + """添加时间约束 + + Args: + duration: 时间(秒) + start_step_key: 起点步骤Key (可选, 默认为空则自动选择) + end_step_key: 终点步骤Key (可选, 默认为空则自动选择) + start_point: 起点计时点 (Start=0, End=1) + end_point: 终点计时点 (Start=0, End=1) + """ + # 参数映射 + point_map = {"Start": 0, "End": 1, 0: 0, 1: 1, "0": 0, "1": 1} + + mapped_start_point = point_map.get(start_point, 0) + mapped_end_point = point_map.get(end_point, 0) + + # 注意:此方法应在添加完起点工作流后,添加终点工作流前调用 + + + current_count = len(self._cached_workflow_sequence) + if current_count == 0: + print("⚠️ 无法添加时间约束:当前没有工作流") + return + + start_index = current_count - 1 + end_index = current_count # 指向下一个即将添加的工作流 + + constraint = { + "start_index": start_index, + "start_step_key": start_step_key, + "end_index": end_index, + "end_step_key": end_step_key, + "duration": duration, + "start_point": mapped_start_point, + "end_point": mapped_end_point + } + self.pending_time_constraints.append(constraint) + print(f"已添加时间约束: Workflow[{start_index}].{start_step_key} -> Workflow[{end_index}].{end_step_key} ({duration}s)") + return json.dumps({"suc": True}) + # ==================== 工作流管理方法 ==================== def get_workflow_sequence(self) -> List[str]: @@ -884,12 +1331,115 @@ class BioyondReactionStation(BioyondWorkstation): """ id_to_name = {workflow_id: name for name, workflow_id in self.workflow_mappings.items()} workflow_names = [] - for workflow_id in self.workflow_sequence: + # 使用内部缓存的列表,而不是属性(属性返回 JSON 字符串) + for workflow_id in self._cached_workflow_sequence: workflow_name = id_to_name.get(workflow_id, workflow_id) workflow_names.append(workflow_name) - print(f"工作流序列: {workflow_names}") return workflow_names + def sync_workflow_sequence_from_bioyond(self) -> dict: + """从 Bioyond 系统同步工作流序列 + + 查询 Bioyond 系统中的工作流列表,并更新本地 workflow_sequence + + Returns: + dict: 包含同步结果的字典 + - success: bool, 是否成功 + - workflows: list, 工作流列表 + - message: str, 结果消息 + """ + try: + print(f"[同步工作流序列] 开始从 Bioyond 系统查询工作流...") + + # 检查 hardware_interface 是否可用 + if not hasattr(self, 'hardware_interface') or self.hardware_interface is None: + error_msg = "hardware_interface 未初始化" + print(f"❌ [同步工作流序列] {error_msg}") + return { + "success": False, + "workflows": [], + "message": error_msg + } + + # 查询所有工作流 + query_params = json.dumps({}) + print(f"[同步工作流序列] 调用 hardware_interface.query_workflow...") + workflows_data = self.hardware_interface.query_workflow(query_params) + + print(f"[同步工作流序列] 查询返回数据: {workflows_data}") + + if not workflows_data: + error_msg = "未能从 Bioyond 系统获取工作流数据(返回为空)" + print(f"⚠️ [同步工作流序列] {error_msg}") + return { + "success": False, + "workflows": [], + "message": error_msg + } + + # 获取工作流列表 - Bioyond API 返回的字段是 items,不是 list + workflow_list = workflows_data.get("items", workflows_data.get("list", [])) + print(f"[同步工作流序列] 从 Bioyond 查询到 {len(workflow_list)} 个工作流") + + if len(workflow_list) == 0: + warning_msg = "Bioyond 系统中暂无工作流" + print(f"⚠️ [同步工作流序列] {warning_msg}") + # 清空缓存 + self._cached_workflow_sequence = [] + return { + "success": True, + "workflows": [], + "message": warning_msg + } + + # 清空当前序列 + workflow_ids = [] + + # 构建结果 + synced_workflows = [] + for workflow in workflow_list: + workflow_id = workflow.get("id") + workflow_name = workflow.get("name") + workflow_status = workflow.get("status") # 工作流状态 + + print(f" - 工作流: {workflow_name} (ID: {workflow_id[:8] if workflow_id else 'N/A'}..., 状态: {workflow_status})") + + synced_workflows.append({ + "id": workflow_id, + "name": workflow_name, + "status": workflow_status, + "createTime": workflow.get("createTime"), + "updateTime": workflow.get("updateTime") + }) + + # 添加所有工作流 ID 到执行序列 + if workflow_id: + workflow_ids.append(workflow_id) + + # 更新缓存 + self._cached_workflow_sequence = workflow_ids + + success_msg = f"成功同步 {len(synced_workflows)} 个工作流到本地序列" + print(f"✅ [同步工作流序列] {success_msg}") + print(f"[同步工作流序列] 当前 workflow_sequence: {self._cached_workflow_sequence}") + + return { + "success": True, + "workflows": synced_workflows, + "message": success_msg + } + + except Exception as e: + error_msg = f"从 Bioyond 同步工作流序列失败: {e}" + print(f"❌ [同步工作流序列] {error_msg}") + import traceback + traceback.print_exc() + return { + "success": False, + "workflows": [], + "message": error_msg + } + def workflow_step_query(self, workflow_id: str) -> dict: """查询工作流步骤参数 @@ -912,9 +1462,69 @@ class BioyondReactionStation(BioyondWorkstation): """ return self.hardware_interface.create_order(json_str) + def clear_workflows(self): + """清空缓存的工作流序列和参数""" + self._cached_workflow_sequence = [] + self.pending_time_constraints = [] + print("已清空工作流序列缓存和时间约束队列") + + def clean_all_server_workflows(self) -> Dict[str, Any]: + """ + 清空服务端所有非核心工作流 + 逻辑: + 1. 利用 3.2 接口查询所有工作流 (includeDetail=False) + 2. 提取所有 ID + 3. 利用 3.38 接口 (hard_delete_merged_workflows) 批量删除 + """ + print("正在查询服务端工作流列表...") + try: + # 查询工作流列表 + # 仅需要ID,所以设置 includeDetail=False + query_params = {"includeDetail": False, "type": 0} + query_result = self._post_project_api("/api/lims/workflow/work-flow-list", query_params) + + if query_result.get("code") != 1: + return query_result + + data_obj = query_result.get("data") + + # 处理返回值可能是列表或者分页对象的不同情况 + if isinstance(data_obj, list): + workflows = data_obj + elif isinstance(data_obj, dict): + # 尝试从常见分页字段获取列表 + workflows = data_obj.get("items", data_obj.get("list", [])) + else: + workflows = [] + + if not workflows: + print("无需删除: 服务端无工作流") + return {"code": 1, "message": "服务端无工作流", "timestamp": int(time.time())} + + ids_to_delete = [] + for wf in workflows: + if isinstance(wf, dict): + wf_id = wf.get("id") + if wf_id: + ids_to_delete.append(str(wf_id)) + + if not ids_to_delete: + print("无需删除: 无有效工作流ID") + return {"code": 1, "message": "无有效工作流ID", "timestamp": int(time.time())} + + print(f"查询到 {len(ids_to_delete)} 个工作流,准备调用硬删除接口...") + # 硬删除 + return self.hard_delete_merged_workflows(ids_to_delete) + + except Exception as e: + print(f"❌ 清空工作流业务异常: {str(e)}") + return {"code": 0, "message": str(e), "timestamp": int(time.time())} + def hard_delete_merged_workflows(self, workflow_ids: List[str]) -> Dict[str, Any]: """ - 调用新接口:硬删除合并后的工作流 + 调用新接口:硬删除合并后的工作流 + 根据用户反馈,/api/lims/order/workflows 接口存在校验问题 + 改用 /api/data/order/workflows?workFlowGuids=... 接口 Args: workflow_ids: 要删除的工作流ID数组 @@ -925,7 +1535,30 @@ class BioyondReactionStation(BioyondWorkstation): try: if not isinstance(workflow_ids, list): raise ValueError("workflow_ids必须是字符串数组") - return self._delete_project_api("/api/lims/order/workflows", workflow_ids) + + # 使用新 Endpoint: /api/data/order/workflows + endpoint = "/api/data/order/workflows" + url = f"{self.hardware_interface.host}{endpoint}" + + print(f"\n📤 硬删除请求 (Query Param): {url}") + print(f"IDs count: {len(workflow_ids)}") + + # 使用 requests 的 params 传递数组,会生成 workFlowGuids=id1&workFlowGuids=id2 的形式 + params = {"workFlowGuids": workflow_ids} + + response = requests.delete( + url, + params=params, + timeout=60 + ) + + if response.status_code == 200: + print("✅ 删除请求成功") + return {"code": 1, "message": "删除成功", "timestamp": int(time.time())} + else: + print(f"❌ 删除失败: status={response.status_code}, content={response.text}") + return {"code": 0, "message": f"HTTP {response.status_code}: {response.text}", "timestamp": int(time.time())} + except Exception as e: print(f"❌ 硬删除异常: {str(e)}") return {"code": 0, "message": str(e), "timestamp": int(time.time())} @@ -936,14 +1569,14 @@ class BioyondReactionStation(BioyondWorkstation): """项目接口通用POST调用 参数: - endpoint: 接口路径(例如 /api/lims/order/skip-titration-steps) + endpoint: 接口路径(例如 /api/lims/order/skip-titration-steps) data: 请求体中的 data 字段内容 返回: - dict: 服务端响应,失败时返回 {code:0,message,...} + dict: 服务端响应,失败时返回 {code:0,message,...} """ request_data = { - "apiKey": API_CONFIG["api_key"], + "apiKey": self.bioyond_config["api_key"], "requestTime": self.hardware_interface.get_current_time_iso8601(), "data": data } @@ -976,35 +1609,57 @@ class BioyondReactionStation(BioyondWorkstation): """项目接口通用DELETE调用 参数: - endpoint: 接口路径(例如 /api/lims/order/workflows) + endpoint: 接口路径(例如 /api/lims/order/workflows) data: 请求体中的 data 字段内容 返回: - dict: 服务端响应,失败时返回 {code:0,message,...} + dict: 服务端响应,失败时返回 {code:0,message,...} """ request_data = { - "apiKey": API_CONFIG["api_key"], + "apiKey": self.bioyond_config["api_key"], "requestTime": self.hardware_interface.get_current_time_iso8601(), "data": data } print(f"\n📤 项目DELETE请求: {self.hardware_interface.host}{endpoint}") print(json.dumps(request_data, indent=4, ensure_ascii=False)) try: - response = requests.delete( + # 使用 requests.request 显式发送 Body,避免 requests.delete 可能的兼容性问题 + response = requests.request( + "DELETE", f"{self.hardware_interface.host}{endpoint}", - json=request_data, + data=json.dumps(request_data), headers={"Content-Type": "application/json"}, timeout=30 ) - result = response.json() + + try: + result = response.json() + except json.JSONDecodeError: + print(f"❌ 非JSON响应: {response.text}") + return {"code": 0, "message": "非JSON响应", "timestamp": int(time.time())} + if result.get("code") == 1: print("✅ 请求成功") else: - print(f"❌ 请求失败: {result.get('message','未知错误')}") + # 尝试提取详细错误信息 (兼容 Abp 等框架的 error 结构) + msg = result.get('message') + if not msg: + error_obj = result.get('error', {}) + if isinstance(error_obj, dict): + msg = error_obj.get('message') + details = error_obj.get('details') + if details: + msg = f"{msg}: {details}" + + if not msg: + msg = f"未知错误 (Status: {response.status_code})" + + print(f"❌ 请求失败: {msg}") + # 打印完整返回以供调试 + print(f"服务端返回: {json.dumps(result, ensure_ascii=False)}") + return result - except json.JSONDecodeError: - print("❌ 非JSON响应") - return {"code": 0, "message": "非JSON响应", "timestamp": int(time.time())} + except requests.exceptions.Timeout: print("❌ 请求超时") return {"code": 0, "message": "请求超时", "timestamp": int(time.time())} @@ -1030,16 +1685,16 @@ class BioyondReactionStation(BioyondWorkstation): for name in web_workflow_list: workflow_id = self.workflow_mappings.get(name, "") if not workflow_id: - print(f"警告:未找到工作流名称 {name} 对应的 ID") + print(f"警告:未找到工作流名称 {name} 对应的 ID") continue workflows_result.append({"id": workflow_id, "name": name}) print(f"process_web_workflows 输出: {workflows_result}") return workflows_result except json.JSONDecodeError as e: - print(f"错误:无法解析 web_workflow_json: {e}") + print(f"错误:无法解析 web_workflow_json: {e}") return [] except Exception as e: - print(f"错误:处理工作流失败: {e}") + print(f"错误:处理工作流失败: {e}") return [] def _build_workflows_with_parameters(self, workflows_result: list) -> list: @@ -1047,7 +1702,7 @@ class BioyondReactionStation(BioyondWorkstation): 构建带参数的工作流列表 Args: - workflows_result: 处理后的工作流列表(应为包含 id 和 name 的字典列表) + workflows_result: 处理后的工作流列表(应为包含 id 和 name 的字典列表) Returns: 符合新接口格式的工作流参数结构 @@ -1059,24 +1714,24 @@ class BioyondReactionStation(BioyondWorkstation): for idx, workflow_info in enumerate(workflows_result): if not isinstance(workflow_info, dict): - print(f"错误:workflows_result[{idx}] 不是字典,而是 {type(workflow_info)}: {workflow_info}") + print(f"错误:workflows_result[{idx}] 不是字典,而是 {type(workflow_info)}: {workflow_info}") continue workflow_id = workflow_info.get("id") if not workflow_id: - print(f"警告:workflows_result[{idx}] 缺少 'id' 键") + print(f"警告:workflows_result[{idx}] 缺少 'id' 键") continue workflow_name = workflow_info.get("name", "") # print(f"\n🔧 处理工作流 [{idx}]: {workflow_name} (ID: {workflow_id})") if idx >= len(self.pending_task_params): - # print(f" ⚠️ 无对应参数,跳过") + # print(f" ⚠️ 无对应参数,跳过") workflows_with_params.append({"id": workflow_id}) continue param_data = self.pending_task_params[idx] param_values = param_data.get("param_values", {}) if not param_values: - # print(f" ⚠️ 参数为空,跳过") + # print(f" ⚠️ 参数为空,跳过") workflows_with_params.append({"id": workflow_id}) continue @@ -1135,10 +1790,10 @@ class BioyondReactionStation(BioyondWorkstation): def merge_workflow_with_parameters(self, json_str: str) -> dict: """ - 调用新接口:合并工作流并传递参数 + 调用新接口:合并工作流并传递参数 Args: - json_str: JSON格式的字符串,包含: + json_str: JSON格式的字符串,包含: - name: 工作流名称 - workflows: [{"id": "工作流ID", "stepParameters": {...}}] @@ -1148,7 +1803,7 @@ class BioyondReactionStation(BioyondWorkstation): try: data = json.loads(json_str) - # 在工作流名称后面添加时间戳,避免重复 + # 在工作流名称后面添加时间戳,避免重复 if "name" in data and data["name"]: timestamp = self.hardware_interface.get_current_time_iso8601().replace(":", "-").replace(".", "-") original_name = data["name"] @@ -1156,7 +1811,7 @@ class BioyondReactionStation(BioyondWorkstation): print(f"🕒 工作流名称已添加时间戳: {original_name} -> {data['name']}") request_data = { - "apiKey": API_CONFIG["api_key"], + "apiKey": self.bioyond_config["api_key"], "requestTime": self.hardware_interface.get_current_time_iso8601(), "data": data } @@ -1195,7 +1850,7 @@ class BioyondReactionStation(BioyondWorkstation): return None if result.get("code") == 1: - print(f"✅ 工作流合并成功(带参数)") + print(f"✅ 工作流合并成功(带参数)") return result.get("data", {}) else: error_msg = result.get('message', '未知错误') @@ -1216,7 +1871,7 @@ class BioyondReactionStation(BioyondWorkstation): return None def _validate_and_refresh_workflow_if_needed(self, workflow_name: str) -> bool: - """验证工作流ID是否有效,如果无效则重新合并 + """验证工作流ID是否有效,如果无效则重新合并 Args: workflow_name: 工作流名称 @@ -1225,17 +1880,17 @@ class BioyondReactionStation(BioyondWorkstation): bool: 验证或刷新是否成功 """ print(f"\n🔍 验证工作流ID有效性...") - if not self.workflow_sequence: - print(f" ⚠️ 工作流序列为空,需要重新合并") + if not self._cached_workflow_sequence: + print(f" ⚠️ 工作流序列为空,需要重新合并") return False - first_workflow_id = self.workflow_sequence[0] + first_workflow_id = self._cached_workflow_sequence[0] try: structure = self.workflow_step_query(first_workflow_id) if structure: print(f" ✅ 工作流ID有效") return True else: - print(f" ⚠️ 工作流ID已过期,需要重新合并") + print(f" ⚠️ 工作流ID已过期,需要重新合并") return False except Exception as e: print(f" ❌ 工作流ID验证失败: {e}") @@ -1244,7 +1899,7 @@ class BioyondReactionStation(BioyondWorkstation): def process_and_execute_workflow(self, workflow_name: str, task_name: str) -> dict: """ - 一站式处理工作流程:解析网页工作流列表,合并工作流(带参数),然后发布任务 + 一站式处理工作流程:解析网页工作流列表,合并工作流(带参数),然后发布任务 Args: workflow_name: 合并后的工作流名称 @@ -1269,12 +1924,111 @@ class BioyondReactionStation(BioyondWorkstation): workflows_with_params = self._build_workflows_with_parameters(workflows_result) + # === 构建时间约束 (tcmBs) === + tcm_bs_list = [] + if self.pending_time_constraints: + print(f"\n🔗 处理时间约束 ({len(self.pending_time_constraints)} 个)...") + + + # 建立索引到名称的映射 + workflow_names_by_index = [w["name"] for w in workflows_result] + + # 默认步骤映射表 + DEFAULT_STEP_KEYS = { + "Solid_feeding_vials": "feeding", + "liquid_feeding_beaker": "liquid", + "Liquid_feeding_vials(non-titration)": "liquid", + "Liquid_feeding_solvents": "liquid", + "Liquid_feeding(titration)": "liquid", + "Drip_back": "liquid", + "reactor_taken_in": "config" + } + + for c in self.pending_time_constraints: + try: + start_idx = c["start_index"] + end_idx = c["end_index"] + + if start_idx >= len(workflow_names_by_index) or end_idx >= len(workflow_names_by_index): + print(f" ❌ 约束索引越界: {start_idx} -> {end_idx} (总数: {len(workflow_names_by_index)})") + continue + + start_wf_name = workflow_names_by_index[start_idx] + end_wf_name = workflow_names_by_index[end_idx] + + # 辅助函数:根据名称查找 config 中的 key + def find_config_key(name): + # 1. 直接匹配 + if name in self.workflow_step_ids: + return name + # 2. 尝试反向查找 WORKFLOW_TO_SECTION_MAP (如果需要) + # 3. 尝试查找 WORKFLOW_MAPPINGS 的 key (忽略大小写匹配或特定映射) + + # 硬编码常见映射 (Web名称 -> Config Key) + mapping = { + "Solid_feeding_vials": "solid_feeding_vials", + "Liquid_feeding_vials(non-titration)": "liquid_feeding_vials_non_titration", + "Liquid_feeding_solvents": "liquid_feeding_solvents", + "Liquid_feeding(titration)": "liquid_feeding_titration", + "Drip_back": "drip_back" + } + return mapping.get(name, name) + + start_config_key = find_config_key(start_wf_name) + end_config_key = find_config_key(end_wf_name) + + # 查找 UUID + if start_config_key not in self.workflow_step_ids: + print(f" ❌ 找不到工作流 {start_wf_name} (Key: {start_config_key}) 的步骤配置") + continue + if end_config_key not in self.workflow_step_ids: + print(f" ❌ 找不到工作流 {end_wf_name} (Key: {end_config_key}) 的步骤配置") + continue + + # 确定步骤 Key + start_key = c["start_step_key"] + if not start_key: + start_key = DEFAULT_STEP_KEYS.get(start_wf_name) + if not start_key: + print(f" ❌ 未指定起点步骤Key且无默认值: {start_wf_name}") + continue + + end_key = c["end_step_key"] + if not end_key: + end_key = DEFAULT_STEP_KEYS.get(end_wf_name) + if not end_key: + print(f" ❌ 未指定终点步骤Key且无默认值: {end_wf_name}") + continue + + start_step_id = self.workflow_step_ids[start_config_key].get(start_key) + end_step_id = self.workflow_step_ids[end_config_key].get(end_key) + + if not start_step_id or not end_step_id: + print(f" ❌ 无法解析步骤ID: {start_config_key}.{start_key} -> {end_config_key}.{end_key}") + continue + + tcm_bs_list.append({ + "startWorkflowIndex": start_idx, + "startStepId": start_step_id, + "startComparePoint": c["start_point"], + "endWorkflowIndex": end_idx, + "endStepId": end_step_id, + "endComparePoint": c["end_point"], + "ct": c["duration"], + "description": f"Constraint {start_idx}->{end_idx}" + }) + print(f" ✅ 添加约束: {start_wf_name}({start_key}) -> {end_wf_name}({end_key})") + + except Exception as e: + print(f" ❌ 处理约束时出错: {e}") + merge_data = { "name": workflow_name, - "workflows": workflows_with_params + "workflows": workflows_with_params, + "tcmBs": tcm_bs_list } - # print(f"\n🔄 合并工作流(带参数),名称: {workflow_name}") + # print(f"\n🔄 合并工作流(带参数),名称: {workflow_name}") merged_workflow = self.merge_workflow_with_parameters(json.dumps(merge_data)) if not merged_workflow: @@ -1291,20 +2045,28 @@ class BioyondReactionStation(BioyondWorkstation): "paramValues": {} }] - result = self.create_order(json.dumps(order_params)) - - if not result: - return self._create_error_result("创建任务失败", "create_order") - - # 清空工作流序列和参数,防止下次执行时累积重复 - self.pending_task_params = [] - self.clear_workflows() # 清空工作流序列,避免重复累积 + # 尝试创建订单:无论成功或失败,都需要在本次尝试结束后清理本地队列,避免下一次重复累积 + try: + result = self.create_order(json.dumps(order_params)) + if not result: + # 返回错误结果之前先记录情况(稍后由 finally 清理队列) + print("⚠️ 创建任务返回空或失败响应,稍后将清理本地队列以避免重复累积") + return self._create_error_result("创建任务失败", "create_order") + finally: + # 无论任务创建成功与否,都要清空本地保存的参数和工作流序列,防止下次重复 + try: + self.pending_task_params = [] + self.clear_workflows() # 清空工作流序列,避免重复累积 + print("✅ 已清理 pending_task_params 与 workflow_sequence") + except Exception as _ex: + # 记录清理失败,但不要阻塞原始返回 + print(f"❌ 清理队列时发生异常: {_ex}") # print(f"\n✅ 任务创建成功: {result}") # print(f"\n✅ 任务创建成功") print(f"{'='*60}\n") - # 返回结果,包含合并后的工作流数据和订单参数 + # 返回结果,包含合并后的工作流数据和订单参数 return json.dumps({ "success": True, "result": result, @@ -1321,10 +2083,42 @@ class BioyondReactionStation(BioyondWorkstation): preintake_id: 通量ID Returns: - Dict[str, Any]: 服务器响应,包含状态码、消息和时间戳 + Dict[str, Any]: 服务器响应,包含状态码,消息和时间戳 """ try: return self._post_project_api("/api/lims/order/skip-titration-steps", preintake_id) except Exception as e: print(f"❌ 跳过滴定异常: {str(e)}") return {"code": 0, "message": str(e), "timestamp": int(time.time())} + + def set_reactor_temperature(self, reactor_id: int, temperature: float) -> str: + """ + 设置反应器温度 + + Args: + reactor_id: 反应器编号 (1-5) + temperature: 目标温度 (°C) + + Returns: + str: JSON 字符串,格式为 {"suc": True/False, "msg": "描述信息"} + """ + if reactor_id not in range(1, 6): + return json.dumps({"suc": False, "msg": "反应器编号必须在 1-5 之间"}) + + try: + payload = { + "deviceTypeName": f"反应模块{chr(64 + reactor_id)}", # 1->A, 2->B... + "temperature": float(temperature) + } + resp = requests.post( + f"{self.hardware_interface.host}/api/lims/device/set-reactor-temperatue", + json=payload, + headers={"Content-Type": "application/json"}, + timeout=10 + ) + if resp.status_code == 200: + return json.dumps({"suc": True, "msg": "温度设置成功"}) + else: + return json.dumps({"suc": False, "msg": f"温度设置失败,HTTP {resp.status_code}"}) + except Exception as e: + return json.dumps({"suc": False, "msg": f"温度设置异常: {str(e)}"}) diff --git a/unilabos/devices/workstation/bioyond_studio/station.py b/unilabos/devices/workstation/bioyond_studio/station.py index e349b083..327d8195 100644 --- a/unilabos/devices/workstation/bioyond_studio/station.py +++ b/unilabos/devices/workstation/bioyond_studio/station.py @@ -6,6 +6,7 @@ Bioyond Workstation Implementation """ import time import traceback +import threading from datetime import datetime from typing import Dict, Any, List, Optional, Union import json @@ -23,12 +24,94 @@ from unilabos.ros.nodes.presets.workstation import ROS2WorkstationNode from unilabos.ros.msgs.message_converter import convert_to_ros_msg, Float64, String from pylabrobot.resources.resource import Resource as ResourcePLR -from unilabos.devices.workstation.bioyond_studio.config import ( - API_CONFIG, WORKFLOW_MAPPINGS, MATERIAL_TYPE_MAPPINGS, WAREHOUSE_MAPPING, HTTP_SERVICE_CONFIG -) + from unilabos.devices.workstation.workstation_http_service import WorkstationHTTPService +class ConnectionMonitor: + """Bioyond连接监控器""" + def __init__(self, workstation, check_interval=30): + self.workstation = workstation + self.check_interval = check_interval + self._running = False + self._thread = None + self._last_status = "unknown" + + def start(self): + if self._running: + return + self._running = True + self._thread = threading.Thread(target=self._monitor_loop, daemon=True, name="BioyondConnectionMonitor") + self._thread.start() + logger.info("Bioyond连接监控器已启动") + + def stop(self): + self._running = False + if self._thread: + self._thread.join(timeout=2) + logger.info("Bioyond连接监控器已停止") + + def _monitor_loop(self): + while self._running: + try: + # 使用 lightweight API 检查连接 + # query_matial_type_list 是比较快的查询 + start_time = time.time() + result = self.workstation.hardware_interface.material_type_list() + + status = "online" if result else "offline" + msg = "Connection established" if status == "online" else "Failed to get material type list" + + if status != self._last_status: + logger.info(f"Bioyond连接状态变更: {self._last_status} -> {status}") + self._publish_event(status, msg) + self._last_status = status + + # 发布心跳 (可选,或者只在状态变更时发布) + # self._publish_event(status, msg) + + except Exception as e: + logger.error(f"Bioyond连接检查异常: {e}") + if self._last_status != "error": + self._publish_event("error", str(e)) + self._last_status = "error" + + time.sleep(self.check_interval) + + def _publish_event(self, status, message): + try: + if hasattr(self.workstation, "_ros_node") and self.workstation._ros_node: + event_data = { + "status": status, + "message": message, + "timestamp": datetime.now().isoformat() + } + + # 动态发布消息,需要在 ROS2DeviceNode 中有对应支持 + # 这里假设通用事件发布机制,使用 String 类型的 topic + # 话题: //events/device_status + ns = self.workstation._ros_node.namespace + topic = f"{ns}/events/device_status" + + # 使用 ROS2DeviceNode 的发布功能 + # 如果没有预定义的 publisher,需要动态创建 + # 注意:workstation base node 可能没有自动创建 arbitrary publishers 的机制 + # 这里我们先尝试用 String json 发布 + + # 在 ROS2DeviceNode 中通常需要先 create_publisher + # 为了简单起见,我们检查是否已有 publisher,没有则创建 + if not hasattr(self.workstation, "_device_status_pub"): + self.workstation._device_status_pub = self.workstation._ros_node.create_publisher( + String, topic, 10 + ) + + self.workstation._device_status_pub.publish( + convert_to_ros_msg(String, json.dumps(event_data, ensure_ascii=False)) + ) + except Exception as e: + logger.error(f"发布设备状态事件失败: {e}") + + class BioyondResourceSynchronizer(ResourceSynchronizer): """Bioyond资源同步器 @@ -174,9 +257,8 @@ class BioyondResourceSynchronizer(ResourceSynchronizer): else: logger.info(f"[同步→Bioyond] ➕ 物料不存在于 Bioyond,将创建新物料并入库") - # 第1步:获取仓库配置 - from .config import WAREHOUSE_MAPPING - warehouse_mapping = WAREHOUSE_MAPPING + # 第1步:从配置中获取仓库配置 + warehouse_mapping = self.bioyond_config.get("warehouse_mapping", {}) # 确定目标仓库名称 parent_name = None @@ -238,14 +320,20 @@ class BioyondResourceSynchronizer(ResourceSynchronizer): # 第2步:转换为 Bioyond 格式 logger.info(f"[同步→Bioyond] 🔄 转换物料为 Bioyond 格式...") - # 导入物料默认参数配置 - from .config import MATERIAL_DEFAULT_PARAMETERS + # 从配置中获取物料默认参数 + material_default_params = self.workstation.bioyond_config.get("material_default_parameters", {}) + material_type_params = self.workstation.bioyond_config.get("material_type_parameters", {}) + + # 合并参数配置:物料名称参数 + typeId参数(转换为 type: 格式) + merged_params = material_default_params.copy() + for type_id, params in material_type_params.items(): + merged_params[f"type:{type_id}"] = params bioyond_material = resource_plr_to_bioyond( [resource], type_mapping=self.workstation.bioyond_config["material_type_mappings"], warehouse_mapping=self.workstation.bioyond_config["warehouse_mapping"], - material_params=MATERIAL_DEFAULT_PARAMETERS + material_params=merged_params )[0] logger.info(f"[同步→Bioyond] 🔧 准备覆盖locations字段,目标仓库: {parent_name}, 库位: {update_site}, UUID: {target_location_uuid[:8]}...") @@ -468,13 +556,20 @@ class BioyondResourceSynchronizer(ResourceSynchronizer): return material_bioyond_id # 转换为 Bioyond 格式 - from .config import MATERIAL_DEFAULT_PARAMETERS + # 从配置中获取物料默认参数 + material_default_params = self.workstation.bioyond_config.get("material_default_parameters", {}) + material_type_params = self.workstation.bioyond_config.get("material_type_parameters", {}) + + # 合并参数配置:物料名称参数 + typeId参数(转换为 type: 格式) + merged_params = material_default_params.copy() + for type_id, params in material_type_params.items(): + merged_params[f"type:{type_id}"] = params bioyond_material = resource_plr_to_bioyond( [resource], type_mapping=self.workstation.bioyond_config["material_type_mappings"], warehouse_mapping=self.workstation.bioyond_config["warehouse_mapping"], - material_params=MATERIAL_DEFAULT_PARAMETERS + material_params=merged_params )[0] # ⚠️ 关键:创建物料时不设置 locations,让 Bioyond 系统暂不分配库位 @@ -528,8 +623,7 @@ class BioyondResourceSynchronizer(ResourceSynchronizer): logger.info(f"[物料入库] 目标库位: {update_site}") # 获取仓库配置和目标库位 UUID - from .config import WAREHOUSE_MAPPING - warehouse_mapping = WAREHOUSE_MAPPING + warehouse_mapping = self.workstation.bioyond_config.get("warehouse_mapping", {}) parent_name = None target_location_uuid = None @@ -584,6 +678,44 @@ class BioyondWorkstation(WorkstationBase): 集成Bioyond物料管理的工作站实现 """ + def _publish_task_status( + self, + task_id: str, + task_type: str, + status: str, + result: dict = None, + progress: float = 0.0, + task_code: str = None + ): + """发布任务状态事件""" + try: + if not getattr(self, "_ros_node", None): + return + + event_data = { + "task_id": task_id, + "task_code": task_code, + "task_type": task_type, + "status": status, + "progress": progress, + "timestamp": datetime.now().isoformat() + } + if result: + event_data["result"] = result + + topic = f"{self._ros_node.namespace}/events/task_status" + + if not hasattr(self, "_task_status_pub"): + self._task_status_pub = self._ros_node.create_publisher( + String, topic, 10 + ) + + self._task_status_pub.publish( + convert_to_ros_msg(String, json.dumps(event_data, ensure_ascii=False)) + ) + except Exception as e: + logger.error(f"发布任务状态事件失败: {e}") + def __init__( self, bioyond_config: Optional[Dict[str, Any]] = None, @@ -605,10 +737,28 @@ class BioyondWorkstation(WorkstationBase): raise ValueError("Deck 配置不能为空,请在配置文件中添加正确的 deck 配置") # 初始化 warehouses 属性 - self.deck.warehouses = {} - for resource in self.deck.children: - if isinstance(resource, WareHouse): - self.deck.warehouses[resource.name] = resource + if not hasattr(self.deck, "warehouses") or self.deck.warehouses is None: + self.deck.warehouses = {} + + # 仅当 warehouses 为空时尝试重新扫描(避免覆盖子类的修复) + if not self.deck.warehouses: + for resource in self.deck.children: + # 兼容性增强: 只要是仓库类别或者是 WareHouse 实例均可 + is_warehouse = isinstance(resource, WareHouse) or getattr(resource, "category", "") == "warehouse" + + # 如果配置中有定义,也可以认定为 warehouse + if not is_warehouse and "warehouse_mapping" in bioyond_config: + if resource.name in bioyond_config["warehouse_mapping"]: + is_warehouse = True + + if is_warehouse: + self.deck.warehouses[resource.name] = resource + # 确保 category 被正确设置,方便后续使用 + if getattr(resource, "category", "") != "warehouse": + try: + resource.category = "warehouse" + except: + pass # 创建通信模块 self._create_communication_module(bioyond_config) @@ -627,18 +777,22 @@ class BioyondWorkstation(WorkstationBase): self._set_workflow_mappings(bioyond_config["workflow_mappings"]) # 准备 HTTP 报送接收服务配置(延迟到 post_init 启动) - # 从 bioyond_config 中获取,如果没有则使用 HTTP_SERVICE_CONFIG 的默认值 + # 从 bioyond_config 中的 http_service_config 获取 + http_service_cfg = bioyond_config.get("http_service_config", {}) self._http_service_config = { - "host": bioyond_config.get("http_service_host", HTTP_SERVICE_CONFIG["http_service_host"]), - "port": bioyond_config.get("http_service_port", HTTP_SERVICE_CONFIG["http_service_port"]) + "host": http_service_cfg.get("http_service_host", "127.0.0.1"), + "port": http_service_cfg.get("http_service_port", 8080) } - self.http_service = None # 将在 post_init 中启动 + self.http_service = None # 将在 post_init 启动 + self.connection_monitor = None # 将在 post_init 启动 logger.info(f"Bioyond工作站初始化完成") def __del__(self): """析构函数:清理资源,停止 HTTP 服务""" try: + if hasattr(self, 'connection_monitor') and self.connection_monitor: + self.connection_monitor.stop() if hasattr(self, 'http_service') and self.http_service is not None: logger.info("正在停止 HTTP 报送服务...") self.http_service.stop() @@ -648,8 +802,19 @@ class BioyondWorkstation(WorkstationBase): def post_init(self, ros_node: ROS2WorkstationNode): self._ros_node = ros_node + # 启动连接监控 + try: + self.connection_monitor = ConnectionMonitor(self) + self.connection_monitor.start() + except Exception as e: + logger.error(f"启动连接监控失败: {e}") + # 启动 HTTP 报送接收服务(现在 device_id 已可用) - if hasattr(self, '_http_service_config'): + # ⚠️ 检查子类是否已经自己管理 HTTP 服务 + if self.bioyond_config.get("_disable_auto_http_service"): + logger.info("🔧 检测到 _disable_auto_http_service 标志,跳过自动启动 HTTP 服务") + logger.info(" 子类(BioyondCellWorkstation)已自行管理 HTTP 服务") + elif hasattr(self, '_http_service_config'): try: self.http_service = WorkstationHTTPService( workstation_instance=self, @@ -688,19 +853,14 @@ class BioyondWorkstation(WorkstationBase): def _create_communication_module(self, config: Optional[Dict[str, Any]] = None) -> None: """创建Bioyond通信模块""" - # 创建默认配置 - default_config = { - **API_CONFIG, - "workflow_mappings": WORKFLOW_MAPPINGS, - "material_type_mappings": MATERIAL_TYPE_MAPPINGS, - "warehouse_mapping": WAREHOUSE_MAPPING - } - - # 如果传入了 config,合并配置(config 中的值会覆盖默认值) + # 直接使用传入的配置,不再使用默认值 + # 所有配置必须从 JSON 文件中提供 if config: - self.bioyond_config = {**default_config, **config} + self.bioyond_config = config else: - self.bioyond_config = default_config + # 如果没有配置,使用空字典(会导致后续错误,但这是预期的) + self.bioyond_config = {} + print("警告: 未提供 bioyond_config,请确保在 JSON 配置文件中提供完整配置") self.hardware_interface = BioyondV1RPC(self.bioyond_config) @@ -1014,7 +1174,15 @@ class BioyondWorkstation(WorkstationBase): workflow_id = self._get_workflow(actual_workflow_name) if workflow_id: - self.workflow_sequence.append(workflow_id) + # 兼容 BioyondReactionStation 中 workflow_sequence 被重写为 property 的情况 + if isinstance(self.workflow_sequence, list): + self.workflow_sequence.append(workflow_id) + elif hasattr(self, "_cached_workflow_sequence") and isinstance(self._cached_workflow_sequence, list): + self._cached_workflow_sequence.append(workflow_id) + else: + print(f"❌ 无法添加工作流: workflow_sequence 类型错误 {type(self.workflow_sequence)}") + return False + print(f"添加工作流到执行顺序: {actual_workflow_name} -> {workflow_id}") return True return False @@ -1215,6 +1383,22 @@ class BioyondWorkstation(WorkstationBase): # TODO: 根据实际业务需求处理步骤完成逻辑 # 例如:更新数据库、触发后续流程等 + # 发布任务状态事件 (running/progress update) + self._publish_task_status( + task_id=data.get('orderCode'), # 使用 OrderCode 作为关联 ID + task_code=data.get('orderCode'), + task_type="bioyond_step", + status="running", + progress=0.5, # 步骤完成视为任务进行中 + result={"step_name": data.get('stepName'), "step_id": data.get('stepId')} + ) + + # 更新物料信息 + # 步骤完成后,物料状态可能发生变化(如位置、用量等),触发同步 + logger.info(f"[步骤完成报送] 触发物料同步...") + self.resource_synchronizer.sync_from_external() + + return { "processed": True, "step_id": data.get('stepId'), @@ -1249,6 +1433,17 @@ class BioyondWorkstation(WorkstationBase): # TODO: 根据实际业务需求处理通量完成逻辑 + # 发布任务状态事件 + self._publish_task_status( + task_id=data.get('orderCode'), + task_code=data.get('orderCode'), + task_type="bioyond_sample", + status="running", + progress=0.7, + result={"sample_id": data.get('sampleId'), "status": status_desc} + ) + + return { "processed": True, "sample_id": data.get('sampleId'), @@ -1288,6 +1483,32 @@ class BioyondWorkstation(WorkstationBase): # TODO: 根据实际业务需求处理任务完成逻辑 # 例如:更新物料库存、生成报表等 + # 映射状态到事件状态 + event_status = "completed" + if str(data.get('status')) in ["-11", "-12"]: + event_status = "error" + elif str(data.get('status')) == "30": + event_status = "completed" + else: + event_status = "running" # 其他状态视为运行中(或根据实际定义) + + # 发布任务状态事件 + self._publish_task_status( + task_id=data.get('orderCode'), + task_code=data.get('orderCode'), + task_type="bioyond_order", + status=event_status, + progress=1.0 if event_status in ["completed", "error"] else 0.9, + result={"order_name": data.get('orderName'), "status": status_desc, "materials_count": len(used_materials)} + ) + + # 更新物料信息 + # 任务完成后,且状态为完成时,触发同步以更新最终物料状态 + if event_status == "completed": + logger.info(f"[任务完成报送] 触发物料同步...") + self.resource_synchronizer.sync_from_external() + + return { "processed": True, "order_code": data.get('orderCode'), diff --git a/unilabos/devices/workstation/coin_cell_assembly/20251230_Modbus_CSV_Mapping_Guide.md b/unilabos/devices/workstation/coin_cell_assembly/20251230_Modbus_CSV_Mapping_Guide.md new file mode 100644 index 00000000..8af63e7a --- /dev/null +++ b/unilabos/devices/workstation/coin_cell_assembly/20251230_Modbus_CSV_Mapping_Guide.md @@ -0,0 +1,84 @@ +# Modbus CSV 地址映射说明 + +本文档说明 `coin_cell_assembly_a.csv` 文件如何将命名节点映射到实际的 Modbus 地址,以及如何在代码中使用它们。 + +## 1. CSV 文件结构 + +地址表文件位于同级目录下:`coin_cell_assembly_a.csv` + +每一行定义了一个 Modbus 节点,包含以下关键列: + +| 列名 | 说明 | 示例 | +|------|------|------| +| **Name** | **节点名称** (代码中引用的 Key) | `COIL_ALUMINUM_FOIL` | +| **DataType** | 数据类型 (BOOL, INT16, FLOAT32, STRING) | `BOOL` | +| **Comment** | 注释说明 | `使用铝箔垫` | +| **Attribute** | 属性 (通常留空或用于额外标记) | | +| **DeviceType** | Modbus 寄存器类型 (`coil`, `hold_register`) | `coil` | +| **Address** | **Modbus 地址** (十进制) | `8340` | + +### 示例行 (铝箔垫片) + +```csv +COIL_ALUMINUM_FOIL,BOOL,,使用铝箔垫,,coil,8340, +``` + +- **名称**: `COIL_ALUMINUM_FOIL` +- **类型**: `coil` (线圈,读写单个位) +- **地址**: `8340` + +--- + +## 2. 加载与注册流程 + +在 `coin_cell_assembly.py` 的初始化代码中: + +1. **加载 CSV**: `BaseClient.load_csv()` 读取 CSV 并解析每行定义。 +2. **注册节点**: `modbus_client.register_node_list()` 将解析后的节点注册到 Modbus 客户端实例中。 + +```python +# 代码位置: coin_cell_assembly.py (L174-175) +self.nodes = BaseClient.load_csv(os.path.join(os.path.dirname(__file__), 'coin_cell_assembly_a.csv')) +self.client = modbus_client.register_node_list(self.nodes) +``` + +--- + +## 3. 代码中的使用方式 + +注册后,通过 `self.client.use_node('节点名称')` 即可获取该节点对象并进行读写操作,无需关心具体地址。 + +### 控制铝箔垫片 (COIL_ALUMINUM_FOIL) + +```python +# 代码位置: qiming_coin_cell_code 函数 (L1048) +self.client.use_node('COIL_ALUMINUM_FOIL').write(not lvbodian) +``` + +- **写入 True**: 对应 Modbus 功能码 05 (Write Single Coil),向地址 `8340` 写入 `1` (ON)。 +- **写入 False**: 向地址 `8340` 写入 `0` (OFF)。 + +> **注意**: 代码中使用了 `not lvbodian`,这意味着逻辑是反转的。如果 `lvbodian` 参数为 `True` (默认),写入的是 `False` (不使用铝箔垫)。 + +--- + +## 4. 地址转换注意事项 (Modbus vs PLC) + +CSV 中的 `Address` 列(如 `8340`)是 **Modbus 协议地址**。 + +如果使用 InoProShop (汇川 PLC 编程软件),看到的可能是 **PLC 内部地址** (如 `%QX...` 或 `%MW...`)。这两者之间通常需要转换。 + +### 常见的转换规则 (示例) + +- **Coil (线圈) %QX**: + - `Modbus地址 = 字节地址 * 8 + 位偏移` + - *例子*: `%QX834.0` -> `834 * 8 + 0` = `6672` + - *注意*: 如果 CSV 中配置的是 `8340`,这可能是一个自定义映射,或者是基于不同规则(如直接对应 Word 地址的某种映射,或者可能就是地址写错了/使用了非标准映射)。 + +- **Register (寄存器) %MW**: + - 通常直接对应,或者有偏移量 (如 Modbus 40001 = PLC MW0)。 + +### 验证方法 +由于 `test_unilab_interact.py` 中发现 `8450` (CSV风格) 不工作,而 `6760` (%QX845.0 计算值) 工作正常,**建议对 CSV 中的其他地址也进行核实**,特别是像 `8340` 这样以 0 结尾看起来像是 "字节地址+0" 的数值,可能实际上应该是 `%QX834.0` 对应的 `6672`。 + +如果发现设备控制无反应,请尝试按照标准的 Modbus 计算方式转换 PLC 地址。 diff --git a/unilabos/devices/workstation/coin_cell_assembly/20260113_物料搜寻确认弹窗自动处理功能.md b/unilabos/devices/workstation/coin_cell_assembly/20260113_物料搜寻确认弹窗自动处理功能.md new file mode 100644 index 00000000..96104b6f --- /dev/null +++ b/unilabos/devices/workstation/coin_cell_assembly/20260113_物料搜寻确认弹窗自动处理功能.md @@ -0,0 +1,352 @@ +# 2026-01-13 物料搜寻确认弹窗自动处理功能 + +## 概述 + +本次更新为设备初始化流程添加了**物料搜寻确认弹窗自动检测与处理功能**。在设备初始化过程中,PLC 会弹出物料搜寻确认对话框,现在系统可以根据用户参数自动点击"是"或"否"按钮,无需手动干预。 + +## 背景问题 + +### 原有流程 +1. 调用 `func_pack_device_init_auto_start_combined()` 初始化设备 +2. PLC 在初始化过程中弹出物料搜寻确认对话框 +3. **需要人工手动点击**"是"或"否"按钮 +4. PLC 继续完成初始化并启动 + +### 存在的问题 +- 需要人工干预,无法实现全自动化 +- 影响批量生产效率 +- 容易遗忘点击导致流程卡住 + +## 解决方案 + +### 新增 Modbus 地址配置 + +在 `coin_cell_assembly_b.csv` 第 69-71 行添加三个 coil: + +| Name | DeviceType | Address | 说明 | +|------|-----------|---------|------| +| COIL_MATERIAL_SEARCH_DIALOG_APPEAR | coil | 6470 | 物料搜寻确认弹窗画面是否出现 | +| COIL_MATERIAL_SEARCH_CONFIRM_YES | coil | 6480 | 初始化物料搜寻确认按钮"是" | +| COIL_MATERIAL_SEARCH_CONFIRM_NO | coil | 6490 | 初始化物料搜寻确认按钮"否" | + +**Modbus 地址转换:** +- CSV 6470 → Modbus 5176 (弹窗出现) +- CSV 6480 → Modbus 5184 (按钮"是") +- CSV 6490 → Modbus 5192 (按钮"否") + +## 代码修改详情 + +### 1. coin_cell_assembly.py + +#### 1.1 新增辅助方法 `_handle_material_search_dialog()` + +**位置:** 第 799-901 行 + +**功能:** +- 监测物料搜寻确认弹窗是否出现(Coil 5176) +- 根据 `enable_search` 参数自动点击对应按钮 +- 使用**脉冲模式**模拟真实按钮操作:`True` → 保持 0.5 秒 → `False` + +**参数:** +- `enable_search: bool` - True=点击"是"(启用物料搜寻), False=点击"否"(不启用) +- `timeout: int = 30` - 等待弹窗出现的最大时间(秒) + +**逻辑流程:** +```python +1. 监测 COIL_MATERIAL_SEARCH_DIALOG_APPEAR (每 0.5 秒检查一次) +2. 检测到弹窗出现 (Coil = True) +3. 选择按钮: + - enable_search=True → COIL_MATERIAL_SEARCH_CONFIRM_YES + - enable_search=False → COIL_MATERIAL_SEARCH_CONFIRM_NO +4. 执行脉冲操作: + - 写入 True (按下按钮) + - 等待 0.5 秒 + - 写入 False (释放按钮) + - 验证状态 +``` + +#### 1.2 修改 `func_pack_device_init_auto_start_combined()` + +**位置:** 第 904-1115 行 + +**主要改动:** + +1. **添加新参数** + ```python + def func_pack_device_init_auto_start_combined( + self, + material_search_enable: bool = False # 新增参数 + ) -> bool: + ``` + +2. **内联初始化逻辑并集成弹窗检测** + - 不再调用 `self.func_pack_device_init()` + - 将初始化逻辑直接实现在函数内 + - **在等待初始化完成的循环中实时检测弹窗** + - 避免死锁:PLC 等待弹窗确认 ↔ 代码等待初始化完成 + +3. **关键代码片段** + ```python + # 等待初始化完成,同时检测物料搜寻弹窗 + while (self._sys_init_status()) == False: + # 检查超时 + if time.time() - start_wait > max_wait_time: + raise RuntimeError(f"初始化超时") + + # 如果还没处理弹窗,检测弹窗是否出现 + if not dialog_handled: + dialog_state = self.client.use_node('COIL_MATERIAL_SEARCH_DIALOG_APPEAR').read(1) + if dialog_actual: # 弹窗出现 + # 执行脉冲按钮点击 + button_node.write(True) # 按下 + time.sleep(0.5) # 保持 + button_node.write(False) # 释放 + dialog_handled = True + + time.sleep(1) + ``` + +4. **步骤调整** + - 步骤 0: 前置条件检查 + - 步骤 1: 设备初始化(**包含弹窗检测**) + - 步骤 1.5: 已在步骤 1 中完成 + - 步骤 2: 切换自动模式 + - 步骤 3: 启动设备 + +### 2. coin_cell_workstation.yaml + +**位置:** 第 292-312 行 + +**修改内容:** + +```yaml +auto-func_pack_device_init_auto_start_combined: + goal_default: + material_search_enable: false # 新增默认值 + + schema: + description: 组合函数:设备初始化 + 物料搜寻确认 + 切换自动模式 + 启动。初始化过程中会自动检测物料搜寻确认弹窗,并根据参数自动点击"是"或"否"按钮 + + goal: + properties: + material_search_enable: # 新增参数配置 + default: false + description: 是否启用物料搜寻功能。设备初始化后会弹出物料搜寻确认弹窗,此参数控制自动点击"是"(启用)或"否"(不启用)。默认为false(不启用物料搜寻) + type: boolean +``` + +### 3. 测试脚本(已创建,用户已删除) + +#### 3.1 test_material_search_dialog.py +- 从 CSV 动态加载 Modbus 地址 +- 支持 4 种测试模式: + - `query` - 查询所有状态 + - `dialog <0|1>` - 设置弹窗出现/消失 + - `yes` - 脉冲点击"是"按钮 + - `no` - 脉冲点击"否"按钮 +- 兼容 pymodbus 3.x API + +#### 3.2 更新其他测试脚本 +- `test_coin_cell_reset.py` - 更新为 pymodbus 3.x API +- `test_unilab_interact.py` - 更新为 pymodbus 3.x API + +## 使用方法 + +### 参数说明 + +| 参数 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| `material_search_enable` | boolean | `false` | 是否启用物料搜寻功能 | + +### 调用示例 + +#### 1. 不启用物料搜寻(默认) +```python +# 默认参数,点击"否"按钮 +await device.func_pack_device_init_auto_start_combined() +``` + +或在 YAML workflow 中: +```yaml +# 使用默认值 false,不启用物料搜寻 +- BatteryStation/auto-func_pack_device_init_auto_start_combined: {} +``` + +#### 2. 启用物料搜寻 +```python +# 显式设置为 True,点击"是"按钮 +await device.func_pack_device_init_auto_start_combined( + material_search_enable=True +) +``` + +或在 YAML workflow 中: +```yaml +- BatteryStation/auto-func_pack_device_init_auto_start_combined: + goal: + material_search_enable: true # 启用物料搜寻 +``` + +## 执行日志示例 + +``` +26-01-13 [21:32:44] [INFO] 开始组合操作:设备初始化 → 物料搜寻确认 → 自动模式 → 启动 +26-01-13 [21:32:44] [INFO] 【步骤 0/4】前置条件检查... +26-01-13 [21:32:44] [INFO] ✓ REG_UNILAB_INTERACT 检查通过 +26-01-13 [21:32:44] [INFO] ✓ COIL_GB_L_IGNORE_CMD 检查通过 +26-01-13 [21:32:44] [INFO] 【步骤 1/4】设备初始化... +26-01-13 [21:32:44] [INFO] 切换手动模式... +26-01-13 [21:32:46] [INFO] 发送初始化命令... +26-01-13 [21:32:47] [INFO] 等待初始化完成(同时监测物料搜寻弹窗)... +26-01-13 [21:33:05] [INFO] ✓ 在初始化过程中检测到物料搜寻确认弹窗! +26-01-13 [21:33:05] [INFO] 用户选择: 不启用物料搜寻(点击否) +26-01-13 [21:33:05] [INFO] → 按下按钮 '否' +26-01-13 [21:33:06] [INFO] → 释放按钮 '否' +26-01-13 [21:33:07] [INFO] ✓ 成功处理物料搜寻确认弹窗(选择: 否) +26-01-13 [21:33:08] [INFO] ✓ 初始化状态完成 +26-01-13 [21:33:12] [INFO] ✓ 设备初始化完成 +26-01-13 [21:33:12] [INFO] 【步骤 1.5/4】物料搜寻确认已在初始化过程中完成 +26-01-13 [21:33:12] [INFO] 【步骤 2/4】切换自动模式... +26-01-13 [21:33:15] [INFO] ✓ 切换自动模式完成 +26-01-13 [21:33:15] [INFO] 【步骤 3/4】启动设备... +26-01-13 [21:33:18] [INFO] ✓ 启动设备完成 +26-01-13 [21:33:18] [INFO] 组合操作完成:设备已成功初始化、确认物料搜寻、切换自动模式并启动 +``` + +## 技术要点 + +### 1. 脉冲模式按钮操作 +模拟真实按钮按压过程: +1. 写入 `True` (按下) +2. 保持 0.5 秒 +3. 写入 `False` (释放) +4. 验证状态 + +### 2. 避免死锁 +**问题:** PLC 在初始化过程中等待弹窗确认,而代码等待初始化完成 +**解决:** 在初始化等待循环中实时检测弹窗,一旦出现立即处理 + +### 3. 超时保护 +- 弹窗检测超时:30 秒(在 `_handle_material_search_dialog` 中) +- 初始化超时:120 秒(在 `func_pack_device_init_auto_start_combined` 中) + +### 4. PyModbus 3.x API 兼容 +所有 Modbus 操作使用 keyword arguments: +```python +# 读取 +client.read_coils(address=5176, count=1) + +# 写入 +client.write_coil(address=5184, value=True) +``` + +## 向后兼容性 + +### 保留的原有函数 +- `func_pack_device_init()` - 单独的初始化函数,不包含弹窗处理 +- 仍可在 YAML 中通过 `auto-func_pack_device_init` 调用 +- 用于不需要自动处理弹窗的场景 + +### 新增的功能 +- 在 `func_pack_device_init_auto_start_combined()` 中集成弹窗处理 +- 通过参数控制,默认行为与之前兼容(点击"否") + +## 验证测试 + +### 测试场景 + +#### 场景 1:默认参数(不启用物料搜寻) +```bash +# 调用时不传参数 +BatteryStation/auto-func_pack_device_init_auto_start_combined: {} +``` +**预期结果:** +- ✅ 检测到弹窗 +- ✅ 自动点击"否"按钮 +- ✅ 初始化完成并启动成功 + +#### 场景 2:启用物料搜寻 +```bash +# 设置 material_search_enable=true +BatteryStation/auto-func_pack_device_init_auto_start_combined: + goal: + material_search_enable: true +``` +**预期结果:** +- ✅ 检测到弹窗 +- ✅ 自动点击"是"按钮 +- ✅ 初始化完成并启动成功 + +### 实际测试结果 + +**测试时间:** 2026-01-13 21:32:43 +**测试参数:** `material_search_enable: false` +**测试结果:** ✅ 成功 + +**关键时间节点:** +- 21:33:05 - 检测到弹窗 +- 21:33:05 - 按下"否"按钮 +- 21:33:06 - 释放"否"按钮 +- 21:33:07 - 弹窗处理完成 +- 21:33:08 - 初始化状态完成 +- 21:33:18 - 整个流程完成 + +**总耗时:** 约 35 秒(包含初始化全过程) + +## 注意事项 + +1. **CSV 配置依赖** + - 确保 `coin_cell_assembly_b.csv` 包含 69-71 行的 coil 配置 + - 地址转换逻辑:`modbus_addr = (csv_addr // 10) * 8 + (csv_addr % 10)` + +2. **默认行为** + - 默认 `material_search_enable=false`,即不启用物料搜寻 + - 如需启用,必须显式设置为 `true` + +3. **日志级别** + - 弹窗检测过程中的 `waiting for init_cmd` 使用 DEBUG 级别 + - 关键操作(检测到弹窗、按钮操作)使用 INFO 级别 + +4. **原有函数保留** + - `func_pack_device_init()` 仍然可用,但不包含弹窗处理 + - 如果单独调用此函数,仍需手动处理弹窗 + +## 文件清单 + +### 修改的文件 +1. `d:\UniLabdev\Uni-Lab-OS\unilabos\devices\workstation\coin_cell_assembly\coin_cell_assembly.py` + - 新增 `_handle_material_search_dialog()` 方法 + - 修改 `func_pack_device_init_auto_start_combined()` 函数 + +2. `d:\UniLabdev\Uni-Lab-OS\unilabos\registry\devices\coin_cell_workstation.yaml` + - 更新 `auto-func_pack_device_init_auto_start_combined` 配置 + - 添加 `material_search_enable` 参数说明 + +3. `d:\UniLabdev\Uni-Lab-OS\unilabos\devices\workstation\coin_cell_assembly\coin_cell_assembly_b.csv` + - 第 69-71 行添加三个 coil 配置 + +### 创建的测试文件(已删除) +1. `test_material_search_dialog.py` - 物料搜寻弹窗测试脚本 +2. `test_coin_cell_reset.py` - 复位功能测试(更新为 pymodbus 3.x) +3. `test_unilab_interact.py` - Unilab 交互测试(更新为 pymodbus 3.x) + +## 总结 + +本次更新成功实现了设备初始化过程中物料搜寻确认弹窗的自动化处理,主要优势: + +✅ **全自动化** - 无需人工干预 +✅ **参数可配** - 灵活控制是否启用物料搜寻 +✅ **实时检测** - 在初始化等待循环中检测,避免死锁 +✅ **脉冲模式** - 模拟真实按钮操作 +✅ **向后兼容** - 保留原有函数,不影响现有流程 +✅ **完整日志** - 详细记录每一步操作 +✅ **超时保护** - 防止无限等待 + +该功能已通过实际测试验证,可投入生产使用。 + +--- + +**文档版本:** 1.0 +**创建日期:** 2026-01-13 +**作者:** Antigravity AI Assistant +**最后更新:** 2026-01-13 21:36 diff --git a/unilabos/devices/workstation/coin_cell_assembly/YB_YH_materials.py b/unilabos/devices/workstation/coin_cell_assembly/YB_YH_materials.py new file mode 100644 index 00000000..c9187e65 --- /dev/null +++ b/unilabos/devices/workstation/coin_cell_assembly/YB_YH_materials.py @@ -0,0 +1,645 @@ +""" +纽扣电池组装工作站物料类定义 +Button Battery Assembly Station Resource Classes +""" + +from __future__ import annotations + +from collections import OrderedDict +from typing import Any, Dict, List, Optional, TypedDict, Union, cast + +from pylabrobot.resources.coordinate import Coordinate +from pylabrobot.resources.container import Container +from pylabrobot.resources.deck import Deck +from pylabrobot.resources.itemized_resource import ItemizedResource +from pylabrobot.resources.resource import Resource +from pylabrobot.resources.resource_stack import ResourceStack +from pylabrobot.resources.tip_rack import TipRack, TipSpot +from pylabrobot.resources.trash import Trash +from pylabrobot.resources.utils import create_ordered_items_2d + +from unilabos.resources.battery.magazine import MagazineHolder_4_Cathode, MagazineHolder_6_Cathode, MagazineHolder_6_Anode, MagazineHolder_6_Battery +from unilabos.resources.battery.bottle_carriers import YIHUA_Electrolyte_12VialCarrier +from unilabos.resources.battery.electrode_sheet import ElectrodeSheet + + + +# TODO: 这个应该只能放一个极片 +class MaterialHoleState(TypedDict): + diameter: int + depth: int + max_sheets: int + info: Optional[str] # 附加信息 + +class MaterialHole(Resource): + """料板洞位类""" + children: List[ElectrodeSheet] = [] + + def __init__( + self, + name: str, + size_x: float, + size_y: float, + size_z: float, + category: str = "material_hole", + **kwargs + ): + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + category=category, + ) + self._unilabos_state: MaterialHoleState = MaterialHoleState( + diameter=20, + depth=10, + max_sheets=1, + info=None + ) + + def get_all_sheet_info(self): + info_list = [] + for sheet in self.children: + info_list.append(sheet._unilabos_state["info"]) + return info_list + + #这个函数函数好像没用,一般不会集中赋值质量 + def set_all_sheet_mass(self): + for sheet in self.children: + sheet._unilabos_state["mass"] = 0.5 # 示例:设置质量为0.5g + + 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data + #移动极片前先取出对象 + def get_sheet_with_name(self, name: str) -> Optional[ElectrodeSheet]: + for sheet in self.children: + if sheet.name == name: + return sheet + return None + + def has_electrode_sheet(self) -> bool: + """检查洞位是否有极片""" + return len(self.children) > 0 + + def assign_child_resource( + self, + resource: ElectrodeSheet, + location: Optional[Coordinate], + reassign: bool = True, + ): + """放置极片""" + # TODO: 这里要改,diameter找不到,加入._unilabos_state后应该没问题 + #if resource._unilabos_state["diameter"] > self._unilabos_state["diameter"]: + # raise ValueError(f"极片直径 {resource._unilabos_state['diameter']} 超过洞位直径 {self._unilabos_state['diameter']}") + #if len(self.children) >= self._unilabos_state["max_sheets"]: + # raise ValueError(f"洞位已满,无法放置更多极片") + super().assign_child_resource(resource, location, reassign) + + # 根据children的编号取物料对象。 + def get_electrode_sheet_info(self, index: int) -> ElectrodeSheet: + return self.children[index] + + +class MaterialPlateState(TypedDict): + hole_spacing_x: float + hole_spacing_y: float + hole_diameter: float + info: Optional[str] # 附加信息 + +class MaterialPlate(ItemizedResource[MaterialHole]): + """料板类 - 4x4个洞位,每个洞位放1个极片""" + + children: List[MaterialHole] + + def __init__( + self, + name: str, + size_x: float, + size_y: float, + size_z: float, + ordered_items: Optional[Dict[str, MaterialHole]] = None, + ordering: Optional[OrderedDict[str, str]] = None, + category: str = "material_plate", + model: Optional[str] = None, + fill: bool = False + ): + """初始化料板 + + Args: + name: 料板名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + hole_diameter: 洞直径 (mm) + hole_depth: 洞深度 (mm) + hole_spacing_x: X方向洞位间距 (mm) + hole_spacing_y: Y方向洞位间距 (mm) + number: 编号 + category: 类别 + model: 型号 + """ + self._unilabos_state: MaterialPlateState = MaterialPlateState( + hole_spacing_x=24.0, + hole_spacing_y=24.0, + hole_diameter=20.0, + info="", + ) + # 创建4x4的洞位 + # TODO: 这里要改,对应不同形状 + holes = create_ordered_items_2d( + klass=MaterialHole, + num_items_x=4, + num_items_y=4, + dx=(size_x - 4 * self._unilabos_state["hole_spacing_x"]) / 2, # 居中 + dy=(size_y - 4 * self._unilabos_state["hole_spacing_y"]) / 2, # 居中 + dz=size_z, + item_dx=self._unilabos_state["hole_spacing_x"], + item_dy=self._unilabos_state["hole_spacing_y"], + size_x = 16, + size_y = 16, + size_z = 16, + ) + if fill: + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + ordered_items=holes, + category=category, + model=model, + ) + else: + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + ordered_items=ordered_items, + ordering=ordering, + category=category, + model=model, + ) + + def update_locations(self): + # TODO:调多次相加 + holes = create_ordered_items_2d( + klass=MaterialHole, + num_items_x=4, + num_items_y=4, + dx=(self._size_x - 3 * self._unilabos_state["hole_spacing_x"]) / 2, # 居中 + dy=(self._size_y - 3 * self._unilabos_state["hole_spacing_y"]) / 2, # 居中 + dz=self._size_z, + item_dx=self._unilabos_state["hole_spacing_x"], + item_dy=self._unilabos_state["hole_spacing_y"], + size_x = 1, + size_y = 1, + size_z = 1, + ) + for item, original_item in zip(holes.items(), self.children): + original_item.location = item[1].location + + +class PlateSlot(ResourceStack): + """板槽位类 - 1个槽上能堆放8个板,移板只能操作最上方的板""" + + def __init__( + self, + name: str, + size_x: float, + size_y: float, + size_z: float, + max_plates: int = 8, + category: str = "plate_slot", + model: Optional[str] = None + ): + """初始化板槽位 + + Args: + name: 槽位名称 + max_plates: 最大板数量 + category: 类别 + """ + super().__init__( + name=name, + direction="z", # Z方向堆叠 + resources=[], + ) + self.max_plates = max_plates + self.category = category + + def can_add_plate(self) -> bool: + """检查是否可以添加板""" + return len(self.children) < self.max_plates + + def add_plate(self, plate: MaterialPlate) -> None: + """添加料板""" + if not self.can_add_plate(): + raise ValueError(f"槽位 {self.name} 已满,无法添加更多板") + self.assign_child_resource(plate) + + def get_top_plate(self) -> MaterialPlate: + """获取最上方的板""" + if len(self.children) == 0: + raise ValueError(f"槽位 {self.name} 为空") + return cast(MaterialPlate, self.get_top_item()) + + def take_top_plate(self) -> MaterialPlate: + """取出最上方的板""" + top_plate = self.get_top_plate() + self.unassign_child_resource(top_plate) + return top_plate + + def can_access_for_picking(self) -> bool: + """检查是否可以进行取料操作(只有最上方的板能进行取料操作)""" + return len(self.children) > 0 + + def serialize(self) -> dict: + return { + **super().serialize(), + "max_plates": self.max_plates, + } + + +#是一种类型注解,不用self +class BatteryState(TypedDict): + """电池状态字典""" + diameter: float + height: float + assembly_pressure: float + electrolyte_volume: float + electrolyte_name: str + +class Battery(Resource): + """电池类 - 可容纳极片""" + children: List[ElectrodeSheet] = [] + + def __init__( + self, + name: str, + size_x=1, + size_y=1, + size_z=1, + category: str = "battery", + ): + """初始化电池 + + Args: + name: 电池名称 + diameter: 直径 (mm) + height: 高度 (mm) + max_volume: 最大容量 (μL) + barcode: 二维码编号 + category: 类别 + model: 型号 + """ + super().__init__( + name=name, + size_x=1, + size_y=1, + size_z=1, + category=category, + ) + self._unilabos_state: BatteryState = BatteryState( + diameter = 1.0, + height = 1.0, + assembly_pressure = 1.0, + electrolyte_volume = 1.0, + electrolyte_name = "DP001" + ) + + def add_electrolyte_with_bottle(self, bottle: Bottle) -> bool: + to_add_name = bottle._unilabos_state["electrolyte_name"] + if bottle.aspirate_electrolyte(10): + if self.add_electrolyte(to_add_name, 10): + pass + else: + bottle._unilabos_state["electrolyte_volume"] += 10 + + def set_electrolyte(self, name: str, volume: float) -> None: + """设置电解液信息""" + self._unilabos_state["electrolyte_name"] = name + self._unilabos_state["electrolyte_volume"] = volume + #这个应该没用,不会有加了后再加的事情 + def add_electrolyte(self, name: str, volume: float) -> bool: + """添加电解液信息""" + if name != self._unilabos_state["electrolyte_name"]: + return False + self._unilabos_state["electrolyte_volume"] += volume + + 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data + +# 电解液作为属性放进去 + +class BatteryPressSlotState(TypedDict): + """电池状态字典""" + diameter: float =20.0 + depth: float = 4.0 + +class BatteryPressSlot(Resource): + """电池压制槽类 - 设备,可容纳一个电池""" + children: List[Battery] = [] + + def __init__( + self, + name: str = "BatteryPressSlot", + category: str = "battery_press_slot", + ): + """初始化电池压制槽 + + Args: + name: 压制槽名称 + diameter: 直径 (mm) + depth: 深度 (mm) + category: 类别 + model: 型号 + """ + super().__init__( + name=name, + size_x=10, + size_y=12, + size_z=13, + category=category, + ) + self._unilabos_state: BatteryPressSlotState = BatteryPressSlotState() + + def has_battery(self) -> bool: + """检查是否有电池""" + return len(self.children) > 0 + + 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data + + def assign_child_resource( + self, + resource: Battery, + location: Optional[Coordinate], + reassign: bool = True, + ): + """放置极片""" + # TODO: 让高京看下槽位只有一个电池时是否这么写。 + if self.has_battery(): + raise ValueError(f"槽位已含有一个电池,无法再放置其他电池") + super().assign_child_resource(resource, location, reassign) + + # 根据children的编号取物料对象。 + def get_battery_info(self, index: int) -> Battery: + return self.children[0] + + +def TipBox64( + name: str, + size_x: float = 127.8, + size_y: float = 85.5, + size_z: float = 60.0, + category: str = "tip_rack", + model: Optional[str] = None, +): + """64孔枪头盒类""" + from pylabrobot.resources.tip import Tip + + # 创建12x8=96个枪头位 + def make_tip(): + return Tip( + has_filter=False, + total_tip_length=20.0, + maximal_volume=1000, # 1mL + fitting_depth=8.0, + ) + + tip_spots = create_ordered_items_2d( + klass=TipSpot, + num_items_x=12, + num_items_y=8, + dx=8.0, + dy=8.0, + dz=0.0, + item_dx=9.0, + item_dy=9.0, + size_x=10, + size_y=10, + size_z=0.0, + make_tip=make_tip, + ) + idx_available = list(range(0, 32)) + list(range(64, 96)) + tip_spots_available = {k: v for i, (k, v) in enumerate(tip_spots.items()) if i in idx_available} + tip_rack = TipRack( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + # ordered_items=tip_spots_available, + ordered_items=tip_spots, + category=category, + model=model, + with_tips=False, + ) + tip_rack.set_tip_state([True]*32 + [False]*32 + [True]*32) # 前32和后32个有枪头,中间32个无枪头 + return tip_rack + + +class WasteTipBoxstate(TypedDict): + """"废枪头盒状态字典""" + max_tips: int = 100 + tip_count: int = 0 + +#枪头不是一次性的(同一溶液则反复使用),根据寄存器判断 +class WasteTipBox(Trash): + """废枪头盒类 - 100个枪头容量""" + + def __init__( + self, + name: str, + size_x: float = 127.8, + size_y: float = 85.5, + size_z: float = 60.0, + material_z_thickness=0, + max_volume=float("inf"), + category="trash", + model=None, + compute_volume_from_height=None, + compute_height_from_volume=None, + ): + """初始化废枪头盒 + + Args: + name: 废枪头盒名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + max_tips: 最大枪头容量 + category: 类别 + model: 型号 + """ + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + category=category, + model=model, + ) + self._unilabos_state: WasteTipBoxstate = WasteTipBoxstate() + + def add_tip(self) -> None: + """添加废枪头""" + if self._unilabos_state["tip_count"] >= self._unilabos_state["max_tips"]: + raise ValueError(f"废枪头盒 {self.name} 已满") + self._unilabos_state["tip_count"] += 1 + + def get_tip_count(self) -> int: + """获取枪头数量""" + return self._unilabos_state["tip_count"] + + def empty(self) -> None: + """清空废枪头盒""" + self._unilabos_state["tip_count"] = 0 + + + 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data + + +class CoincellDeck(Deck): + """纽扣电池组装工作站台面类""" + + def __init__( + self, + name: str = "coin_cell_deck", + size_x: float = 1450.0, # 1m + size_y: float = 1450.0, # 1m + size_z: float = 100.0, # 0.9m + origin: Coordinate = Coordinate(-2200, 0, 0), + category: str = "coin_cell_deck", + setup: bool = False, # 是否自动执行 setup + ): + """初始化纽扣电池组装工作站台面 + + Args: + name: 台面名称 + size_x: 长度 (mm) - 1m + size_y: 宽度 (mm) - 1m + size_z: 高度 (mm) - 0.9m + origin: 原点坐标 + category: 类别 + setup: 是否自动执行 setup 配置标准布局 + """ + super().__init__( + name=name, + size_x=1450.0, + size_y=1450.0, + size_z=100.0, + origin=origin, + ) + if setup: + self.setup() + + def setup(self) -> None: + """设置工作站的标准布局 - 包含子弹夹、料盘、瓶架等完整配置""" + # ====================================== 子弹夹 ============================================ + + # 正极片(4个洞位,2x2布局) + zhengji_zip = MagazineHolder_4_Cathode("正极&铝箔弹夹") + self.assign_child_resource(zhengji_zip, Coordinate(x=402.0, y=830.0, z=0)) + + # 正极壳、平垫片(6个洞位,2x2+2布局) + zhengjike_zip = MagazineHolder_6_Cathode("正极壳&平垫片弹夹") + self.assign_child_resource(zhengjike_zip, Coordinate(x=566.0, y=272.0, z=0)) + + # 负极壳、弹垫片(6个洞位,2x2+2布局) + fujike_zip = MagazineHolder_6_Anode("负极壳&弹垫片弹夹") + self.assign_child_resource(fujike_zip, Coordinate(x=474.0, y=276.0, z=0)) + + # 成品弹夹(6个洞位,3x2布局) + chengpindanjia_zip = MagazineHolder_6_Battery("成品弹夹") + self.assign_child_resource(chengpindanjia_zip, Coordinate(x=260.0, y=156.0, z=0)) + + # ====================================== 物料板 ============================================ + # 创建物料板(料盘carrier)- 4x4布局 + # 负极料盘 + fujiliaopan = MaterialPlate(name="负极料盘", size_x=120, size_y=100, size_z=10.0, fill=True) + self.assign_child_resource(fujiliaopan, Coordinate(x=708.0, y=794.0, z=0)) + # for i in range(16): + # fujipian = ElectrodeSheet(name=f"{fujiliaopan.name}_jipian_{i}", size_x=12, size_y=12, size_z=0.1) + # fujiliaopan.children[i].assign_child_resource(fujipian, location=None) + + # 隔膜料盘 + gemoliaopan = MaterialPlate(name="隔膜料盘", size_x=120, size_y=100, size_z=10.0, fill=True) + self.assign_child_resource(gemoliaopan, Coordinate(x=718.0, y=918.0, z=0)) + # for i in range(16): + # gemopian = ElectrodeSheet(name=f"{gemoliaopan.name}_jipian_{i}", size_x=12, size_y=12, size_z=0.1) + # gemoliaopan.children[i].assign_child_resource(gemopian, location=None) + + # ====================================== 瓶架、移液枪 ============================================ + # 在台面上放置 3x4 瓶架、6x2 瓶架 与 64孔移液枪头盒 + # 奔耀上料5ml分液瓶小板 - 由奔曜跨站转运而来,不单独写,但是这里应该有一个堆栈用于摆放分液瓶小板 + + # bottle_rack_3x4 = BottleRack( + # name="bottle_rack_3x4", + # size_x=210.0, + # size_y=140.0, + # size_z=100.0, + # num_items_x=2, + # num_items_y=4, + # position_spacing=35.0, + # orientation="vertical", + # ) + # self.assign_child_resource(bottle_rack_3x4, Coordinate(x=1542.0, y=717.0, z=0)) + + # 电解液缓存位 - 6x2布局 + bottle_rack_6x2 = YIHUA_Electrolyte_12VialCarrier(name="bottle_rack_6x2") + self.assign_child_resource(bottle_rack_6x2, Coordinate(x=1050.0, y=358.0, z=0)) + # 电解液回收位6x2 + bottle_rack_6x2_2 = YIHUA_Electrolyte_12VialCarrier(name="bottle_rack_6x2_2") + self.assign_child_resource(bottle_rack_6x2_2, Coordinate(x=914.0, y=358.0, z=0)) + + tip_box = TipBox64(name="tip_box_64") + self.assign_child_resource(tip_box, Coordinate(x=782.0, y=514.0, z=0)) + + waste_tip_box = WasteTipBox(name="waste_tip_box") + self.assign_child_resource(waste_tip_box, Coordinate(x=778.0, y=622.0, z=0)) + + +def YH_Deck(name=""): + cd = CoincellDeck(name=name) + cd.setup() + return cd + + +if __name__ == "__main__": + deck = create_coin_cell_deck() + print(deck) \ No newline at end of file diff --git a/unilabos/devices/workstation/coin_cell_assembly/button_battery_station.py b/unilabos/devices/workstation/coin_cell_assembly/button_battery_station.py deleted file mode 100644 index f663a217..00000000 --- a/unilabos/devices/workstation/coin_cell_assembly/button_battery_station.py +++ /dev/null @@ -1,1289 +0,0 @@ -""" -纽扣电池组装工作站物料类定义 -Button Battery Assembly Station Resource Classes -""" - -from __future__ import annotations - -from collections import OrderedDict -from typing import Any, Dict, List, Optional, TypedDict, Union, cast - -from pylabrobot.resources.coordinate import Coordinate -from pylabrobot.resources.container import Container -from pylabrobot.resources.deck import Deck -from pylabrobot.resources.itemized_resource import ItemizedResource -from pylabrobot.resources.resource import Resource -from pylabrobot.resources.resource_stack import ResourceStack -from pylabrobot.resources.tip_rack import TipRack, TipSpot -from pylabrobot.resources.trash import Trash -from pylabrobot.resources.utils import create_ordered_items_2d - - -class ElectrodeSheetState(TypedDict): - diameter: float # 直径 (mm) - thickness: float # 厚度 (mm) - mass: float # 质量 (g) - material_type: str # 材料类型(正极、负极、隔膜、弹片、垫片、铝箔等) - info: Optional[str] # 附加信息 - -class ElectrodeSheet(Resource): - """极片类 - 包含正负极片、隔膜、弹片、垫片、铝箔等所有片状材料""" - - def __init__( - self, - name: str = "极片", - size_x=10, - size_y=10, - size_z=10, - category: str = "electrode_sheet", - model: Optional[str] = None, - ): - """初始化极片 - - Args: - name: 极片名称 - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - category=category, - model=model, - ) - self._unilabos_state: ElectrodeSheetState = ElectrodeSheetState( - diameter=14, - thickness=0.1, - mass=0.5, - material_type="copper", - info=None - ) - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - -# TODO: 这个应该只能放一个极片 -class MaterialHoleState(TypedDict): - diameter: int - depth: int - max_sheets: int - info: Optional[str] # 附加信息 - -class MaterialHole(Resource): - """料板洞位类""" - children: List[ElectrodeSheet] = [] - - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - category: str = "material_hole", - **kwargs - ): - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - category=category, - ) - self._unilabos_state: MaterialHoleState = MaterialHoleState( - diameter=20, - depth=10, - max_sheets=1, - info=None - ) - - def get_all_sheet_info(self): - info_list = [] - for sheet in self.children: - info_list.append(sheet._unilabos_state["info"]) - return info_list - - #这个函数函数好像没用,一般不会集中赋值质量 - def set_all_sheet_mass(self): - for sheet in self.children: - sheet._unilabos_state["mass"] = 0.5 # 示例:设置质量为0.5g - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - #移动极片前先取出对象 - def get_sheet_with_name(self, name: str) -> Optional[ElectrodeSheet]: - for sheet in self.children: - if sheet.name == name: - return sheet - return None - - def has_electrode_sheet(self) -> bool: - """检查洞位是否有极片""" - return len(self.children) > 0 - - def assign_child_resource( - self, - resource: ElectrodeSheet, - location: Optional[Coordinate], - reassign: bool = True, - ): - """放置极片""" - # TODO: 这里要改,diameter找不到,加入._unilabos_state后应该没问题 - if resource._unilabos_state["diameter"] > self._unilabos_state["diameter"]: - raise ValueError(f"极片直径 {resource._unilabos_state['diameter']} 超过洞位直径 {self._unilabos_state['diameter']}") - if len(self.children) >= self._unilabos_state["max_sheets"]: - raise ValueError(f"洞位已满,无法放置更多极片") - super().assign_child_resource(resource, location, reassign) - - # 根据children的编号取物料对象。 - def get_electrode_sheet_info(self, index: int) -> ElectrodeSheet: - return self.children[index] - - - -class MaterialPlateState(TypedDict): - hole_spacing_x: float - hole_spacing_y: float - hole_diameter: float - info: Optional[str] # 附加信息 - - - -class MaterialPlate(ItemizedResource[MaterialHole]): - """料板类 - 4x4个洞位,每个洞位放1个极片""" - - children: List[MaterialHole] - - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - ordered_items: Optional[Dict[str, MaterialHole]] = None, - ordering: Optional[OrderedDict[str, str]] = None, - category: str = "material_plate", - model: Optional[str] = None, - fill: bool = False - ): - """初始化料板 - - Args: - name: 料板名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - hole_diameter: 洞直径 (mm) - hole_depth: 洞深度 (mm) - hole_spacing_x: X方向洞位间距 (mm) - hole_spacing_y: Y方向洞位间距 (mm) - number: 编号 - category: 类别 - model: 型号 - """ - self._unilabos_state: MaterialPlateState = MaterialPlateState( - hole_spacing_x=24.0, - hole_spacing_y=24.0, - hole_diameter=20.0, - info="", - ) - # 创建4x4的洞位 - # TODO: 这里要改,对应不同形状 - holes = create_ordered_items_2d( - klass=MaterialHole, - num_items_x=4, - num_items_y=4, - dx=(size_x - 4 * self._unilabos_state["hole_spacing_x"]) / 2, # 居中 - dy=(size_y - 4 * self._unilabos_state["hole_spacing_y"]) / 2, # 居中 - dz=size_z, - item_dx=self._unilabos_state["hole_spacing_x"], - item_dy=self._unilabos_state["hole_spacing_y"], - size_x = 16, - size_y = 16, - size_z = 16, - ) - if fill: - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - ordered_items=holes, - category=category, - model=model, - ) - else: - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - ordered_items=ordered_items, - ordering=ordering, - category=category, - model=model, - ) - - def update_locations(self): - # TODO:调多次相加 - holes = create_ordered_items_2d( - klass=MaterialHole, - num_items_x=4, - num_items_y=4, - dx=(self._size_x - 3 * self._unilabos_state["hole_spacing_x"]) / 2, # 居中 - dy=(self._size_y - 3 * self._unilabos_state["hole_spacing_y"]) / 2, # 居中 - dz=self._size_z, - item_dx=self._unilabos_state["hole_spacing_x"], - item_dy=self._unilabos_state["hole_spacing_y"], - size_x = 1, - size_y = 1, - size_z = 1, - ) - for item, original_item in zip(holes.items(), self.children): - original_item.location = item[1].location - - -class PlateSlot(ResourceStack): - """板槽位类 - 1个槽上能堆放8个板,移板只能操作最上方的板""" - - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - max_plates: int = 8, - category: str = "plate_slot", - model: Optional[str] = None - ): - """初始化板槽位 - - Args: - name: 槽位名称 - max_plates: 最大板数量 - category: 类别 - """ - super().__init__( - name=name, - direction="z", # Z方向堆叠 - resources=[], - ) - self.max_plates = max_plates - self.category = category - - def can_add_plate(self) -> bool: - """检查是否可以添加板""" - return len(self.children) < self.max_plates - - def add_plate(self, plate: MaterialPlate) -> None: - """添加料板""" - if not self.can_add_plate(): - raise ValueError(f"槽位 {self.name} 已满,无法添加更多板") - self.assign_child_resource(plate) - - def get_top_plate(self) -> MaterialPlate: - """获取最上方的板""" - if len(self.children) == 0: - raise ValueError(f"槽位 {self.name} 为空") - return cast(MaterialPlate, self.get_top_item()) - - def take_top_plate(self) -> MaterialPlate: - """取出最上方的板""" - top_plate = self.get_top_plate() - self.unassign_child_resource(top_plate) - return top_plate - - def can_access_for_picking(self) -> bool: - """检查是否可以进行取料操作(只有最上方的板能进行取料操作)""" - return len(self.children) > 0 - - def serialize(self) -> dict: - return { - **super().serialize(), - "max_plates": self.max_plates, - } - - -class ClipMagazineHole(Container): - """子弹夹洞位类""" - children: List[ElectrodeSheet] = [] - def __init__( - self, - name: str, - diameter: float, - depth: float, - category: str = "clip_magazine_hole", - ): - """初始化子弹夹洞位 - - Args: - name: 洞位名称 - diameter: 洞直径 (mm) - depth: 洞深度 (mm) - category: 类别 - """ - super().__init__( - name=name, - size_x=diameter, - size_y=diameter, - size_z=depth, - category=category, - ) - self.diameter = diameter - self.depth = depth - - def can_add_sheet(self, sheet: ElectrodeSheet) -> bool: - """检查是否可以添加极片 - - 根据洞的深度和极片的厚度来判断是否可以添加极片 - """ - # 检查极片直径是否适合洞的直径 - if sheet._unilabos_state["diameter"] > self.diameter: - return False - - # 计算当前已添加极片的总厚度 - current_thickness = sum(s._unilabos_state["thickness"] for s in self.children) - - # 检查添加新极片后总厚度是否超过洞的深度 - if current_thickness + sheet._unilabos_state["thickness"] > self.depth: - return False - - return True - - - def assign_child_resource( - self, - resource: ElectrodeSheet, - location: Optional[Coordinate] = None, - reassign: bool = True, - ): - """放置极片到洞位中 - - Args: - resource: 要放置的极片 - location: 极片在洞位中的位置(对于洞位,通常为None) - reassign: 是否允许重新分配 - """ - # 检查是否可以添加极片 - if not self.can_add_sheet(resource): - raise ValueError(f"无法向洞位 {self.name} 添加极片:直径或厚度不匹配") - - # 调用父类方法实际执行分配 - super().assign_child_resource(resource, location, reassign) - - def unassign_child_resource(self, resource: ElectrodeSheet): - """从洞位中移除极片 - - Args: - resource: 要移除的极片 - """ - if resource not in self.children: - raise ValueError(f"极片 {resource.name} 不在洞位 {self.name} 中") - - # 调用父类方法实际执行移除 - super().unassign_child_resource(resource) - - - - def serialize_state(self) -> Dict[str, Any]: - return { - "sheet_count": len(self.children), - "sheets": [sheet.serialize() for sheet in self.children], - } -class ClipMagazine_four(ItemizedResource[ClipMagazineHole]): - """子弹夹类 - 有4个洞位,每个洞位放多个极片""" - children: List[ClipMagazineHole] - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - hole_diameter: float = 14.0, - hole_depth: float = 10.0, - hole_spacing: float = 25.0, - max_sheets_per_hole: int = 100, - category: str = "clip_magazine_four", - model: Optional[str] = None, - ): - """初始化子弹夹 - - Args: - name: 子弹夹名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - hole_diameter: 洞直径 (mm) - hole_depth: 洞深度 (mm) - hole_spacing: 洞位间距 (mm) - max_sheets_per_hole: 每个洞位最大极片数量 - category: 类别 - model: 型号 - """ - # 创建4个洞位,排成2x2布局 - holes = create_ordered_items_2d( - klass=ClipMagazineHole, - num_items_x=2, - num_items_y=2, - dx=(size_x - 2 * hole_spacing) / 2, # 居中 - dy=(size_y - hole_spacing) / 2, # 居中 - dz=size_z - 0, - item_dx=hole_spacing, - item_dy=hole_spacing, - diameter=hole_diameter, - depth=hole_depth, - ) - - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - ordered_items=holes, - category=category, - model=model, - ) - - # 保存洞位的直径和深度 - self.hole_diameter = hole_diameter - self.hole_depth = hole_depth - self.max_sheets_per_hole = max_sheets_per_hole - - def serialize(self) -> dict: - return { - **super().serialize(), - "hole_diameter": self.hole_diameter, - "hole_depth": self.hole_depth, - "max_sheets_per_hole": self.max_sheets_per_hole, - } -# TODO: 这个要改 -class ClipMagazine(ItemizedResource[ClipMagazineHole]): - """子弹夹类 - 有6个洞位,每个洞位放多个极片""" - children: List[ClipMagazineHole] - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - hole_diameter: float = 14.0, - hole_depth: float = 10.0, - hole_spacing: float = 25.0, - max_sheets_per_hole: int = 100, - category: str = "clip_magazine", - model: Optional[str] = None, - ): - """初始化子弹夹 - - Args: - name: 子弹夹名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - hole_diameter: 洞直径 (mm) - hole_depth: 洞深度 (mm) - hole_spacing: 洞位间距 (mm) - max_sheets_per_hole: 每个洞位最大极片数量 - category: 类别 - model: 型号 - """ - # 创建6个洞位,排成2x3布局 - holes = create_ordered_items_2d( - klass=ClipMagazineHole, - num_items_x=3, - num_items_y=2, - dx=(size_x - 2 * hole_spacing) / 2, # 居中 - dy=(size_y - hole_spacing) / 2, # 居中 - dz=size_z - 0, - item_dx=hole_spacing, - item_dy=hole_spacing, - diameter=hole_diameter, - depth=hole_depth, - ) - - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - ordered_items=holes, - category=category, - model=model, - ) - - # 保存洞位的直径和深度 - self.hole_diameter = hole_diameter - self.hole_depth = hole_depth - self.max_sheets_per_hole = max_sheets_per_hole - - def serialize(self) -> dict: - return { - **super().serialize(), - "hole_diameter": self.hole_diameter, - "hole_depth": self.hole_depth, - "max_sheets_per_hole": self.max_sheets_per_hole, - } -#是一种类型注解,不用self -class BatteryState(TypedDict): - """电池状态字典""" - diameter: float - height: float - - electrolyte_name: str - electrolyte_volume: float - -class Battery(Resource): - """电池类 - 可容纳极片""" - children: List[ElectrodeSheet] = [] - - def __init__( - self, - name: str, - category: str = "battery", - ): - """初始化电池 - - Args: - name: 电池名称 - diameter: 直径 (mm) - height: 高度 (mm) - max_volume: 最大容量 (μL) - barcode: 二维码编号 - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=1, - size_y=1, - size_z=1, - category=category, - ) - self._unilabos_state: BatteryState = BatteryState() - - def add_electrolyte_with_bottle(self, bottle: Bottle) -> bool: - to_add_name = bottle._unilabos_state["electrolyte_name"] - if bottle.aspirate_electrolyte(10): - if self.add_electrolyte(to_add_name, 10): - pass - else: - bottle._unilabos_state["electrolyte_volume"] += 10 - - def set_electrolyte(self, name: str, volume: float) -> None: - """设置电解液信息""" - self._unilabos_state["electrolyte_name"] = name - self._unilabos_state["electrolyte_volume"] = volume - #这个应该没用,不会有加了后再加的事情 - def add_electrolyte(self, name: str, volume: float) -> bool: - """添加电解液信息""" - if name != self._unilabos_state["electrolyte_name"]: - return False - self._unilabos_state["electrolyte_volume"] += volume - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - -# 电解液作为属性放进去 - -class BatteryPressSlotState(TypedDict): - """电池状态字典""" - diameter: float =20.0 - depth: float = 4.0 - -class BatteryPressSlot(Resource): - """电池压制槽类 - 设备,可容纳一个电池""" - children: List[Battery] = [] - - def __init__( - self, - name: str = "BatteryPressSlot", - category: str = "battery_press_slot", - ): - """初始化电池压制槽 - - Args: - name: 压制槽名称 - diameter: 直径 (mm) - depth: 深度 (mm) - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=10, - size_y=12, - size_z=13, - category=category, - ) - self._unilabos_state: BatteryPressSlotState = BatteryPressSlotState() - - def has_battery(self) -> bool: - """检查是否有电池""" - return len(self.children) > 0 - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - - def assign_child_resource( - self, - resource: Battery, - location: Optional[Coordinate], - reassign: bool = True, - ): - """放置极片""" - if self.has_battery(): - raise ValueError(f"槽位已含有一个电池,无法再放置其他电池") - super().assign_child_resource(resource, location, reassign) - - # 根据children的编号取物料对象。 - def get_battery_info(self, index: int) -> Battery: - return self.children[0] - -class TipBox64State(TypedDict): - """电池状态字典""" - tip_diameter: float = 5.0 - tip_length: float = 50.0 - with_tips: bool = True - -class TipBox64(TipRack): - """64孔枪头盒类""" - - children: List[TipSpot] = [] - def __init__( - self, - name: str, - size_x: float = 127.8, - size_y: float = 85.5, - size_z: float = 60.0, - category: str = "tip_box_64", - model: Optional[str] = None, - ): - """初始化64孔枪头盒 - - Args: - name: 枪头盒名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - tip_diameter: 枪头直径 (mm) - tip_length: 枪头长度 (mm) - category: 类别 - model: 型号 - with_tips: 是否带枪头 - """ - from pylabrobot.resources.tip import Tip - - # 创建8x8=64个枪头位 - def make_tip(): - return Tip( - has_filter=False, - total_tip_length=20.0, - maximal_volume=1000, # 1mL - fitting_depth=8.0, - ) - - tip_spots = create_ordered_items_2d( - klass=TipSpot, - num_items_x=8, - num_items_y=8, - dx=8.0, - dy=8.0, - dz=0.0, - item_dx=9.0, - item_dy=9.0, - size_x=10, - size_y=10, - size_z=0.0, - make_tip=make_tip, - ) - self._unilabos_state: WasteTipBoxstate = WasteTipBoxstate() - # 记录网格参数用于前端渲染 - self._grid_params = { - "num_items_x": 8, - "num_items_y": 8, - "dx": 8.0, - "dy": 8.0, - "item_dx": 9.0, - "item_dy": 9.0, - } - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - ordered_items=tip_spots, - category=category, - model=model, - with_tips=True, - ) - - def serialize(self) -> dict: - return { - **super().serialize(), - **self._grid_params, - } - - - -class WasteTipBoxstate(TypedDict): - """"废枪头盒状态字典""" - max_tips: int = 100 - tip_count: int = 0 - -#枪头不是一次性的(同一溶液则反复使用),根据寄存器判断 -class WasteTipBox(Trash): - """废枪头盒类 - 100个枪头容量""" - - def __init__( - self, - name: str, - size_x: float = 127.8, - size_y: float = 85.5, - size_z: float = 60.0, - category: str = "waste_tip_box", - model: Optional[str] = None, - ): - """初始化废枪头盒 - - Args: - name: 废枪头盒名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - max_tips: 最大枪头容量 - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - category=category, - model=model, - ) - self._unilabos_state: WasteTipBoxstate = WasteTipBoxstate() - - def add_tip(self) -> None: - """添加废枪头""" - if self._unilabos_state["tip_count"] >= self._unilabos_state["max_tips"]: - raise ValueError(f"废枪头盒 {self.name} 已满") - self._unilabos_state["tip_count"] += 1 - - def get_tip_count(self) -> int: - """获取枪头数量""" - return self._unilabos_state["tip_count"] - - def empty(self) -> None: - """清空废枪头盒""" - self._unilabos_state["tip_count"] = 0 - - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - - -class BottleRackState(TypedDict): - """ bottle_diameter: 瓶子直径 (mm) - bottle_height: 瓶子高度 (mm) - position_spacing: 位置间距 (mm)""" - bottle_diameter: float - bottle_height: float - name_to_index: dict - - -class BottleRackState(TypedDict): - """ bottle_diameter: 瓶子直径 (mm) - bottle_height: 瓶子高度 (mm) - position_spacing: 位置间距 (mm)""" - bottle_diameter: float - bottle_height: float - position_spacing: float - name_to_index: dict - - -class BottleRack(Resource): - """瓶架类 - 12个待配位置+12个已配位置""" - children: List[Resource] = [] - - def __init__( - self, - name: str, - size_x: float, - size_y: float, - size_z: float, - category: str = "bottle_rack", - model: Optional[str] = None, - num_items_x: int = 3, - num_items_y: int = 4, - position_spacing: float = 35.0, - orientation: str = "horizontal", - padding_x: float = 20.0, - padding_y: float = 20.0, - ): - """初始化瓶架 - - Args: - name: 瓶架名称 - size_x: 长度 (mm) - size_y: 宽度 (mm) - size_z: 高度 (mm) - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - category=category, - model=model, - ) - # 初始化状态 - self._unilabos_state: BottleRackState = BottleRackState( - bottle_diameter=30.0, - bottle_height=100.0, - position_spacing=position_spacing, - name_to_index={}, - ) - # 基于网格生成瓶位坐标映射(居中摆放) - # 使用内边距,避免点跑到容器外(前端渲染不按mm等比缩放时更稳妥) - origin_x = padding_x - origin_y = padding_y - self.index_to_pos = {} - for j in range(num_items_y): - for i in range(num_items_x): - idx = j * num_items_x + i - if orientation == "vertical": - # 纵向:沿 y 方向优先排列 - self.index_to_pos[idx] = Coordinate( - x=origin_x + j * position_spacing, - y=origin_y + i * position_spacing, - z=0, - ) - else: - # 横向(默认):沿 x 方向优先排列 - self.index_to_pos[idx] = Coordinate( - x=origin_x + i * position_spacing, - y=origin_y + j * position_spacing, - z=0, - ) - self.name_to_index = {} - self.name_to_pos = {} - self.num_items_x = num_items_x - self.num_items_y = num_items_y - self.orientation = orientation - self.padding_x = padding_x - self.padding_y = padding_y - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - - # TODO: 这里有些问题要重新写一下 - def assign_child_resource_old(self, resource: Resource, location=Coordinate.zero(), reassign=True): - capacity = self.num_items_x * self.num_items_y - assert len(self.children) < capacity, "瓶架已满,无法添加更多瓶子" - index = len(self.children) - location = self.index_to_pos.get(index, Coordinate.zero()) - self.name_to_pos[resource.name] = location - self.name_to_index[resource.name] = index - return super().assign_child_resource(resource, location, reassign) - - def assign_child_resource(self, resource: Resource, index: int): - capacity = self.num_items_x * self.num_items_y - assert 0 <= index < capacity, "无效的瓶子索引" - self.name_to_index[resource.name] = index - location = self.index_to_pos[index] - return super().assign_child_resource(resource, location) - - def unassign_child_resource(self, resource: Bottle): - super().unassign_child_resource(resource) - self.index_to_pos.pop(self.name_to_index.pop(resource.name, None), None) - - def serialize(self) -> dict: - return { - **super().serialize(), - "num_items_x": self.num_items_x, - "num_items_y": self.num_items_y, - "position_spacing": self._unilabos_state.get("position_spacing", 35.0), - "orientation": self.orientation, - "padding_x": self.padding_x, - "padding_y": self.padding_y, - } - - -class BottleState(TypedDict): - diameter: float - height: float - electrolyte_name: str - electrolyte_volume: float - max_volume: float - -class Bottle(Resource): - """瓶子类 - 容纳电解液""" - - def __init__( - self, - name: str, - category: str = "bottle", - ): - """初始化瓶子 - - Args: - name: 瓶子名称 - diameter: 直径 (mm) - height: 高度 (mm) - max_volume: 最大体积 (μL) - barcode: 二维码 - category: 类别 - model: 型号 - """ - super().__init__( - name=name, - size_x=1, - size_y=1, - size_z=1, - category=category, - ) - self._unilabos_state: BottleState = BottleState() - - def aspirate_electrolyte(self, volume: float) -> bool: - current_volume = self._unilabos_state["electrolyte_volume"] - assert current_volume > volume, f"Cannot aspirate {volume}μL, only {current_volume}μL available." - self._unilabos_state["electrolyte_volume"] -= volume - return True - - 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) - return data - -class CoincellDeck(Deck): - """纽扣电池组装工作站台面类""" - - def __init__( - self, - name: str = "coin_cell_deck", - size_x: float = 1620.0, # 3.66m - size_y: float = 1270.0, # 1.23m - size_z: float = 500.0, - origin: Coordinate = Coordinate(0, 0, 0), - category: str = "coin_cell_deck", - ): - """初始化纽扣电池组装工作站台面 - - Args: - name: 台面名称 - size_x: 长度 (mm) - 3.66m - size_y: 宽度 (mm) - 1.23m - size_z: 高度 (mm) - origin: 原点坐标 - category: 类别 - """ - super().__init__( - name=name, - size_x=size_x, - size_y=size_y, - size_z=size_z, - origin=origin, - category=category, - ) - -#if __name__ == "__main__": -# # 转移极片的测试代码 -# deck = CoincellDeck("coin_cell_deck") -# ban_cao_wei = PlateSlot("ban_cao_wei", max_plates=8) -# deck.assign_child_resource(ban_cao_wei, Coordinate(x=0, y=0, z=0)) -# -# plate_1 = MaterialPlate("plate_1", 1,1,1, fill=True) -# for i, hole in enumerate(plate_1.children): -# sheet = ElectrodeSheet(f"hole_{i}_sheet_1") -# sheet._unilabos_state = { -# "diameter": 14, -# "info": "NMC", -# "mass": 5.0, -# "material_type": "positive_electrode", -# "thickness": 0.1 -# } -# hole._unilabos_state = { -# "depth": 1.0, -# "diameter": 14, -# "info": "", -# "max_sheets": 1 -# } -# hole.assign_child_resource(sheet, Coordinate.zero()) -# plate_1._unilabos_state = { -# "hole_spacing_x": 20.0, -# "hole_spacing_y": 20.0, -# "hole_diameter": 5, -# "info": "这是第一块料板" -# } -# plate_1.update_locations() -# ban_cao_wei.assign_child_resource(plate_1, Coordinate.zero()) -# # zi_dan_jia = ClipMagazine("zi_dan_jia", 1, 1, 1) -# # deck.assign_child_resource(ban_cao_wei, Coordinate(x=200, y=200, z=0)) -# -# from unilabos.resources.graphio import * -# A = tree_to_list([resource_plr_to_ulab(deck)]) -# with open("test.json", "w") as f: -# json.dump(A, f) -# -# -#def get_plate_with_14mm_hole(name=""): -# plate = MaterialPlate(name=name) -# for i in range(4): -# for j in range(4): -# hole = MaterialHole(f"{i+1}x{j+1}") -# hole._unilabos_state["diameter"] = 14 -# hole._unilabos_state["max_sheets"] = 1 -# plate.assign_child_resource(hole) -# return plate - -def create_a_liaopan(): - liaopan = MaterialPlate(name="liaopan", size_x=120.8, size_y=120.5, size_z=10.0, fill=True) - for i in range(16): - jipian = ElectrodeSheet(name=f"jipian_{i}", size_x= 12, size_y=12, size_z=0.1) - liaopan1.children[i].assign_child_resource(jipian, location=None) - return liaopan - -def create_a_coin_cell_deck(): - deck = Deck(size_x=1200, - size_y=800, - size_z=900) - - #liaopan = TipBox64(name="liaopan") - - #创建一个4*4的物料板 - liaopan1 = MaterialPlate(name="liaopan1", size_x=120.8, size_y=120.5, size_z=10.0, fill=True) - #把物料板放到桌子上 - deck.assign_child_resource(liaopan1, Coordinate(x=0, y=0, z=0)) - #创建一个极片 - for i in range(16): - jipian = ElectrodeSheet(name=f"jipian_{i}", size_x= 12, size_y=12, size_z=0.1) - liaopan1.children[i].assign_child_resource(jipian, location=None) - #创建一个4*4的物料板 - liaopan2 = MaterialPlate(name="liaopan2", size_x=120.8, size_y=120.5, size_z=10.0, fill=True) - #把物料板放到桌子上 - deck.assign_child_resource(liaopan2, Coordinate(x=500, y=0, z=0)) - - #创建一个4*4的物料板 - liaopan3 = MaterialPlate(name="liaopan3", size_x=120.8, size_y=120.5, size_z=10.0, fill=True) - #把物料板放到桌子上 - deck.assign_child_resource(liaopan3, Coordinate(x=1000, y=0, z=0)) - - print(deck) - - return deck - - -import json - -if __name__ == "__main__": - electrode1 = BatteryPressSlot() - #print(electrode1.get_size_x()) - #print(electrode1.get_size_y()) - #print(electrode1.get_size_z()) - #jipian = ElectrodeSheet() - #jipian._unilabos_state["diameter"] = 18 - #print(jipian.serialize()) - #print(jipian.serialize_state()) - - deck = CoincellDeck() - """======================================子弹夹============================================""" - zip_dan_jia = ClipMagazine_four("zi_dan_jia", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia, Coordinate(x=1400, y=50, z=0)) - zip_dan_jia2 = ClipMagazine_four("zi_dan_jia2", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia2, Coordinate(x=1600, y=200, z=0)) - zip_dan_jia3 = ClipMagazine("zi_dan_jia3", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia3, Coordinate(x=1500, y=200, z=0)) - zip_dan_jia4 = ClipMagazine("zi_dan_jia4", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia4, Coordinate(x=1500, y=300, z=0)) - zip_dan_jia5 = ClipMagazine("zi_dan_jia5", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia5, Coordinate(x=1600, y=300, z=0)) - zip_dan_jia6 = ClipMagazine("zi_dan_jia6", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia6, Coordinate(x=1530, y=500, z=0)) - zip_dan_jia7 = ClipMagazine("zi_dan_jia7", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia7, Coordinate(x=1180, y=400, z=0)) - zip_dan_jia8 = ClipMagazine("zi_dan_jia8", 80, 80, 10) - deck.assign_child_resource(zip_dan_jia8, Coordinate(x=1280, y=400, z=0)) - for i in range(4): - jipian = ElectrodeSheet(name=f"zi_dan_jia_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia2.children[i].assign_child_resource(jipian, location=None) - for i in range(4): - jipian2 = ElectrodeSheet(name=f"zi_dan_jia2_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia.children[i].assign_child_resource(jipian2, location=None) - for i in range(6): - jipian3 = ElectrodeSheet(name=f"zi_dan_jia3_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia3.children[i].assign_child_resource(jipian3, location=None) - for i in range(6): - jipian4 = ElectrodeSheet(name=f"zi_dan_jia4_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia4.children[i].assign_child_resource(jipian4, location=None) - for i in range(6): - jipian5 = ElectrodeSheet(name=f"zi_dan_jia5_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia5.children[i].assign_child_resource(jipian5, location=None) - for i in range(6): - jipian6 = ElectrodeSheet(name=f"zi_dan_jia6_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia6.children[i].assign_child_resource(jipian6, location=None) - for i in range(6): - jipian7 = ElectrodeSheet(name=f"zi_dan_jia7_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia7.children[i].assign_child_resource(jipian7, location=None) - for i in range(6): - jipian8 = ElectrodeSheet(name=f"zi_dan_jia8_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - zip_dan_jia8.children[i].assign_child_resource(jipian8, location=None) - """======================================子弹夹============================================""" - #liaopan = TipBox64(name="liaopan") - """======================================物料板============================================""" - #创建一个4*4的物料板 - liaopan1 = MaterialPlate(name="liaopan1", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan1, Coordinate(x=1010, y=50, z=0)) - for i in range(16): - jipian_1 = ElectrodeSheet(name=f"{liaopan1.name}_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - liaopan1.children[i].assign_child_resource(jipian_1, location=None) - - liaopan2 = MaterialPlate(name="liaopan2", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan2, Coordinate(x=1130, y=50, z=0)) - - liaopan3 = MaterialPlate(name="liaopan3", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan3, Coordinate(x=1250, y=50, z=0)) - - liaopan4 = MaterialPlate(name="liaopan4", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan4, Coordinate(x=1010, y=150, z=0)) - for i in range(16): - jipian_4 = ElectrodeSheet(name=f"{liaopan4.name}_jipian_{i}", size_x=12, size_y=12, size_z=0.1) - liaopan4.children[i].assign_child_resource(jipian_4, location=None) - liaopan5 = MaterialPlate(name="liaopan5", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan5, Coordinate(x=1130, y=150, z=0)) - liaopan6 = MaterialPlate(name="liaopan6", size_x=120, size_y=100, size_z=10.0, fill=True) - deck.assign_child_resource(liaopan6, Coordinate(x=1250, y=150, z=0)) - #liaopan.children[3].assign_child_resource(jipian, location=None) - """======================================物料板============================================""" - """======================================瓶架,移液枪============================================""" - # 在台面上放置 3x4 瓶架、6x2 瓶架 与 64孔移液枪头盒 - bottle_rack_3x4 = BottleRack( - name="bottle_rack_3x4", - size_x=210.0, - size_y=140.0, - size_z=100.0, - num_items_x=3, - num_items_y=4, - position_spacing=35.0, - orientation="vertical", - ) - deck.assign_child_resource(bottle_rack_3x4, Coordinate(x=100, y=200, z=0)) - - bottle_rack_6x2 = BottleRack( - name="bottle_rack_6x2", - size_x=120.0, - size_y=250.0, - size_z=100.0, - num_items_x=6, - num_items_y=2, - position_spacing=35.0, - orientation="vertical", - ) - deck.assign_child_resource(bottle_rack_6x2, Coordinate(x=300, y=300, z=0)) - - bottle_rack_6x2_2 = BottleRack( - name="bottle_rack_6x2_2", - size_x=120.0, - size_y=250.0, - size_z=100.0, - num_items_x=6, - num_items_y=2, - position_spacing=35.0, - orientation="vertical", - ) - deck.assign_child_resource(bottle_rack_6x2_2, Coordinate(x=430, y=300, z=0)) - - - # 将 ElectrodeSheet 放满 3x4 与 6x2 的所有孔位 - for idx in range(bottle_rack_3x4.num_items_x * bottle_rack_3x4.num_items_y): - sheet = ElectrodeSheet(name=f"sheet_3x4_{idx}", size_x=12, size_y=12, size_z=0.1) - bottle_rack_3x4.assign_child_resource(sheet, index=idx) - - for idx in range(bottle_rack_6x2.num_items_x * bottle_rack_6x2.num_items_y): - sheet = ElectrodeSheet(name=f"sheet_6x2_{idx}", size_x=12, size_y=12, size_z=0.1) - bottle_rack_6x2.assign_child_resource(sheet, index=idx) - - tip_box = TipBox64(name="tip_box_64") - deck.assign_child_resource(tip_box, Coordinate(x=300, y=100, z=0)) - - waste_tip_box = WasteTipBox(name="waste_tip_box") - deck.assign_child_resource(waste_tip_box, Coordinate(x=300, y=200, z=0)) - """======================================瓶架,移液枪============================================""" - print(deck) - - - from unilabos.resources.graphio import convert_resources_from_type - from unilabos.config.config import BasicConfig - BasicConfig.ak = "56bbed5b-6e30-438c-b06d-f69eaa63bb45" - BasicConfig.sk = "238222fe-0bf7-4350-a426-e5ced8011dcf" - from unilabos.app.web.client import http_client - - resources = convert_resources_from_type([deck], [Resource]) - - # 检查序列化后的资源 - - json.dump({"nodes": resources, "links": []}, open("button_battery_decks_unilab.json", "w"), indent=2) - - - #print(resources) - http_client.remote_addr = "https://uni-lab.test.bohrium.com/api/v1" - - http_client.resource_add(resources) \ No newline at end of file diff --git a/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly.py b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly.py index 4758bdda..91efd45f 100644 --- a/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly.py +++ b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly.py @@ -1,44 +1,171 @@ import csv +import inspect import json import os import threading import time +import types from datetime import datetime from typing import Any, Dict, Optional -from pylabrobot.resources import Resource as PLRResource +from functools import wraps +from pylabrobot.resources import Deck, Resource as PLRResource from unilabos_msgs.msg import Resource from unilabos.device_comms.modbus_plc.client import ModbusTcpClient -from unilabos.devices.workstation.coin_cell_assembly.button_battery_station import MaterialHole, MaterialPlate from unilabos.devices.workstation.workstation_base import WorkstationBase from unilabos.device_comms.modbus_plc.client import TCPClient, ModbusNode, PLCWorkflow, ModbusWorkflow, WorkflowAction, BaseClient from unilabos.device_comms.modbus_plc.modbus import DeviceType, Base as ModbusNodeBase, DataType, WorderOrder -from unilabos.devices.workstation.coin_cell_assembly.button_battery_station import * +from unilabos.devices.workstation.coin_cell_assembly.YB_YH_materials import * from unilabos.ros.nodes.base_device_node import ROS2DeviceNode, BaseROS2DeviceNode from unilabos.ros.nodes.presets.workstation import ROS2WorkstationNode +from unilabos.devices.workstation.coin_cell_assembly.YB_YH_materials import CoincellDeck +from unilabos.resources.graphio import convert_resources_to_type +from unilabos.utils.log import logger +import struct + + +def _decode_float32_correct(registers): + """ + 正确解码FLOAT32类型的Modbus寄存器 + + Args: + registers: 从Modbus读取的原始寄存器值列表 + + Returns: + 正确解码的浮点数值 + + Note: + 根据test_glove_box_pressure.py验证的配置: + - Byte Order: Big (Modbus标准) + - Word Order: Little (PLC配置) + """ + if not registers or len(registers) < 2: + return 0.0 + + try: + # Word Order: Little - 交换两个寄存器的顺序 + # Byte Order: Big - 每个寄存器内部使用大端字节序 + low_word = registers[0] + high_word = registers[1] + + # 将两个16位寄存器组合成一个32位值 (Little Word Order) + # 使用大端字节序 ('>') 将每个寄存器转换为字节 + byte_string = struct.pack('>HH', high_word, low_word) + + # 将字节字符串解码为浮点数 (大端) + value = struct.unpack('>f', byte_string)[0] + + return value + except Exception as e: + logger.error(f"解码FLOAT32失败: {e}, registers: {registers}") + return 0.0 + + +def _ensure_modbus_slave_kw_alias(modbus_client): + if modbus_client is None: + return + + method_names = [ + "read_coils", + "write_coils", + "write_coil", + "read_discrete_inputs", + "read_holding_registers", + "write_register", + "write_registers", + ] + + def _wrap(func): + signature = inspect.signature(func) + has_var_kwargs = any(param.kind == param.VAR_KEYWORD for param in signature.parameters.values()) + accepts_unit = has_var_kwargs or "unit" in signature.parameters + accepts_slave = has_var_kwargs or "slave" in signature.parameters + + @wraps(func) + def _wrapped(self, *args, **kwargs): + if "slave" in kwargs and not accepts_slave: + slave_value = kwargs.pop("slave") + if accepts_unit and "unit" not in kwargs: + kwargs["unit"] = slave_value + if "unit" in kwargs and not accepts_unit: + unit_value = kwargs.pop("unit") + if accepts_slave and "slave" not in kwargs: + kwargs["slave"] = unit_value + return func(self, *args, **kwargs) + + _wrapped._has_slave_alias = True + return _wrapped + + for name in method_names: + if not hasattr(modbus_client, name): + continue + bound_method = getattr(modbus_client, name) + func = getattr(bound_method, "__func__", None) + if func is None: + continue + if getattr(func, "_has_slave_alias", False): + continue + wrapped = _wrap(func) + setattr(modbus_client, name, types.MethodType(wrapped, modbus_client)) + + +def _coerce_deck_input(deck: Any) -> Optional[Deck]: + if deck is None: + return None + + if isinstance(deck, Deck): + return deck + + if isinstance(deck, PLRResource): + return deck if isinstance(deck, Deck) else None + + candidates = None + if isinstance(deck, dict): + if "nodes" in deck and isinstance(deck["nodes"], list): + candidates = deck["nodes"] + else: + candidates = [deck] + elif isinstance(deck, list): + candidates = deck + + if candidates is None: + return None + + try: + converted = convert_resources_to_type(resources_list=candidates, resource_type=Deck) + if isinstance(converted, Deck): + return converted + if isinstance(converted, list): + for item in converted: + if isinstance(item, Deck): + return item + except Exception as exc: + logger.warning(f"deck 转换 Deck 失败: {exc}") + return None + #构建物料系统 class CoinCellAssemblyWorkstation(WorkstationBase): - def __init__( - self, - deck: CoincellDeck, - address: str = "192.168.1.20", + def __init__(self, + config: dict = None, + deck=None, + address: str = "172.16.28.102", port: str = "502", - debug_mode: bool = True, + debug_mode: bool = False, *args, - **kwargs, - ): - super().__init__( - #桌子 - deck=deck, - *args, - **kwargs, - ) + **kwargs): + + if deck is None and config: + deck = config.get('deck') + if deck is None: + logger.info("没有传入依华deck,检查启动json文件") + super().__init__(deck=deck, *args, **kwargs,) self.debug_mode = debug_mode - self.deck = deck + """ 连接初始化 """ modbus_client = TCPClient(addr=address, port=port) - print("modbus_client", modbus_client) + logger.debug(f"创建 Modbus 客户端: {modbus_client}") + _ensure_modbus_slave_kw_alias(modbus_client.client) if not debug_mode: modbus_client.client.connect() count = 100 @@ -49,27 +176,21 @@ class CoinCellAssemblyWorkstation(WorkstationBase): time.sleep(2) if not modbus_client.client.is_socket_open(): raise ValueError('modbus tcp connection failed') + self.nodes = BaseClient.load_csv(os.path.join(os.path.dirname(__file__), 'coin_cell_assembly_b.csv')) + self.client = modbus_client.register_node_list(self.nodes) else: print("测试模式,跳过连接") + self.nodes, self.client = None, None """ 工站的配置 """ - self.nodes = BaseClient.load_csv(os.path.join(os.path.dirname(__file__), 'coin_cell_assembly_a.csv')) - self.client = modbus_client.register_node_list(self.nodes) + self.success = False self.allow_data_read = False #允许读取函数运行标志位 self.csv_export_thread = None self.csv_export_running = False self.csv_export_file = None - #创建一个物料台面,包含两个极片板 - #self.deck = create_a_coin_cell_deck() - - #self._ros_node.update_resource(self.deck) - - #ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{ - # "resources": [self.deck] - #}) + self.coin_num_N = 0 #已组装电池数量 - def post_init(self, ros_node: ROS2WorkstationNode): self._ros_node = ros_node #self.deck = create_a_coin_cell_deck() @@ -418,48 +539,72 @@ class CoinCellAssemblyWorkstation(WorkstationBase): """单颗电池组装时间 (秒, REAL/FLOAT32)""" if self.debug_mode: return 0 - time, read_err = self.client.use_node('REG_DATA_ASSEMBLY_PER_TIME').read(2, word_order=WorderOrder.LITTLE) - return time + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_ASSEMBLY_PER_TIME').address, count=2) + if result.isError(): + logger.error(f"读取组装时间失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_open_circuit_voltage(self) -> float: """开路电压值 (FLOAT32)""" if self.debug_mode: return 0 - vol, read_err = self.client.use_node('REG_DATA_OPEN_CIRCUIT_VOLTAGE').read(2, word_order=WorderOrder.LITTLE) - return vol + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_OPEN_CIRCUIT_VOLTAGE').address, count=2) + if result.isError(): + logger.error(f"读取开路电压失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_axis_x_pos(self) -> float: """分液X轴当前位置 (FLOAT32)""" if self.debug_mode: return 0 - pos, read_err = self.client.use_node('REG_DATA_AXIS_X_POS').read(2, word_order=WorderOrder.LITTLE) - return pos + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_AXIS_X_POS').address, count=2) + if result.isError(): + logger.error(f"读取X轴位置失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_axis_y_pos(self) -> float: """分液Y轴当前位置 (FLOAT32)""" if self.debug_mode: return 0 - pos, read_err = self.client.use_node('REG_DATA_AXIS_Y_POS').read(2, word_order=WorderOrder.LITTLE) - return pos + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_AXIS_Y_POS').address, count=2) + if result.isError(): + logger.error(f"读变Y轴位置失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_axis_z_pos(self) -> float: """分液Z轴当前位置 (FLOAT32)""" if self.debug_mode: return 0 - pos, read_err = self.client.use_node('REG_DATA_AXIS_Z_POS').read(2, word_order=WorderOrder.LITTLE) - return pos + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_AXIS_Z_POS').address, count=2) + if result.isError(): + logger.error(f"读取Z轴位置失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_pole_weight(self) -> float: """当前电池正极片称重数据 (FLOAT32)""" if self.debug_mode: return 0 - weight, read_err = self.client.use_node('REG_DATA_POLE_WEIGHT').read(2, word_order=WorderOrder.LITTLE) - return weight + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_POLE_WEIGHT').address, count=2) + if result.isError(): + logger.error(f"读取极片质量失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_assembly_pressure(self) -> int: @@ -489,52 +634,97 @@ class CoinCellAssemblyWorkstation(WorkstationBase): def data_coin_cell_code(self) -> str: """电池二维码序列号 (STRING)""" try: - # 尝试不同的字节序读取 + # 读取 STRING 类型数据 code_little, read_err = self.client.use_node('REG_DATA_COIN_CELL_CODE').read(10, word_order=WorderOrder.LITTLE) - print(code_little) - clean_code = code_little[-8:][::-1] - return clean_code + + # PyModbus 3.x 返回 string 类型 + if not isinstance(code_little, str): + logger.warning(f"电池二维码返回的类型不支持: {type(code_little)}, 值: {repr(code_little)}") + return "N/A" + + # 从字符串末尾查找连续的字母数字字符(反转字符串) + import re + reversed_str = code_little[::-1] + match = re.match(r'^([A-Za-z0-9]+)', reversed_str) + + if not match: + logger.warning(f"未找到有效的电池二维码数据,原始字符串: {repr(code_little)}") + return "N/A" + + # 提取匹配到的字符串(已经是正确顺序) + decoded = match.group(1)[:8] # 只取前8个字符 + + return decoded if decoded else "N/A" except Exception as e: - print(f"读取电池二维码失败: {e}") + logger.error(f"读取电池二维码失败: {e}") return "N/A" @property def data_electrolyte_code(self) -> str: + """电解液二维码序列号 (STRING)""" try: - # 尝试不同的字节序读取 + # 读取 STRING 类型数据 code_little, read_err = self.client.use_node('REG_DATA_ELECTROLYTE_CODE').read(10, word_order=WorderOrder.LITTLE) - print(code_little) - clean_code = code_little[-8:][::-1] - return clean_code + + # PyModbus 3.x 返回 string 类型 + if not isinstance(code_little, str): + logger.warning(f"电解液二维码返回的类型不支持: {type(code_little)}, 值: {repr(code_little)}") + return "N/A" + + # 从字符串末尾查找连续的字母数字字符(反转字符串) + import re + reversed_str = code_little[::-1] + match = re.match(r'^([A-Za-z0-9]+)', reversed_str) + + if not match: + logger.warning(f"未找到有效的电解液二维码数据,原始字符串: {repr(code_little)}") + return "N/A" + + # 提取匹配到的字符串(已经是正确顺序) + decoded = match.group(1)[:8] # 只取前8个字符 + + return decoded if decoded else "N/A" except Exception as e: - print(f"读取电解液二维码失败: {e}") + logger.error(f"读取电解液二维码失败: {e}") return "N/A" # ===================== 环境监控区 ====================== @property def data_glove_box_pressure(self) -> float: - """手套箱压力 (bar, FLOAT32)""" + """手套箱压力 (mbar, FLOAT32)""" if self.debug_mode: return 0 - status, read_err = self.client.use_node('REG_DATA_GLOVE_BOX_PRESSURE').read(2, word_order=WorderOrder.LITTLE) - return status + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_GLOVE_BOX_PRESSURE').address, count=2) + if result.isError(): + logger.error(f"读取手套箱压力失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_glove_box_o2_content(self) -> float: """手套箱氧含量 (ppm, FLOAT32)""" if self.debug_mode: return 0 - value, read_err = self.client.use_node('REG_DATA_GLOVE_BOX_O2_CONTENT').read(2, word_order=WorderOrder.LITTLE) - return value + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_GLOVE_BOX_O2_CONTENT').address, count=2) + if result.isError(): + logger.error(f"读取手套箱氧含量失败") + return 0.0 + return _decode_float32_correct(result.registers) @property def data_glove_box_water_content(self) -> float: """手套箱水含量 (ppm, FLOAT32)""" if self.debug_mode: return 0 - value, read_err = self.client.use_node('REG_DATA_GLOVE_BOX_WATER_CONTENT').read(2, word_order=WorderOrder.LITTLE) - return value + # 读取原始寄存器并正确解码FLOAT32 + result = self.client.client.read_holding_registers(address=self.client.use_node('REG_DATA_GLOVE_BOX_WATER_CONTENT').address, count=2) + if result.isError(): + logger.error(f"读取手套箱水含量失败") + return 0.0 + return _decode_float32_correct(result.registers) # @property # def data_stack_vision_code(self) -> int: @@ -606,7 +796,326 @@ class CoinCellAssemblyWorkstation(WorkstationBase): print("waiting for start_cmd") time.sleep(1) - def func_pack_send_bottle_num(self, bottle_num: int): + def _handle_material_search_dialog(self, enable_search: bool, timeout: int = 30) -> None: + """处理物料搜寻确认弹窗 + + 监测弹窗是否出现,并根据参数自动点击"是"或"否"按钮(脉冲模式) + + Args: + enable_search: True=点击"是"启用物料搜寻, False=点击"否"不启用物料搜寻 + timeout: 等待弹窗出现的最大时间(秒),默认30秒 + + Raises: + RuntimeError: 超时未检测到弹窗,或操作失败 + """ + logger.info(f"开始监测物料搜寻确认弹窗(超时: {timeout}秒)...") + logger.info(f"用户选择: {'启用物料搜寻(点击是)' if enable_search else '不启用物料搜寻(点击否)'}") + + start_time = time.time() + dialog_appeared = False + + # 步骤1: 监测弹窗是否出现 + while time.time() - start_time < timeout: + try: + dialog_node = self.client.use_node('COIL_MATERIAL_SEARCH_DIALOG_APPEAR') + dialog_state, read_err = dialog_node.read(1) + + if read_err: + logger.warning("读取弹窗状态时出错,继续监测...") + time.sleep(0.5) + continue + + # 提取实际值 + if isinstance(dialog_state, (list, tuple)): + dialog_actual = dialog_state[0] if len(dialog_state) > 0 else False + else: + dialog_actual = dialog_state + + if dialog_actual: + logger.info("✓ 检测到物料搜寻确认弹窗出现!") + dialog_appeared = True + break + + except Exception as e: + logger.warning(f"读取弹窗状态异常: {e},继续监测...") + + time.sleep(0.5) # 每0.5秒检查一次 + + if not dialog_appeared: + error_msg = f"❌ 超时未检测到物料搜寻确认弹窗(等待了 {timeout} 秒)" + logger.error(error_msg) + raise RuntimeError(error_msg) + + # 步骤2: 执行脉冲按钮点击 + button_name = "是" if enable_search else "否" + coil_name = "COIL_MATERIAL_SEARCH_CONFIRM_YES" if enable_search else "COIL_MATERIAL_SEARCH_CONFIRM_NO" + + logger.info(f"执行脉冲按钮点击: '{button_name}'") + + try: + button_node = self.client.use_node(coil_name) + + # 读取初始状态 + initial_state, _ = button_node.read(1) + logger.debug(f"按钮'{button_name}'初始状态: {initial_state}") + + # 脉冲步骤1: 设置为 True + logger.info(f" → 按下按钮 '{button_name}' (设置为 True)") + button_node.write(True) + time.sleep(0.5) # 保持0.5秒 + + # 验证已按下 + pressed_state, _ = button_node.read(1) + if isinstance(pressed_state, (list, tuple)): + pressed_actual = pressed_state[0] if len(pressed_state) > 0 else False + else: + pressed_actual = pressed_state + + if pressed_actual: + logger.info(f" ✓ 按钮 '{button_name}' 已按下") + else: + logger.warning(f" ⚠ 按钮 '{button_name}' 状态未变为 True,当前值: {pressed_actual}") + + # 脉冲步骤2: 释放按钮 (设置为 False) + logger.info(f" → 释放按钮 '{button_name}' (设置为 False)") + button_node.write(False) + time.sleep(0.3) + + # 验证已释放 + released_state, _ = button_node.read(1) + if isinstance(released_state, (list, tuple)): + released_actual = released_state[0] if len(released_state) > 0 else False + else: + released_actual = released_state + + if not released_actual: + logger.info(f" ✓ 按钮 '{button_name}' 已释放(脉冲完成)") + else: + logger.warning(f" ⚠ 按钮 '{button_name}' 未正确释放,当前值: {released_actual}") + + logger.info(f"✓ 成功处理物料搜寻确认弹窗(选择: {button_name})") + + except Exception as e: + error_msg = f"❌ 执行按钮'{button_name}'脉冲操作时失败: {e}" + logger.error(error_msg) + raise RuntimeError(error_msg) + + + def func_pack_device_init_auto_start_combined(self, material_search_enable: bool = False) -> bool: + """ + 组合函数:设备初始化 + 切换自动模式 + 启动 + + 整合了原有的三个独立函数: + 1. func_pack_device_init() - 设备初始化 + 2. func_pack_device_auto() - 切换自动模式 + 3. func_pack_device_start() - 启动设备 + + Args: + material_search_enable: 是否启用物料搜寻功能。 + 设备初始化后会弹出物料搜寻确认弹窗, + 此参数控制自动点击'是'(启用)或'否'(不启用)。 + 默认为False(不启用物料搜寻)。 + + Returns: + bool: 操作成功返回 True,失败返回 False + """ + logger.info("=" * 60) + logger.info("开始组合操作:设备初始化 → 物料搜寻确认 → 自动模式 → 启动") + logger.info("=" * 60) + + # 步骤0: 前置条件检查 + logger.info("\n【步骤 0/4】前置条件检查...") + try: + # 检查 REG_UNILAB_INTERACT (应该为False,表示使用Unilab交互) + unilab_interact_node = self.client.use_node('REG_UNILAB_INTERACT') + unilab_interact_value, read_err = unilab_interact_node.read(1) + + if read_err: + error_msg = "❌ 无法读取 REG_UNILAB_INTERACT 状态!请检查设备连接。" + logger.error(error_msg) + raise RuntimeError(error_msg) + + # 提取实际值(处理可能的列表或单值) + if isinstance(unilab_interact_value, (list, tuple)): + unilab_interact_actual = unilab_interact_value[0] if len(unilab_interact_value) > 0 else None + else: + unilab_interact_actual = unilab_interact_value + + logger.info(f" REG_UNILAB_INTERACT 当前值: {unilab_interact_actual}") + + if unilab_interact_actual != False: + error_msg = ( + "❌ 前置条件检查失败!\n" + f" REG_UNILAB_INTERACT = {unilab_interact_actual} (期望值: False)\n" + " 说明: 当前设备设置为'忽略Unilab交互'模式\n" + " 操作: 请在HMI上确认并切换为'使用Unilab交互'模式\n" + " 提示: REG_UNILAB_INTERACT应该为False才能继续" + ) + logger.error(error_msg) + raise RuntimeError(error_msg) + + logger.info(" ✓ REG_UNILAB_INTERACT 检查通过 (值为False,使用Unilab交互)") + + # 检查 COIL_GB_L_IGNORE_CMD (应该为False,表示使用左手套箱) + gb_l_ignore_node = self.client.use_node('COIL_GB_L_IGNORE_CMD') + gb_l_ignore_value, read_err = gb_l_ignore_node.read(1) + + if read_err: + error_msg = "❌ 无法读取 COIL_GB_L_IGNORE_CMD 状态!请检查设备连接。" + logger.error(error_msg) + raise RuntimeError(error_msg) + + # 提取实际值 + if isinstance(gb_l_ignore_value, (list, tuple)): + gb_l_ignore_actual = gb_l_ignore_value[0] if len(gb_l_ignore_value) > 0 else None + else: + gb_l_ignore_actual = gb_l_ignore_value + + logger.info(f" COIL_GB_L_IGNORE_CMD 当前值: {gb_l_ignore_actual}") + + if gb_l_ignore_actual != False: + error_msg = ( + "❌ 前置条件检查失败!\n" + f" COIL_GB_L_IGNORE_CMD = {gb_l_ignore_actual} (期望值: False)\n" + " 说明: 当前设备设置为'忽略左手套箱'模式\n" + " 操作: 请在HMI上确认并切换为'使用左手套箱'模式\n" + " 提示: COIL_GB_L_IGNORE_CMD应该为False才能继续" + ) + logger.error(error_msg) + raise RuntimeError(error_msg) + + logger.info(" ✓ COIL_GB_L_IGNORE_CMD 检查通过 (值为False,使用左手套箱)") + logger.info("✓ 所有前置条件检查通过!") + + except ValueError as e: + # 节点未找到 + error_msg = f"❌ 配置错误:{str(e)}\n请检查CSV配置文件是否包含必要的节点。" + logger.error(error_msg) + raise RuntimeError(error_msg) + except Exception as e: + # 其他异常 + error_msg = f"❌ 前置条件检查异常:{str(e)}" + logger.error(error_msg) + raise + + # 步骤1: 设备初始化(包含弹窗检测) + logger.info("\n【步骤 1/4】设备初始化...") + try: + # 切换手动模式 + logger.info("切换手动模式...") + self._sys_hand_cmd(True) + time.sleep(1) + while (self._sys_hand_status()) == False: + logger.debug("waiting for hand_cmd") + time.sleep(1) + + # 设备初始化命令 + logger.info("发送初始化命令...") + self._sys_init_cmd(True) + time.sleep(1) + + # 等待初始化完成,同时检测物料搜寻弹窗 + logger.info("等待初始化完成(同时监测物料搜寻弹窗)...") + dialog_handled = False + max_wait_time = 120 # 最多等待120秒 + start_wait = time.time() + + while (self._sys_init_status()) == False: + # 检查是否超时 + if time.time() - start_wait > max_wait_time: + raise RuntimeError(f"初始化超时(超过 {max_wait_time} 秒)") + + # 如果还没处理弹窗,检测弹窗是否出现 + if not dialog_handled: + try: + dialog_node = self.client.use_node('COIL_MATERIAL_SEARCH_DIALOG_APPEAR') + dialog_state, read_err = dialog_node.read(1) + + if not read_err: + # 提取实际值 + if isinstance(dialog_state, (list, tuple)): + dialog_actual = dialog_state[0] if len(dialog_state) > 0 else False + else: + dialog_actual = dialog_state + + # 如果弹窗出现,立即处理 + if dialog_actual: + logger.info("✓ 在初始化过程中检测到物料搜寻确认弹窗!") + logger.info(f"用户选择: {'启用物料搜寻(点击是)' if material_search_enable else '不启用物料搜寻(点击否)'}") + + # 执行脉冲按钮点击 + button_name = "是" if material_search_enable else "否" + coil_name = "COIL_MATERIAL_SEARCH_CONFIRM_YES" if material_search_enable else "COIL_MATERIAL_SEARCH_CONFIRM_NO" + + button_node = self.client.use_node(coil_name) + + # 脉冲:True -> 等待 -> False + logger.info(f" → 按下按钮 '{button_name}'") + button_node.write(True) + time.sleep(0.5) + logger.info(f" → 释放按钮 '{button_name}'") + button_node.write(False) + time.sleep(0.3) + + logger.info(f"✓ 成功处理物料搜寻确认弹窗(选择: {button_name})") + dialog_handled = True + + except Exception as e: + logger.debug(f"检测弹窗时出错: {e}") + + logger.debug("waiting for init_cmd") + time.sleep(1) + + logger.info("✓ 初始化状态完成") + + # 手动按钮置回False + self._sys_hand_cmd(False) + time.sleep(1) + while (self._sys_hand_cmd()) == True: + logger.debug("waiting for hand_cmd to False") + time.sleep(1) + + # 初始化命令置回False + self._sys_init_cmd(False) + time.sleep(1) + while (self._sys_init_cmd()) == True: + logger.debug("waiting for init_cmd to False") + time.sleep(1) + + logger.info("✓ 设备初始化完成") + except Exception as e: + logger.error(f"❌ 设备初始化失败: {e}") + return False + + # 步骤1.5已经在步骤1中处理,跳过 + logger.info("\n【步骤 1.5/4】物料搜寻确认已在初始化过程中完成") + + # 步骤2: 切换自动模式 + logger.info("\n【步骤 2/4】切换自动模式...") + try: + self.func_pack_device_auto() + logger.info("✓ 切换自动模式完成") + except Exception as e: + logger.error(f"❌ 切换自动模式失败: {e}") + return False + + # 步骤3: 启动设备 + logger.info("\n【步骤 3/4】启动设备...") + try: + self.func_pack_device_start() + logger.info("✓ 启动设备完成") + except Exception as e: + logger.error(f"❌ 启动设备失败: {e}") + return False + + logger.info("\n" + "=" * 60) + logger.info("组合操作完成:设备已成功初始化、确认物料搜寻、切换自动模式并启动") + logger.info("=" * 60) + + return True + + def func_pack_send_bottle_num(self, bottle_num): + bottle_num = int(bottle_num) #发送电解液平台数 print("启动") while (self._unilab_rece_electrolyte_bottle_num()) == False: @@ -628,6 +1137,111 @@ class CoinCellAssemblyWorkstation(WorkstationBase): time.sleep(1) #自动按钮置False + def func_sendbottle_allpack_multi( + self, + elec_num, + elec_use_num, + elec_vol: int = 50, + # 电解液双滴模式参数 + dual_drop_mode: bool = False, + dual_drop_first_volume: int = 25, + dual_drop_suction_timing: bool = False, + dual_drop_start_timing: bool = False, + assembly_type: int = 7, + assembly_pressure: int = 4200, + # 来自原 qiming_coin_cell_code 的参数 + fujipian_panshu: int = 0, + fujipian_juzhendianwei: int = 0, + gemopanshu: int = 0, + gemo_juzhendianwei: int = 0, + qiangtou_juzhendianwei: int = 0, + lvbodian: bool = True, + battery_pressure_mode: bool = True, + battery_clean_ignore: bool = False, + file_path: str = "/Users/sml/work" + ) -> Dict[str, Any]: + """ + 发送瓶数+简化组装函数(适用于第二批次及后续批次) + + 合并了发送瓶数和简化组装流程,用于连续批次生产。 + 适用场景:设备已完成初始化和启动,仍在自动模式下运行。 + + Args: + elec_num: 电解液瓶数 + elec_use_num: 每瓶电解液组装的电池数 + elec_vol: 电解液吸液量 (μL) + dual_drop_mode: 电解液添加模式 (False=单次滴液, True=二次滴液) + dual_drop_first_volume: 二次滴液第一次排液体积 (μL) + dual_drop_suction_timing: 二次滴液吸液时机 (False=正常吸液, True=先吸液) + dual_drop_start_timing: 二次滴液开始滴液时机 (False=正极片前, True=正极片后) + assembly_type: 组装类型 (7=不用铝箔垫, 8=使用铝箔垫) + assembly_pressure: 电池压制力 (N) + fujipian_panshu: 负极片盘数 + fujipian_juzhendianwei: 负极片矩阵点位 + gemopanshu: 隔膜盘数 + gemo_juzhendianwei: 隔膜矩阵点位 + qiangtou_juzhendianwei: 枪头盒矩阵点位 + lvbodian: 是否使用铝箔垫片 + battery_pressure_mode: 是否启用压力模式 + battery_clean_ignore: 是否忽略电池清洁 + file_path: 实验记录保存路径 + + Returns: + dict: 包含组装结果的字典 + + 注意: + - 第一次启动需先调用 func_pack_device_init_auto_start_combined() + - 后续批次直接调用此函数即可 + """ + logger.info("=" * 60) + logger.info("开始发送瓶数+简化组装流程...") + logger.info(f"电解液瓶数: {elec_num}, 每瓶电池数: {elec_use_num}") + logger.info("=" * 60) + + # 步骤1: 发送电解液瓶数(触发物料搬运) + logger.info("步骤1/2: 发送电解液瓶数,触发物料搬运...") + try: + self.func_pack_send_bottle_num(elec_num) + logger.info("✓ 瓶数发送完成,物料搬运中...") + except Exception as e: + logger.error(f"发送瓶数失败: {e}") + return { + "success": False, + "error": f"发送瓶数失败: {e}", + "total_batteries": 0, + "batteries": [] + } + + # 步骤2: 执行简化组装流程 + logger.info("步骤2/2: 开始简化组装流程...") + result = self.func_allpack_cmd_simp( + elec_num=elec_num, + elec_use_num=elec_use_num, + elec_vol=elec_vol, + dual_drop_mode=dual_drop_mode, + dual_drop_first_volume=dual_drop_first_volume, + dual_drop_suction_timing=dual_drop_suction_timing, + dual_drop_start_timing=dual_drop_start_timing, + assembly_type=assembly_type, + assembly_pressure=assembly_pressure, + fujipian_panshu=fujipian_panshu, + fujipian_juzhendianwei=fujipian_juzhendianwei, + gemopanshu=gemopanshu, + gemo_juzhendianwei=gemo_juzhendianwei, + qiangtou_juzhendianwei=qiangtou_juzhendianwei, + lvbodian=lvbodian, + battery_pressure_mode=battery_pressure_mode, + battery_clean_ignore=battery_clean_ignore, + file_path=file_path + ) + + logger.info("=" * 60) + logger.info("发送瓶数+简化组装流程完成") + logger.info(f"总组装电池数: {result.get('total_batteries', 0)}") + logger.info("=" * 60) + + return result + # 下发参数 #def func_pack_send_msg_cmd(self, elec_num: int, elec_use_num: int, elec_vol: float, assembly_type: int, assembly_pressure: int) -> bool: @@ -654,16 +1268,25 @@ class CoinCellAssemblyWorkstation(WorkstationBase): # self.success = True # return self.success - def func_pack_send_msg_cmd(self, elec_use_num) -> bool: + def func_pack_send_msg_cmd(self, elec_use_num, elec_vol, assembly_type, assembly_pressure) -> bool: """UNILAB写参数""" while (self.request_rec_msg_status) == False: print("wait for request_rec_msg_status to True") time.sleep(1) self.success = False #self._unilab_send_msg_electrolyte_num(elec_num) - time.sleep(1) + #设置平行样数目 self._unilab_send_msg_electrolyte_use_num(elec_use_num) time.sleep(1) + #发送电解液加注量 + self._unilab_send_msg_electrolyte_vol(elec_vol) + time.sleep(1) + #发送电解液组装类型 + self._unilab_send_msg_assembly_type(assembly_type) + time.sleep(1) + #发送电池压制力 + self._unilab_send_msg_assembly_pressure(assembly_pressure) + time.sleep(1) self._unilab_send_msg_succ_cmd(True) time.sleep(1) while (self.request_rec_msg_status) == True: @@ -680,23 +1303,111 @@ class CoinCellAssemblyWorkstation(WorkstationBase): while self.request_send_msg_status == False: print("waiting for send_read_msg_status to True") time.sleep(1) - data_open_circuit_voltage = self.data_open_circuit_voltage - data_pole_weight = self.data_pole_weight + + # 处理开路电压 - 确保是数值类型 + try: + data_open_circuit_voltage = self.data_open_circuit_voltage + if isinstance(data_open_circuit_voltage, (list, tuple)) and len(data_open_circuit_voltage) > 0: + data_open_circuit_voltage = float(data_open_circuit_voltage[0]) + else: + data_open_circuit_voltage = float(data_open_circuit_voltage) + except Exception as e: + print(f"读取开路电压失败: {e}") + logger.error(f"读取开路电压失败: {e}") + data_open_circuit_voltage = 0.0 + + # 处理极片质量 - 确保是数值类型 + try: + data_pole_weight = self.data_pole_weight + if isinstance(data_pole_weight, (list, tuple)) and len(data_pole_weight) > 0: + data_pole_weight = float(data_pole_weight[0]) + else: + data_pole_weight = float(data_pole_weight) + except Exception as e: + print(f"读取正极片重量失败: {e}") + logger.error(f"读取正极片重量失败: {e}") + data_pole_weight = 0.0 + data_assembly_time = self.data_assembly_time data_assembly_pressure = self.data_assembly_pressure data_electrolyte_volume = self.data_electrolyte_volume data_coin_num = self.data_coin_num - data_electrolyte_code = self.data_electrolyte_code - data_coin_cell_code = self.data_coin_cell_code - print("data_open_circuit_voltage", data_open_circuit_voltage) - print("data_pole_weight", data_pole_weight) - print("data_assembly_time", data_assembly_time) - print("data_assembly_pressure", data_assembly_pressure) - print("data_electrolyte_volume", data_electrolyte_volume) - print("data_coin_num", data_coin_num) - print("data_electrolyte_code", data_electrolyte_code) - print("data_coin_cell_code", data_coin_cell_code) + + # 处理电解液二维码 - 确保是字符串类型 + try: + data_electrolyte_code = self.data_electrolyte_code + if isinstance(data_electrolyte_code, str): + data_electrolyte_code = data_electrolyte_code.strip() + else: + data_electrolyte_code = str(data_electrolyte_code) + except Exception as e: + print(f"读取电解液二维码失败: {e}") + logger.error(f"读取电解液二维码失败: {e}") + data_electrolyte_code = "N/A" + + # 处理电池二维码 - 确保是字符串类型 + try: + data_coin_cell_code = self.data_coin_cell_code + if isinstance(data_coin_cell_code, str): + data_coin_cell_code = data_coin_cell_code.strip() + else: + data_coin_cell_code = str(data_coin_cell_code) + except Exception as e: + print(f"读取电池二维码失败: {e}") + logger.error(f"读取电池二维码失败: {e}") + data_coin_cell_code = "N/A" + logger.debug(f"data_open_circuit_voltage: {data_open_circuit_voltage}") + logger.debug(f"data_pole_weight: {data_pole_weight}") + logger.debug(f"data_assembly_time: {data_assembly_time}") + logger.debug(f"data_assembly_pressure: {data_assembly_pressure}") + logger.debug(f"data_electrolyte_volume: {data_electrolyte_volume}") + logger.debug(f"data_coin_num: {data_coin_num}") + logger.debug(f"data_electrolyte_code: {data_electrolyte_code}") + logger.debug(f"data_coin_cell_code: {data_coin_cell_code}") #接收完信息后,读取完毕标志位置True + liaopan3 = self.deck.get_resource("成品弹夹") + + # 生成唯一的电池名称(使用时间戳确保唯一性) + timestamp_suffix = datetime.now().strftime("%Y%m%d_%H%M%S_%f") + battery_name = f"battery_{self.coin_num_N}_{timestamp_suffix}" + + # 检查目标位置是否已有资源,如果有则先卸载 + target_slot = liaopan3.children[self.coin_num_N] + if target_slot.children: + logger.warning(f"位置 {self.coin_num_N} 已有资源,将先卸载旧资源") + try: + # 卸载所有现有子资源 + for child in list(target_slot.children): + target_slot.unassign_child_resource(child) + logger.info(f"已卸载旧资源: {child.name}") + except Exception as e: + logger.error(f"卸载旧资源时出错: {e}") + + # 创建新的电池资源 + battery = ElectrodeSheet(name=battery_name, size_x=14, size_y=14, size_z=2) + battery._unilabos_state = { + "electrolyte_name": data_coin_cell_code, + "data_electrolyte_code": data_electrolyte_code, + "open_circuit_voltage": data_open_circuit_voltage, + "assembly_pressure": data_assembly_pressure, + "electrolyte_volume": data_electrolyte_volume + } + + # 分配新资源到目标位置 + try: + target_slot.assign_child_resource(battery, location=None) + logger.info(f"成功分配电池 {battery_name} 到位置 {self.coin_num_N}") + except Exception as e: + logger.error(f"分配电池资源失败: {e}") + # 如果分配失败,尝试使用更简单的方法 + raise + + #print(jipian2.parent) + ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{ + "resources": [self.deck] + }) + + self._unilab_rec_msg_succ_cmd(True) time.sleep(1) #等待允许读取标志位置False @@ -754,10 +1465,27 @@ class CoinCellAssemblyWorkstation(WorkstationBase): self.success = True return self.success + def qiming_coin_cell_code(self, fujipian_panshu:int, fujipian_juzhendianwei:int=0, gemopanshu:int=0, gemo_juzhendianwei:int=0, lvbodian:bool=True, battery_pressure_mode:bool=True, battery_pressure:int=4000, battery_clean_ignore:bool=False) -> bool: + self.success = False + self.client.use_node('REG_MSG_NE_PLATE_NUM').write(fujipian_panshu) + self.client.use_node('REG_MSG_NE_PLATE_MATRIX').write(fujipian_juzhendianwei) + self.client.use_node('REG_MSG_SEPARATOR_PLATE_NUM').write(gemopanshu) + self.client.use_node('REG_MSG_SEPARATOR_PLATE_MATRIX').write(gemo_juzhendianwei) + self.client.use_node('COIL_ALUMINUM_FOIL').write(not lvbodian) + self.client.use_node('REG_MSG_PRESS_MODE').write(not battery_pressure_mode) + # self.client.use_node('REG_MSG_ASSEMBLY_PRESSURE').write(battery_pressure) + self.client.use_node('REG_MSG_BATTERY_CLEAN_IGNORE').write(battery_clean_ignore) + self.success = True + + return self.success - - def func_allpack_cmd(self, elec_num, elec_use_num, file_path: str="D:\\coin_cell_data") -> bool: + def func_allpack_cmd(self, elec_num, elec_use_num, elec_vol:int=50, assembly_type:int=7, assembly_pressure:int=4200, file_path: str="/Users/sml/work") -> Dict[str, Any]: + elec_num, elec_use_num, elec_vol, assembly_type, assembly_pressure = int(elec_num), int(elec_use_num), int(elec_vol), int(assembly_type), int(assembly_pressure) summary_csv_file = os.path.join(file_path, "duandian.csv") + + # 用于收集所有电池的数据 + battery_data_list = [] + # 如果断点文件存在,先读取之前的进度 if os.path.exists(summary_csv_file): read_status_flag = True @@ -775,7 +1503,12 @@ class CoinCellAssemblyWorkstation(WorkstationBase): print("断点文件与当前任务匹配,继续") else: print("断点文件中elec_num、elec_use_num与当前任务不匹配,请检查任务下发参数或修改断点文件") - return False + return { + "success": False, + "error": "断点文件参数不匹配", + "total_batteries": 0, + "batteries": [] + } print(f"从断点文件读取进度: elec_num_N={elec_num_N}, elec_use_num_N={elec_use_num_N}, coin_num_N={coin_num_N}") else: @@ -784,54 +1517,88 @@ class CoinCellAssemblyWorkstation(WorkstationBase): elec_num_N = 0 elec_use_num_N = 0 coin_num_N = 0 - - print(f"剩余电解液瓶数: {elec_num}, 已组装电池数: {elec_use_num}") - + for i in range(20): + print(f"剩余电解液瓶数: {elec_num}, 已组装电池数: {elec_use_num}") + print(f"剩余电解液瓶数: {type(elec_num)}, 已组装电池数: {type(elec_use_num)}") + print(f"剩余电解液瓶数: {type(int(elec_num))}, 已组装电池数: {type(int(elec_use_num))}") #如果是第一次运行,则进行初始化、切换自动、启动, 如果是断点重启则跳过。 if read_status_flag == False: + pass #初始化 - self.func_pack_device_init() + #self.func_pack_device_init() #切换自动 - self.func_pack_device_auto() + #self.func_pack_device_auto() #启动,小车收回 - self.func_pack_device_start() + #self.func_pack_device_start() #发送电解液瓶数量,启动搬运,多搬运没事 - self.func_pack_send_bottle_num(elec_num) + #self.func_pack_send_bottle_num(elec_num) last_i = elec_num_N last_j = elec_use_num_N for i in range(last_i, elec_num): print(f"开始第{last_i+i+1}瓶电解液的组装") #第一个循环从上次断点继续,后续循环从0开始 j_start = last_j if i == last_i else 0 - self.func_pack_send_msg_cmd(elec_use_num-j_start) + self.func_pack_send_msg_cmd(elec_use_num-j_start, elec_vol, assembly_type, assembly_pressure) for j in range(j_start, elec_use_num): print(f"开始第{last_i+i+1}瓶电解液的第{j+j_start+1}个电池组装") + #读取电池组装数据并存入csv self.func_pack_get_msg_cmd(file_path) + + # 收集当前电池的数据 + # 处理电池二维码 + try: + battery_qr_code = self.data_coin_cell_code + except Exception as e: + print(f"读取电池二维码失败: {e}") + battery_qr_code = "N/A" + + # 处理电解液二维码 + try: + electrolyte_qr_code = self.data_electrolyte_code + except Exception as e: + print(f"读取电解液二维码失败: {e}") + electrolyte_qr_code = "N/A" + + # 处理开路电压 - 确保是数值类型 + try: + open_circuit_voltage = self.data_open_circuit_voltage + if isinstance(open_circuit_voltage, (list, tuple)) and len(open_circuit_voltage) > 0: + open_circuit_voltage = float(open_circuit_voltage[0]) + else: + open_circuit_voltage = float(open_circuit_voltage) + except Exception as e: + print(f"读取开路电压失败: {e}") + open_circuit_voltage = 0.0 + + # 处理极片质量 - 确保是数值类型 + try: + pole_weight = self.data_pole_weight + if isinstance(pole_weight, (list, tuple)) and len(pole_weight) > 0: + pole_weight = float(pole_weight[0]) + else: + pole_weight = float(pole_weight) + except Exception as e: + print(f"读取正极片重量失败: {e}") + pole_weight = 0.0 + + battery_info = { + "battery_index": coin_num_N + 1, + "battery_barcode": battery_qr_code, + "electrolyte_barcode": electrolyte_qr_code, + "open_circuit_voltage": open_circuit_voltage, + "pole_weight": pole_weight, + "assembly_time": self.data_assembly_time, + "assembly_pressure": self.data_assembly_pressure, + "electrolyte_volume": self.data_electrolyte_volume + } + battery_data_list.append(battery_info) + print(f"已收集第 {coin_num_N + 1} 个电池数据: 电池码={battery_info['battery_barcode']}, 电解液码={battery_info['electrolyte_barcode']}") + time.sleep(1) - - #这里定义物料系统 # TODO:读完再将电池数加一还是进入循环就将电池数加一需要考虑 - liaopan1 = self.deck.get_resource("liaopan1") - liaopan4 = self.deck.get_resource("liaopan4") - jipian1 = liaopan1.children[coin_num_N].children[0] - jipian4 = liaopan4.children[coin_num_N].children[0] - #print(jipian1) - #从料盘上去物料解绑后放到另一盘上 - jipian1.parent.unassign_child_resource(jipian1) - jipian4.parent.unassign_child_resource(jipian4) - - #print(jipian2.parent) - battery = Battery(name = f"battery_{coin_num_N}") - battery.assign_child_resource(jipian1, location=None) - battery.assign_child_resource(jipian4, location=None) - - zidanjia6 = self.deck.get_resource("zi_dan_jia6") - - zidanjia6.children[0].assign_child_resource(battery, location=None) - # 生成断点文件 # 生成包含elec_num_N、coin_num_N、timestamp的CSV文件 @@ -842,6 +1609,7 @@ class CoinCellAssemblyWorkstation(WorkstationBase): writer.writerow([elec_num, elec_use_num, elec_num_N, elec_use_num_N, coin_num_N, timestamp]) csvfile.flush() coin_num_N += 1 + self.coin_num_N = coin_num_N elec_use_num_N += 1 elec_num_N += 1 elec_use_num_N = 0 @@ -850,8 +1618,284 @@ class CoinCellAssemblyWorkstation(WorkstationBase): os.remove(summary_csv_file) #全部完成后等待依华发送完成信号 self.func_pack_send_finished_cmd() + + # 返回JSON格式数据 + result = { + "success": True, + "total_batteries": len(battery_data_list), + "batteries": battery_data_list, + "summary": { + "electrolyte_bottles_used": elec_num, + "batteries_per_bottle": elec_use_num, + "electrolyte_volume": elec_vol, + "assembly_type": assembly_type, + "assembly_pressure": assembly_pressure + } + } + + print(f"\n{'='*60}") + print(f"组装完成统计:") + print(f" 总组装电池数: {result['total_batteries']}") + print(f" 使用电解液瓶数: {elec_num}") + print(f" 每瓶电池数: {elec_use_num}") + print(f"{'='*60}\n") + + return result + def func_allpack_cmd_simp( + self, + elec_num, + elec_use_num, + elec_vol: int = 50, + # 电解液双滴模式参数 + dual_drop_mode: bool = False, + dual_drop_first_volume: int = 25, + dual_drop_suction_timing: bool = False, + dual_drop_start_timing: bool = False, + assembly_type: int = 7, + assembly_pressure: int = 4200, + # 来自原 qiming_coin_cell_code 的参数 + fujipian_panshu: int = 0, + fujipian_juzhendianwei: int = 0, + gemopanshu: int = 0, + gemo_juzhendianwei: int = 0, + qiangtou_juzhendianwei: int = 0, + lvbodian: bool = True, + battery_pressure_mode: bool = True, + battery_clean_ignore: bool = False, + file_path: str = "/Users/sml/work" + ) -> Dict[str, Any]: + """ + 简化版电池组装函数,整合了原 qiming_coin_cell_code 的参数设置和双滴模式 + + 此函数是 func_allpack_cmd 的增强版本,自动处理以下配置: + - 负极片和隔膜的盘数及矩阵点位 + - 枪头盒矩阵点位 + - 铝箔垫片使用设置 + - 压力模式和清洁忽略选项 + - 电解液双滴模式(分两次滴液) + + Args: + elec_num: 电解液瓶数 + elec_use_num: 每瓶电解液组装的电池数 + elec_vol: 电解液吸液量 (μL) + dual_drop_mode: 电解液添加模式 (False=单次滴液, True=二次滴液) + dual_drop_first_volume: 二次滴液第一次排液体积 (μL) + dual_drop_suction_timing: 二次滴液吸液时机 (False=正常吸液, True=先吸液) + dual_drop_start_timing: 二次滴液开始滴液时机 (False=正极片前, True=正极片后) + assembly_type: 组装类型 (7=不用铝箔垫, 8=使用铝箔垫) + assembly_pressure: 电池压制力 (N) + fujipian_panshu: 负极片盘数 + fujipian_juzhendianwei: 负极片矩阵点位 + gemopanshu: 隔膜盘数 + gemo_juzhendianwei: 隔膜矩阵点位 + qiangtou_juzhendianwei: 枪头盒矩阵点位 + lvbodian: 是否使用铝箔垫片 + battery_pressure_mode: 是否启用压力模式 + battery_clean_ignore: 是否忽略电池清洁 + file_path: 实验记录保存路径 + + Returns: + dict: 包含组装结果的字典 + """ + # 参数类型转换 + elec_num = int(elec_num) + elec_use_num = int(elec_use_num) + elec_vol = int(elec_vol) + dual_drop_first_volume = int(dual_drop_first_volume) + assembly_type = int(assembly_type) + assembly_pressure = int(assembly_pressure) + fujipian_panshu = int(fujipian_panshu) + fujipian_juzhendianwei = int(fujipian_juzhendianwei) + gemopanshu = int(gemopanshu) + gemo_juzhendianwei = int(gemo_juzhendianwei) + qiangtou_juzhendianwei = int(qiangtou_juzhendianwei) + + # 步骤1: 设置设备参数(原 qiming_coin_cell_code 的功能) + logger.info("=" * 60) + logger.info("设置设备参数...") + logger.info(f" 负极片盘数: {fujipian_panshu}, 矩阵点位: {fujipian_juzhendianwei}") + logger.info(f" 隔膜盘数: {gemopanshu}, 矩阵点位: {gemo_juzhendianwei}") + logger.info(f" 枪头盒矩阵点位: {qiangtou_juzhendianwei}") + logger.info(f" 铝箔垫片: {lvbodian}, 压力模式: {battery_pressure_mode}") + logger.info(f" 压制力: {assembly_pressure}") + logger.info(f" 忽略电池清洁: {battery_clean_ignore}") + logger.info("=" * 60) + + # 写入基础参数到PLC + self.client.use_node('REG_MSG_NE_PLATE_NUM').write(fujipian_panshu) + self.client.use_node('REG_MSG_NE_PLATE_MATRIX').write(fujipian_juzhendianwei) + self.client.use_node('REG_MSG_SEPARATOR_PLATE_NUM').write(gemopanshu) + self.client.use_node('REG_MSG_SEPARATOR_PLATE_MATRIX').write(gemo_juzhendianwei) + self.client.use_node('REG_MSG_TIP_BOX_MATRIX').write(qiangtou_juzhendianwei) + self.client.use_node('COIL_ALUMINUM_FOIL').write(not lvbodian) + self.client.use_node('REG_MSG_PRESS_MODE').write(not battery_pressure_mode) + self.client.use_node('REG_MSG_BATTERY_CLEAN_IGNORE').write(battery_clean_ignore) + + # 设置电解液双滴模式参数 + self.client.use_node('COIL_ELECTROLYTE_DUAL_DROP_MODE').write(dual_drop_mode) + self.client.use_node('REG_MSG_DUAL_DROP_FIRST_VOLUME').write(dual_drop_first_volume) + self.client.use_node('COIL_DUAL_DROP_SUCTION_TIMING').write(dual_drop_suction_timing) + self.client.use_node('COIL_DUAL_DROP_START_TIMING').write(dual_drop_start_timing) + + if dual_drop_mode: + logger.info(f"✓ 双滴模式已启用: 第一次排液={dual_drop_first_volume}μL, " + f"吸液时机={'先吸液' if dual_drop_suction_timing else '正常吸液'}, " + f"滴液时机={'正极片后' if dual_drop_start_timing else '正极片前'}") + else: + logger.info("✓ 单次滴液模式") + + logger.info("✓ 设备参数设置完成") + + # 步骤2: 执行组装流程(复用 func_allpack_cmd 的主体逻辑) + summary_csv_file = os.path.join(file_path, "duandian.csv") + + # 用于收集所有电池的数据 + battery_data_list = [] + + # 如果断点文件存在,先读取之前的进度 + if os.path.exists(summary_csv_file): + read_status_flag = True + with open(summary_csv_file, 'r', newline='', encoding='utf-8') as csvfile: + reader = csv.reader(csvfile) + header = next(reader) # 跳过标题行 + data_row = next(reader) # 读取数据行 + if len(data_row) >= 2: + elec_num_r = int(data_row[0]) + elec_use_num_r = int(data_row[1]) + elec_num_N = int(data_row[2]) + elec_use_num_N = int(data_row[3]) + coin_num_N = int(data_row[4]) + if elec_num_r == elec_num and elec_use_num_r == elec_use_num: + print("断点文件与当前任务匹配,继续") + else: + print("断点文件中elec_num、elec_use_num与当前任务不匹配,请检查任务下发参数或修改断点文件") + return { + "success": False, + "error": "断点文件参数不匹配", + "total_batteries": 0, + "batteries": [] + } + print(f"从断点文件读取进度: elec_num_N={elec_num_N}, elec_use_num_N={elec_use_num_N}, coin_num_N={coin_num_N}") + + else: + read_status_flag = False + print("未找到断点文件,从头开始") + elec_num_N = 0 + elec_use_num_N = 0 + coin_num_N = 0 + + for i in range(20): + print(f"剩余电解液瓶数: {elec_num}, 已组装电池数: {elec_use_num}") + print(f"剩余电解液瓶数: {type(elec_num)}, 已组装电池数: {type(elec_use_num)}") + print(f"剩余电解液瓶数: {type(int(elec_num))}, 已组装电池数: {type(int(elec_use_num))}") + + last_i = elec_num_N + last_j = elec_use_num_N + for i in range(last_i, elec_num): + print(f"开始第{last_i+i+1}瓶电解液的组装") + # 第一个循环从上次断点继续,后续循环从0开始 + j_start = last_j if i == last_i else 0 + self.func_pack_send_msg_cmd(elec_use_num-j_start, elec_vol, assembly_type, assembly_pressure) + + for j in range(j_start, elec_use_num): + print(f"开始第{last_i+i+1}瓶电解液的第{j+j_start+1}个电池组装") + + # 读取电池组装数据并存入csv + self.func_pack_get_msg_cmd(file_path) + + # 收集当前电池的数据 + try: + battery_qr_code = self.data_coin_cell_code + except Exception as e: + print(f"读取电池二维码失败: {e}") + battery_qr_code = "N/A" + + try: + electrolyte_qr_code = self.data_electrolyte_code + except Exception as e: + print(f"读取电解液二维码失败: {e}") + electrolyte_qr_code = "N/A" + + try: + open_circuit_voltage = self.data_open_circuit_voltage + if isinstance(open_circuit_voltage, (list, tuple)) and len(open_circuit_voltage) > 0: + open_circuit_voltage = float(open_circuit_voltage[0]) + else: + open_circuit_voltage = float(open_circuit_voltage) + except Exception as e: + print(f"读取开路电压失败: {e}") + open_circuit_voltage = 0.0 + + try: + pole_weight = self.data_pole_weight + if isinstance(pole_weight, (list, tuple)) and len(pole_weight) > 0: + pole_weight = float(pole_weight[0]) + else: + pole_weight = float(pole_weight) + except Exception as e: + print(f"读取正极片重量失败: {e}") + pole_weight = 0.0 + + battery_info = { + "battery_index": coin_num_N + 1, + "battery_barcode": battery_qr_code, + "electrolyte_barcode": electrolyte_qr_code, + "open_circuit_voltage": open_circuit_voltage, + "pole_weight": pole_weight, + "assembly_time": self.data_assembly_time, + "assembly_pressure": self.data_assembly_pressure, + "electrolyte_volume": self.data_electrolyte_volume + } + battery_data_list.append(battery_info) + print(f"已收集第 {coin_num_N + 1} 个电池数据: 电池码={battery_info['battery_barcode']}, 电解液码={battery_info['electrolyte_barcode']}") + + time.sleep(1) + + # 生成断点文件 + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + with open(summary_csv_file, 'w', newline='', encoding='utf-8') as csvfile: + writer = csv.writer(csvfile) + writer.writerow(['elec_num','elec_use_num', 'elec_num_N', 'elec_use_num_N', 'coin_num_N', 'timestamp']) + writer.writerow([elec_num, elec_use_num, elec_num_N, elec_use_num_N, coin_num_N, timestamp]) + csvfile.flush() + coin_num_N += 1 + self.coin_num_N = coin_num_N + elec_use_num_N += 1 + elec_num_N += 1 + elec_use_num_N = 0 + + # 循环正常结束,则删除断点文件 + os.remove(summary_csv_file) + # 全部完成后等待依华发送完成信号 + self.func_pack_send_finished_cmd() + + # 返回JSON格式数据 + result = { + "success": True, + "total_batteries": len(battery_data_list), + "batteries": battery_data_list, + "summary": { + "electrolyte_bottles_used": elec_num, + "batteries_per_bottle": elec_use_num, + "electrolyte_volume": elec_vol, + "assembly_type": assembly_type, + "assembly_pressure": assembly_pressure, + "dual_drop_mode": dual_drop_mode + } + } + + print(f"\n{'='*60}") + print(f"组装完成统计:") + print(f" 总组装电池数: {result['total_batteries']}") + print(f" 使用电解液瓶数: {elec_num}") + print(f" 每瓶电池数: {elec_use_num}") + print(f" 双滴模式: {'启用' if dual_drop_mode else '禁用'}") + print(f"{'='*60}\n") + + return result + def func_pack_device_stop(self) -> bool: """打包指令:设备停止""" for i in range(3): @@ -878,36 +1922,27 @@ class CoinCellAssemblyWorkstation(WorkstationBase): def fun_wuliao_test(self) -> bool: #找到data_init中构建的2个物料盘 - #liaopan1 = self.deck.get_resource("liaopan1") - #liaopan4 = self.deck.get_resource("liaopan4") - #for coin_num_N in range(16): - # liaopan1 = self.deck.get_resource("liaopan1") - # liaopan4 = self.deck.get_resource("liaopan4") - # jipian1 = liaopan1.children[coin_num_N].children[0] - # jipian4 = liaopan4.children[coin_num_N].children[0] - # #print(jipian1) - # #从料盘上去物料解绑后放到另一盘上 - # jipian1.parent.unassign_child_resource(jipian1) - # jipian4.parent.unassign_child_resource(jipian4) - # - # #print(jipian2.parent) - # battery = Battery(name = f"battery_{coin_num_N}") - # battery.assign_child_resource(jipian1, location=None) - # battery.assign_child_resource(jipian4, location=None) - # - # zidanjia6 = self.deck.get_resource("zi_dan_jia6") - # zidanjia6.children[0].assign_child_resource(battery, location=None) - # ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{ - # "resources": [self.deck] - # }) - # time.sleep(2) - for i in range(20): - print(f"输出{i}") - time.sleep(2) - + liaopan3 = self.deck.get_resource("\u7535\u6c60\u6599\u76d8") + for i in range(16): + battery = ElectrodeSheet(name=f"battery_{i}", size_x=16, size_y=16, size_z=2) + battery._unilabos_state = { + "diameter": 20.0, + "height": 20.0, + "assembly_pressure": i, + "electrolyte_volume": 20.0, + "electrolyte_name": f"DP{i}" + } + liaopan3.children[i].assign_child_resource(battery, location=None) + ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{ + "resources": [self.deck] + }) + # for i in range(40): + # print(f"fun_wuliao_test 运行结束{i}") + # time.sleep(1) + # time.sleep(40) # 数据读取与输出 - def func_read_data_and_output(self, file_path: str="D:\\coin_cell_data"): + def func_read_data_and_output(self, file_path: str="/Users/sml/work"): # 检查CSV导出是否正在运行,已运行则跳出,防止同时启动两个while循环 if self.csv_export_running: return False, "读取已在运行中" @@ -1012,7 +2047,7 @@ class CoinCellAssemblyWorkstation(WorkstationBase): # else: # print("子弹夹洞位0没有极片") # - # #把电解液从瓶中取到电池夹子中 + # # TODO:#把电解液从瓶中取到电池夹子中 # battery_site = deck.get_resource("battery_press_1") # clip_magazine_battery = deck.get_resource("clip_magazine_battery") # if battery_site.has_battery(): @@ -1102,41 +2137,16 @@ class CoinCellAssemblyWorkstation(WorkstationBase): ''' + if __name__ == "__main__": - from pylabrobot.resources import Resource - Coin_Cell = CoinCellAssemblyWorkstation(Resource("1", 1, 1, 1), debug_mode=True) - #Coin_Cell.func_pack_device_init() - #Coin_Cell.func_pack_device_auto() - #Coin_Cell.func_pack_device_start() - #Coin_Cell.func_pack_send_bottle_num(2) - #Coin_Cell.func_pack_send_msg_cmd(2) - #Coin_Cell.func_pack_get_msg_cmd() - #Coin_Cell.func_pack_get_msg_cmd() - #Coin_Cell.func_pack_send_finished_cmd() -# - #Coin_Cell.func_allpack_cmd(3, 2) - #print(Coin_Cell.data_stack_vision_code) - #print("success") - #创建一个物料台面 - - #deck = create_a_coin_cell_deck() - - ##在台面上找到料盘和极片 - #liaopan1 = deck.get_resource("liaopan1") - #liaopan2 = deck.get_resource("liaopan2") - #jipian1 = liaopan1.children[1].children[0] -# - ##print(jipian1) - ##把物料解绑后放到另一盘上 - #jipian1.parent.unassign_child_resource(jipian1) - #liaopan2.children[1].assign_child_resource(jipian1, location=None) - ##print(jipian2.parent) - from unilabos.resources.graphio import resource_ulab_to_plr, convert_resources_to_type - - with open("./button_battery_decks_unilab.json", "r", encoding="utf-8") as f: - bioyond_resources_unilab = json.load(f) - print(f"成功读取 JSON 文件,包含 {len(bioyond_resources_unilab)} 个资源") - ulab_resources = convert_resources_to_type(bioyond_resources_unilab, List[PLRResource]) - print(f"转换结果类型: {type(ulab_resources)}") - print(ulab_resources) - + # 简单测试 + workstation = CoinCellAssemblyWorkstation(deck=CoincellDeck(setup=True, name="coin_cell_deck")) + # workstation.qiming_coin_cell_code(fujipian_panshu=1, fujipian_juzhendianwei=2, gemopanshu=3, gemo_juzhendianwei=4, lvbodian=False, battery_pressure_mode=False, battery_pressure=4200, battery_clean_ignore=False) + # print(f"工作站创建成功: {workstation.deck.name}") + # print(f"料盘数量: {len(workstation.deck.children)}") + workstation.func_pack_device_init() + workstation.func_pack_device_auto() + workstation.func_pack_device_start() + workstation.func_pack_send_bottle_num(16) + workstation.func_allpack_cmd(elec_num=16, elec_use_num=16, elec_vol=50, assembly_type=7, assembly_pressure=4200, file_path="/Users/calvincao/Desktop/work/Uni-Lab-OS-hhm") + \ No newline at end of file diff --git a/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_b.csv b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_b.csv new file mode 100644 index 00000000..e46d1de5 --- /dev/null +++ b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_b.csv @@ -0,0 +1,133 @@ +Name,DataType,InitValue,Comment,Attribute,DeviceType,Address, +COIL_SYS_START_CMD,BOOL,,,,coil,8010, +COIL_SYS_STOP_CMD,BOOL,,,,coil,8020, +COIL_SYS_RESET_CMD,BOOL,,,,coil,8030, +COIL_SYS_HAND_CMD,BOOL,,,,coil,8040, +COIL_SYS_AUTO_CMD,BOOL,,,,coil,8050, +COIL_SYS_INIT_CMD,BOOL,,,,coil,8060, +COIL_UNILAB_SEND_MSG_SUCC_CMD,BOOL,,,,coil,8700, +COIL_UNILAB_REC_MSG_SUCC_CMD,BOOL,,,,coil,8710,unilab_rec_msg_succ_cmd +COIL_SYS_START_STATUS,BOOL,,,,coil,8210, +COIL_SYS_STOP_STATUS,BOOL,,,,coil,8220, +COIL_SYS_RESET_STATUS,BOOL,,,,coil,8230, +COIL_SYS_HAND_STATUS,BOOL,,,,coil,8240, +COIL_SYS_AUTO_STATUS,BOOL,,,,coil,8250, +COIL_SYS_INIT_STATUS,BOOL,,,,coil,8260, +COIL_REQUEST_REC_MSG_STATUS,BOOL,,,,coil,8500, +COIL_REQUEST_SEND_MSG_STATUS,BOOL,,,,coil,8510,request_send_msg_status +REG_MSG_ELECTROLYTE_USE_NUM,INT16,,,,hold_register,11000, +REG_MSG_ELECTROLYTE_NUM,INT16,,,,hold_register,11002,unilab_send_msg_electrolyte_num +REG_MSG_ELECTROLYTE_VOLUME,INT16,,,,hold_register,11004,unilab_send_msg_electrolyte_vol +REG_MSG_ASSEMBLY_TYPE,INT16,,,,hold_register,11006,unilab_send_msg_assembly_type +REG_MSG_ASSEMBLY_PRESSURE,INT16,,,,hold_register,11008,unilab_send_msg_assembly_pressure +REG_DATA_ASSEMBLY_COIN_CELL_NUM,INT16,,,,hold_register,10000,data_assembly_coin_cell_num +REG_DATA_OPEN_CIRCUIT_VOLTAGE,FLOAT32,,,,hold_register,10002,data_open_circuit_voltage +REG_DATA_AXIS_X_POS,FLOAT32,,,,hold_register,10004, +REG_DATA_AXIS_Y_POS,FLOAT32,,,,hold_register,10006, +REG_DATA_AXIS_Z_POS,FLOAT32,,,,hold_register,10008, +REG_DATA_POLE_WEIGHT,FLOAT32,,,,hold_register,10010,data_pole_weight +REG_DATA_ASSEMBLY_PER_TIME,FLOAT32,,,,hold_register,10012,data_assembly_time +REG_DATA_ASSEMBLY_PRESSURE,INT16,,,,hold_register,10014,data_assembly_pressure +REG_DATA_ELECTROLYTE_VOLUME,INT16,,,,hold_register,10016,data_electrolyte_volume +REG_DATA_COIN_NUM,INT16,,,,hold_register,10018,data_coin_num +REG_DATA_ELECTROLYTE_CODE,STRING,,,,hold_register,10020,data_electrolyte_code() +REG_DATA_COIN_CELL_CODE,STRING,,,,hold_register,10030,data_coin_cell_code() +REG_DATA_STACK_VISON_CODE,STRING,,,,hold_register,12004,data_stack_vision_code() +REG_DATA_GLOVE_BOX_PRESSURE,FLOAT32,,,,hold_register,10050,data_glove_box_pressure +REG_DATA_GLOVE_BOX_WATER_CONTENT,FLOAT32,,,,hold_register,10052,data_glove_box_water_content +REG_DATA_GLOVE_BOX_O2_CONTENT,FLOAT32,,,,hold_register,10054,data_glove_box_o2_content +UNILAB_SEND_ELECTROLYTE_BOTTLE_NUM,BOOL,,,,coil,8720, +UNILAB_RECE_ELECTROLYTE_BOTTLE_NUM,BOOL,,,,coil,8520, +REG_MSG_ELECTROLYTE_NUM_USED,INT16,,,,hold_register,496, +REG_DATA_ELECTROLYTE_USE_NUM,INT16,,,,hold_register,10000, +UNILAB_SEND_FINISHED_CMD,BOOL,,,,coil,8730, +UNILAB_RECE_FINISHED_CMD,BOOL,,,,coil,8530, +REG_DATA_ASSEMBLY_TYPE,INT16,,,,hold_register,10018,ASSEMBLY_TYPE7or8 +REG_UNILAB_INTERACT,BOOL,,,,coil,8450, +,,,,,coil,8320, +COIL_ALUMINUM_FOIL,BOOL,,,,coil,8340, +REG_MSG_NE_PLATE_MATRIX,INT16,,,,hold_register,440, +REG_MSG_SEPARATOR_PLATE_MATRIX,INT16,,,,hold_register,450, +REG_MSG_TIP_BOX_MATRIX,INT16,,,,hold_register,480, +REG_MSG_NE_PLATE_NUM,INT16,,,,hold_register,443, +REG_MSG_SEPARATOR_PLATE_NUM,INT16,,,,hold_register,453, +REG_MSG_PRESS_MODE,BOOL,,,,coil,8360, +,BOOL,,,,coil,8300, +,BOOL,,,,coil,8310, +COIL_GB_L_IGNORE_CMD,BOOL,,,,coil,8320, +COIL_GB_R_IGNORE_CMD,BOOL,,,,coil,8420, +,BOOL,,,,coil,8350, +COIL_ELECTROLYTE_DUAL_DROP_MODE,BOOL,,,,coil,8370, +,BOOL,,,,coil,8380, +,BOOL,,,,coil,8390, +,BOOL,,,,coil,8400, +,BOOL,,,,coil,8410, +REG_MSG_DUAL_DROP_FIRST_VOLUME,INT16,,,,hold_register,4001, +COIL_DUAL_DROP_SUCTION_TIMING,BOOL,,,,coil,8430, +COIL_DUAL_DROP_START_TIMING,BOOL,,,,coil,8470, +REG_MSG_BATTERY_CLEAN_IGNORE,BOOL,,,,coil,8460, +COIL_MATERIAL_SEARCH_DIALOG_APPEAR,BOOL,,,,coil,6470, +COIL_MATERIAL_SEARCH_CONFIRM_YES,BOOL,,,,coil,6480, +COIL_MATERIAL_SEARCH_CONFIRM_NO,BOOL,,,,coil,6490, +COIL_ALARM_100_SYSTEM_ERROR,BOOL,,,,coil,1000,异常100-系统异常 +COIL_ALARM_101_EMERGENCY_STOP,BOOL,,,,coil,1010,异常101-急停 +COIL_ALARM_111_GLOVEBOX_EMERGENCY_STOP,BOOL,,,,coil,1110,异常111-手套箱急停 +COIL_ALARM_112_GLOVEBOX_GRATING_BLOCKED,BOOL,,,,coil,1120,异常112-手套箱内光栅遮挡 +COIL_ALARM_160_PIPETTE_TIP_SHORTAGE,BOOL,,,,coil,1600,异常160-移液枪头缺料 +COIL_ALARM_161_POSITIVE_SHELL_SHORTAGE,BOOL,,,,coil,1610,异常161-正极壳缺料 +COIL_ALARM_162_ALUMINUM_FOIL_SHORTAGE,BOOL,,,,coil,1620,异常162-铝箔垫缺料 +COIL_ALARM_163_POSITIVE_PLATE_SHORTAGE,BOOL,,,,coil,1630,异常163-正极片缺料 +COIL_ALARM_164_SEPARATOR_SHORTAGE,BOOL,,,,coil,1640,异常164-隔膜缺料 +COIL_ALARM_165_NEGATIVE_PLATE_SHORTAGE,BOOL,,,,coil,1650,异常165-负极片缺料 +COIL_ALARM_166_FLAT_WASHER_SHORTAGE,BOOL,,,,coil,1660,异常166-平垫缺料 +COIL_ALARM_167_SPRING_WASHER_SHORTAGE,BOOL,,,,coil,1670,异常167-弹垫缺料 +COIL_ALARM_168_NEGATIVE_SHELL_SHORTAGE,BOOL,,,,coil,1680,异常168-负极壳缺料 +COIL_ALARM_169_FINISHED_BATTERY_FULL,BOOL,,,,coil,1690,异常169-成品电池满料 +COIL_ALARM_201_SERVO_AXIS_01_ERROR,BOOL,,,,coil,2010,异常201-伺服轴01异常 +COIL_ALARM_202_SERVO_AXIS_02_ERROR,BOOL,,,,coil,2020,异常202-伺服轴02异常 +COIL_ALARM_203_SERVO_AXIS_03_ERROR,BOOL,,,,coil,2030,异常203-伺服轴03异常 +COIL_ALARM_204_SERVO_AXIS_04_ERROR,BOOL,,,,coil,2040,异常204-伺服轴04异常 +COIL_ALARM_205_SERVO_AXIS_05_ERROR,BOOL,,,,coil,2050,异常205-伺服轴05异常 +COIL_ALARM_206_SERVO_AXIS_06_ERROR,BOOL,,,,coil,2060,异常206-伺服轴06异常 +COIL_ALARM_207_SERVO_AXIS_07_ERROR,BOOL,,,,coil,2070,异常207-伺服轴07异常 +COIL_ALARM_208_SERVO_AXIS_08_ERROR,BOOL,,,,coil,2080,异常208-伺服轴08异常 +COIL_ALARM_209_SERVO_AXIS_09_ERROR,BOOL,,,,coil,2090,异常209-伺服轴09异常 +COIL_ALARM_210_SERVO_AXIS_10_ERROR,BOOL,,,,coil,2100,异常210-伺服轴10异常 +COIL_ALARM_211_SERVO_AXIS_11_ERROR,BOOL,,,,coil,2110,异常211-伺服轴11异常 +COIL_ALARM_212_SERVO_AXIS_12_ERROR,BOOL,,,,coil,2120,异常212-伺服轴12异常 +COIL_ALARM_213_SERVO_AXIS_13_ERROR,BOOL,,,,coil,2130,异常213-伺服轴13异常 +COIL_ALARM_214_SERVO_AXIS_14_ERROR,BOOL,,,,coil,2140,异常214-伺服轴14异常 +COIL_ALARM_250_OTHER_COMPONENT_ERROR,BOOL,,,,coil,2500,异常250-其他元件异常 +COIL_ALARM_251_PIPETTE_COMM_ERROR,BOOL,,,,coil,2510,异常251-移液枪通讯异常 +COIL_ALARM_252_PIPETTE_ALARM,BOOL,,,,coil,2520,异常252-移液枪报警 +COIL_ALARM_256_ELECTRIC_GRIPPER_ERROR,BOOL,,,,coil,2560,异常256-电爪异常 +COIL_ALARM_262_RB_UNKNOWN_POSITION_ERROR,BOOL,,,,coil,2620,异常262-RB报警:未知点位错误 +COIL_ALARM_263_RB_XYZ_PARAM_LIMIT_ERROR,BOOL,,,,coil,2630,异常263-RB报警:X、Y、Z参数超限制 +COIL_ALARM_264_RB_VISION_PARAM_ERROR,BOOL,,,,coil,2640,异常264-RB报警:视觉参数误差过大 +COIL_ALARM_265_RB_NOZZLE_1_PICK_FAIL,BOOL,,,,coil,2650,异常265-RB报警:1#吸嘴取料失败 +COIL_ALARM_266_RB_NOZZLE_2_PICK_FAIL,BOOL,,,,coil,2660,异常266-RB报警:2#吸嘴取料失败 +COIL_ALARM_267_RB_NOZZLE_3_PICK_FAIL,BOOL,,,,coil,2670,异常267-RB报警:3#吸嘴取料失败 +COIL_ALARM_268_RB_NOZZLE_4_PICK_FAIL,BOOL,,,,coil,2680,异常268-RB报警:4#吸嘴取料失败 +COIL_ALARM_269_RB_TRAY_PICK_FAIL,BOOL,,,,coil,2690,异常269-RB报警:取物料盘失败 +COIL_ALARM_280_RB_COLLISION_ERROR,BOOL,,,,coil,2800,异常280-RB碰撞异常 +COIL_ALARM_290_VISION_SYSTEM_COMM_ERROR,BOOL,,,,coil,2900,异常290-视觉系统通讯异常 +COIL_ALARM_291_VISION_ALIGNMENT_NG,BOOL,,,,coil,2910,异常291-视觉对位NG异常 +COIL_ALARM_292_BARCODE_SCANNER_COMM_ERROR,BOOL,,,,coil,2920,异常292-扫码枪通讯异常 +COIL_ALARM_310_OCV_TRANSFER_NOZZLE_SUCTION_ERROR,BOOL,,,,coil,3100,异常310-开电移载吸嘴吸真空异常 +COIL_ALARM_311_OCV_TRANSFER_NOZZLE_BREAK_ERROR,BOOL,,,,coil,3110,异常311-开电移载吸嘴破真空异常 +COIL_ALARM_312_WEIGHT_TRANSFER_NOZZLE_SUCTION_ERROR,BOOL,,,,coil,3120,异常312-称重移载吸嘴吸真空异常 +COIL_ALARM_313_WEIGHT_TRANSFER_NOZZLE_BREAK_ERROR,BOOL,,,,coil,3130,异常313-称重移载吸嘴破真空异常 +COIL_ALARM_340_OCV_NOZZLE_TRANSFER_CYLINDER_ERROR,BOOL,,,,coil,3400,异常340-开路电压吸嘴移载气缸异常 +COIL_ALARM_342_OCV_NOZZLE_LIFT_CYLINDER_ERROR,BOOL,,,,coil,3420,异常342-开路电压吸嘴升降气缸异常 +COIL_ALARM_344_OCV_CRIMPING_CYLINDER_ERROR,BOOL,,,,coil,3440,异常344-开路电压旋压气缸异常 +COIL_ALARM_350_WEIGHT_NOZZLE_TRANSFER_CYLINDER_ERROR,BOOL,,,,coil,3500,异常350-称重吸嘴移载气缸异常 +COIL_ALARM_352_WEIGHT_NOZZLE_LIFT_CYLINDER_ERROR,BOOL,,,,coil,3520,异常352-称重吸嘴升降气缸异常 +COIL_ALARM_354_CLEANING_CLOTH_TRANSFER_CYLINDER_ERROR,BOOL,,,,coil,3540,异常354-清洗无尘布移载气缸异常 +COIL_ALARM_356_CLEANING_CLOTH_PRESS_CYLINDER_ERROR,BOOL,,,,coil,3560,异常356-清洗无尘布压紧气缸异常 +COIL_ALARM_360_ELECTROLYTE_BOTTLE_POSITION_CYLINDER_ERROR,BOOL,,,,coil,3600,异常360-电解液瓶定位气缸异常 +COIL_ALARM_362_PIPETTE_TIP_BOX_POSITION_CYLINDER_ERROR,BOOL,,,,coil,3620,异常362-移液枪头盒定位气缸异常 +COIL_ALARM_364_REAGENT_BOTTLE_GRIPPER_LIFT_CYLINDER_ERROR,BOOL,,,,coil,3640,异常364-试剂瓶夹爪升降气缸异常 +COIL_ALARM_366_REAGENT_BOTTLE_GRIPPER_CYLINDER_ERROR,BOOL,,,,coil,3660,异常366-试剂瓶夹爪气缸异常 +COIL_ALARM_370_PRESS_MODULE_BLOW_CYLINDER_ERROR,BOOL,,,,coil,3700,异常370-压制模块吹气气缸异常 +COIL_ALARM_151_ELECTROLYTE_BOTTLE_POSITION_ERROR,BOOL,,,,coil,1510,异常151-电解液瓶定位在籍异常 +COIL_ALARM_152_ELECTROLYTE_BOTTLE_CAP_ERROR,BOOL,,,,coil,1520,异常152-电解液瓶盖在籍异常 diff --git a/unilabos/devices/workstation/coin_cell_assembly/new_cellconfig4.json b/unilabos/devices/workstation/coin_cell_assembly/new_cellconfig4.json deleted file mode 100644 index 7e371327..00000000 --- a/unilabos/devices/workstation/coin_cell_assembly/new_cellconfig4.json +++ /dev/null @@ -1,14472 +0,0 @@ -{ - "nodes": [ - { - "id": "BatteryStation", - "name": "扣电工作站", - "children": [ - "coin_cell_deck" - ], - "parent": null, - "type": "device", - "class": "bettery_station_registry", - "position": { - "x": 600, - "y": 400, - "z": 0 - }, - "config": { - "debug_mode": false, - "_comment": "protocol_type接外部工站固定写法字段,一般为空,deck写法也固定", - "protocol_type": [], - "deck": { - "data": { - "_resource_child_name": "coin_cell_deck", - "_resource_type": "unilabos.devices.workstation.coin_cell_assembly.button_battery_station:CoincellDeck" - } - }, - - "address": "192.168.1.20", - "port": 502 - }, - "data": {} - }, - { - "id": "coin_cell_deck", - "name": "coin_cell_deck", - "sample_id": null, - "children": [ - "zi_dan_jia", - "zi_dan_jia2", - "zi_dan_jia3", - "zi_dan_jia4", - "zi_dan_jia5", - "zi_dan_jia6", - "zi_dan_jia7", - "zi_dan_jia8", - "liaopan1", - "liaopan2", - "liaopan3", - "liaopan4", - "liaopan5", - "liaopan6", - "bottle_rack_3x4", - "bottle_rack_6x2", - "bottle_rack_6x2_2", - "tip_box_64", - "waste_tip_box" - ], - "parent": null, - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "CoincellDeck", - "size_x": 1620.0, - "size_y": 1270.0, - "size_z": 500.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "coin_cell_deck", - "barcode": null - }, - "data": {} - }, - { - "id": "zi_dan_jia", - "name": "zi_dan_jia", - "sample_id": null, - "children": [ - "zi_dan_jia_clipmagazinehole_0_0", - "zi_dan_jia_clipmagazinehole_0_1", - "zi_dan_jia_clipmagazinehole_1_0", - "zi_dan_jia_clipmagazinehole_1_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1400, - "y": 50, - "z": 0 - }, - "config": { - "type": "ClipMagazine_four", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_four", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia_clipmagazinehole_0_0", - "B1": "zi_dan_jia_clipmagazinehole_0_1", - "A2": "zi_dan_jia_clipmagazinehole_1_0", - "B2": "zi_dan_jia_clipmagazinehole_1_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia_clipmagazinehole_0_0", - "name": "zi_dan_jia_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia2_jipian_0" - ], - "parent": "zi_dan_jia", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia2_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia2_jipian_0", - "name": "zi_dan_jia2_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia_clipmagazinehole_0_1", - "name": "zi_dan_jia_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia2_jipian_1" - ], - "parent": "zi_dan_jia", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia2_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia2_jipian_1", - "name": "zi_dan_jia2_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia_clipmagazinehole_1_0", - "name": "zi_dan_jia_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia2_jipian_2" - ], - "parent": "zi_dan_jia", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia2_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia2_jipian_2", - "name": "zi_dan_jia2_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia_clipmagazinehole_1_1", - "name": "zi_dan_jia_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia2_jipian_3" - ], - "parent": "zi_dan_jia", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia2_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia2_jipian_3", - "name": "zi_dan_jia2_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia2", - "name": "zi_dan_jia2", - "sample_id": null, - "children": [ - "zi_dan_jia2_clipmagazinehole_0_0", - "zi_dan_jia2_clipmagazinehole_0_1", - "zi_dan_jia2_clipmagazinehole_1_0", - "zi_dan_jia2_clipmagazinehole_1_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1600, - "y": 200, - "z": 0 - }, - "config": { - "type": "ClipMagazine_four", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_four", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia2_clipmagazinehole_0_0", - "B1": "zi_dan_jia2_clipmagazinehole_0_1", - "A2": "zi_dan_jia2_clipmagazinehole_1_0", - "B2": "zi_dan_jia2_clipmagazinehole_1_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia2_clipmagazinehole_0_0", - "name": "zi_dan_jia2_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia_jipian_0" - ], - "parent": "zi_dan_jia2", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia2_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia_jipian_0", - "name": "zi_dan_jia_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia2_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia2_clipmagazinehole_0_1", - "name": "zi_dan_jia2_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia_jipian_1" - ], - "parent": "zi_dan_jia2", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia2_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia_jipian_1", - "name": "zi_dan_jia_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia2_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia2_clipmagazinehole_1_0", - "name": "zi_dan_jia2_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia_jipian_2" - ], - "parent": "zi_dan_jia2", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia2_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia_jipian_2", - "name": "zi_dan_jia_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia2_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia2_clipmagazinehole_1_1", - "name": "zi_dan_jia2_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia_jipian_3" - ], - "parent": "zi_dan_jia2", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia2_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia_jipian_3", - "name": "zi_dan_jia_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia2_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3", - "name": "zi_dan_jia3", - "sample_id": null, - "children": [ - "zi_dan_jia3_clipmagazinehole_0_0", - "zi_dan_jia3_clipmagazinehole_0_1", - "zi_dan_jia3_clipmagazinehole_1_0", - "zi_dan_jia3_clipmagazinehole_1_1", - "zi_dan_jia3_clipmagazinehole_2_0", - "zi_dan_jia3_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1500, - "y": 200, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia3_clipmagazinehole_0_0", - "B1": "zi_dan_jia3_clipmagazinehole_0_1", - "A2": "zi_dan_jia3_clipmagazinehole_1_0", - "B2": "zi_dan_jia3_clipmagazinehole_1_1", - "A3": "zi_dan_jia3_clipmagazinehole_2_0", - "B3": "zi_dan_jia3_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia3_clipmagazinehole_0_0", - "name": "zi_dan_jia3_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_0" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_0", - "name": "zi_dan_jia3_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3_clipmagazinehole_0_1", - "name": "zi_dan_jia3_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_1" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_1", - "name": "zi_dan_jia3_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3_clipmagazinehole_1_0", - "name": "zi_dan_jia3_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_2" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_2", - "name": "zi_dan_jia3_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3_clipmagazinehole_1_1", - "name": "zi_dan_jia3_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_3" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_3", - "name": "zi_dan_jia3_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3_clipmagazinehole_2_0", - "name": "zi_dan_jia3_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_4" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_4", - "name": "zi_dan_jia3_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia3_clipmagazinehole_2_1", - "name": "zi_dan_jia3_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia3_jipian_5" - ], - "parent": "zi_dan_jia3", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia3_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia3_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia3_jipian_5", - "name": "zi_dan_jia3_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia3_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4", - "name": "zi_dan_jia4", - "sample_id": null, - "children": [ - "zi_dan_jia4_clipmagazinehole_0_0", - "zi_dan_jia4_clipmagazinehole_0_1", - "zi_dan_jia4_clipmagazinehole_1_0", - "zi_dan_jia4_clipmagazinehole_1_1", - "zi_dan_jia4_clipmagazinehole_2_0", - "zi_dan_jia4_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1500, - "y": 300, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia4_clipmagazinehole_0_0", - "B1": "zi_dan_jia4_clipmagazinehole_0_1", - "A2": "zi_dan_jia4_clipmagazinehole_1_0", - "B2": "zi_dan_jia4_clipmagazinehole_1_1", - "A3": "zi_dan_jia4_clipmagazinehole_2_0", - "B3": "zi_dan_jia4_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia4_clipmagazinehole_0_0", - "name": "zi_dan_jia4_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_0" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_0", - "name": "zi_dan_jia4_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4_clipmagazinehole_0_1", - "name": "zi_dan_jia4_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_1" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_1", - "name": "zi_dan_jia4_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4_clipmagazinehole_1_0", - "name": "zi_dan_jia4_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_2" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_2", - "name": "zi_dan_jia4_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4_clipmagazinehole_1_1", - "name": "zi_dan_jia4_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_3" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_3", - "name": "zi_dan_jia4_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4_clipmagazinehole_2_0", - "name": "zi_dan_jia4_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_4" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_4", - "name": "zi_dan_jia4_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia4_clipmagazinehole_2_1", - "name": "zi_dan_jia4_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia4_jipian_5" - ], - "parent": "zi_dan_jia4", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia4_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia4_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia4_jipian_5", - "name": "zi_dan_jia4_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia4_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5", - "name": "zi_dan_jia5", - "sample_id": null, - "children": [ - "zi_dan_jia5_clipmagazinehole_0_0", - "zi_dan_jia5_clipmagazinehole_0_1", - "zi_dan_jia5_clipmagazinehole_1_0", - "zi_dan_jia5_clipmagazinehole_1_1", - "zi_dan_jia5_clipmagazinehole_2_0", - "zi_dan_jia5_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1600, - "y": 300, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia5_clipmagazinehole_0_0", - "B1": "zi_dan_jia5_clipmagazinehole_0_1", - "A2": "zi_dan_jia5_clipmagazinehole_1_0", - "B2": "zi_dan_jia5_clipmagazinehole_1_1", - "A3": "zi_dan_jia5_clipmagazinehole_2_0", - "B3": "zi_dan_jia5_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia5_clipmagazinehole_0_0", - "name": "zi_dan_jia5_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_0" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_0", - "name": "zi_dan_jia5_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5_clipmagazinehole_0_1", - "name": "zi_dan_jia5_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_1" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_1", - "name": "zi_dan_jia5_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5_clipmagazinehole_1_0", - "name": "zi_dan_jia5_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_2" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_2", - "name": "zi_dan_jia5_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5_clipmagazinehole_1_1", - "name": "zi_dan_jia5_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_3" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_3", - "name": "zi_dan_jia5_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5_clipmagazinehole_2_0", - "name": "zi_dan_jia5_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_4" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_4", - "name": "zi_dan_jia5_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia5_clipmagazinehole_2_1", - "name": "zi_dan_jia5_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia5_jipian_5" - ], - "parent": "zi_dan_jia5", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia5_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia5_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia5_jipian_5", - "name": "zi_dan_jia5_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia5_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6", - "name": "zi_dan_jia6", - "sample_id": null, - "children": [ - "zi_dan_jia6_clipmagazinehole_0_0", - "zi_dan_jia6_clipmagazinehole_0_1", - "zi_dan_jia6_clipmagazinehole_1_0", - "zi_dan_jia6_clipmagazinehole_1_1", - "zi_dan_jia6_clipmagazinehole_2_0", - "zi_dan_jia6_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1530, - "y": 500, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia6_clipmagazinehole_0_0", - "B1": "zi_dan_jia6_clipmagazinehole_0_1", - "A2": "zi_dan_jia6_clipmagazinehole_1_0", - "B2": "zi_dan_jia6_clipmagazinehole_1_1", - "A3": "zi_dan_jia6_clipmagazinehole_2_0", - "B3": "zi_dan_jia6_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia6_clipmagazinehole_0_0", - "name": "zi_dan_jia6_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_0" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_0", - "name": "zi_dan_jia6_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6_clipmagazinehole_0_1", - "name": "zi_dan_jia6_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_1" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_1", - "name": "zi_dan_jia6_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6_clipmagazinehole_1_0", - "name": "zi_dan_jia6_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_2" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_2", - "name": "zi_dan_jia6_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6_clipmagazinehole_1_1", - "name": "zi_dan_jia6_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_3" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_3", - "name": "zi_dan_jia6_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6_clipmagazinehole_2_0", - "name": "zi_dan_jia6_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_4" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_4", - "name": "zi_dan_jia6_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia6_clipmagazinehole_2_1", - "name": "zi_dan_jia6_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia6_jipian_5" - ], - "parent": "zi_dan_jia6", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia6_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia6_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia6_jipian_5", - "name": "zi_dan_jia6_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia6_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7", - "name": "zi_dan_jia7", - "sample_id": null, - "children": [ - "zi_dan_jia7_clipmagazinehole_0_0", - "zi_dan_jia7_clipmagazinehole_0_1", - "zi_dan_jia7_clipmagazinehole_1_0", - "zi_dan_jia7_clipmagazinehole_1_1", - "zi_dan_jia7_clipmagazinehole_2_0", - "zi_dan_jia7_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1180, - "y": 400, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia7_clipmagazinehole_0_0", - "B1": "zi_dan_jia7_clipmagazinehole_0_1", - "A2": "zi_dan_jia7_clipmagazinehole_1_0", - "B2": "zi_dan_jia7_clipmagazinehole_1_1", - "A3": "zi_dan_jia7_clipmagazinehole_2_0", - "B3": "zi_dan_jia7_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia7_clipmagazinehole_0_0", - "name": "zi_dan_jia7_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_0" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_0", - "name": "zi_dan_jia7_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7_clipmagazinehole_0_1", - "name": "zi_dan_jia7_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_1" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_1", - "name": "zi_dan_jia7_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7_clipmagazinehole_1_0", - "name": "zi_dan_jia7_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_2" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_2", - "name": "zi_dan_jia7_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7_clipmagazinehole_1_1", - "name": "zi_dan_jia7_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_3" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_3", - "name": "zi_dan_jia7_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7_clipmagazinehole_2_0", - "name": "zi_dan_jia7_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_4" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_4", - "name": "zi_dan_jia7_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia7_clipmagazinehole_2_1", - "name": "zi_dan_jia7_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia7_jipian_5" - ], - "parent": "zi_dan_jia7", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia7_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia7_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia7_jipian_5", - "name": "zi_dan_jia7_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia7_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8", - "name": "zi_dan_jia8", - "sample_id": null, - "children": [ - "zi_dan_jia8_clipmagazinehole_0_0", - "zi_dan_jia8_clipmagazinehole_0_1", - "zi_dan_jia8_clipmagazinehole_1_0", - "zi_dan_jia8_clipmagazinehole_1_1", - "zi_dan_jia8_clipmagazinehole_2_0", - "zi_dan_jia8_clipmagazinehole_2_1" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1280, - "y": 400, - "z": 0 - }, - "config": { - "type": "ClipMagazine", - "size_x": 80, - "size_y": 80, - "size_z": 10, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine", - "model": null, - "barcode": null, - "ordering": { - "A1": "zi_dan_jia8_clipmagazinehole_0_0", - "B1": "zi_dan_jia8_clipmagazinehole_0_1", - "A2": "zi_dan_jia8_clipmagazinehole_1_0", - "B2": "zi_dan_jia8_clipmagazinehole_1_1", - "A3": "zi_dan_jia8_clipmagazinehole_2_0", - "B3": "zi_dan_jia8_clipmagazinehole_2_1" - }, - "hole_diameter": 14.0, - "hole_depth": 10.0, - "max_sheets_per_hole": 100 - }, - "data": {} - }, - { - "id": "zi_dan_jia8_clipmagazinehole_0_0", - "name": "zi_dan_jia8_clipmagazinehole_0_0", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_0" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_0", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_0_0" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_0", - "name": "zi_dan_jia8_jipian_0", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8_clipmagazinehole_0_1", - "name": "zi_dan_jia8_clipmagazinehole_0_1", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_1" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 15.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_1", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_0_1" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_1", - "name": "zi_dan_jia8_jipian_1", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8_clipmagazinehole_1_0", - "name": "zi_dan_jia8_clipmagazinehole_1_0", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_2" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_2", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_1_0" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_2", - "name": "zi_dan_jia8_jipian_2", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8_clipmagazinehole_1_1", - "name": "zi_dan_jia8_clipmagazinehole_1_1", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_3" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 40.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_3", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_1_1" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_3", - "name": "zi_dan_jia8_jipian_3", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8_clipmagazinehole_2_0", - "name": "zi_dan_jia8_clipmagazinehole_2_0", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_4" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 52.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_4", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_2_0" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_4", - "name": "zi_dan_jia8_jipian_4", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "zi_dan_jia8_clipmagazinehole_2_1", - "name": "zi_dan_jia8_clipmagazinehole_2_1", - "sample_id": null, - "children": [ - "zi_dan_jia8_jipian_5" - ], - "parent": "zi_dan_jia8", - "type": "container", - "class": "", - "position": { - "x": 65.0, - "y": 27.5, - "z": 10 - }, - "config": { - "type": "ClipMagazineHole", - "size_x": 14.0, - "size_y": 14.0, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "clip_magazine_hole", - "model": null, - "barcode": null, - "max_volume": 1960.0, - "material_z_thickness": null, - "compute_volume_from_height": null, - "compute_height_from_volume": null - }, - "data": { - "sheet_count": 1, - "sheets": [ - { - "name": "zi_dan_jia8_jipian_5", - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "location": null, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null, - "children": [], - "parent_name": "zi_dan_jia8_clipmagazinehole_2_1" - } - ] - } - }, - { - "id": "zi_dan_jia8_jipian_5", - "name": "zi_dan_jia8_jipian_5", - "sample_id": null, - "children": [], - "parent": "zi_dan_jia8_clipmagazinehole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1", - "name": "liaopan1", - "sample_id": null, - "children": [ - "liaopan1_materialhole_0_0", - "liaopan1_materialhole_0_1", - "liaopan1_materialhole_0_2", - "liaopan1_materialhole_0_3", - "liaopan1_materialhole_1_0", - "liaopan1_materialhole_1_1", - "liaopan1_materialhole_1_2", - "liaopan1_materialhole_1_3", - "liaopan1_materialhole_2_0", - "liaopan1_materialhole_2_1", - "liaopan1_materialhole_2_2", - "liaopan1_materialhole_2_3", - "liaopan1_materialhole_3_0", - "liaopan1_materialhole_3_1", - "liaopan1_materialhole_3_2", - "liaopan1_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1010, - "y": 50, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan1_materialhole_0_0", - "B1": "liaopan1_materialhole_0_1", - "C1": "liaopan1_materialhole_0_2", - "D1": "liaopan1_materialhole_0_3", - "A2": "liaopan1_materialhole_1_0", - "B2": "liaopan1_materialhole_1_1", - "C2": "liaopan1_materialhole_1_2", - "D2": "liaopan1_materialhole_1_3", - "A3": "liaopan1_materialhole_2_0", - "B3": "liaopan1_materialhole_2_1", - "C3": "liaopan1_materialhole_2_2", - "D3": "liaopan1_materialhole_2_3", - "A4": "liaopan1_materialhole_3_0", - "B4": "liaopan1_materialhole_3_1", - "C4": "liaopan1_materialhole_3_2", - "D4": "liaopan1_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan1_materialhole_0_0", - "name": "liaopan1_materialhole_0_0", - "sample_id": null, - "children": [ - "liaopan1_jipian_0" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_0", - "name": "liaopan1_jipian_0", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_0_1", - "name": "liaopan1_materialhole_0_1", - "sample_id": null, - "children": [ - "liaopan1_jipian_1" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_1", - "name": "liaopan1_jipian_1", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_0_2", - "name": "liaopan1_materialhole_0_2", - "sample_id": null, - "children": [ - "liaopan1_jipian_2" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_2", - "name": "liaopan1_jipian_2", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_0_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_0_3", - "name": "liaopan1_materialhole_0_3", - "sample_id": null, - "children": [ - "liaopan1_jipian_3" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_3", - "name": "liaopan1_jipian_3", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_0_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_1_0", - "name": "liaopan1_materialhole_1_0", - "sample_id": null, - "children": [ - "liaopan1_jipian_4" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_4", - "name": "liaopan1_jipian_4", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_1_1", - "name": "liaopan1_materialhole_1_1", - "sample_id": null, - "children": [ - "liaopan1_jipian_5" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_5", - "name": "liaopan1_jipian_5", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_1_2", - "name": "liaopan1_materialhole_1_2", - "sample_id": null, - "children": [ - "liaopan1_jipian_6" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_6", - "name": "liaopan1_jipian_6", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_1_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_1_3", - "name": "liaopan1_materialhole_1_3", - "sample_id": null, - "children": [ - "liaopan1_jipian_7" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_7", - "name": "liaopan1_jipian_7", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_1_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_2_0", - "name": "liaopan1_materialhole_2_0", - "sample_id": null, - "children": [ - "liaopan1_jipian_8" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_8", - "name": "liaopan1_jipian_8", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_2_1", - "name": "liaopan1_materialhole_2_1", - "sample_id": null, - "children": [ - "liaopan1_jipian_9" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_9", - "name": "liaopan1_jipian_9", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_2_2", - "name": "liaopan1_materialhole_2_2", - "sample_id": null, - "children": [ - "liaopan1_jipian_10" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_10", - "name": "liaopan1_jipian_10", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_2_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_2_3", - "name": "liaopan1_materialhole_2_3", - "sample_id": null, - "children": [ - "liaopan1_jipian_11" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_11", - "name": "liaopan1_jipian_11", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_2_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_3_0", - "name": "liaopan1_materialhole_3_0", - "sample_id": null, - "children": [ - "liaopan1_jipian_12" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_12", - "name": "liaopan1_jipian_12", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_3_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_3_1", - "name": "liaopan1_materialhole_3_1", - "sample_id": null, - "children": [ - "liaopan1_jipian_13" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_13", - "name": "liaopan1_jipian_13", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_3_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_3_2", - "name": "liaopan1_materialhole_3_2", - "sample_id": null, - "children": [ - "liaopan1_jipian_14" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_14", - "name": "liaopan1_jipian_14", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_3_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan1_materialhole_3_3", - "name": "liaopan1_materialhole_3_3", - "sample_id": null, - "children": [ - "liaopan1_jipian_15" - ], - "parent": "liaopan1", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan1_jipian_15", - "name": "liaopan1_jipian_15", - "sample_id": null, - "children": [], - "parent": "liaopan1_materialhole_3_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan2", - "name": "liaopan2", - "sample_id": null, - "children": [ - "liaopan2_materialhole_0_0", - "liaopan2_materialhole_0_1", - "liaopan2_materialhole_0_2", - "liaopan2_materialhole_0_3", - "liaopan2_materialhole_1_0", - "liaopan2_materialhole_1_1", - "liaopan2_materialhole_1_2", - "liaopan2_materialhole_1_3", - "liaopan2_materialhole_2_0", - "liaopan2_materialhole_2_1", - "liaopan2_materialhole_2_2", - "liaopan2_materialhole_2_3", - "liaopan2_materialhole_3_0", - "liaopan2_materialhole_3_1", - "liaopan2_materialhole_3_2", - "liaopan2_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1130, - "y": 50, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan2_materialhole_0_0", - "B1": "liaopan2_materialhole_0_1", - "C1": "liaopan2_materialhole_0_2", - "D1": "liaopan2_materialhole_0_3", - "A2": "liaopan2_materialhole_1_0", - "B2": "liaopan2_materialhole_1_1", - "C2": "liaopan2_materialhole_1_2", - "D2": "liaopan2_materialhole_1_3", - "A3": "liaopan2_materialhole_2_0", - "B3": "liaopan2_materialhole_2_1", - "C3": "liaopan2_materialhole_2_2", - "D3": "liaopan2_materialhole_2_3", - "A4": "liaopan2_materialhole_3_0", - "B4": "liaopan2_materialhole_3_1", - "C4": "liaopan2_materialhole_3_2", - "D4": "liaopan2_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan2_materialhole_0_0", - "name": "liaopan2_materialhole_0_0", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_0_1", - "name": "liaopan2_materialhole_0_1", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_0_2", - "name": "liaopan2_materialhole_0_2", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_0_3", - "name": "liaopan2_materialhole_0_3", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_1_0", - "name": "liaopan2_materialhole_1_0", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_1_1", - "name": "liaopan2_materialhole_1_1", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_1_2", - "name": "liaopan2_materialhole_1_2", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_1_3", - "name": "liaopan2_materialhole_1_3", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_2_0", - "name": "liaopan2_materialhole_2_0", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_2_1", - "name": "liaopan2_materialhole_2_1", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_2_2", - "name": "liaopan2_materialhole_2_2", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_2_3", - "name": "liaopan2_materialhole_2_3", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_3_0", - "name": "liaopan2_materialhole_3_0", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_3_1", - "name": "liaopan2_materialhole_3_1", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_3_2", - "name": "liaopan2_materialhole_3_2", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan2_materialhole_3_3", - "name": "liaopan2_materialhole_3_3", - "sample_id": null, - "children": [], - "parent": "liaopan2", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3", - "name": "liaopan3", - "sample_id": null, - "children": [ - "liaopan3_materialhole_0_0", - "liaopan3_materialhole_0_1", - "liaopan3_materialhole_0_2", - "liaopan3_materialhole_0_3", - "liaopan3_materialhole_1_0", - "liaopan3_materialhole_1_1", - "liaopan3_materialhole_1_2", - "liaopan3_materialhole_1_3", - "liaopan3_materialhole_2_0", - "liaopan3_materialhole_2_1", - "liaopan3_materialhole_2_2", - "liaopan3_materialhole_2_3", - "liaopan3_materialhole_3_0", - "liaopan3_materialhole_3_1", - "liaopan3_materialhole_3_2", - "liaopan3_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1250, - "y": 50, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan3_materialhole_0_0", - "B1": "liaopan3_materialhole_0_1", - "C1": "liaopan3_materialhole_0_2", - "D1": "liaopan3_materialhole_0_3", - "A2": "liaopan3_materialhole_1_0", - "B2": "liaopan3_materialhole_1_1", - "C2": "liaopan3_materialhole_1_2", - "D2": "liaopan3_materialhole_1_3", - "A3": "liaopan3_materialhole_2_0", - "B3": "liaopan3_materialhole_2_1", - "C3": "liaopan3_materialhole_2_2", - "D3": "liaopan3_materialhole_2_3", - "A4": "liaopan3_materialhole_3_0", - "B4": "liaopan3_materialhole_3_1", - "C4": "liaopan3_materialhole_3_2", - "D4": "liaopan3_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan3_materialhole_0_0", - "name": "liaopan3_materialhole_0_0", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_0_1", - "name": "liaopan3_materialhole_0_1", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_0_2", - "name": "liaopan3_materialhole_0_2", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_0_3", - "name": "liaopan3_materialhole_0_3", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_1_0", - "name": "liaopan3_materialhole_1_0", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_1_1", - "name": "liaopan3_materialhole_1_1", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_1_2", - "name": "liaopan3_materialhole_1_2", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_1_3", - "name": "liaopan3_materialhole_1_3", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_2_0", - "name": "liaopan3_materialhole_2_0", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_2_1", - "name": "liaopan3_materialhole_2_1", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_2_2", - "name": "liaopan3_materialhole_2_2", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_2_3", - "name": "liaopan3_materialhole_2_3", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_3_0", - "name": "liaopan3_materialhole_3_0", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_3_1", - "name": "liaopan3_materialhole_3_1", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_3_2", - "name": "liaopan3_materialhole_3_2", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan3_materialhole_3_3", - "name": "liaopan3_materialhole_3_3", - "sample_id": null, - "children": [], - "parent": "liaopan3", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4", - "name": "liaopan4", - "sample_id": null, - "children": [ - "liaopan4_materialhole_0_0", - "liaopan4_materialhole_0_1", - "liaopan4_materialhole_0_2", - "liaopan4_materialhole_0_3", - "liaopan4_materialhole_1_0", - "liaopan4_materialhole_1_1", - "liaopan4_materialhole_1_2", - "liaopan4_materialhole_1_3", - "liaopan4_materialhole_2_0", - "liaopan4_materialhole_2_1", - "liaopan4_materialhole_2_2", - "liaopan4_materialhole_2_3", - "liaopan4_materialhole_3_0", - "liaopan4_materialhole_3_1", - "liaopan4_materialhole_3_2", - "liaopan4_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1010, - "y": 150, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan4_materialhole_0_0", - "B1": "liaopan4_materialhole_0_1", - "C1": "liaopan4_materialhole_0_2", - "D1": "liaopan4_materialhole_0_3", - "A2": "liaopan4_materialhole_1_0", - "B2": "liaopan4_materialhole_1_1", - "C2": "liaopan4_materialhole_1_2", - "D2": "liaopan4_materialhole_1_3", - "A3": "liaopan4_materialhole_2_0", - "B3": "liaopan4_materialhole_2_1", - "C3": "liaopan4_materialhole_2_2", - "D3": "liaopan4_materialhole_2_3", - "A4": "liaopan4_materialhole_3_0", - "B4": "liaopan4_materialhole_3_1", - "C4": "liaopan4_materialhole_3_2", - "D4": "liaopan4_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan4_materialhole_0_0", - "name": "liaopan4_materialhole_0_0", - "sample_id": null, - "children": [ - "liaopan4_jipian_0" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_0", - "name": "liaopan4_jipian_0", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_0_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_0_1", - "name": "liaopan4_materialhole_0_1", - "sample_id": null, - "children": [ - "liaopan4_jipian_1" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_1", - "name": "liaopan4_jipian_1", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_0_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_0_2", - "name": "liaopan4_materialhole_0_2", - "sample_id": null, - "children": [ - "liaopan4_jipian_2" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_2", - "name": "liaopan4_jipian_2", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_0_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_0_3", - "name": "liaopan4_materialhole_0_3", - "sample_id": null, - "children": [ - "liaopan4_jipian_3" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_3", - "name": "liaopan4_jipian_3", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_0_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_1_0", - "name": "liaopan4_materialhole_1_0", - "sample_id": null, - "children": [ - "liaopan4_jipian_4" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_4", - "name": "liaopan4_jipian_4", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_1_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_1_1", - "name": "liaopan4_materialhole_1_1", - "sample_id": null, - "children": [ - "liaopan4_jipian_5" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_5", - "name": "liaopan4_jipian_5", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_1_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_1_2", - "name": "liaopan4_materialhole_1_2", - "sample_id": null, - "children": [ - "liaopan4_jipian_6" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_6", - "name": "liaopan4_jipian_6", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_1_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_1_3", - "name": "liaopan4_materialhole_1_3", - "sample_id": null, - "children": [ - "liaopan4_jipian_7" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_7", - "name": "liaopan4_jipian_7", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_1_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_2_0", - "name": "liaopan4_materialhole_2_0", - "sample_id": null, - "children": [ - "liaopan4_jipian_8" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_8", - "name": "liaopan4_jipian_8", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_2_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_2_1", - "name": "liaopan4_materialhole_2_1", - "sample_id": null, - "children": [ - "liaopan4_jipian_9" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_9", - "name": "liaopan4_jipian_9", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_2_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_2_2", - "name": "liaopan4_materialhole_2_2", - "sample_id": null, - "children": [ - "liaopan4_jipian_10" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_10", - "name": "liaopan4_jipian_10", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_2_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_2_3", - "name": "liaopan4_materialhole_2_3", - "sample_id": null, - "children": [ - "liaopan4_jipian_11" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_11", - "name": "liaopan4_jipian_11", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_2_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_3_0", - "name": "liaopan4_materialhole_3_0", - "sample_id": null, - "children": [ - "liaopan4_jipian_12" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_12", - "name": "liaopan4_jipian_12", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_3_0", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_3_1", - "name": "liaopan4_materialhole_3_1", - "sample_id": null, - "children": [ - "liaopan4_jipian_13" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_13", - "name": "liaopan4_jipian_13", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_3_1", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_3_2", - "name": "liaopan4_materialhole_3_2", - "sample_id": null, - "children": [ - "liaopan4_jipian_14" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_14", - "name": "liaopan4_jipian_14", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_3_2", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan4_materialhole_3_3", - "name": "liaopan4_materialhole_3_3", - "sample_id": null, - "children": [ - "liaopan4_jipian_15" - ], - "parent": "liaopan4", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan4_jipian_15", - "name": "liaopan4_jipian_15", - "sample_id": null, - "children": [], - "parent": "liaopan4_materialhole_3_3", - "type": "container", - "class": "", - "position": { - "x": 0, - "y": 0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "liaopan5", - "name": "liaopan5", - "sample_id": null, - "children": [ - "liaopan5_materialhole_0_0", - "liaopan5_materialhole_0_1", - "liaopan5_materialhole_0_2", - "liaopan5_materialhole_0_3", - "liaopan5_materialhole_1_0", - "liaopan5_materialhole_1_1", - "liaopan5_materialhole_1_2", - "liaopan5_materialhole_1_3", - "liaopan5_materialhole_2_0", - "liaopan5_materialhole_2_1", - "liaopan5_materialhole_2_2", - "liaopan5_materialhole_2_3", - "liaopan5_materialhole_3_0", - "liaopan5_materialhole_3_1", - "liaopan5_materialhole_3_2", - "liaopan5_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1130, - "y": 150, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan5_materialhole_0_0", - "B1": "liaopan5_materialhole_0_1", - "C1": "liaopan5_materialhole_0_2", - "D1": "liaopan5_materialhole_0_3", - "A2": "liaopan5_materialhole_1_0", - "B2": "liaopan5_materialhole_1_1", - "C2": "liaopan5_materialhole_1_2", - "D2": "liaopan5_materialhole_1_3", - "A3": "liaopan5_materialhole_2_0", - "B3": "liaopan5_materialhole_2_1", - "C3": "liaopan5_materialhole_2_2", - "D3": "liaopan5_materialhole_2_3", - "A4": "liaopan5_materialhole_3_0", - "B4": "liaopan5_materialhole_3_1", - "C4": "liaopan5_materialhole_3_2", - "D4": "liaopan5_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan5_materialhole_0_0", - "name": "liaopan5_materialhole_0_0", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_0_1", - "name": "liaopan5_materialhole_0_1", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_0_2", - "name": "liaopan5_materialhole_0_2", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_0_3", - "name": "liaopan5_materialhole_0_3", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_1_0", - "name": "liaopan5_materialhole_1_0", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_1_1", - "name": "liaopan5_materialhole_1_1", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_1_2", - "name": "liaopan5_materialhole_1_2", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_1_3", - "name": "liaopan5_materialhole_1_3", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_2_0", - "name": "liaopan5_materialhole_2_0", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_2_1", - "name": "liaopan5_materialhole_2_1", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_2_2", - "name": "liaopan5_materialhole_2_2", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_2_3", - "name": "liaopan5_materialhole_2_3", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_3_0", - "name": "liaopan5_materialhole_3_0", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_3_1", - "name": "liaopan5_materialhole_3_1", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_3_2", - "name": "liaopan5_materialhole_3_2", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan5_materialhole_3_3", - "name": "liaopan5_materialhole_3_3", - "sample_id": null, - "children": [], - "parent": "liaopan5", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6", - "name": "liaopan6", - "sample_id": null, - "children": [ - "liaopan6_materialhole_0_0", - "liaopan6_materialhole_0_1", - "liaopan6_materialhole_0_2", - "liaopan6_materialhole_0_3", - "liaopan6_materialhole_1_0", - "liaopan6_materialhole_1_1", - "liaopan6_materialhole_1_2", - "liaopan6_materialhole_1_3", - "liaopan6_materialhole_2_0", - "liaopan6_materialhole_2_1", - "liaopan6_materialhole_2_2", - "liaopan6_materialhole_2_3", - "liaopan6_materialhole_3_0", - "liaopan6_materialhole_3_1", - "liaopan6_materialhole_3_2", - "liaopan6_materialhole_3_3" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 1250, - "y": 150, - "z": 0 - }, - "config": { - "type": "MaterialPlate", - "size_x": 120, - "size_y": 100, - "size_z": 10.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_plate", - "model": null, - "barcode": null, - "ordering": { - "A1": "liaopan6_materialhole_0_0", - "B1": "liaopan6_materialhole_0_1", - "C1": "liaopan6_materialhole_0_2", - "D1": "liaopan6_materialhole_0_3", - "A2": "liaopan6_materialhole_1_0", - "B2": "liaopan6_materialhole_1_1", - "C2": "liaopan6_materialhole_1_2", - "D2": "liaopan6_materialhole_1_3", - "A3": "liaopan6_materialhole_2_0", - "B3": "liaopan6_materialhole_2_1", - "C3": "liaopan6_materialhole_2_2", - "D3": "liaopan6_materialhole_2_3", - "A4": "liaopan6_materialhole_3_0", - "B4": "liaopan6_materialhole_3_1", - "C4": "liaopan6_materialhole_3_2", - "D4": "liaopan6_materialhole_3_3" - } - }, - "data": {} - }, - { - "id": "liaopan6_materialhole_0_0", - "name": "liaopan6_materialhole_0_0", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_0_1", - "name": "liaopan6_materialhole_0_1", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_0_2", - "name": "liaopan6_materialhole_0_2", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_0_3", - "name": "liaopan6_materialhole_0_3", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 12.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_1_0", - "name": "liaopan6_materialhole_1_0", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_1_1", - "name": "liaopan6_materialhole_1_1", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_1_2", - "name": "liaopan6_materialhole_1_2", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_1_3", - "name": "liaopan6_materialhole_1_3", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 36.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_2_0", - "name": "liaopan6_materialhole_2_0", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_2_1", - "name": "liaopan6_materialhole_2_1", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_2_2", - "name": "liaopan6_materialhole_2_2", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_2_3", - "name": "liaopan6_materialhole_2_3", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 60.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_3_0", - "name": "liaopan6_materialhole_3_0", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 74.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_3_1", - "name": "liaopan6_materialhole_3_1", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 50.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_3_2", - "name": "liaopan6_materialhole_3_2", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 26.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "liaopan6_materialhole_3_3", - "name": "liaopan6_materialhole_3_3", - "sample_id": null, - "children": [], - "parent": "liaopan6", - "type": "container", - "class": "", - "position": { - "x": 84.0, - "y": 2.0, - "z": 10.0 - }, - "config": { - "type": "MaterialHole", - "size_x": 16, - "size_y": 16, - "size_z": 16, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "material_hole", - "model": null, - "barcode": null - }, - "data": { - "diameter": 20, - "depth": 10, - "max_sheets": 1, - "info": null - } - }, - { - "id": "bottle_rack_3x4", - "name": "bottle_rack_3x4", - "sample_id": null, - "children": [ - "sheet_3x4_0", - "sheet_3x4_1", - "sheet_3x4_2", - "sheet_3x4_3", - "sheet_3x4_4", - "sheet_3x4_5", - "sheet_3x4_6", - "sheet_3x4_7", - "sheet_3x4_8", - "sheet_3x4_9", - "sheet_3x4_10", - "sheet_3x4_11" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 100, - "y": 200, - "z": 0 - }, - "config": { - "type": "BottleRack", - "size_x": 210.0, - "size_y": 140.0, - "size_z": 100.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "bottle_rack", - "model": null, - "barcode": null, - "num_items_x": 3, - "num_items_y": 4, - "position_spacing": 35.0, - "orientation": "vertical", - "padding_x": 20.0, - "padding_y": 20.0 - }, - "data": { - "bottle_diameter": 30.0, - "bottle_height": 100.0, - "position_spacing": 35.0, - "name_to_index": {} - } - }, - { - "id": "sheet_3x4_0", - "name": "sheet_3x4_0", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_1", - "name": "sheet_3x4_1", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_2", - "name": "sheet_3x4_2", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_3", - "name": "sheet_3x4_3", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_4", - "name": "sheet_3x4_4", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_5", - "name": "sheet_3x4_5", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_6", - "name": "sheet_3x4_6", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 90.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_7", - "name": "sheet_3x4_7", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 90.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_8", - "name": "sheet_3x4_8", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 90.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_9", - "name": "sheet_3x4_9", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 125.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_10", - "name": "sheet_3x4_10", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 125.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_3x4_11", - "name": "sheet_3x4_11", - "sample_id": null, - "children": [], - "parent": "bottle_rack_3x4", - "type": "container", - "class": "", - "position": { - "x": 125.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "bottle_rack_6x2", - "name": "bottle_rack_6x2", - "sample_id": null, - "children": [ - "sheet_6x2_0", - "sheet_6x2_1", - "sheet_6x2_2", - "sheet_6x2_3", - "sheet_6x2_4", - "sheet_6x2_5", - "sheet_6x2_6", - "sheet_6x2_7", - "sheet_6x2_8", - "sheet_6x2_9", - "sheet_6x2_10", - "sheet_6x2_11" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 300, - "y": 300, - "z": 0 - }, - "config": { - "type": "BottleRack", - "size_x": 120.0, - "size_y": 250.0, - "size_z": 100.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "bottle_rack", - "model": null, - "barcode": null, - "num_items_x": 6, - "num_items_y": 2, - "position_spacing": 35.0, - "orientation": "vertical", - "padding_x": 20.0, - "padding_y": 20.0 - }, - "data": { - "bottle_diameter": 30.0, - "bottle_height": 100.0, - "position_spacing": 35.0, - "name_to_index": {} - } - }, - { - "id": "sheet_6x2_0", - "name": "sheet_6x2_0", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_1", - "name": "sheet_6x2_1", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_2", - "name": "sheet_6x2_2", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_3", - "name": "sheet_6x2_3", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 125.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_4", - "name": "sheet_6x2_4", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 160.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_5", - "name": "sheet_6x2_5", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 20.0, - "y": 195.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_6", - "name": "sheet_6x2_6", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 20.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_7", - "name": "sheet_6x2_7", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 55.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_8", - "name": "sheet_6x2_8", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 90.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_9", - "name": "sheet_6x2_9", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 125.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_10", - "name": "sheet_6x2_10", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 160.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "sheet_6x2_11", - "name": "sheet_6x2_11", - "sample_id": null, - "children": [], - "parent": "bottle_rack_6x2", - "type": "container", - "class": "", - "position": { - "x": 55.0, - "y": 195.0, - "z": 0 - }, - "config": { - "type": "ElectrodeSheet", - "size_x": 12, - "size_y": 12, - "size_z": 0.1, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "electrode_sheet", - "model": null, - "barcode": null - }, - "data": { - "diameter": 14, - "thickness": 0.1, - "mass": 0.5, - "material_type": "copper", - "info": null - } - }, - { - "id": "bottle_rack_6x2_2", - "name": "bottle_rack_6x2_2", - "sample_id": null, - "children": [], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 430, - "y": 300, - "z": 0 - }, - "config": { - "type": "BottleRack", - "size_x": 120.0, - "size_y": 250.0, - "size_z": 100.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "bottle_rack", - "model": null, - "barcode": null, - "num_items_x": 6, - "num_items_y": 2, - "position_spacing": 35.0, - "orientation": "vertical", - "padding_x": 20.0, - "padding_y": 20.0 - }, - "data": { - "bottle_diameter": 30.0, - "bottle_height": 100.0, - "position_spacing": 35.0, - "name_to_index": {} - } - }, - { - "id": "tip_box_64", - "name": "tip_box_64", - "sample_id": null, - "children": [ - "tip_box_64_tipspot_0_0", - "tip_box_64_tipspot_0_1", - "tip_box_64_tipspot_0_2", - "tip_box_64_tipspot_0_3", - "tip_box_64_tipspot_0_4", - "tip_box_64_tipspot_0_5", - "tip_box_64_tipspot_0_6", - "tip_box_64_tipspot_0_7", - "tip_box_64_tipspot_1_0", - "tip_box_64_tipspot_1_1", - "tip_box_64_tipspot_1_2", - "tip_box_64_tipspot_1_3", - "tip_box_64_tipspot_1_4", - "tip_box_64_tipspot_1_5", - "tip_box_64_tipspot_1_6", - "tip_box_64_tipspot_1_7", - "tip_box_64_tipspot_2_0", - "tip_box_64_tipspot_2_1", - "tip_box_64_tipspot_2_2", - "tip_box_64_tipspot_2_3", - "tip_box_64_tipspot_2_4", - "tip_box_64_tipspot_2_5", - "tip_box_64_tipspot_2_6", - "tip_box_64_tipspot_2_7", - "tip_box_64_tipspot_3_0", - "tip_box_64_tipspot_3_1", - "tip_box_64_tipspot_3_2", - "tip_box_64_tipspot_3_3", - "tip_box_64_tipspot_3_4", - "tip_box_64_tipspot_3_5", - "tip_box_64_tipspot_3_6", - "tip_box_64_tipspot_3_7", - "tip_box_64_tipspot_4_0", - "tip_box_64_tipspot_4_1", - "tip_box_64_tipspot_4_2", - "tip_box_64_tipspot_4_3", - "tip_box_64_tipspot_4_4", - "tip_box_64_tipspot_4_5", - "tip_box_64_tipspot_4_6", - "tip_box_64_tipspot_4_7", - "tip_box_64_tipspot_5_0", - "tip_box_64_tipspot_5_1", - "tip_box_64_tipspot_5_2", - "tip_box_64_tipspot_5_3", - "tip_box_64_tipspot_5_4", - "tip_box_64_tipspot_5_5", - "tip_box_64_tipspot_5_6", - "tip_box_64_tipspot_5_7", - "tip_box_64_tipspot_6_0", - "tip_box_64_tipspot_6_1", - "tip_box_64_tipspot_6_2", - "tip_box_64_tipspot_6_3", - "tip_box_64_tipspot_6_4", - "tip_box_64_tipspot_6_5", - "tip_box_64_tipspot_6_6", - "tip_box_64_tipspot_6_7", - "tip_box_64_tipspot_7_0", - "tip_box_64_tipspot_7_1", - "tip_box_64_tipspot_7_2", - "tip_box_64_tipspot_7_3", - "tip_box_64_tipspot_7_4", - "tip_box_64_tipspot_7_5", - "tip_box_64_tipspot_7_6", - "tip_box_64_tipspot_7_7" - ], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 300, - "y": 100, - "z": 0 - }, - "config": { - "type": "TipBox64", - "size_x": 127.8, - "size_y": 85.5, - "size_z": 60.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_box_64", - "model": null, - "barcode": null, - "ordering": { - "A1": "tip_box_64_tipspot_0_0", - "B1": "tip_box_64_tipspot_0_1", - "C1": "tip_box_64_tipspot_0_2", - "D1": "tip_box_64_tipspot_0_3", - "E1": "tip_box_64_tipspot_0_4", - "F1": "tip_box_64_tipspot_0_5", - "G1": "tip_box_64_tipspot_0_6", - "H1": "tip_box_64_tipspot_0_7", - "A2": "tip_box_64_tipspot_1_0", - "B2": "tip_box_64_tipspot_1_1", - "C2": "tip_box_64_tipspot_1_2", - "D2": "tip_box_64_tipspot_1_3", - "E2": "tip_box_64_tipspot_1_4", - "F2": "tip_box_64_tipspot_1_5", - "G2": "tip_box_64_tipspot_1_6", - "H2": "tip_box_64_tipspot_1_7", - "A3": "tip_box_64_tipspot_2_0", - "B3": "tip_box_64_tipspot_2_1", - "C3": "tip_box_64_tipspot_2_2", - "D3": "tip_box_64_tipspot_2_3", - "E3": "tip_box_64_tipspot_2_4", - "F3": "tip_box_64_tipspot_2_5", - "G3": "tip_box_64_tipspot_2_6", - "H3": "tip_box_64_tipspot_2_7", - "A4": "tip_box_64_tipspot_3_0", - "B4": "tip_box_64_tipspot_3_1", - "C4": "tip_box_64_tipspot_3_2", - "D4": "tip_box_64_tipspot_3_3", - "E4": "tip_box_64_tipspot_3_4", - "F4": "tip_box_64_tipspot_3_5", - "G4": "tip_box_64_tipspot_3_6", - "H4": "tip_box_64_tipspot_3_7", - "A5": "tip_box_64_tipspot_4_0", - "B5": "tip_box_64_tipspot_4_1", - "C5": "tip_box_64_tipspot_4_2", - "D5": "tip_box_64_tipspot_4_3", - "E5": "tip_box_64_tipspot_4_4", - "F5": "tip_box_64_tipspot_4_5", - "G5": "tip_box_64_tipspot_4_6", - "H5": "tip_box_64_tipspot_4_7", - "A6": "tip_box_64_tipspot_5_0", - "B6": "tip_box_64_tipspot_5_1", - "C6": "tip_box_64_tipspot_5_2", - "D6": "tip_box_64_tipspot_5_3", - "E6": "tip_box_64_tipspot_5_4", - "F6": "tip_box_64_tipspot_5_5", - "G6": "tip_box_64_tipspot_5_6", - "H6": "tip_box_64_tipspot_5_7", - "A7": "tip_box_64_tipspot_6_0", - "B7": "tip_box_64_tipspot_6_1", - "C7": "tip_box_64_tipspot_6_2", - "D7": "tip_box_64_tipspot_6_3", - "E7": "tip_box_64_tipspot_6_4", - "F7": "tip_box_64_tipspot_6_5", - "G7": "tip_box_64_tipspot_6_6", - "H7": "tip_box_64_tipspot_6_7", - "A8": "tip_box_64_tipspot_7_0", - "B8": "tip_box_64_tipspot_7_1", - "C8": "tip_box_64_tipspot_7_2", - "D8": "tip_box_64_tipspot_7_3", - "E8": "tip_box_64_tipspot_7_4", - "F8": "tip_box_64_tipspot_7_5", - "G8": "tip_box_64_tipspot_7_6", - "H8": "tip_box_64_tipspot_7_7" - }, - "num_items_x": 8, - "num_items_y": 8, - "dx": 8.0, - "dy": 8.0, - "item_dx": 9.0, - "item_dy": 9.0 - }, - "data": {} - }, - { - "id": "tip_box_64_tipspot_0_0", - "name": "tip_box_64_tipspot_0_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_1", - "name": "tip_box_64_tipspot_0_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_2", - "name": "tip_box_64_tipspot_0_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_3", - "name": "tip_box_64_tipspot_0_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_4", - "name": "tip_box_64_tipspot_0_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_5", - "name": "tip_box_64_tipspot_0_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_6", - "name": "tip_box_64_tipspot_0_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_0_7", - "name": "tip_box_64_tipspot_0_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 8.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_0", - "name": "tip_box_64_tipspot_1_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_1", - "name": "tip_box_64_tipspot_1_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_2", - "name": "tip_box_64_tipspot_1_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_3", - "name": "tip_box_64_tipspot_1_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_4", - "name": "tip_box_64_tipspot_1_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_5", - "name": "tip_box_64_tipspot_1_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_6", - "name": "tip_box_64_tipspot_1_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_1_7", - "name": "tip_box_64_tipspot_1_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 17.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_0", - "name": "tip_box_64_tipspot_2_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_1", - "name": "tip_box_64_tipspot_2_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_2", - "name": "tip_box_64_tipspot_2_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_3", - "name": "tip_box_64_tipspot_2_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_4", - "name": "tip_box_64_tipspot_2_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_5", - "name": "tip_box_64_tipspot_2_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_6", - "name": "tip_box_64_tipspot_2_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_2_7", - "name": "tip_box_64_tipspot_2_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 26.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_0", - "name": "tip_box_64_tipspot_3_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_1", - "name": "tip_box_64_tipspot_3_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_2", - "name": "tip_box_64_tipspot_3_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_3", - "name": "tip_box_64_tipspot_3_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_4", - "name": "tip_box_64_tipspot_3_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_5", - "name": "tip_box_64_tipspot_3_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_6", - "name": "tip_box_64_tipspot_3_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_3_7", - "name": "tip_box_64_tipspot_3_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 35.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_0", - "name": "tip_box_64_tipspot_4_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_1", - "name": "tip_box_64_tipspot_4_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_2", - "name": "tip_box_64_tipspot_4_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_3", - "name": "tip_box_64_tipspot_4_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_4", - "name": "tip_box_64_tipspot_4_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_5", - "name": "tip_box_64_tipspot_4_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_6", - "name": "tip_box_64_tipspot_4_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_4_7", - "name": "tip_box_64_tipspot_4_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 44.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_0", - "name": "tip_box_64_tipspot_5_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_1", - "name": "tip_box_64_tipspot_5_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_2", - "name": "tip_box_64_tipspot_5_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_3", - "name": "tip_box_64_tipspot_5_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_4", - "name": "tip_box_64_tipspot_5_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_5", - "name": "tip_box_64_tipspot_5_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_6", - "name": "tip_box_64_tipspot_5_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_5_7", - "name": "tip_box_64_tipspot_5_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 53.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_0", - "name": "tip_box_64_tipspot_6_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_1", - "name": "tip_box_64_tipspot_6_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_2", - "name": "tip_box_64_tipspot_6_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_3", - "name": "tip_box_64_tipspot_6_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_4", - "name": "tip_box_64_tipspot_6_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_5", - "name": "tip_box_64_tipspot_6_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_6", - "name": "tip_box_64_tipspot_6_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_6_7", - "name": "tip_box_64_tipspot_6_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 62.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_0", - "name": "tip_box_64_tipspot_7_0", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 71.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_1", - "name": "tip_box_64_tipspot_7_1", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 62.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_2", - "name": "tip_box_64_tipspot_7_2", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 53.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_3", - "name": "tip_box_64_tipspot_7_3", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 44.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_4", - "name": "tip_box_64_tipspot_7_4", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 35.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_5", - "name": "tip_box_64_tipspot_7_5", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 26.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_6", - "name": "tip_box_64_tipspot_7_6", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 17.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "tip_box_64_tipspot_7_7", - "name": "tip_box_64_tipspot_7_7", - "sample_id": null, - "children": [], - "parent": "tip_box_64", - "type": "container", - "class": "", - "position": { - "x": 71.0, - "y": 8.0, - "z": 0.0 - }, - "config": { - "type": "TipSpot", - "size_x": 10, - "size_y": 10, - "size_z": 0.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "tip_spot", - "model": null, - "barcode": null, - "prototype_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - }, - "data": { - "tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - }, - "tip_state": { - "liquids": [], - "pending_liquids": [], - "liquid_history": [] - }, - "pending_tip": { - "type": "Tip", - "total_tip_length": 20.0, - "has_filter": false, - "maximal_volume": 1000, - "fitting_depth": 8.0 - } - } - }, - { - "id": "waste_tip_box", - "name": "waste_tip_box", - "sample_id": null, - "children": [], - "parent": "coin_cell_deck", - "type": "container", - "class": "", - "position": { - "x": 300, - "y": 200, - "z": 0 - }, - "config": { - "type": "WasteTipBox", - "size_x": 127.8, - "size_y": 85.5, - "size_z": 60.0, - "rotation": { - "x": 0, - "y": 0, - "z": 0, - "type": "Rotation" - }, - "category": "waste_tip_box", - "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": [] - } - } - ], - "links": [] -} \ No newline at end of file diff --git a/unilabos/devices/workstation/workstation_http_service.py b/unilabos/devices/workstation/workstation_http_service.py index 11d87693..82fb6cb5 100644 --- a/unilabos/devices/workstation/workstation_http_service.py +++ b/unilabos/devices/workstation/workstation_http_service.py @@ -459,12 +459,12 @@ class WorkstationHTTPHandler(BaseHTTPRequestHandler): # 验证必需字段 if 'brand' in request_data: if request_data['brand'] == "bioyond": # 奔曜 - error_msg = request_data["text"] - logger.info(f"收到奔曜错误处理报送: {error_msg}") + material_data = request_data["text"] + logger.info(f"收到奔曜物料变更报送: {material_data}") return HttpResponse( success=True, - message=f"错误处理报送已收到: {error_msg}", - acknowledgment_id=f"ERROR_{int(time.time() * 1000)}_{error_msg.get('action_id', 'unknown')}", + message=f"物料变更报送已收到: {material_data}", + acknowledgment_id=f"MATERIAL_{int(time.time() * 1000)}_{material_data.get('id', 'unknown')}", data=None ) else: diff --git a/unilabos/registry/devices/bioyond_cell.yaml b/unilabos/registry/devices/bioyond_cell.yaml new file mode 100644 index 00000000..9243e21e --- /dev/null +++ b/unilabos/registry/devices/bioyond_cell.yaml @@ -0,0 +1,847 @@ +bioyond_cell: + category: + - bioyond_cell + class: + action_value_mappings: + auto-auto_batch_outbound_from_xlsx: + feedback: {} + goal: {} + goal_default: + xlsx_path: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + xlsx_path: + type: string + required: + - xlsx_path + type: object + result: {} + required: + - goal + title: auto_batch_outbound_from_xlsx参数 + type: object + type: UniLabJsonCommand + auto-auto_feeding4to3: + feedback: {} + goal: {} + goal_default: + xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + xlsx_path: + default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/2025122301.xlsx + type: string + required: [] + type: object + result: {} + required: + - goal + title: auto_feeding4to3参数 + type: object + type: UniLabJsonCommand + auto-create_and_inbound_materials: + feedback: {} + goal: {} + goal_default: + material_names: null + type_id: 3a190ca0-b2f6-9aeb-8067-547e72c11469 + warehouse_name: 粉末加样头堆栈 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + material_names: + type: string + type_id: + default: 3a190ca0-b2f6-9aeb-8067-547e72c11469 + type: string + warehouse_name: + default: 粉末加样头堆栈 + type: string + required: [] + type: object + result: {} + required: + - goal + title: create_and_inbound_materials参数 + type: object + type: UniLabJsonCommand + auto-create_material: + feedback: {} + goal: {} + goal_default: + location_name_or_id: null + material_name: null + type_id: null + warehouse_name: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + location_name_or_id: + type: string + material_name: + type: string + type_id: + type: string + warehouse_name: + type: string + required: + - material_name + - type_id + - warehouse_name + type: object + result: {} + required: + - goal + title: create_material参数 + type: object + type: UniLabJsonCommand + auto-create_materials: + feedback: {} + goal: {} + goal_default: + mappings: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + mappings: + type: object + required: + - mappings + type: object + result: {} + required: + - goal + title: create_materials参数 + type: object + type: UniLabJsonCommand + auto-create_orders: + feedback: {} + goal: {} + goal_default: + xlsx_path: null + handles: + output: + - data_key: total_orders + data_source: executor + data_type: integer + handler_key: bottle_count + io_type: sink + label: 配液瓶数 + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + xlsx_path: + type: string + required: + - xlsx_path + type: object + result: {} + required: + - goal + title: create_orders参数 + type: object + type: UniLabJsonCommand + auto-create_orders_v2: + feedback: {} + goal: {} + goal_default: + xlsx_path: null + handles: + output: + - data_key: total_orders + data_source: executor + data_type: integer + handler_key: bottle_count + io_type: sink + label: 配液瓶数 + placeholder_keys: {} + result: {} + schema: + description: 从Excel解析并创建实验(V2版本) + properties: + feedback: {} + goal: + properties: + xlsx_path: + type: string + required: + - xlsx_path + type: object + result: {} + required: + - goal + title: create_orders_v2参数 + type: object + type: UniLabJsonCommand + auto-create_sample: + feedback: {} + goal: {} + goal_default: + board_type: null + bottle_type: null + location_code: null + name: null + warehouse_name: 手动堆栈 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + board_type: + type: string + bottle_type: + type: string + location_code: + type: string + name: + type: string + warehouse_name: + default: 手动堆栈 + type: string + required: + - name + - board_type + - bottle_type + - location_code + type: object + result: {} + required: + - goal + title: create_sample参数 + type: object + type: UniLabJsonCommand + auto-order_list_v2: + feedback: {} + goal: {} + goal_default: + beginTime: '' + endTime: '' + filter: '' + pageCount: 1 + skipCount: 0 + sorting: '' + status: '' + timeType: '' + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + beginTime: + default: '' + type: string + endTime: + default: '' + type: string + filter: + default: '' + type: string + pageCount: + default: 1 + type: integer + skipCount: + default: 0 + type: integer + sorting: + default: '' + type: string + status: + default: '' + type: string + timeType: + default: '' + type: string + required: [] + type: object + result: {} + required: + - goal + title: order_list_v2参数 + type: object + type: UniLabJsonCommand + auto-process_order_finish_report: + feedback: {} + goal: {} + goal_default: + report_request: null + used_materials: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + report_request: + type: string + used_materials: + type: string + required: + - report_request + type: object + result: {} + required: + - goal + title: process_order_finish_report参数 + type: object + type: UniLabJsonCommand + auto-process_sample_finish_report: + feedback: {} + goal: {} + goal_default: + report_request: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + report_request: + type: string + required: + - report_request + type: object + result: {} + required: + - goal + title: process_sample_finish_report参数 + type: object + type: UniLabJsonCommand + auto-process_step_finish_report: + feedback: {} + goal: {} + goal_default: + report_request: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + report_request: + type: string + required: + - report_request + type: object + result: {} + required: + - goal + title: process_step_finish_report参数 + type: object + type: UniLabJsonCommand + auto-report_material_change: + feedback: {} + goal: {} + goal_default: + material_obj: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + material_obj: + type: object + required: + - material_obj + type: object + result: {} + required: + - goal + title: report_material_change参数 + type: object + type: UniLabJsonCommand + auto-resource_tree_transfer: + feedback: {} + goal: {} + goal_default: + old_parent: null + parent_resource: null + plr_resource: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + old_parent: + type: object + parent_resource: + type: object + plr_resource: + type: object + required: + - old_parent + - plr_resource + - parent_resource + type: object + result: {} + required: + - goal + title: resource_tree_transfer参数 + type: object + type: UniLabJsonCommand + auto-scheduler_continue: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: scheduler_continue参数 + type: object + type: UniLabJsonCommand + auto-scheduler_reset: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: scheduler_reset参数 + type: object + type: UniLabJsonCommand + auto-scheduler_start: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: scheduler_start参数 + type: object + type: UniLabJsonCommand + auto-scheduler_start_and_auto_feeding: + feedback: {} + goal: {} + goal_default: + xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + handles: {} + placeholder_keys: {} + result: {} + schema: + description: 组合函数:先启动调度,然后执行自动化上料 + properties: + feedback: {} + goal: + properties: + xlsx_path: + default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + type: string + required: [] + type: object + result: {} + required: + - goal + title: scheduler_start_and_auto_feeding参数 + type: object + type: UniLabJsonCommand + auto-scheduler_start_and_auto_feeding_v2: + feedback: {} + goal: {} + goal_default: + xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + handles: {} + placeholder_keys: {} + result: {} + schema: + description: 组合函数V2版本(测试):先启动调度,然后执行自动化上料(使用非阻塞轮询等待) + properties: + feedback: {} + goal: + properties: + xlsx_path: + default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + type: string + required: [] + type: object + result: {} + required: + - goal + title: scheduler_start_and_auto_feeding_v2参数 + type: object + type: UniLabJsonCommand + auto-scheduler_stop: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: scheduler_stop参数 + type: object + type: UniLabJsonCommand + auto-storage_batch_inbound: + feedback: {} + goal: {} + goal_default: + items: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + items: + items: + type: object + type: array + required: + - items + type: object + result: {} + required: + - goal + title: storage_batch_inbound参数 + type: object + type: UniLabJsonCommand + auto-storage_inbound: + feedback: {} + goal: {} + goal_default: + location_id: null + material_id: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + location_id: + type: string + material_id: + type: string + required: + - material_id + - location_id + type: object + result: {} + required: + - goal + title: storage_inbound参数 + type: object + type: UniLabJsonCommand + auto-transfer_1_to_2: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: transfer_1_to_2参数 + type: object + type: UniLabJsonCommand + auto-transfer_3_to_2: + feedback: {} + goal: {} + goal_default: + source_wh_id: 3a19debc-84b4-0359-e2d4-b3beea49348b + source_x: 1 + source_y: 1 + source_z: 1 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: 3-2 物料转运,从3号位置转运到2号位置 + properties: + feedback: {} + goal: + properties: + source_wh_id: + default: 3a19debc-84b4-0359-e2d4-b3beea49348b + description: 来源仓库ID + type: string + source_x: + default: 1 + description: 来源位置X坐标 + type: integer + source_y: + default: 1 + description: 来源位置Y坐标 + type: integer + source_z: + default: 1 + description: 来源位置Z坐标 + type: integer + required: [] + type: object + result: {} + required: + - goal + title: transfer_3_to_2参数 + type: object + type: UniLabJsonCommand + auto-transfer_3_to_2_to_1: + feedback: {} + goal: {} + goal_default: + source_wh_id: 3a19debc-84b4-0359-e2d4-b3beea49348b + source_x: 1 + source_y: 1 + source_z: 1 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + source_wh_id: + default: 3a19debc-84b4-0359-e2d4-b3beea49348b + type: string + source_x: + default: 1 + type: integer + source_y: + default: 1 + type: integer + source_z: + default: 1 + type: integer + required: [] + type: object + result: {} + required: + - goal + title: transfer_3_to_2_to_1参数 + type: object + type: UniLabJsonCommand + auto-update_push_ip: + feedback: {} + goal: {} + goal_default: + ip: null + port: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + ip: + type: string + port: + type: string + required: [] + type: object + result: {} + required: + - goal + title: update_push_ip参数 + type: object + type: UniLabJsonCommand + auto-wait_for_order_finish: + feedback: {} + goal: {} + goal_default: + order_code: null + timeout: 36000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + order_code: + type: string + timeout: + default: 36000 + type: integer + required: + - order_code + type: object + result: {} + required: + - goal + title: wait_for_order_finish参数 + type: object + type: UniLabJsonCommand + auto-wait_for_transfer_task: + feedback: {} + goal: {} + goal_default: + filter_text: null + interval: 5 + timeout: 3000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + filter_text: + type: string + interval: + default: 5 + type: integer + timeout: + default: 3000 + type: integer + required: [] + type: object + result: {} + required: + - goal + title: wait_for_transfer_task参数 + type: object + type: UniLabJsonCommand + module: unilabos.devices.workstation.bioyond_studio.bioyond_cell.bioyond_cell_workstation:BioyondCellWorkstation + status_types: + device_id: String + type: python + config_info: [] + description: '' + handles: [] + icon: benyao2.webp + init_param_schema: + config: + properties: + config: + type: object + deck: + type: string + protocol_type: + type: string + required: [] + type: object + data: + properties: + device_id: + type: string + required: + - device_id + type: object + registry_type: device + version: 1.0.0 diff --git a/unilabos/registry/devices/bioyond_dispensing_station.yaml b/unilabos/registry/devices/bioyond_dispensing_station.yaml index 9ae76b7f..97b55cc1 100644 --- a/unilabos/registry/devices/bioyond_dispensing_station.yaml +++ b/unilabos/registry/devices/bioyond_dispensing_station.yaml @@ -5,229 +5,6 @@ bioyond_dispensing_station: - bioyond_dispensing_station class: action_value_mappings: - auto-brief_step_parameters: - feedback: {} - goal: {} - goal_default: - data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - data: - type: object - required: - - data - type: object - result: {} - required: - - goal - title: brief_step_parameters参数 - type: object - type: UniLabJsonCommand - auto-compute_experiment_design: - feedback: {} - goal: {} - goal_default: - m_tot: '70' - ratio: null - titration_percent: '0.03' - wt_percent: '0.25' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - m_tot: - default: '70' - type: string - ratio: - type: object - titration_percent: - default: '0.03' - type: string - wt_percent: - default: '0.25' - type: string - required: - - ratio - type: object - result: - properties: - feeding_order: - items: {} - title: Feeding Order - type: array - return_info: - title: Return Info - type: string - solutions: - items: {} - title: Solutions - type: array - solvents: - additionalProperties: true - title: Solvents - type: object - titration: - additionalProperties: true - title: Titration - type: object - required: - - solutions - - titration - - solvents - - feeding_order - - return_info - title: ComputeExperimentDesignReturn - type: object - required: - - goal - title: compute_experiment_design参数 - type: object - type: UniLabJsonCommand - auto-process_order_finish_report: - feedback: {} - goal: {} - goal_default: - report_request: null - used_materials: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - report_request: - type: string - used_materials: - type: string - required: - - report_request - - used_materials - type: object - result: {} - required: - - goal - title: process_order_finish_report参数 - type: object - type: UniLabJsonCommand - auto-project_order_report: - feedback: {} - goal: {} - goal_default: - order_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - order_id: - type: string - required: - - order_id - type: object - result: {} - required: - - goal - title: project_order_report参数 - type: object - type: UniLabJsonCommand - auto-query_resource_by_name: - feedback: {} - goal: {} - goal_default: - material_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - type: string - required: - - material_name - type: object - result: {} - required: - - goal - title: query_resource_by_name参数 - type: object - type: UniLabJsonCommand - auto-transfer_materials_to_reaction_station: - feedback: {} - goal: {} - goal_default: - target_device_id: null - transfer_groups: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - target_device_id: - type: string - transfer_groups: - type: array - required: - - target_device_id - - transfer_groups - type: object - result: {} - required: - - goal - title: transfer_materials_to_reaction_station参数 - type: object - type: UniLabJsonCommand - auto-workflow_sample_locations: - feedback: {} - goal: {} - goal_default: - workflow_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - workflow_id: - type: string - required: - - workflow_id - type: object - result: {} - required: - - goal - title: workflow_sample_locations参数 - type: object - type: UniLabJsonCommand batch_create_90_10_vial_feeding_tasks: feedback: {} goal: @@ -394,6 +171,99 @@ bioyond_dispensing_station: title: BatchCreateDiamineSolutionTasks type: object type: UniLabJsonCommand + compute_experiment_design: + feedback: {} + goal: + m_tot: m_tot + ratio: ratio + titration_percent: titration_percent + wt_percent: wt_percent + goal_default: + m_tot: '70' + ratio: '' + titration_percent: '0.03' + wt_percent: '0.25' + handles: + output: + - data_key: solutions + data_source: executor + data_type: array + handler_key: solutions + io_type: sink + label: Solution Data From Python + - data_key: titration + data_source: executor + data_type: object + handler_key: titration + io_type: sink + label: Titration Data From Calculation Node + - data_key: solvents + data_source: executor + data_type: object + handler_key: solvents + io_type: sink + label: Solvents Data From Calculation Node + - data_key: feeding_order + data_source: executor + data_type: array + handler_key: feeding_order + io_type: sink + label: Feeding Order Data From Calculation Node + result: + feeding_order: feeding_order + return_info: return_info + solutions: solutions + solvents: solvents + titration: titration + schema: + description: 计算实验设计,输出solutions/titration/solvents/feeding_order用于后续节点。 + properties: + feedback: {} + goal: + properties: + m_tot: + default: '70' + description: 总质量(g) + type: string + ratio: + description: 组分摩尔比的对象,保持输入顺序,如{"MDA":1,"BTDA":1} + type: string + titration_percent: + default: '0.03' + description: 滴定比例(10%部分) + type: string + wt_percent: + default: '0.25' + description: 目标固含质量分数 + type: string + required: + - ratio + type: object + result: + properties: + feeding_order: + type: array + return_info: + type: string + solutions: + type: array + solvents: + type: object + titration: + type: object + required: + - solutions + - titration + - solvents + - feeding_order + - return_info + title: ComputeExperimentDesign_Result + type: object + required: + - goal + title: ComputeExperimentDesign + type: object + type: UniLabJsonCommand create_90_10_vial_feeding_task: feedback: {} goal: @@ -620,6 +490,89 @@ bioyond_dispensing_station: title: DispenStationSolnPrep type: object type: DispenStationSolnPrep + scheduler_start: + feedback: {} + goal: {} + goal_default: {} + handles: {} + result: + return_info: return_info + schema: + description: 启动调度器 - 启动Bioyond配液站的任务调度器,开始执行队列中的任务 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: + properties: + return_info: + description: 调度器启动结果,成功返回1,失败返回0 + type: integer + required: + - return_info + title: scheduler_start结果 + type: object + required: + - goal + title: scheduler_start参数 + type: object + type: UniLabJsonCommand + transfer_materials_to_reaction_station: + feedback: {} + goal: + target_device_id: target_device_id + transfer_groups: transfer_groups + goal_default: + target_device_id: '' + transfer_groups: '' + handles: {} + placeholder_keys: + target_device_id: unilabos_devices + result: {} + schema: + description: 将配液站完成的物料(溶液、样品等)转移到指定反应站的堆栈库位。支持配置多组转移任务,每组包含物料名称、目标堆栈和目标库位。 + properties: + feedback: {} + goal: + properties: + target_device_id: + description: 目标反应站设备ID(从设备列表中选择,所有转移组都使用同一个目标设备) + type: string + transfer_groups: + description: 转移任务组列表,每组包含物料名称、目标堆栈和目标库位,可以添加多组 + items: + properties: + materials: + description: 物料名称(手动输入,系统将通过RPC查询验证) + type: string + target_sites: + description: 目标库位(手动输入,如"A01") + type: string + target_stack: + description: 目标堆栈名称(从列表选择) + enum: + - 堆栈1左 + - 堆栈1右 + - 站内试剂存放堆栈 + type: string + required: + - materials + - target_stack + - target_sites + type: object + type: array + required: + - target_device_id + - transfer_groups + type: object + result: {} + required: + - goal + title: transfer_materials_to_reaction_station参数 + type: object + type: UniLabJsonCommand wait_for_multiple_orders_and_get_reports: feedback: {} goal: @@ -688,7 +641,7 @@ bioyond_dispensing_station: title: WaitForMultipleOrdersAndGetReports type: object type: UniLabJsonCommand - module: unilabos.devices.workstation.bioyond_studio.dispensing_station:BioyondDispensingStation + module: unilabos.devices.workstation.bioyond_studio.dispensing_station.dispensing_station:BioyondDispensingStation status_types: {} type: python config_info: [] @@ -699,15 +652,16 @@ bioyond_dispensing_station: config: properties: config: - type: string + type: object deck: type: string - required: - - config - - deck + protocol_type: + type: string + required: [] type: object data: properties: {} required: [] type: object + model: {} version: 1.0.0 diff --git a/unilabos/registry/devices/coin_cell_workstation.yaml b/unilabos/registry/devices/coin_cell_workstation.yaml new file mode 100644 index 00000000..c8a671a7 --- /dev/null +++ b/unilabos/registry/devices/coin_cell_workstation.yaml @@ -0,0 +1,850 @@ +coincellassemblyworkstation_device: + category: + - coin_cell_workstation + class: + action_value_mappings: + auto-change_hole_sheet_to_2: + feedback: {} + goal: {} + goal_default: + hole: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + hole: + type: object + required: + - hole + type: object + result: {} + required: + - goal + title: change_hole_sheet_to_2参数 + type: object + type: UniLabJsonCommandAsync + auto-fill_plate: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: fill_plate参数 + type: object + type: UniLabJsonCommandAsync + auto-fun_wuliao_test: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: fun_wuliao_test参数 + type: object + type: UniLabJsonCommand + auto-func_allpack_cmd: + feedback: {} + goal: {} + goal_default: + assembly_pressure: 4200 + assembly_type: 7 + elec_num: null + elec_use_num: null + elec_vol: 50 + file_path: /Users/sml/work + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + assembly_pressure: + default: 4200 + type: integer + assembly_type: + default: 7 + type: integer + elec_num: + type: string + elec_use_num: + type: string + elec_vol: + default: 50 + type: integer + file_path: + default: /Users/sml/work + type: string + required: + - elec_num + - elec_use_num + type: object + result: {} + required: + - goal + title: func_allpack_cmd参数 + type: object + type: UniLabJsonCommand + auto-func_allpack_cmd_simp: + feedback: {} + goal: {} + goal_default: + assembly_pressure: 4200 + assembly_type: 7 + battery_clean_ignore: false + battery_pressure_mode: true + dual_drop_first_volume: 25 + dual_drop_mode: false + dual_drop_start_timing: false + dual_drop_suction_timing: false + elec_num: null + elec_use_num: null + elec_vol: 50 + file_path: /Users/sml/work + fujipian_juzhendianwei: 0 + fujipian_panshu: 0 + gemo_juzhendianwei: 0 + gemopanshu: 0 + lvbodian: true + qiangtou_juzhendianwei: 0 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: 简化版电池组装函数,整合了参数设置和双滴模式 + properties: + feedback: {} + goal: + properties: + assembly_pressure: + default: 4200 + description: 电池压制力(N) + type: integer + assembly_type: + default: 7 + description: 组装类型(7=不用铝箔垫, 8=使用铝箔垫) + type: integer + battery_clean_ignore: + default: false + description: 是否忽略电池清洁步骤 + type: boolean + battery_pressure_mode: + default: true + description: 是否启用压力模式 + type: boolean + dual_drop_first_volume: + default: 25 + description: 二次滴液第一次排液体积(μL) + type: integer + dual_drop_mode: + default: false + description: 电解液添加模式(false=单次滴液, true=二次滴液) + type: boolean + dual_drop_start_timing: + default: false + description: 二次滴液开始滴液时机(false=正极片前, true=正极片后) + type: boolean + dual_drop_suction_timing: + default: false + description: 二次滴液吸液时机(false=正常吸液, true=先吸液) + type: boolean + elec_num: + description: 电解液瓶数 + type: string + elec_use_num: + description: 每瓶电解液组装电池数 + type: string + elec_vol: + default: 50 + description: 电解液吸液量(μL) + type: integer + file_path: + default: /Users/sml/work + description: 实验记录保存路径 + type: string + fujipian_juzhendianwei: + default: 0 + description: 负极片矩阵点位。盘位置从1开始计数,有效范围:1-8, 13-20 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + fujipian_panshu: + default: 0 + description: 负极片盘数 + type: integer + gemo_juzhendianwei: + default: 0 + description: 隔膜矩阵点位。盘位置从1开始计数,有效范围:1-8, 13-20 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + gemopanshu: + default: 0 + description: 隔膜盘数 + type: integer + lvbodian: + default: true + description: 是否使用铝箔垫片 + type: boolean + qiangtou_juzhendianwei: + default: 0 + description: 枪头盒矩阵点位。盘位置从1开始计数,有效范围:1-32, 64-96 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + required: + - elec_num + - elec_use_num + type: object + result: {} + required: + - goal + title: func_allpack_cmd_simp参数 + type: object + type: UniLabJsonCommand + auto-func_get_csv_export_status: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_get_csv_export_status参数 + type: object + type: UniLabJsonCommand + auto-func_pack_device_auto: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_pack_device_auto参数 + type: object + type: UniLabJsonCommand + auto-func_pack_device_init: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_pack_device_init参数 + type: object + type: UniLabJsonCommand + auto-func_pack_device_init_auto_start_combined: + feedback: {} + goal: {} + goal_default: + material_search_enable: false + handles: {} + placeholder_keys: {} + result: {} + schema: + description: 组合函数:设备初始化 + 物料搜寻确认 + 切换自动模式 + 启动。初始化过程中会自动检测物料搜寻确认弹窗,并根据参数自动点击"是"或"否"按钮 + properties: + feedback: {} + goal: + properties: + material_search_enable: + default: false + description: 是否启用物料搜寻功能。设备初始化后会弹出物料搜寻确认弹窗,此参数控制自动点击"是"(启用)或"否"(不启用)。默认为false(不启用物料搜寻) + type: boolean + required: [] + type: object + result: {} + required: + - goal + title: func_pack_device_init_auto_start_combined参数 + type: object + type: UniLabJsonCommand + auto-func_pack_device_start: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_pack_device_start参数 + type: object + type: UniLabJsonCommand + auto-func_pack_device_stop: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_pack_device_stop参数 + type: object + type: UniLabJsonCommand + auto-func_pack_get_msg_cmd: + feedback: {} + goal: {} + goal_default: + file_path: D:\coin_cell_data + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + file_path: + default: D:\coin_cell_data + type: string + required: [] + type: object + result: {} + required: + - goal + title: func_pack_get_msg_cmd参数 + type: object + type: UniLabJsonCommand + auto-func_pack_send_bottle_num: + feedback: {} + goal: {} + goal_default: + bottle_num: null + handles: + input: + - data_key: bottle_num + data_source: workflow + data_type: integer + handler_key: bottle_count + io_type: source + label: 配液瓶数 + required: true + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + bottle_num: + type: integer + required: + - bottle_num + type: object + result: {} + required: + - goal + title: func_pack_send_bottle_num参数 + type: object + type: UniLabJsonCommand + auto-func_pack_send_finished_cmd: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_pack_send_finished_cmd参数 + type: object + type: UniLabJsonCommand + auto-func_pack_send_msg_cmd: + feedback: {} + goal: {} + goal_default: + assembly_pressure: null + assembly_type: null + elec_use_num: null + elec_vol: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + assembly_pressure: + type: string + assembly_type: + type: string + elec_use_num: + type: string + elec_vol: + type: string + required: + - elec_use_num + - elec_vol + - assembly_type + - assembly_pressure + type: object + result: {} + required: + - goal + title: func_pack_send_msg_cmd参数 + type: object + type: UniLabJsonCommand + auto-func_read_data_and_output: + feedback: {} + goal: {} + goal_default: + file_path: /Users/sml/work + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + file_path: + default: /Users/sml/work + type: string + required: [] + type: object + result: {} + required: + - goal + title: func_read_data_and_output参数 + type: object + type: UniLabJsonCommand + auto-func_sendbottle_allpack_multi: + feedback: {} + goal: {} + goal_default: + assembly_pressure: 4200 + assembly_type: 7 + battery_clean_ignore: false + battery_pressure_mode: true + dual_drop_first_volume: 25 + dual_drop_mode: false + dual_drop_start_timing: false + dual_drop_suction_timing: false + elec_num: null + elec_use_num: null + elec_vol: 50 + file_path: /Users/sml/work + fujipian_juzhendianwei: 0 + fujipian_panshu: 0 + gemo_juzhendianwei: 0 + gemopanshu: 0 + lvbodian: true + qiangtou_juzhendianwei: 0 + handles: + input: + - data_key: elec_num + data_source: workflow + data_type: integer + handler_key: bottle_count + io_type: source + label: 配液瓶数 + required: true + placeholder_keys: {} + result: {} + schema: + description: 发送瓶数+简化组装函数(适用于第二批次及后续批次),合并了发送瓶数和简化组装流程 + properties: + feedback: {} + goal: + properties: + assembly_pressure: + default: 4200 + description: 电池压制力(N) + type: integer + assembly_type: + default: 7 + description: 组装类型(7=不用铝箔垫, 8=使用铝箔垫) + type: integer + battery_clean_ignore: + default: false + description: 是否忽略电池清洁步骤 + type: boolean + battery_pressure_mode: + default: true + description: 是否启用压力模式 + type: boolean + dual_drop_first_volume: + default: 25 + description: 二次滴液第一次排液体积(μL) + type: integer + dual_drop_mode: + default: false + description: 电解液添加模式(false=单次滴液, true=二次滴液) + type: boolean + dual_drop_start_timing: + default: false + description: 二次滴液开始滴液时机(false=正极片前, true=正极片后) + type: boolean + dual_drop_suction_timing: + default: false + description: 二次滴液吸液时机(false=正常吸液, true=先吸液) + type: boolean + elec_num: + description: 电解液瓶数,如果在workflow中已通过handles连接上游(create_orders的bottle_count输出),则此参数会自动从上游获取,无需手动填写;如果单独使用此函数(没有上游连接),则必须手动填写电解液瓶数 + type: string + elec_use_num: + description: 每瓶电解液组装电池数 + type: string + elec_vol: + default: 50 + description: 电解液吸液量(μL) + type: integer + file_path: + default: /Users/sml/work + description: 实验记录保存路径 + type: string + fujipian_juzhendianwei: + default: 0 + description: 负极片矩阵点位。盘位置从1开始计数,有效范围:1-8, 13-20 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + fujipian_panshu: + default: 0 + description: 负极片盘数 + type: integer + gemo_juzhendianwei: + default: 0 + description: 隔膜矩阵点位。盘位置从1开始计数,有效范围:1-8, 13-20 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + gemopanshu: + default: 0 + description: 隔膜盘数 + type: integer + lvbodian: + default: true + description: 是否使用铝箔垫片 + type: boolean + qiangtou_juzhendianwei: + default: 0 + description: 枪头盒矩阵点位。盘位置从1开始计数,有效范围:1-32, 64-96 (写入值比实际位置少1,例如:写0取盘位1,写1取盘位2) + type: integer + required: + - elec_num + - elec_use_num + type: object + result: {} + required: + - goal + title: func_sendbottle_allpack_multi参数 + type: object + type: UniLabJsonCommand + auto-func_stop_read_data: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: func_stop_read_data参数 + type: object + type: UniLabJsonCommand + auto-modify_deck_name: + feedback: {} + goal: {} + goal_default: + resource_name: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + resource_name: + type: string + required: + - resource_name + type: object + result: {} + required: + - goal + title: modify_deck_name参数 + type: object + type: UniLabJsonCommand + auto-post_init: + feedback: {} + goal: {} + goal_default: + ros_node: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + ros_node: + type: object + required: + - ros_node + type: object + result: {} + required: + - goal + title: post_init参数 + type: object + type: UniLabJsonCommand + auto-qiming_coin_cell_code: + feedback: {} + goal: {} + goal_default: + battery_clean_ignore: false + battery_pressure: 4000 + battery_pressure_mode: true + fujipian_juzhendianwei: 0 + fujipian_panshu: null + gemo_juzhendianwei: 0 + gemopanshu: 0 + lvbodian: true + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + battery_clean_ignore: + default: false + type: boolean + battery_pressure: + default: 4000 + type: integer + battery_pressure_mode: + default: true + type: boolean + fujipian_juzhendianwei: + default: 0 + type: integer + fujipian_panshu: + type: integer + gemo_juzhendianwei: + default: 0 + type: integer + gemopanshu: + default: 0 + type: integer + lvbodian: + default: true + type: boolean + required: + - fujipian_panshu + type: object + result: {} + required: + - goal + title: qiming_coin_cell_code参数 + type: object + type: UniLabJsonCommand + module: unilabos.devices.workstation.coin_cell_assembly.coin_cell_assembly:CoinCellAssemblyWorkstation + status_types: + data_assembly_coin_cell_num: int + data_assembly_pressure: int + data_assembly_time: float + data_axis_x_pos: float + data_axis_y_pos: float + data_axis_z_pos: float + data_coin_cell_code: str + data_coin_num: int + data_electrolyte_code: str + data_electrolyte_volume: int + data_glove_box_o2_content: float + data_glove_box_pressure: float + data_glove_box_water_content: float + data_open_circuit_voltage: float + data_pole_weight: float + request_rec_msg_status: bool + request_send_msg_status: bool + sys_mode: str + sys_status: str + type: python + config_info: [] + description: '' + handles: [] + icon: koudian.webp + init_param_schema: + config: + properties: + address: + default: 172.16.28.102 + type: string + config: + type: object + debug_mode: + default: false + type: boolean + deck: + type: string + port: + default: '502' + type: string + required: [] + type: object + data: + properties: + data_assembly_coin_cell_num: + type: integer + data_assembly_pressure: + type: integer + data_assembly_time: + type: number + data_axis_x_pos: + type: number + data_axis_y_pos: + type: number + data_axis_z_pos: + type: number + data_coin_cell_code: + type: string + data_coin_num: + type: integer + data_electrolyte_code: + type: string + data_electrolyte_volume: + type: integer + data_glove_box_o2_content: + type: number + data_glove_box_pressure: + type: number + data_glove_box_water_content: + type: number + data_open_circuit_voltage: + type: number + data_pole_weight: + type: number + request_rec_msg_status: + type: boolean + request_send_msg_status: + type: boolean + sys_mode: + type: string + sys_status: + type: string + required: + - sys_status + - sys_mode + - request_rec_msg_status + - request_send_msg_status + - data_assembly_coin_cell_num + - data_assembly_time + - data_open_circuit_voltage + - data_axis_x_pos + - data_axis_y_pos + - data_axis_z_pos + - data_pole_weight + - data_assembly_pressure + - data_electrolyte_volume + - data_coin_num + - data_coin_cell_code + - data_electrolyte_code + - data_glove_box_pressure + - data_glove_box_o2_content + - data_glove_box_water_content + type: object + registry_type: device + version: 1.0.0 diff --git a/unilabos/registry/devices/reaction_station_bioyond.yaml b/unilabos/registry/devices/reaction_station_bioyond.yaml index b7d10a60..cf46d7ef 100644 --- a/unilabos/registry/devices/reaction_station_bioyond.yaml +++ b/unilabos/registry/devices/reaction_station_bioyond.yaml @@ -4,213 +4,88 @@ reaction_station.bioyond: - reaction_station_bioyond class: action_value_mappings: - auto-create_order: + add_time_constraint: feedback: {} - goal: {} + goal: + duration: duration + end_point: end_point + end_step_key: end_step_key + start_point: start_point + start_step_key: start_step_key goal_default: - json_str: null + duration: 0 + end_point: 0 + end_step_key: '' + start_point: 0 + start_step_key: '' handles: {} - placeholder_keys: {} result: {} schema: - description: '' + description: 添加时间约束 - 在两个工作流之间添加时间约束 properties: feedback: {} goal: properties: - json_str: - type: string - required: - - json_str - type: object - result: {} - required: - - goal - title: create_order参数 - type: object - type: UniLabJsonCommand - auto-hard_delete_merged_workflows: - feedback: {} - goal: {} - goal_default: - workflow_ids: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - workflow_ids: - items: - type: string - type: array - required: - - workflow_ids - type: object - result: {} - required: - - goal - title: hard_delete_merged_workflows参数 - type: object - type: UniLabJsonCommand - auto-merge_workflow_with_parameters: - feedback: {} - goal: {} - goal_default: - json_str: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - json_str: - type: string - required: - - json_str - type: object - result: {} - required: - - goal - title: merge_workflow_with_parameters参数 - type: object - type: UniLabJsonCommand - auto-process_temperature_cutoff_report: - feedback: {} - goal: {} - goal_default: - report_request: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - report_request: - type: string - required: - - report_request - type: object - result: {} - required: - - goal - title: process_temperature_cutoff_report参数 - type: object - type: UniLabJsonCommand - auto-process_web_workflows: - feedback: {} - goal: {} - goal_default: - web_workflow_json: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - web_workflow_json: - type: string - required: - - web_workflow_json - type: object - result: {} - required: - - goal - title: process_web_workflows参数 - type: object - type: UniLabJsonCommand - auto-skip_titration_steps: - feedback: {} - goal: {} - goal_default: - preintake_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - preintake_id: - type: string - required: - - preintake_id - type: object - result: {} - required: - - goal - title: skip_titration_steps参数 - type: object - type: UniLabJsonCommand - auto-wait_for_multiple_orders_and_get_reports: - feedback: {} - goal: {} - goal_default: - batch_create_result: null - check_interval: 10 - timeout: 7200 - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_create_result: - type: string - check_interval: - default: 10 - type: integer - timeout: - default: 7200 + duration: + description: 时间(秒) type: integer + end_point: + default: Start + description: 终点计时点 (Start=开始前, End=结束后) + enum: + - Start + - End + type: string + end_step_key: + description: 终点步骤Key (可选, 默认为空则自动选择) + type: string + start_point: + default: Start + description: 起点计时点 (Start=开始前, End=结束后) + enum: + - Start + - End + type: string + start_step_key: + description: 起点步骤Key (例如 "feeding", "liquid", 可选, 默认为空则自动选择) + type: string + required: + - duration + type: object + result: {} + required: + - goal + title: add_time_constraint参数 + type: object + type: UniLabJsonCommand + clean_all_server_workflows: + feedback: {} + goal: {} + goal_default: {} + handles: {} + result: + code: code + message: message + schema: + description: 清空服务端所有非核心工作流 (保留核心流程) + properties: + feedback: {} + goal: + properties: {} required: [] type: object - result: {} - required: - - goal - title: wait_for_multiple_orders_and_get_reports参数 - type: object - type: UniLabJsonCommand - auto-workflow_step_query: - feedback: {} - goal: {} - goal_default: - workflow_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: + result: properties: - workflow_id: + code: + description: 操作结果代码(1表示成功) + type: integer + message: + description: 结果描述 type: string - required: - - workflow_id type: object - result: {} required: - goal - title: workflow_step_query参数 + title: clean_all_server_workflows参数 type: object type: UniLabJsonCommand drip_back: @@ -247,13 +122,19 @@ reaction_station.bioyond: description: 观察时间(分钟) type: string titration_type: - description: 是否滴定(1=否, 2=是) + description: 是否滴定(NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string torque_variation: - description: 是否观察 (1=否, 2=是) + description: 是否观察 (NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string volume: - description: 分液公式(μL) + description: 分液公式(mL) type: string required: - volume @@ -353,13 +234,19 @@ reaction_station.bioyond: description: 观察时间(分钟) type: string titration_type: - description: 是否滴定(1=否, 2=是) + description: 是否滴定(NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string torque_variation: - description: 是否观察 (1=否, 2=是) + description: 是否观察 (NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string volume: - description: 分液公式(μL) + description: 分液公式(mL) type: string required: - volume @@ -403,7 +290,7 @@ reaction_station.bioyond: label: Solvents Data From Calculation Node result: {} schema: - description: 液体投料-溶剂。可以直接提供volume(μL),或通过solvents对象自动从additional_solvent(mL)计算volume。 + description: 液体投料-溶剂。可以直接提供volume(mL),或通过solvents对象自动从additional_solvent(mL)计算volume。 properties: feedback: {} goal: @@ -423,15 +310,21 @@ reaction_station.bioyond: description: 观察时间(分钟),默认360 type: string titration_type: - default: '1' - description: 是否滴定(1=否, 2=是),默认1 + default: 'NO' + description: 是否滴定(NO=否, YES=是),默认NO + enum: + - 'NO' + - 'YES' type: string torque_variation: - default: '2' - description: 是否观察 (1=否, 2=是),默认2 + default: 'YES' + description: 是否观察 (NO=否, YES=是),默认YES + enum: + - 'NO' + - 'YES' type: string volume: - description: 分液量(μL)。可直接提供,或通过solvents参数自动计算 + description: 分液量(mL)。可直接提供,或通过solvents参数自动计算 type: string required: - assign_material_name @@ -504,15 +397,21 @@ reaction_station.bioyond: description: 观察时间(分钟),默认90 type: string titration_type: - default: '2' - description: 是否滴定(1=否, 2=是),默认2 + default: 'YES' + description: 是否滴定(NO=否, YES=是),默认YES + enum: + - 'NO' + - 'YES' type: string torque_variation: - default: '2' - description: 是否观察 (1=否, 2=是),默认2 + default: 'YES' + description: 是否观察 (NO=否, YES=是),默认YES + enum: + - 'NO' + - 'YES' type: string volume_formula: - description: 分液公式(μL)。可直接提供固定公式,或留空由系统根据x_value、feeding_order_data、extracted_actuals自动生成 + description: 分液公式(mL)。可直接提供固定公式,或留空由系统根据x_value、feeding_order_data、extracted_actuals自动生成 type: string x_value: description: 公式中的x值,手工输入,格式为"{{1-2-3}}"(包含双花括号)。用于自动公式计算 @@ -560,13 +459,19 @@ reaction_station.bioyond: description: 观察时间(分钟) type: string titration_type: - description: 是否滴定(1=否, 2=是) + description: 是否滴定(NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string torque_variation: - description: 是否观察 (1=否, 2=是) + description: 是否观察 (NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string volume_formula: - description: 分液公式(μL) + description: 分液公式(mL) type: string required: - volume_formula @@ -680,6 +585,35 @@ reaction_station.bioyond: title: reactor_taken_out参数 type: object type: UniLabJsonCommand + scheduler_start: + feedback: {} + goal: {} + goal_default: {} + handles: {} + result: + return_info: return_info + schema: + description: 启动调度器 - 启动Bioyond工作站的任务调度器,开始执行队列中的任务 + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: + properties: + return_info: + description: 调度器启动结果,成功返回1,失败返回0 + type: integer + required: + - return_info + title: scheduler_start结果 + type: object + required: + - goal + title: scheduler_start参数 + type: object + type: UniLabJsonCommand solid_feeding_vials: feedback: {} goal: @@ -706,7 +640,11 @@ reaction_station.bioyond: description: 物料名称(用于获取试剂瓶位ID) type: string material_id: - description: 粉末类型ID,1=盐(21分钟),2=面粉(27分钟),3=BTDA(38分钟) + description: 粉末类型ID,Salt=盐(21分钟),Flour=面粉(27分钟),BTDA=BTDA(38分钟) + enum: + - Salt + - Flour + - BTDA type: string temperature: description: 温度设定(°C) @@ -715,7 +653,10 @@ reaction_station.bioyond: description: 观察时间(分钟) type: string torque_variation: - description: 是否观察 (1=否, 2=是) + description: 是否观察 (NO=否, YES=是) + enum: + - 'NO' + - 'YES' type: string required: - assign_material_name @@ -730,9 +671,19 @@ reaction_station.bioyond: title: solid_feeding_vials参数 type: object type: UniLabJsonCommand - module: unilabos.devices.workstation.bioyond_studio.reaction_station:BioyondReactionStation + module: unilabos.devices.workstation.bioyond_studio.reaction_station.reaction_station:BioyondReactionStation protocol_type: [] status_types: + average_viscosity: Float64 + force: Float64 + in_temperature: Float64 + out_temperature: Float64 + pt100_temperature: Float64 + sensor_average_temperature: Float64 + setting_temperature: Float64 + speed: Float64 + target_temperature: Float64 + viscosity: Float64 workflow_sequence: String type: python config_info: [] @@ -765,34 +716,19 @@ reaction_station.reactor: - reactor - reaction_station_bioyond class: - action_value_mappings: - auto-update_metrics: - feedback: {} - goal: {} - goal_default: - payload: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - payload: - type: object - required: - - payload - type: object - result: {} - required: - - goal - title: update_metrics参数 - type: object - type: UniLabJsonCommand - module: unilabos.devices.workstation.bioyond_studio.reaction_station:BioyondReactor - status_types: {} + action_value_mappings: {} + module: unilabos.devices.workstation.bioyond_studio.reaction_station.reaction_station:BioyondReactor + status_types: + average_viscosity: Float64 + force: Float64 + in_temperature: Float64 + out_temperature: Float64 + pt100_temperature: Float64 + sensor_average_temperature: Float64 + setting_temperature: Float64 + speed: Float64 + target_temperature: Float64 + viscosity: Float64 type: python config_info: [] description: 反应站子设备-反应器 diff --git a/unilabos/registry/resources/bioyond/README_RESOURCE_ARCHITECTURE.md b/unilabos/registry/resources/bioyond/README_RESOURCE_ARCHITECTURE.md new file mode 100644 index 00000000..cc84ef78 --- /dev/null +++ b/unilabos/registry/resources/bioyond/README_RESOURCE_ARCHITECTURE.md @@ -0,0 +1,170 @@ +# UniLabOS 资源注册架构详解 + +> **目标受众**: 主要开发 `unilabos/registry/devices` 抽象层的开发者 +> **最后更新**: 2026-01-11 +> **维护者**: Uni-Lab-OS 开发团队 + +本文档详细说明 UniLabOS 资源注册系统的架构、资源的完整生命周期,以及如何实现动态物料位置追踪。 + +--- + +## 📚 目录 + +- [核心概念](#核心概念) +- [三层架构详解](#三层架构详解) +- [资源注册机制](#资源注册机制) +- [物料生命周期管理](#物料生命周期管理) +- [动态物料位置追踪](#动态物料位置追踪) +- [实战案例](#实战案例) +- [常见问题排查](#常见问题排查) + +--- + +## 核心概念 + +### 1. Resources vs Registry + +UniLabOS 采用**声明式注册**模式,将资源的**定义**(Python)与**注册信息**(YAML)分离: + +``` +┌──────────────────────────────────────────────────────────┐ +│ unilabos/resources (Python 实现) │ +│ - 定义资源的物理属性、行为和创建逻辑 │ +│ - 例如: 瓶子的尺寸、容量、材质 │ +├──────────────────────────────────────────────────────────┤ +│ unilabos/registry/resources (YAML 注册表) │ +│ - 声明哪些资源可以被前端使用 │ +│ - 定义资源的分类、图标、初始化参数 │ +└──────────────────────────────────────────────────────────┘ +``` + +**为什么要分离?** + +1. **解耦**: Python 代码可以定义无限多的资源类,但只有在 YAML 中注册的才能被前端识别 +2. **灵活性**: 无需修改 Python 代码,只需修改 YAML 就能添加/移除可用资源 +3. **可扩展性**: 第三方开发者可以通过 YAML 注册自己的资源,无需修改核心代码 + +--- + +## 三层架构详解 + +UniLabOS 资源系统采用**三层架构**,实现从前端UI到底层硬件的完整映射: + +### 架构图 + +``` +┌─────────────────────────────────────────────────────┐ +│ 第1层: YAML 注册表 (registry/resources) │ +│ - 告诉系统"哪些资源可用" │ +│ - 前端通过此层获取可用资源列表 │ +│ - 文件: YB_bottle.yaml, YB_bottle_carriers.yaml │ +├─────────────────────────────────────────────────────┤ +│ 第2层: Python 实现 (resources/bioyond) │ +│ - 定义资源的具体属性和行为 │ +│ - 创建资源实例的工厂函数 │ +│ - 文件: YB_bottles.py, YB_bottle_carriers.py │ +├─────────────────────────────────────────────────────┤ +│ 第3层: Hardware/API 集成 (devices/workstation) │ +│ - 连接 Bioyond 系统 API │ +│ - 同步物料位置和状态 │ +│ - 文件: station.py, bioyond_rpc.py, config.py │ +└─────────────────────────────────────────────────────┘ +``` + +### 第1层: YAML 注册表 + +#### YB_bottle.yaml - 单个瓶子注册 + +```yaml +YB_5ml_fenyeping: + category: + - yb3 # 系统分类 + - YB_bottle # 资源类型 + class: + module: unilabos.resources.bioyond.YB_bottles:YB_5ml_fenyeping # Python 函数路径 + type: pylabrobot # 框架类型 + description: YB_5ml_fenyeping # 前端显示名称 + handles: [] + icon: '' # 图标路径 + init_param_schema: {} # 初始化参数 schema + registry_type: resource + version: 1.0.0 +``` + +**作用:** +- 前端通过读取此文件知道有一个叫 "YB_5ml_fenyeping" 的资源 +- 用户拖拽时,系统会调用 `YB_bottles:YB_5ml_fenyeping()` 创建实例 + +#### YB_bottle_carriers.yaml - 载架(容器)注册 + +```yaml +YB_5ml_fenyepingban: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_5ml_fenyepingban + type: pylabrobot + description: YB_5ml_fenyepingban # 5ml分液瓶板 +``` + +**作用:** +- 载架是容器,里面可以放多个瓶子 +- 例如: `YB_5ml_fenyepingban` 是一个 4x2 布局的板,可以放 8 个 5ml 瓶子 + +### 第2层: Python 实现 + +#### YB_bottles.py - 瓶子工厂函数 + +```python +def YB_5ml_fenyeping( + name: str, + diameter: float = 20.0, # 直径 (mm) + height: float = 50.0, # 高度 (mm) + max_volume: float = 5000.0, # 最大容量 (μL) + barcode: str = None, +) -> Bottle: + \"\"\"创建5ml分液瓶\"\"\" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_5ml_fenyeping", # ⭐ 与 YAML 中的名称对应 + ) +``` + +**关键点:** +- 函数名 `YB_5ml_fenyeping` 必须与 YAML 中的 `module` 路径末尾一致 +- 返回一个 `Bottle` 对象(PyLabRobot 资源类型) +- `model` 字段用于在 Bioyond 系统中识别资源类型 + +**详细文档请参考完整版 README** + +--- + +## 相关文件索引 + +### 核心文件 + +| 文件 | 功能 | 路径 | +|------|------|------| +| `YB_bottle.yaml` | 瓶子注册表 | `unilabos/registry/resources/bioyond/` | +| `YB_bottle_carriers.yaml` | 载架注册表 | `unilabos/registry/resources/bioyond/` | +| `deck.yaml` | Deck注册表 | `unilabos/registry/resources/bioyond/` | +| `YB_bottles.py` | 瓶子实现 | `unilabos/resources/bioyond/` | +| `YB_bottle_carriers.py` | 载架实现 | `unilabos/resources/bioyond/` | +| `YB_warehouses.py` | 仓库实现 | `unilabos/resources/bioyond/` | +| `decks.py` | Deck布局 | `unilabos/resources/bioyond/` | +| `station.py` | 物料同步 | `unilabos/devices/workstation/bioyond_studio/` | +| `config.py` | UUID映射 | `unilabos/devices/workstation/bioyond_studio/` | + +### 仓库相关文档 + +- [README_WAREHOUSE.md](../../resources/bioyond/README_WAREHOUSE.md) - 仓库系统开发指南 + +--- + +**维护者:** Uni-Lab-OS 开发团队 +**最后更新:** 2026-01-11 diff --git a/unilabos/registry/resources/bioyond/YB_bottle.yaml b/unilabos/registry/resources/bioyond/YB_bottle.yaml new file mode 100644 index 00000000..f8e17261 --- /dev/null +++ b/unilabos/registry/resources/bioyond/YB_bottle.yaml @@ -0,0 +1,92 @@ +YB_20ml_fenyeping: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_20ml_fenyeping + type: pylabrobot + description: YB_20ml_fenyeping + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_5ml_fenyeping: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_5ml_fenyeping + type: pylabrobot + description: YB_5ml_fenyeping + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_jia_yang_tou_da: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_jia_yang_tou_da + type: pylabrobot + description: YB_jia_yang_tou_da + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_pei_ye_da_Bottle: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_pei_ye_da_Bottle + type: pylabrobot + description: YB_pei_ye_da_Bottle + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_pei_ye_xiao_Bottle: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_pei_ye_xiao_Bottle + type: pylabrobot + description: YB_pei_ye_xiao_Bottle + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_qiang_tou: + category: + - yb3 + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_qiang_tou + type: pylabrobot + description: YB_qiang_tou + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_ye_Bottle: + category: + - yb3 + - YB_bottle_carriers + - YB_bottle + class: + module: unilabos.resources.bioyond.YB_bottles:YB_ye_Bottle + type: pylabrobot + description: YB_ye_Bottle + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml b/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml new file mode 100644 index 00000000..4698a266 --- /dev/null +++ b/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml @@ -0,0 +1,182 @@ +YB_100ml_yeti: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_100ml_yeti + type: pylabrobot + description: YB_100ml_yeti + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_20ml_fenyepingban: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_20ml_fenyepingban + type: pylabrobot + description: YB_20ml_fenyepingban + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_5ml_fenyepingban: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_5ml_fenyepingban + type: pylabrobot + description: YB_5ml_fenyepingban + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_6StockCarrier: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_6StockCarrier + type: pylabrobot + description: YB_6StockCarrier + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_6VialCarrier: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_6VialCarrier + type: pylabrobot + description: YB_6VialCarrier + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_gao_nian_ye_Bottle: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottles:YB_gao_nian_ye_Bottle + type: pylabrobot + description: YB_gao_nian_ye_Bottle + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_gaonianye: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_gaonianye + type: pylabrobot + description: YB_gaonianye + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_jia_yang_tou_da_Carrier: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_jia_yang_tou_da_Carrier + type: pylabrobot + description: YB_jia_yang_tou_da_Carrier + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_peiyepingdaban: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_peiyepingdaban + type: pylabrobot + description: YB_peiyepingdaban + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_peiyepingxiaoban: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_peiyepingxiaoban + type: pylabrobot + description: YB_peiyepingxiaoban + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_qiang_tou_he: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_qiang_tou_he + type: pylabrobot + description: YB_qiang_tou_he + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_shi_pei_qi_kuai: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_shi_pei_qi_kuai + type: pylabrobot + description: YB_shi_pei_qi_kuai + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_ye: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottle_carriers:YB_ye + type: pylabrobot + description: YB_ye_Bottle_Carrier + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 +YB_ye_100ml_Bottle: + category: + - yb3 + - YB_bottle_carriers + class: + module: unilabos.resources.bioyond.YB_bottles:YB_ye_100ml_Bottle + type: pylabrobot + description: YB_ye_100ml_Bottle + handles: [] + icon: '' + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/registry/resources/bioyond/bottles.yaml b/unilabos/registry/resources/bioyond/bottles.yaml index 79aa712b..ecc5525d 100644 --- a/unilabos/registry/resources/bioyond/bottles.yaml +++ b/unilabos/registry/resources/bioyond/bottles.yaml @@ -20,6 +20,17 @@ BIOYOND_PolymerStation_Liquid_Vial: icon: '' init_param_schema: {} version: 1.0.0 +BIOYOND_PolymerStation_Measurement_Vial: + category: + - bottles + class: + module: unilabos.resources.bioyond.bottles:BIOYOND_PolymerStation_Measurement_Vial + type: pylabrobot + description: 聚合站-测量小瓶(测密度) + handles: [] + icon: '' + init_param_schema: {} + version: 1.0.0 BIOYOND_PolymerStation_Reactor: category: - bottles diff --git a/unilabos/registry/resources/bioyond/deck.yaml b/unilabos/registry/resources/bioyond/deck.yaml index bc158508..8d6993b1 100644 --- a/unilabos/registry/resources/bioyond/deck.yaml +++ b/unilabos/registry/resources/bioyond/deck.yaml @@ -22,15 +22,27 @@ BIOYOND_PolymerReactionStation_Deck: init_param_schema: {} registry_type: resource version: 1.0.0 -YB_Deck11: +BIOYOND_YB_Deck: category: - deck class: module: unilabos.resources.bioyond.decks:YB_Deck type: pylabrobot - description: BIOYOND PolymerReactionStation Deck + description: BIOYOND ElectrolyteFormulationStation Deck handles: [] icon: 配液站.webp init_param_schema: {} registry_type: resource version: 1.0.0 +CoincellDeck: + category: + - deck + class: + module: unilabos.devices.workstation.coin_cell_assembly.YB_YH_materials:YH_Deck + type: pylabrobot + description: YIHUA CoinCellAssembly Deck + handles: [] + icon: koudian.webp + init_param_schema: {} + registry_type: resource + version: 1.0.0 diff --git a/unilabos/resources/battery/__init__.py b/unilabos/resources/battery/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/unilabos/resources/battery/bottle_carriers.py b/unilabos/resources/battery/bottle_carriers.py new file mode 100644 index 00000000..9d9827cd --- /dev/null +++ b/unilabos/resources/battery/bottle_carriers.py @@ -0,0 +1,56 @@ +from pylabrobot.resources import create_homogeneous_resources, Coordinate, ResourceHolder, create_ordered_items_2d + +from unilabos.resources.itemized_carrier import Bottle, BottleCarrier +from unilabos.resources.bioyond.YB_bottles import ( + YB_pei_ye_xiao_Bottle, +) +# 命名约定:试剂瓶-Bottle,烧杯-Beaker,烧瓶-Flask,小瓶-Vial + + +def YIHUA_Electrolyte_12VialCarrier(name: str) -> BottleCarrier: + """12瓶载架 - 2x6布局""" + # 载架尺寸 (mm) + carrier_size_x = 120.0 + carrier_size_y = 250.0 + carrier_size_z = 50.0 + + # 瓶位尺寸 + bottle_diameter = 35.0 + bottle_spacing_x = 35.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (2 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (6 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=2, + num_items_y=6, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="Electrolyte_12VialCarrier", + ) + carrier.num_items_x = 2 + carrier.num_items_y = 6 + carrier.num_items_z = 1 + for i in range(12): + carrier[i] = YB_pei_ye_xiao_Bottle(f"{name}_vial_{i+1}") + return carrier diff --git a/unilabos/resources/battery/electrode_sheet.py b/unilabos/resources/battery/electrode_sheet.py new file mode 100644 index 00000000..22f98aff --- /dev/null +++ b/unilabos/resources/battery/electrode_sheet.py @@ -0,0 +1,195 @@ +from typing import Any, Dict, Optional, TypedDict + +from pylabrobot.resources import Resource as ResourcePLR +from pylabrobot.resources import Container + + +electrode_colors = { + "PositiveCan": "#ff0000", + "PositiveElectrode": "#cc3333", + "NegativeCan": "#000000", + "NegativeElectrode": "#666666", + "SpringWasher": "#8b7355", + "FlatWasher": "a9a9a9", + "AluminumFoil": "#ffcccc", + "Battery": "#00ff00", +} + +class ElectrodeSheetState(TypedDict): + diameter: float # 直径 (mm) + thickness: float # 厚度 (mm) + mass: float # 质量 (g) + material_type: str # 材料类型(铜、铝、不锈钢、弹簧钢等) + color: str # 材料类型对应的颜色 + info: Optional[str] # 附加信息 + + +class ElectrodeSheet(ResourcePLR): + """极片类 - 包含正负极片、隔膜、弹片、垫片、铝箔等所有片状材料""" + + def __init__( + self, + name: str = "极片", + size_x: float = 10, + size_y: float = 10, + size_z: float = 10, + category: str = "electrode_sheet", + model: Optional[str] = None, + **kwargs + ): + """初始化极片 + + Args: + name: 极片名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + category: 类别 + model: 型号 + **kwargs: 其他参数传递给父类 + """ + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + category=category, + model=model, + **kwargs + ) + self._unilabos_state: ElectrodeSheetState = ElectrodeSheetState( + diameter=14, + thickness=0.1, + mass=0.5, + material_type="copper", + color="#8b4513", + info=None + ) + + # TODO: 这个还要不要?给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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data + + +def PositiveCan(name: str) -> ElectrodeSheet: + """创建正极壳""" + sheet = ElectrodeSheet(name=name, size_x=12, size_y=12, size_z=3.0, model="PositiveCan") + sheet.load_state({"diameter": 20.0, "thickness": 0.5, "mass": 0.5, "material_type": "aluminum", "color": electrode_colors["PositiveCan"], "info": None}) + return sheet + + +def PositiveElectrode(name: str) -> ElectrodeSheet: + """创建正极片""" + sheet = ElectrodeSheet(name=name, size_x=10, size_y=10, size_z=0.1, model="PositiveElectrode") + sheet.load_state({"material_type": "positive_electrode", "color": electrode_colors["PositiveElectrode"]}) + return sheet + + +def NegativeCan(name: str) -> ElectrodeSheet: + """创建负极壳""" + sheet = ElectrodeSheet(name=name, size_x=12, size_y=12, size_z=2.0, model="NegativeCan") + sheet.load_state({"material_type": "steel", "color": electrode_colors["NegativeCan"]}) + return sheet + + +def NegativeElectrode(name: str) -> ElectrodeSheet: + """创建负极片""" + sheet = ElectrodeSheet(name=name, size_x=10, size_y=10, size_z=0.1, model="NegativeElectrode") + sheet.load_state({"material_type": "negative_electrode", "color": electrode_colors["NegativeElectrode"]}) + return sheet + + +def SpringWasher(name: str) -> ElectrodeSheet: + """创建弹片""" + sheet = ElectrodeSheet(name=name, size_x=10, size_y=10, size_z=0.5, model="SpringWasher") + sheet.load_state({"material_type": "spring_steel", "color": electrode_colors["SpringWasher"]}) + return sheet + + +def FlatWasher(name: str) -> ElectrodeSheet: + """创建垫片""" + sheet = ElectrodeSheet(name=name, size_x=10, size_y=10, size_z=0.2, model="FlatWasher") + sheet.load_state({"material_type": "steel", "color": electrode_colors["FlatWasher"]}) + return sheet + + +def AluminumFoil(name: str) -> ElectrodeSheet: + """创建铝箔""" + sheet = ElectrodeSheet(name=name, size_x=10, size_y=10, size_z=0.05, model="AluminumFoil") + sheet.load_state({"material_type": "aluminum", "color": electrode_colors["AluminumFoil"]}) + return sheet + + +class BatteryState(TypedDict): + color: str # 材料类型对应的颜色 + electrolyte_name: str + data_electrolyte_code: str + open_circuit_voltage: float + assembly_pressure: float + electrolyte_volume: float + + info: Optional[str] # 附加信息 + + +class Battery(Container): + """电池类 - 包含组装好的电池""" + + def __init__( + self, + name: str = "电池", + size_x: float = 12, + size_y: float = 12, + size_z: float = 6, + category: str = "battery", + model: Optional[str] = None, + **kwargs + ): + """初始化电池 + + Args: + name: 电池名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + category: 类别 + model: 型号 + **kwargs: 其他参数传递给父类 + """ + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + category=category, + model=model, + **kwargs + ) + self._unilabos_state: BatteryState = BatteryState( + color=electrode_colors["Battery"], + electrolyte_name="无", + data_electrolyte_code="", + open_circuit_voltage=0.0, + assembly_pressure=0.0, + electrolyte_volume=0.0, + info=None + ) + + 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) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等) + return data \ No newline at end of file diff --git a/unilabos/resources/battery/magazine.py b/unilabos/resources/battery/magazine.py new file mode 100644 index 00000000..04328a40 --- /dev/null +++ b/unilabos/resources/battery/magazine.py @@ -0,0 +1,344 @@ +from typing import Dict, List, Optional, OrderedDict, Union, Callable +import math + +from pylabrobot.resources.coordinate import Coordinate +from pylabrobot.resources import Resource, ResourceStack, ItemizedResource +from pylabrobot.resources.carrier import create_homogeneous_resources + +from unilabos.resources.battery.electrode_sheet import ( + PositiveCan, PositiveElectrode, + NegativeCan, NegativeElectrode, + SpringWasher, FlatWasher, + AluminumFoil, + Battery +) + + +class Magazine(ResourceStack): + """子弹夹洞位类""" + + def __init__( + self, + name: str, + direction: str = 'z', + resources: Optional[List[Resource]] = None, + max_sheets: int = 100, + **kwargs + ): + """初始化子弹夹洞位 + + Args: + name: 洞位名称 + direction: 堆叠方向 + resources: 资源列表 + max_sheets: 最大极片数量 + """ + super().__init__( + name=name, + direction=direction, + resources=resources, + ) + self.max_sheets = max_sheets + + @property + def size_x(self) -> float: + return self.get_size_x() + + @property + def size_y(self) -> float: + return self.get_size_y() + + @property + def size_z(self) -> float: + return self.get_size_z() + + def serialize(self) -> dict: + return { + **super().serialize(), + "size_x": self.size_x or 10.0, + "size_y": self.size_y or 10.0, + "size_z": self.size_z or 10.0, + "max_sheets": self.max_sheets, + } + + +class MagazineHolder(ItemizedResource): + """子弹夹类 - 有多个洞位,每个洞位放多个极片""" + + def __init__( + self, + name: str, + size_x: float, + size_y: float, + size_z: float, + ordered_items: Optional[Dict[str, Magazine]] = None, + ordering: Optional[OrderedDict[str, str]] = None, + hole_diameter: float = 14.0, + hole_depth: float = 10.0, + max_sheets_per_hole: int = 100, + cross_section_type: str = "circle", + category: str = "magazine_holder", + model: Optional[str] = None, + ): + """初始化子弹夹 + + Args: + name: 子弹夹名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + hole_diameter: 洞直径 (mm) + hole_depth: 洞深度 (mm) + max_sheets_per_hole: 每个洞位最大极片数量 + category: 类别 + model: 型号 + """ + + super().__init__( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + ordered_items=ordered_items, + ordering=ordering, + category=category, + model=model, + ) + + # 保存洞位的直径和深度 + self.hole_diameter = hole_diameter + self.hole_depth = hole_depth + self.max_sheets_per_hole = max_sheets_per_hole + self.cross_section_type = cross_section_type + + def serialize(self) -> dict: + return { + **super().serialize(), + "hole_diameter": self.hole_diameter, + "hole_depth": self.hole_depth, + "max_sheets_per_hole": self.max_sheets_per_hole, + "cross_section_type": self.cross_section_type, + } + + +def magazine_factory( + name: str, + size_x: float, + size_y: float, + size_z: float, + locations: List[Coordinate], + klasses: Optional[List[Callable[[str], str]]] = None, + hole_diameter: float = 14.0, + hole_depth: float = 10.0, + max_sheets_per_hole: int = 100, + category: str = "magazine_holder", + model: Optional[str] = None, +) -> 'MagazineHolder': + """工厂函数:创建子弹夹 + + Args: + name: 子弹夹名称 + size_x: 长度 (mm) + size_y: 宽度 (mm) + size_z: 高度 (mm) + locations: 洞位坐标列表 + klasses: 每个洞位中极片的类列表 + hole_diameter: 洞直径 (mm) + hole_depth: 洞深度 (mm) + max_sheets_per_hole: 每个洞位最大极片数量 + category: 类别 + model: 型号 + """ + for loc in locations: + loc.x -= hole_diameter / 2 + loc.y -= hole_diameter / 2 + + # 创建洞位 + _sites = create_homogeneous_resources( + klass=Magazine, + locations=locations, + resource_size_x=hole_diameter, + resource_size_y=hole_diameter, + name_prefix=name, + max_sheets=max_sheets_per_hole, + ) + + # 生成编号键 + keys = [f"A{i+1}" for i in range(len(locations))] + sites = dict(zip(keys, _sites.values())) + + holder = MagazineHolder( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + ordered_items=sites, + hole_diameter=hole_diameter, + hole_depth=hole_depth, + max_sheets_per_hole=max_sheets_per_hole, + category=category, + model=model, + ) + + if klasses is not None: + for i, klass in enumerate(klasses): + hole_key = keys[i] + hole = holder.children[i] + for j in reversed(range(max_sheets_per_hole)): + item_name = f"{hole_key}_sheet{j+1}" + item = klass(name=item_name) + hole.assign_child_resource(item) + return holder + + +def MagazineHolder_6_Cathode( + name: str, + size_x: float = 80.0, + size_y: float = 80.0, + size_z: float = 40.0, + hole_diameter: float = 14.0, + hole_depth: float = 10.0, + hole_spacing: float = 20.0, + max_sheets_per_hole: int = 100, +) -> MagazineHolder: + """创建6孔子弹夹 - 六边形排布""" + center_x = size_x / 2 + center_y = size_y / 2 + + locations = [] + + # 周围6个孔,按六边形排布 + for i in range(6): + angle = i * 60 * math.pi / 180 # 每60度一个孔 + x = center_x + hole_spacing * math.cos(angle) + y = center_y + hole_spacing * math.sin(angle) + locations.append(Coordinate(x, y, size_z - hole_depth)) + + return magazine_factory( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + locations=locations, + klasses=[FlatWasher, PositiveCan, PositiveCan, FlatWasher, PositiveCan, PositiveCan], + hole_diameter=hole_diameter, + hole_depth=hole_depth, + max_sheets_per_hole=max_sheets_per_hole, + category="magazine_holder", + model="MagazineHolder_6_Cathode", + ) + + +def MagazineHolder_6_Anode( + name: str, + size_x: float = 80.0, + size_y: float = 80.0, + size_z: float = 40.0, + hole_diameter: float = 14.0, + hole_depth: float = 10.0, + hole_spacing: float = 20.0, + max_sheets_per_hole: int = 100, +) -> MagazineHolder: + """创建6孔子弹夹 - 六边形排布""" + center_x = size_x / 2 + center_y = size_y / 2 + + locations = [] + + # 周围6个孔,按六边形排布 + for i in range(6): + angle = i * 60 * math.pi / 180 # 每60度一个孔 + x = center_x + hole_spacing * math.cos(angle) + y = center_y + hole_spacing * math.sin(angle) + locations.append(Coordinate(x, y, size_z - hole_depth)) + + return magazine_factory( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + locations=locations, + klasses=[SpringWasher, NegativeCan, NegativeCan, SpringWasher, NegativeCan, NegativeCan], + hole_diameter=hole_diameter, + hole_depth=hole_depth, + max_sheets_per_hole=max_sheets_per_hole, + category="magazine_holder", + model="MagazineHolder_6_Anode", + ) + + +def MagazineHolder_6_Battery( + name: str, + size_x: float = 80.0, + size_y: float = 80.0, + size_z: float = 40.0, + hole_diameter: float = 14.0, + hole_depth: float = 10.0, + hole_spacing: float = 20.0, + max_sheets_per_hole: int = 100, +) -> MagazineHolder: + """创建6孔子弹夹 - 六边形排布""" + center_x = size_x / 2 + center_y = size_y / 2 + + locations = [] + + # 周围6个孔,按六边形排布 + for i in range(6): + angle = i * 60 * math.pi / 180 # 每60度一个孔 + x = center_x + hole_spacing * math.cos(angle) + y = center_y + hole_spacing * math.sin(angle) + locations.append(Coordinate(x, y, size_z - hole_depth)) + + return magazine_factory( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + locations=locations, + klasses=None, # 初始化时,不放入装好的电池 + hole_diameter=hole_diameter, + hole_depth=hole_depth, + max_sheets_per_hole=max_sheets_per_hole, + category="magazine_holder", + model="MagazineHolder_6_Battery", + ) + + +def MagazineHolder_4_Cathode( + name: str, +) -> MagazineHolder: + """创建4孔子弹夹 - 正方形四角排布""" + size_x: float = 80.0 + size_y: float = 80.0 + size_z: float = 10.0 + hole_diameter: float = 14.0 + hole_depth: float = 10.0 + hole_spacing: float = 25.0 + max_sheets_per_hole: int = 100 + + # 计算4个洞位的坐标(正方形四角排布) + center_x = size_x / 2 + center_y = size_y / 2 + offset = hole_spacing / 2 + + locations = [ + Coordinate(center_x - offset, center_y - offset, size_z - hole_depth), # 左下 + Coordinate(center_x + offset, center_y - offset, size_z - hole_depth), # 右下 + Coordinate(center_x - offset, center_y + offset, size_z - hole_depth), # 左上 + Coordinate(center_x + offset, center_y + offset, size_z - hole_depth), # 右上 + ] + + return magazine_factory( + name=name, + size_x=size_x, + size_y=size_y, + size_z=size_z, + locations=locations, + klasses=[AluminumFoil, PositiveElectrode, PositiveElectrode, PositiveElectrode], + hole_diameter=hole_diameter, + hole_depth=hole_depth, + max_sheets_per_hole=max_sheets_per_hole, + category="magazine_holder", + model="MagazineHolder_4_Cathode", + ) diff --git a/unilabos/resources/bioyond/README_WAREHOUSE.md b/unilabos/resources/bioyond/README_WAREHOUSE.md new file mode 100644 index 00000000..6d1a62e1 --- /dev/null +++ b/unilabos/resources/bioyond/README_WAREHOUSE.md @@ -0,0 +1,548 @@ +# Bioyond 仓库系统开发指南 + +本文档详细说明 Bioyond 仓库(Warehouse)系统的架构、配置和使用方法,帮助开发者快速理解和维护仓库相关代码。 + +## 📚 目录 + +- [系统架构](#系统架构) +- [核心概念](#核心概念) +- [三层映射关系](#三层映射关系) +- [warehouse_factory 详解](#warehouse_factory-详解) +- [创建新仓库](#创建新仓库) +- [常见问题](#常见问题) +- [调试技巧](#调试技巧) + +--- + +## 系统架构 + +Bioyond 仓库系统采用**三层架构**,实现从前端显示到后端 API 的完整映射: + +``` +┌─────────────────────────────────────────────────────────┐ +│ 前端显示层 (YB_warehouses.py) │ +│ - warehouse_factory 自动生成库位网格 │ +│ - 生成库位名称:A01, B02, C03... │ +│ - 存储在 WareHouse.sites 字典中 │ +└────────────────┬────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────┐ +│ Deck 布局层 (decks.py) │ +│ - 定义仓库在 Deck 上的物理位置 │ +│ - 组织多个仓库形成完整布局 │ +└────────────────┬────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────┐ +│ UUID 映射层 (config.py) │ +│ - 将库位名称映射到 Bioyond 系统 UUID │ +│ - 用于 API 调用时的物料入库操作 │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## 核心概念 + +### 仓库(Warehouse) + +仓库是一个**三维网格**,用于存放物料。由以下参数定义: + +- **num_items_x**: 列数(X 轴) +- **num_items_y**: 行数(Y 轴) +- **num_items_z**: 层数(Z 轴) + +例如:`5行×3列×1层` = 5×3×1 = 15个库位 + +### 库位(Site) + +库位是仓库中的单个存储位置,由**字母行+数字列**命名: + +- **字母行**:A, B, C, D, E, F...(对应 Y 轴) +- **数字列**:01, 02, 03, 04...(对应 X 轴或 Z 轴) + +示例:`A01`, `B02`, `C03` + +### 布局模式(Layout) + +控制库位的排序和 Y 坐标计算: + +| 模式 | 说明 | 生成顺序 | Y 坐标计算 | 显示效果 | +|------|------|----------|-----------|---------| +| `col-major` | 列优先(默认) | A01, B01, C01, A02... | `dy + (num_y - row - 1) * item_dy` | A 可能在下 | +| `row-major` | 行优先 | A01, A02, A03, B01... | `dy + row * item_dy` | **A 在上** ✓ | + +**重要:** 使用 `row-major` 可以避免上下颠倒问题! + +--- + +## 三层映射关系 + +### 示例:手动传递窗右(A01-E03) + +#### 1️⃣ 前端显示层 - [`YB_warehouses.py`](YB_warehouses.py) + +```python +def bioyond_warehouse_5x3x1(name: str, row_offset: int = 0) -> WareHouse: + """创建 5行×3列×1层 仓库""" + return warehouse_factory( + name=name, + num_items_x=3, # 3列 + num_items_y=5, # 5行 + num_items_z=1, # 1层 + row_offset=row_offset, + layout="row-major", + ) +``` + +**自动生成的库位:** A01, A02, A03, B01, B02, B03, ..., E01, E02, E03 + +#### 2️⃣ Deck 布局层 - [`decks.py`](decks.py) + +```python +self.warehouses = { + "手动传递窗右": bioyond_warehouse_5x3x1("手动传递窗右", row_offset=0), +} +self.warehouse_locations = { + "手动传递窗右": Coordinate(4160.0, 877.0, 0.0), +} +``` + +**作用:** +- 创建仓库实例 +- 设置在 Deck 上的物理坐标 + +#### 3️⃣ UUID 映射层 - [`config.py`](../../devices/workstation/bioyond_studio/config.py) + +```python +WAREHOUSE_MAPPING = { + "手动传递窗右": { + "uuid": "", + "site_uuids": { + "A01": "3a19deae-2c7a-36f5-5e41-02c5b66feaea", + "A02": "3a19deae-2c7a-dc6d-c41e-ef285d946cfe", + # ... 其他库位 + } + } +} +``` + +**作用:** +- 用户拖拽物料到"手动传递窗右"的"A01"位置时 +- 系统查找 `WAREHOUSE_MAPPING["手动传递窗右"]["site_uuids"]["A01"]` +- 获取 UUID `"3a19deae-2c7a-36f5-5e41-02c5b66feaea"` +- 调用 Bioyond API 将物料入库到该 UUID 位置 + +--- + +## 实际配置案例 + +### 案例:手动传递窗左/右的完整配置 + +本案例展示如何为"手动传递窗右"和"手动传递窗左"建立完整的三层映射。 + +#### 背景需求 +- **手动传递窗右**: 需要 A01-E03(5行×3列=15个库位) +- **手动传递窗左**: 需要 F01-J03(5行×3列=15个库位) +- 这两个仓库共享同一个物理堆栈的 UUID("手动堆栈") + +#### 实施步骤 + +**1️⃣ 修复前端布局** - [`YB_warehouses.py`](YB_warehouses.py) + +```python +# 创建新的 5×3×1 仓库函数(之前是错误的 1×3×3) +def bioyond_warehouse_5x3x1(name: str, row_offset: int = 0) -> WareHouse: + """创建5行×3列×1层仓库,支持行偏移生成不同字母行""" + return warehouse_factory( + name=name, + num_items_x=3, # 3列 + num_items_y=5, # 5行 ← 修正 + num_items_z=1, # 1层 ← 修正 + row_offset=row_offset, # ← 支持 F-J 行 + layout="row-major", # ← 避免上下颠倒 + ) +``` + +**2️⃣ 更新 Deck 配置** - [`decks.py`](decks.py) + +```python +from unilabos.resources.bioyond.YB_warehouses import ( + bioyond_warehouse_5x3x1, # 新增导入 +) + +class BIOYOND_YB_Deck(Deck): + def setup(self) -> None: + self.warehouses = { + # 修改前: bioyond_warehouse_1x3x3 (错误尺寸) + # 修改后: bioyond_warehouse_5x3x1 (正确尺寸) + "手动传递窗右": bioyond_warehouse_5x3x1("手动传递窗右", row_offset=0), # A01-E03 + "手动传递窗左": bioyond_warehouse_5x3x1("手动传递窗左", row_offset=5), # F01-J03 + } +``` + +**3️⃣ 添加 UUID 映射** - [`config.py`](../../devices/workstation/bioyond_studio/config.py) + +```python +WAREHOUSE_MAPPING = { + # 保持原有的"手动堆栈"配置不变(A01-J03共30个库位) + "手动堆栈": { + "uuid": "", + "site_uuids": { + "A01": "3a19deae-2c7a-36f5-5e41-02c5b66feaea", + # ... A02-E03 共15个 + "F01": "3a19deae-2c7a-d594-fd6a-0d20de3c7c4a", + # ... F02-J03 共15个 + } + }, + + # [新增] 手动传递窗右 - 复用"手动堆栈"的 A01-E03 UUID + "手动传递窗右": { + "uuid": "", + "site_uuids": { + "A01": "3a19deae-2c7a-36f5-5e41-02c5b66feaea", # ← 与手动堆栈A01相同 + "A02": "3a19deae-2c7a-dc6d-c41e-ef285d946cfe", + "A03": "3a19deae-2c7a-5876-c454-6b7e224ca927", + "B01": "3a19deae-2c7a-2426-6d71-e9de3cb158b1", + "B02": "3a19deae-2c7a-79b0-5e44-efaafd1e4cf3", + "B03": "3a19deae-2c7a-b9eb-f4e3-e308e0cf839a", + "C01": "3a19deae-2c7a-32bc-768e-556647e292f3", + "C02": "3a19deae-2c7a-e97a-8484-f5a4599447c4", + "C03": "3a19deae-2c7a-3056-6504-10dc73fbc276", + "D01": "3a19deae-2c7a-ffad-875e-8c4cda61d440", + "D02": "3a19deae-2c7a-61be-601c-b6fb5610499a", + "D03": "3a19deae-2c7a-c0f7-05a7-e3fe2491e560", + "E01": "3a19deae-2c7a-a6f4-edd1-b436a7576363", + "E02": "3a19deae-2c7a-4367-96dd-1ca2186f4910", + "E03": "3a19deae-2c7a-b163-2219-23df15200311", + } + }, + + # [新增] 手动传递窗左 - 复用"手动堆栈"的 F01-J03 UUID + "手动传递窗左": { + "uuid": "", + "site_uuids": { + "F01": "3a19deae-2c7a-d594-fd6a-0d20de3c7c4a", # ← 与手动堆栈F01相同 + "F02": "3a19deae-2c7a-a194-ea63-8b342b8d8679", + "F03": "3a19deae-2c7a-f7c4-12bd-425799425698", + "G01": "3a19deae-2c7a-0b56-72f1-8ab86e53b955", + "G02": "3a19deae-2c7a-204e-95ed-1f1950f28343", + "G03": "3a19deae-2c7a-392b-62f1-4907c66343f8", + "H01": "3a19deae-2c7a-5602-e876-d27aca4e3201", + "H02": "3a19deae-2c7a-f15c-70e0-25b58a8c9702", + "H03": "3a19deae-2c7a-780b-8965-2e1345f7e834", + "I01": "3a19deae-2c7a-8849-e172-07de14ede928", + "I02": "3a19deae-2c7a-4772-a37f-ff99270bafc0", + "I03": "3a19deae-2c7a-cce7-6e4a-25ea4a2068c4", + "J01": "3a19deae-2c7a-1848-de92-b5d5ed054cc6", + "J02": "3a19deae-2c7a-1d45-b4f8-6f866530e205", + "J03": "3a19deae-2c7a-f237-89d9-8fe19025dee9" + } + }, +} +``` + +#### 关键要点 + +1. **UUID 可以复用**: 三个仓库(手动堆栈、手动传递窗右、手动传递窗左)可以共享相同的物理库位 UUID +2. **库位名称必须匹配**: 前端生成的库位名称(如 F01)必须与 config.py 中的键名完全一致 +3. **row_offset 的妙用**: + - `row_offset=0` → 生成 A-E 行 + - `row_offset=5` → 生成 F-J 行(跳过前5个字母) + +#### 验证结果 + +配置完成后,拖拽测试: + +| 拖拽位置 | 前端库位 | 查找路径 | UUID | 结果 | +|---------|---------|---------|------|------| +| 手动传递窗右/A01 | A01 | `WAREHOUSE_MAPPING["手动传递窗右"]["site_uuids"]["A01"]` | `3a19...eaea` | ✅ 正确入库 | +| 手动传递窗左/F01 | F01 | `WAREHOUSE_MAPPING["手动传递窗左"]["site_uuids"]["F01"]` | `3a19...c4a` | ✅ 正确入库 | +| 手动堆栈/A01 | A01 | `WAREHOUSE_MAPPING["手动堆栈"]["site_uuids"]["A01"]` | `3a19...eaea` | ✅ 仍然正常 | + + +--- + +## warehouse_factory 详解 + +### 函数签名 + +```python +def warehouse_factory( + name: str, + num_items_x: int = 1, # 列数 + num_items_y: int = 4, # 行数 + num_items_z: int = 4, # 层数 + dx: float = 137.0, # X 起始偏移 + dy: float = 96.0, # Y 起始偏移 + dz: float = 120.0, # Z 起始偏移 + item_dx: float = 10.0, # X 间距 + item_dy: float = 10.0, # Y 间距 + item_dz: float = 10.0, # Z 间距 + col_offset: int = 0, # 列偏移(影响数字) + row_offset: int = 0, # 行偏移(影响字母) + layout: str = "col-major", # 布局模式 +) -> WareHouse: +``` + +### 参数说明 + +#### 尺寸参数 +- **num_items_x, y, z**: 定义仓库的网格尺寸 +- **注意**: 当 `num_items_z > 1` 时,Z 轴会被映射为数字列 + +#### 位置参数 +- **dx, dy, dz**: 第一个库位的起始坐标 +- **item_dx, dy, dz**: 库位之间的间距 + +#### 偏移参数 +- **col_offset**: 列起始偏移,用于生成 A05-D08 等命名 + ```python + col_offset=4 # 生成 A05, A06, A07, A08 + ``` + +- **row_offset**: 行起始偏移,用于生成 F01-J03 等命名 + ```python + row_offset=5 # 生成 F01, F02, F03(跳过 A-E) + ``` + +#### 布局参数 +- **layout**: + - `"col-major"`: 列优先(默认),可能导致上下颠倒 + - `"row-major"`: 行优先,**推荐使用**,A 显示在上 + +### 库位生成逻辑 + +```python +# row-major 模式(推荐) +keys = [f"{LETTERS[j + row_offset]}{i + 1 + col_offset:02d}" + for j in range(num_y) + for i in range(num_x)] + +# 示例:num_y=2, num_x=3, row_offset=0, col_offset=0 +# 生成:A01, A02, A03, B01, B02, B03 +``` + +### Y 坐标计算 + +```python +if layout == "row-major": + # A 在上(Y 较小) + y = dy + row * item_dy +else: + # A 在下(Y 较大)- 不推荐 + y = dy + (num_items_y - row - 1) * item_dy +``` + +--- + +## 创建新仓库 + +### 步骤 1: 在 YB_warehouses.py 中创建函数 + +```python +def bioyond_warehouse_3x4x1(name: str) -> WareHouse: + """创建 3行×4列×1层 仓库 + + 布局: + A01 | A02 | A03 | A04 + B01 | B02 | B03 | B04 + C01 | C02 | C03 | C04 + """ + return warehouse_factory( + name=name, + num_items_x=4, # 4列 + num_items_y=3, # 3行 + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=120.0, + item_dz=120.0, + category="warehouse", + layout="row-major", # ⭐ 推荐使用 + ) +``` + +### 步骤 2: 在 decks.py 中使用 + +```python +# 1. 导入函数 +from unilabos.resources.bioyond.YB_warehouses import ( + bioyond_warehouse_3x4x1, # 新增 +) + +# 2. 在 setup() 中添加 +self.warehouses = { + "我的新仓库": bioyond_warehouse_3x4x1("我的新仓库"), +} +self.warehouse_locations = { + "我的新仓库": Coordinate(100.0, 200.0, 0.0), +} +``` + +### 步骤 3: 在 config.py 中配置 UUID(可选) + +```python +WAREHOUSE_MAPPING = { + "我的新仓库": { + "uuid": "", + "site_uuids": { + "A01": "从 Bioyond 系统获取的 UUID", + "A02": "从 Bioyond 系统获取的 UUID", + # ... 其他 11 个库位 + } + } +} +``` + +**注意:** 如果不需要拖拽入库功能,可跳过此步骤。 + +--- + +## 常见问题 + +### Q1: 为什么库位显示上下颠倒(C 在上,A 在下)? + +**原因:** 使用了默认的 `col-major` 布局。 + +**解决:** 在 `warehouse_factory` 中添加 `layout="row-major"` + +```python +return warehouse_factory( + ... + layout="row-major", # ← 添加这行 +) +``` + +### Q2: 我需要 1×3×3 还是 3×3×1? + +**判断方法:** +- **1×3×3**: 1列×3行×3**层**(垂直堆叠,有高度) +- **3×3×1**: 3行×3列×1**层**(平面网格) + +**推荐:** 大多数情况使用 `X×Y×1`(平面网格)更直观。 + +### Q3: 如何生成 F01-J03 而非 A01-E03? + +**方法:** 使用 `row_offset` 参数 + +```python +bioyond_warehouse_5x3x1("仓库名", row_offset=5) +# row_offset=5 跳过 A-E,从 F 开始 +``` + +### Q4: 拖拽物料后找不到 UUID 怎么办? + +**检查清单:** +1. `config.py` 中是否有该仓库的配置? +2. 仓库名称是否完全匹配? +3. 库位名称(如 A01)是否在 `site_uuids` 中? + +**示例错误:** +```python +# decks.py +"手动传递窗右": bioyond_warehouse_5x3x1(...) + +# config.py - ❌ 名称不匹配 +"手动传递窗": { ... } # 缺少"右"字 +``` + +### Q5: 库位重叠怎么办? + +**原因:** 间距(`item_dx/dy/dz`)太小。 + +**解决:** 增大间距参数 + +```python +item_dx=150.0, # 增大 X 间距 +item_dy=130.0, # 增大 Y 间距 +``` + +--- + +## 调试技巧 + +### 1. 查看生成的库位 + +```python +warehouse = bioyond_warehouse_5x3x1("测试仓库") +print(list(warehouse.sites.keys())) +# 输出:['A01', 'A02', 'A03', 'B01', 'B02', ...] +``` + +### 2. 检查库位坐标 + +```python +for name, site in warehouse.sites.items(): + print(f"{name}: {site.location}") +# 输出: +# A01: Coordinate(x=10.0, y=10.0, z=120.0) +# A02: Coordinate(x=147.0, y=10.0, z=120.0) +# ... +``` + +### 3. 验证 UUID 映射 + +```python +from unilabos.devices.workstation.bioyond_studio.config import WAREHOUSE_MAPPING + +warehouse_name = "手动传递窗右" +location_code = "A01" + +if warehouse_name in WAREHOUSE_MAPPING: + uuid = WAREHOUSE_MAPPING[warehouse_name]["site_uuids"].get(location_code) + print(f"{warehouse_name}/{location_code} → {uuid}") +else: + print(f"❌ 未找到仓库: {warehouse_name}") +``` + +--- + +## 文件关系图 + +``` +unilabos/ +├── resources/ +│ ├── warehouse.py # warehouse_factory 核心实现 +│ └── bioyond/ +│ ├── YB_warehouses.py # ⭐ 仓库函数定义 +│ ├── decks.py # ⭐ Deck 布局配置 +│ └── README_WAREHOUSE.md # 📖 本文档 +└── devices/ + └── workstation/ + └── bioyond_studio/ + ├── config.py # ⭐ UUID 映射配置 + └── bioyond_cell/ + └── bioyond_cell_workstation.py # 业务逻辑 +``` + +--- + +## 版本历史 + +- **v1.1** (2026-01-08): 补充实际配置案例 + - 添加"手动传递窗右"和"手动传递窗左"的完整配置示例 + - 展示 UUID 复用的实际应用 + - 说明三个仓库共享物理堆栈的配置方法 + +- **v1.0** (2026-01-07): 初始版本 + - 新增 `row_offset` 参数支持 + - 创建 `bioyond_warehouse_5x3x1` 和 `bioyond_warehouse_2x2x1` + - 修复多个仓库的上下颠倒问题 + +--- + +## 相关资源 + +- [warehouse.py](../warehouse.py) - 核心工厂函数实现 +- [YB_warehouses.py](YB_warehouses.py) - 所有仓库定义 +- [decks.py](decks.py) - Deck 布局配置 +- [config.py](../../devices/workstation/bioyond_studio/config.py) - UUID 映射 + +--- + +**维护者:** Uni-Lab-OS 开发团队 +**最后更新:** 2026-01-07 diff --git a/unilabos/resources/bioyond/YB_bottle_carriers.py b/unilabos/resources/bioyond/YB_bottle_carriers.py new file mode 100644 index 00000000..29a53242 --- /dev/null +++ b/unilabos/resources/bioyond/YB_bottle_carriers.py @@ -0,0 +1,653 @@ +from pylabrobot.resources import create_homogeneous_resources, Coordinate, ResourceHolder, create_ordered_items_2d + +from unilabos.resources.itemized_carrier import Bottle, BottleCarrier +from unilabos.resources.bioyond.YB_bottles import ( + YB_jia_yang_tou_da, + YB_ye_Bottle, + YB_ye_100ml_Bottle, + YB_gao_nian_ye_Bottle, + YB_5ml_fenyeping, + YB_20ml_fenyeping, + YB_pei_ye_xiao_Bottle, + YB_pei_ye_da_Bottle, + YB_qiang_tou, +) +# 命名约定:试剂瓶-Bottle,烧杯-Beaker,烧瓶-Flask,小瓶-Vial + + +def BIOYOND_Electrolyte_6VialCarrier(name: str) -> BottleCarrier: + """6瓶载架 - 2x3布局""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 50.0 + + # 瓶位尺寸 + bottle_diameter = 30.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (3 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=3, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="Electrolyte_6VialCarrier", + ) + carrier.num_items_x = 3 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + # for i in range(6): + # carrier[i] = YB_Solid_Vial(f"{name}_vial_{i+1}") + return carrier + + +def BIOYOND_Electrolyte_1BottleCarrier(name: str) -> BottleCarrier: + """1瓶载架 - 单个中央位置""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 100.0 + + # 烧杯尺寸 + beaker_diameter = 80.0 + + # 计算中央位置 + center_x = (carrier_size_x - beaker_diameter) / 2 + center_y = (carrier_size_y - beaker_diameter) / 2 + center_z = 5.0 + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=create_homogeneous_resources( + klass=ResourceHolder, + locations=[Coordinate(center_x, center_y, center_z)], + resource_size_x=beaker_diameter, + resource_size_y=beaker_diameter, + name_prefix=name, + ), + model="Electrolyte_1BottleCarrier", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + # carrier[0] = YB_Solution_Beaker(f"{name}_beaker_1") + return carrier + + +def YB_6StockCarrier(name: str) -> BottleCarrier: + """6瓶载架 - 2x3布局""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 50.0 + + # 瓶位尺寸 + bottle_diameter = 20.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (3 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=3, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="6StockCarrier", + ) + carrier.num_items_x = 3 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "A3", "B1", "B2", "B3"] # 自定义顺序 + # for i in range(6): + # carrier[i] = YB_Solid_Stock(f"{name}_vial_{ordering[i]}") + return carrier + + +def YB_6VialCarrier(name: str) -> BottleCarrier: + """6瓶载架 - 2x3布局""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 50.0 + + # 瓶位尺寸 + bottle_diameter = 30.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (3 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=3, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="6VialCarrier", + ) + carrier.num_items_x = 3 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "A3", "B1", "B2", "B3"] # 自定义顺序 + # for i in range(3): + # carrier[i] = YB_Solid_Vial(f"{name}_solidvial_{ordering[i]}") + # for i in range(3, 6): + # carrier[i] = YB_Liquid_Vial(f"{name}_liquidvial_{ordering[i]}") + return carrier + +# 1瓶载架 - 单个中央位置 +def YB_ye(name: str) -> BottleCarrier: + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 20.0 + + # 烧杯尺寸 + beaker_diameter = 60.0 + + # 计算中央位置 + center_x = (carrier_size_x - beaker_diameter) / 2 + center_y = (carrier_size_y - beaker_diameter) / 2 + center_z = 5.0 + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=create_homogeneous_resources( + klass=ResourceHolder, + locations=[Coordinate(center_x, center_y, center_z)], + resource_size_x=beaker_diameter, + resource_size_y=beaker_diameter, + name_prefix=name, + ), + model="YB_ye", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + carrier[0] = YB_ye_Bottle(f"{name}_flask_1") + return carrier + + +# 高粘液瓶载架 - 单个中央位置 +def YB_gaonianye(name: str) -> BottleCarrier: + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 20.0 + + # 烧杯尺寸 + beaker_diameter = 60.0 + + # 计算中央位置 + center_x = (carrier_size_x - beaker_diameter) / 2 + center_y = (carrier_size_y - beaker_diameter) / 2 + center_z = 5.0 + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=create_homogeneous_resources( + klass=ResourceHolder, + locations=[Coordinate(center_x, center_y, center_z)], + resource_size_x=beaker_diameter, + resource_size_y=beaker_diameter, + name_prefix=name, + ), + model="YB_gaonianye", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + carrier[0] = YB_gao_nian_ye_Bottle(f"{name}_flask_1") + return carrier + + +# 100ml液体瓶载架 - 单个中央位置 +def YB_100ml_yeti(name: str) -> BottleCarrier: + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 20.0 + + # 烧杯尺寸 + beaker_diameter = 60.0 + + # 计算中央位置 + center_x = (carrier_size_x - beaker_diameter) / 2 + center_y = (carrier_size_y - beaker_diameter) / 2 + center_z = 5.0 + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=create_homogeneous_resources( + klass=ResourceHolder, + locations=[Coordinate(center_x, center_y, center_z)], + resource_size_x=beaker_diameter, + resource_size_y=beaker_diameter, + name_prefix=name, + ), + model="YB_100ml_yeti", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + carrier[0] = YB_ye_100ml_Bottle(f"{name}_flask_1") + return carrier + +# 5ml分液瓶板 - 4x2布局,8个位置 +def YB_5ml_fenyepingban(name: str) -> BottleCarrier: + + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 50.0 + + # 瓶位尺寸 + bottle_diameter = 15.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (4 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=4, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_5ml_fenyepingban", + ) + carrier.num_items_x = 4 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"] + for i in range(8): + carrier[i] = YB_5ml_fenyeping(f"{name}_vial_{ordering[i]}") + return carrier + +# 20ml分液瓶板 - 4x2布局,8个位置 +def YB_20ml_fenyepingban(name: str) -> BottleCarrier: + + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 70.0 + + # 瓶位尺寸 + bottle_diameter = 20.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (4 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=4, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_20ml_fenyepingban", + ) + carrier.num_items_x = 4 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"] + for i in range(8): + carrier[i] = YB_20ml_fenyeping(f"{name}_vial_{ordering[i]}") + return carrier + +# 配液瓶(小)板 - 4x2布局,8个位置 +def YB_peiyepingxiaoban(name: str) -> BottleCarrier: + + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 65.0 + + # 瓶位尺寸 + bottle_diameter = 35.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (4 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=4, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_peiyepingxiaoban", + ) + carrier.num_items_x = 4 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"] + for i in range(8): + carrier[i] = YB_pei_ye_xiao_Bottle(f"{name}_bottle_{ordering[i]}") + return carrier + + +# 配液瓶(大)板 - 2x2布局,4个位置 +def YB_peiyepingdaban(name: str) -> BottleCarrier: + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 95.0 + + # 瓶位尺寸 + bottle_diameter = 55.0 + bottle_spacing_x = 60.0 # X方向间距 + bottle_spacing_y = 60.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (2 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=2, + num_items_y=2, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_peiyepingdaban", + ) + carrier.num_items_x = 2 + carrier.num_items_y = 2 + carrier.num_items_z = 1 + ordering = ["A1", "A2", "B1", "B2"] + for i in range(4): + carrier[i] = YB_pei_ye_da_Bottle(f"{name}_bottle_{ordering[i]}") + return carrier + +# 加样头(大)板 - 1x1布局,1个位置 +def YB_jia_yang_tou_da_Carrier(name: str) -> BottleCarrier: + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 95.0 + + # 瓶位尺寸 + bottle_diameter = 35.0 + bottle_spacing_x = 42.0 # X方向间距 + bottle_spacing_y = 35.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (1 - 1) * bottle_spacing_x - bottle_diameter) / 2 + start_y = (carrier_size_y - (1 - 1) * bottle_spacing_y - bottle_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=1, + num_items_y=1, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=bottle_spacing_x, + item_dy=bottle_spacing_y, + size_x=bottle_diameter, + size_y=bottle_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_jia_yang_tou_da_Carrier", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + carrier[0] = YB_jia_yang_tou_da(f"{name}_head_1") + return carrier + + +def YB_shi_pei_qi_kuai(name: str) -> BottleCarrier: + """适配器块 - 单个中央位置""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 30.0 + + # 适配器尺寸 + adapter_diameter = 80.0 + + # 计算中央位置 + center_x = (carrier_size_x - adapter_diameter) / 2 + center_y = (carrier_size_y - adapter_diameter) / 2 + center_z = 0.0 + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=create_homogeneous_resources( + klass=ResourceHolder, + locations=[Coordinate(center_x, center_y, center_z)], + resource_size_x=adapter_diameter, + resource_size_y=adapter_diameter, + name_prefix=name, + ), + model="YB_shi_pei_qi_kuai", + ) + carrier.num_items_x = 1 + carrier.num_items_y = 1 + carrier.num_items_z = 1 + # 适配器块本身不包含瓶子,只是一个支撑结构 + return carrier + + +def YB_qiang_tou_he(name: str) -> BottleCarrier: + """枪头盒 - 8x12布局,96个位置""" + + # 载架尺寸 (mm) + carrier_size_x = 127.8 + carrier_size_y = 85.5 + carrier_size_z = 55.0 + + # 枪头尺寸 + tip_diameter = 10.0 + tip_spacing_x = 9.0 # X方向间距 + tip_spacing_y = 9.0 # Y方向间距 + + # 计算起始位置 (居中排列) + start_x = (carrier_size_x - (12 - 1) * tip_spacing_x - tip_diameter) / 2 + start_y = (carrier_size_y - (8 - 1) * tip_spacing_y - tip_diameter) / 2 + + sites = create_ordered_items_2d( + klass=ResourceHolder, + num_items_x=12, + num_items_y=8, + dx=start_x, + dy=start_y, + dz=5.0, + item_dx=tip_spacing_x, + item_dy=tip_spacing_y, + size_x=tip_diameter, + size_y=tip_diameter, + size_z=carrier_size_z, + ) + for k, v in sites.items(): + v.name = f"{name}_{v.name}" + + carrier = BottleCarrier( + name=name, + size_x=carrier_size_x, + size_y=carrier_size_y, + size_z=carrier_size_z, + sites=sites, + model="YB_qiang_tou_he", + ) + carrier.num_items_x = 12 + carrier.num_items_y = 8 + carrier.num_items_z = 1 + # 创建96个枪头 + for i in range(96): + row = chr(65 + i // 12) # A-H + col = (i % 12) + 1 # 1-12 + carrier[i] = YB_qiang_tou(f"{name}_tip_{row}{col}") + return carrier + diff --git a/unilabos/resources/bioyond/YB_bottles.py b/unilabos/resources/bioyond/YB_bottles.py new file mode 100644 index 00000000..acbbf35b --- /dev/null +++ b/unilabos/resources/bioyond/YB_bottles.py @@ -0,0 +1,163 @@ +from unilabos.resources.itemized_carrier import Bottle, BottleCarrier +# 工厂函数 +"""加样头(大)""" +def YB_jia_yang_tou_da( + name: str, + diameter: float = 20.0, + height: float = 100.0, + max_volume: float = 30000.0, # 30mL + barcode: str = None, +) -> Bottle: + """创建粉末瓶""" + return Bottle( + name=name, + diameter=diameter,# 未知 + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_jia_yang_tou_da", + ) + +"""液1x1""" +def YB_ye_Bottle( + name: str, + diameter: float = 40.0, + height: float = 70.0, + max_volume: float = 50000.0, # 50mL + barcode: str = None, +) -> Bottle: + """创建液体瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_ye_Bottle", + ) + +"""100ml液体""" +def YB_ye_100ml_Bottle( + name: str, + diameter: float = 50.0, + height: float = 90.0, + max_volume: float = 100000.0, # 100mL + barcode: str = None, +) -> Bottle: + """创建100ml液体瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_100ml_yeti", + ) + +"""高粘液""" +def YB_gao_nian_ye_Bottle( + name: str, + diameter: float = 40.0, + height: float = 70.0, + max_volume: float = 50000.0, # 50mL + barcode: str = None, +) -> Bottle: + """创建高粘液瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="High_Viscosity_Liquid", + ) + +"""5ml分液瓶""" +def YB_5ml_fenyeping( + name: str, + diameter: float = 20.0, + height: float = 50.0, + max_volume: float = 5000.0, # 5mL + barcode: str = None, +) -> Bottle: + """创建5ml分液瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_5ml_fenyeping", + ) + +"""20ml分液瓶""" +def YB_20ml_fenyeping( + name: str, + diameter: float = 30.0, + height: float = 65.0, + max_volume: float = 20000.0, # 20mL + barcode: str = None, +) -> Bottle: + """创建20ml分液瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_20ml_fenyeping", + ) + +"""配液瓶(小)""" +def YB_pei_ye_xiao_Bottle( + name: str, + diameter: float = 35.0, + height: float = 60.0, + max_volume: float = 30000.0, # 30mL + barcode: str = None, +) -> Bottle: + """创建配液瓶(小)""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_pei_ye_xiao_Bottle", + ) + +"""配液瓶(大)""" +def YB_pei_ye_da_Bottle( + name: str, + diameter: float = 55.0, + height: float = 100.0, + max_volume: float = 150000.0, # 150mL + barcode: str = None, +) -> Bottle: + """创建配液瓶(大)""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_pei_ye_da_Bottle", + ) + +"""枪头""" +def YB_qiang_tou( + name: str, + diameter: float = 10.0, + height: float = 50.0, + max_volume: float = 1000.0, # 1mL + barcode: str = None, +) -> Bottle: + """创建枪头""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="YB_qiang_tou", + ) diff --git a/unilabos/resources/bioyond/YB_warehouses.py b/unilabos/resources/bioyond/YB_warehouses.py new file mode 100644 index 00000000..7b3ab510 --- /dev/null +++ b/unilabos/resources/bioyond/YB_warehouses.py @@ -0,0 +1,384 @@ +from unilabos.resources.warehouse import WareHouse, warehouse_factory + +# ================ 反应站相关堆栈 ================ + +def bioyond_warehouse_1x4x4(name: str) -> WareHouse: + """创建BioYond 4x4x1仓库 (左侧堆栈: A01~D04) + + 使用行优先排序,前端展示为: + A01 | A02 | A03 | A04 + B01 | B02 | B03 | B04 + C01 | C02 | C03 | C04 + D01 | D02 | D03 | D04 + """ + return warehouse_factory( + name=name, + num_items_x=4, # 4列 + num_items_y=4, # 4行 + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=147.0, + item_dy=106.0, + item_dz=130.0, + category="warehouse", + col_offset=0, # 从01开始: A01, A02, A03, A04 + layout="row-major", # ⭐ 改为行优先排序 + ) + +def bioyond_warehouse_1x4x4_right(name: str) -> WareHouse: + """创建BioYond 4x4x1仓库 (右侧堆栈: A05~D08)""" + return warehouse_factory( + name=name, + num_items_x=4, + num_items_y=4, + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=147.0, + item_dy=106.0, + item_dz=130.0, + category="warehouse", + col_offset=4, # 从05开始: A05, A06, A07, A08 + layout="row-major", # ⭐ 改为行优先排序 + ) + +def bioyond_warehouse_density_vial(name: str) -> WareHouse: + """创建测量小瓶仓库(测密度) A01~B03""" + return warehouse_factory( + name=name, + num_items_x=3, # 3列(01-03) + num_items_y=2, # 2行(A-B) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=40.0, + item_dy=40.0, + item_dz=50.0, + # 用更小的 resource_size 来表现 "小点的孔位" + resource_size_x=30.0, + resource_size_y=30.0, + resource_size_z=12.0, + category="warehouse", + col_offset=0, + layout="row-major", + ) + +def bioyond_warehouse_reagent_storage(name: str) -> WareHouse: + """创建BioYond站内试剂存放堆栈(A01~A02, 1行×2列)""" + return warehouse_factory( + name=name, + num_items_x=2, # 2列(01-02) + num_items_y=1, # 1行(A) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + ) + +def bioyond_warehouse_tipbox_storage(name: str) -> WareHouse: + """创建BioYond站内Tip盒堆栈(A01~B03, 2行×3列)""" + return warehouse_factory( + name=name, + num_items_x=3, # 3列(01-03) + num_items_y=2, # 2行(A-B) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + col_offset=0, + layout="row-major", + ) + +def bioyond_warehouse_liquid_preparation(name: str) -> WareHouse: + """已弃用,创建BioYond移液站内10%分装液体准备仓库(A01~B04)""" + return warehouse_factory( + name=name, + num_items_x=4, # 4列(01-04) + num_items_y=2, # 2行(A-B) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + col_offset=0, + layout="row-major", + ) + +# ================ 配液站相关堆栈 ================ + +def bioyond_warehouse_reagent_stack(name: str) -> WareHouse: + """创建BioYond 试剂堆栈 2x4x1 (2行×4列: A01-A04, B01-B04) + + 使用行优先排序,前端展示为: + A01 | A02 | A03 | A04 + B01 | B02 | B03 | B04 + """ + return warehouse_factory( + name=name, + num_items_x=4, # 4列 (01-04) + num_items_y=2, # 2行 (A-B) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=147.0, + item_dy=106.0, + item_dz=130.0, + category="warehouse", + col_offset=0, # 从01开始 + layout="row-major", # ⭐ 使用行优先排序: A01,A02,A03,A04, B01,B02,B03,B04 + ) + + # 定义bioyond的堆栈 + +# =================== Other =================== + +def bioyond_warehouse_1x4x2(name: str) -> WareHouse: + """创建BioYond 4x2x1仓库""" + return warehouse_factory( + name=name, + num_items_x=1, + num_items_y=4, + num_items_z=2, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + removed_positions=None + ) + +def bioyond_warehouse_1x2x2(name: str) -> WareHouse: + """创建BioYond 1x2x2仓库(1列×2行×2层)- 旧版本,已弃用 + + 布局(2层): + 层1: A01 + B01 + 层2: A02 + B02 + """ + return warehouse_factory( + name=name, + num_items_x=1, + num_items_y=2, + num_items_z=2, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + layout="row-major", # 使用行优先避免上下颠倒 + ) + +def bioyond_warehouse_2x2x1(name: str) -> WareHouse: + """创建BioYond 2x2x1仓库(2行×2列×1层) + + 布局: + A01 | A02 + B01 | B02 + """ + return warehouse_factory( + name=name, + num_items_x=2, # 2列 + num_items_y=2, # 2行 + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + layout="row-major", # 使用行优先避免上下颠倒 + ) + + +def bioyond_warehouse_10x1x1(name: str) -> WareHouse: + """创建BioYond 10x1x1仓库""" + return warehouse_factory( + name=name, + num_items_x=10, + num_items_y=1, + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + ) + +def bioyond_warehouse_1x3x3(name: str) -> WareHouse: + """创建BioYond 1x3x3仓库""" + return warehouse_factory( + name=name, + num_items_x=1, + num_items_y=3, + num_items_z=3, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=120.0, # 增大Y方向间距以避免重叠 + item_dz=120.0, + category="warehouse", + ) + +def bioyond_warehouse_5x3x1(name: str, row_offset: int = 0) -> WareHouse: + """创建BioYond 5x3x1仓库(5行×3列×1层) + + 标准布局(row_offset=0): + A01 | A02 | A03 + B01 | B02 | B03 + C01 | C02 | C03 + D01 | D02 | D03 + E01 | E02 | E03 + + 带偏移布局(row_offset=5): + F01 | F02 | F03 + G01 | G02 | G03 + H01 | H02 | H03 + I01 | I02 | I03 + J01 | J02 | J03 + """ + return warehouse_factory( + name=name, + num_items_x=3, # 3列 + num_items_y=5, # 5行 + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=120.0, + item_dz=120.0, + category="warehouse", + col_offset=0, + row_offset=row_offset, # 支持行偏移 + layout="row-major", # 使用行优先避免颠倒 + ) + + +def bioyond_warehouse_3x3x1(name: str) -> WareHouse: + """创建BioYond 3x3x1仓库(3行×3列×1层) + + 布局: + A01 | A02 | A03 + B01 | B02 | B03 + C01 | C02 | C03 + """ + return warehouse_factory( + name=name, + num_items_x=3, + num_items_y=3, + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + layout="row-major", # ⭐ 使用行优先避免上下颠倒 + ) +def bioyond_warehouse_2x1x3(name: str) -> WareHouse: + """创建BioYond 2x1x3仓库""" + return warehouse_factory( + name=name, + num_items_x=2, + num_items_y=1, + num_items_z=3, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + ) + + +def bioyond_warehouse_5x1x1(name: str) -> WareHouse: + """已弃用:创建BioYond 5x1x1仓库""" + return warehouse_factory( + name=name, + num_items_x=5, + num_items_y=1, + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + ) + +def bioyond_warehouse_3x3x1_2(name: str) -> WareHouse: + """已弃用:创建BioYond 3x3x1仓库""" + return warehouse_factory( + name=name, + num_items_x=3, + num_items_y=3, + num_items_z=1, + dx=12.0, + dy=12.0, + dz=12.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + ) + +def bioyond_warehouse_liquid_and_lid_handling(name: str) -> WareHouse: + """创建BioYond开关盖加液模块台面""" + return warehouse_factory( + name=name, + num_items_x=2, + num_items_y=5, + num_items_z=1, + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + removed_positions=None + ) + +def bioyond_warehouse_1x8x4(name: str) -> WareHouse: + """创建BioYond 8x4x1反应站堆栈(A01~D08)""" + return warehouse_factory( + name=name, + num_items_x=8, # 8列(01-08) + num_items_y=4, # 4行(A-D) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=147.0, + item_dy=106.0, + item_dz=130.0, + category="warehouse", + ) diff --git a/unilabos/resources/bioyond/bottles.py b/unilabos/resources/bioyond/bottles.py index d60d65ab..7045d8b7 100644 --- a/unilabos/resources/bioyond/bottles.py +++ b/unilabos/resources/bioyond/bottles.py @@ -193,3 +193,20 @@ def BIOYOND_PolymerStation_Flask( barcode=barcode, model="BIOYOND_PolymerStation_Flask", ) + +def BIOYOND_PolymerStation_Measurement_Vial( + name: str, + diameter: float = 25.0, + height: float = 60.0, + max_volume: float = 20000.0, # 20mL + barcode: str = None, +) -> Bottle: + """创建测量小瓶""" + return Bottle( + name=name, + diameter=diameter, + height=height, + max_volume=max_volume, + barcode=barcode, + model="BIOYOND_PolymerStation_Measurement_Vial", + ) diff --git a/unilabos/resources/bioyond/decks.py b/unilabos/resources/bioyond/decks.py index 5572536b..5f3b2c4e 100644 --- a/unilabos/resources/bioyond/decks.py +++ b/unilabos/resources/bioyond/decks.py @@ -1,14 +1,16 @@ from os import name from pylabrobot.resources import Deck, Coordinate, Rotation -from unilabos.resources.bioyond.warehouses import ( +from unilabos.resources.bioyond.YB_warehouses import ( bioyond_warehouse_1x4x4, bioyond_warehouse_1x4x4_right, # 新增:右侧仓库 (A05~D08) bioyond_warehouse_1x4x2, bioyond_warehouse_reagent_stack, # 新增:试剂堆栈 (A1-B4) bioyond_warehouse_liquid_and_lid_handling, bioyond_warehouse_1x2x2, + bioyond_warehouse_2x2x1, # 新增:321和43窗口 (2行×2列) bioyond_warehouse_1x3x3, + bioyond_warehouse_5x3x1, # 新增:手动传递窗仓库 (5行×3列) bioyond_warehouse_10x1x1, bioyond_warehouse_3x3x1, bioyond_warehouse_3x3x1_2, @@ -16,9 +18,12 @@ from unilabos.resources.bioyond.warehouses import ( bioyond_warehouse_1x8x4, bioyond_warehouse_reagent_storage, # bioyond_warehouse_liquid_preparation, - bioyond_warehouse_tipbox_storage, # 新增:Tip盒堆栈 bioyond_warehouse_density_vial, ) +from unilabos.resources.bioyond.warehouses import ( + bioyond_warehouse_tipbox_storage_left, # 新增:Tip盒堆栈(左) + bioyond_warehouse_tipbox_storage_right, # 新增:Tip盒堆栈(右) +) class BIOYOND_PolymerReactionStation_Deck(Deck): @@ -45,24 +50,22 @@ class BIOYOND_PolymerReactionStation_Deck(Deck): "堆栈1右": bioyond_warehouse_1x4x4_right("堆栈1右"), # 右侧堆栈: A05~D08 "站内试剂存放堆栈": bioyond_warehouse_reagent_storage("站内试剂存放堆栈"), # A01~A02 # "移液站内10%分装液体准备仓库": bioyond_warehouse_liquid_preparation("移液站内10%分装液体准备仓库"), # A01~B04 - "站内Tip盒堆栈": bioyond_warehouse_tipbox_storage("站内Tip盒堆栈"), # A01~B03, 存放枪头盒. + "站内Tip盒堆栈(左)": bioyond_warehouse_tipbox_storage_left("站内Tip盒堆栈(左)"), # A02~B03 + "站内Tip盒堆栈(右)": bioyond_warehouse_tipbox_storage_right("站内Tip盒堆栈(右)"), # A01~B01 "测量小瓶仓库(测密度)": bioyond_warehouse_density_vial("测量小瓶仓库(测密度)"), # A01~B03 } self.warehouse_locations = { - "堆栈1左": Coordinate(0.0, 430.0, 0.0), # 左侧位置 - "堆栈1右": Coordinate(2500.0, 430.0, 0.0), # 右侧位置 - "站内试剂存放堆栈": Coordinate(640.0, 480.0, 0.0), - # "移液站内10%分装液体准备仓库": Coordinate(1200.0, 600.0, 0.0), - "站内Tip盒堆栈": Coordinate(300.0, 150.0, 0.0), - "测量小瓶仓库(测密度)": Coordinate(922.0, 552.0, 0.0), + "堆栈1左": Coordinate(-200.0, 400.0, 0.0), # 左侧位置 + "堆栈1右": Coordinate(2350.0, 400.0, 0.0), # 右侧位置 + "站内试剂存放堆栈": Coordinate(640.0, 400.0, 0.0), + "站内Tip盒堆栈(左)": Coordinate(300.0, 100.0, 0.0), + "站内Tip盒堆栈(右)": Coordinate(2250.0, 100.0, 0.0), # 向右偏移 2 * item_dx (137.0) + "测量小瓶仓库(测密度)": Coordinate(1000.0, 530.0, 0.0), } - self.warehouses["站内试剂存放堆栈"].rotation = Rotation(z=90) - self.warehouses["测量小瓶仓库(测密度)"].rotation = Rotation(z=270) for warehouse_name, warehouse in self.warehouses.items(): self.assign_child_resource(warehouse, location=self.warehouse_locations[warehouse_name]) - class BIOYOND_PolymerPreparationStation_Deck(Deck): def __init__( self, @@ -90,9 +93,9 @@ class BIOYOND_PolymerPreparationStation_Deck(Deck): "溶液堆栈": bioyond_warehouse_1x4x4("溶液堆栈"), # 4行×4列 (A01-D04) } self.warehouse_locations = { - "粉末堆栈": Coordinate(0.0, 450.0, 0.0), - "试剂堆栈": Coordinate(1850.0, 200.0, 0.0), - "溶液堆栈": Coordinate(2500.0, 450.0, 0.0), + "粉末堆栈": Coordinate(-200.0, 400.0, 0.0), + "试剂堆栈": Coordinate(1750.0, 160.0, 0.0), + "溶液堆栈": Coordinate(2350.0, 400.0, 0.0), } for warehouse_name, warehouse in self.warehouses.items(): @@ -115,10 +118,10 @@ class BIOYOND_YB_Deck(Deck): def setup(self) -> None: # 添加仓库 self.warehouses = { - "321窗口": bioyond_warehouse_1x2x2("321窗口"), - "43窗口": bioyond_warehouse_1x2x2("43窗口"), - "手动传递窗左": bioyond_warehouse_1x3x3("手动传递窗左"), - "手动传递窗右": bioyond_warehouse_1x3x3("手动传递窗右"), + "321窗口": bioyond_warehouse_2x2x1("321窗口"), # 2行×2列 + "43窗口": bioyond_warehouse_2x2x1("43窗口"), # 2行×2列 + "手动传递窗右": bioyond_warehouse_5x3x1("手动传递窗右", row_offset=0), # A01-E03 + "手动传递窗左": bioyond_warehouse_5x3x1("手动传递窗左", row_offset=5), # F01-J03 "加样头堆栈左": bioyond_warehouse_10x1x1("加样头堆栈左"), "加样头堆栈右": bioyond_warehouse_10x1x1("加样头堆栈右"), @@ -126,6 +129,7 @@ class BIOYOND_YB_Deck(Deck): "母液加样右": bioyond_warehouse_3x3x1_2("母液加样右"), "大瓶母液堆栈左": bioyond_warehouse_5x1x1("大瓶母液堆栈左"), "大瓶母液堆栈右": bioyond_warehouse_5x1x1("大瓶母液堆栈右"), + "2号手套箱内部堆栈": bioyond_warehouse_3x3x1("2号手套箱内部堆栈"), # 新增:3行×3列 (A01-C03) } # warehouse 的位置 self.warehouse_locations = { @@ -140,10 +144,12 @@ class BIOYOND_YB_Deck(Deck): "母液加样右": Coordinate(2152.0, 333.0, 0.0), "大瓶母液堆栈左": Coordinate(1164.0, 676.0, 0.0), "大瓶母液堆栈右": Coordinate(2717.0, 676.0, 0.0), + "2号手套箱内部堆栈": Coordinate(-800, -500.0, 0.0), # 新增:位置需根据实际硬件调整 } for warehouse_name, warehouse in self.warehouses.items(): self.assign_child_resource(warehouse, location=self.warehouse_locations[warehouse_name]) + def YB_Deck(name: str) -> Deck: by=BIOYOND_YB_Deck(name=name) by.setup() diff --git a/unilabos/resources/bioyond/warehouses.py b/unilabos/resources/bioyond/warehouses.py index ae9e473d..547af1e3 100644 --- a/unilabos/resources/bioyond/warehouses.py +++ b/unilabos/resources/bioyond/warehouses.py @@ -46,48 +46,62 @@ def bioyond_warehouse_1x4x4_right(name: str) -> WareHouse: ) def bioyond_warehouse_density_vial(name: str) -> WareHouse: - """创建测量小瓶仓库(测密度) A01~B03""" + """创建测量小瓶仓库(测密度) - 竖向排列2列3行 + 布局(从下到上,从左到右): + | A03 | B03 | ← 顶部 + | A02 | B02 | ← 中部 + | A01 | B01 | ← 底部 + """ return warehouse_factory( name=name, - num_items_x=3, # 3列(01-03) - num_items_y=2, # 2行(A-B) + num_items_x=2, # 2列(A, B) + num_items_y=3, # 3行(01-03,从下到上) num_items_z=1, # 1层 dx=10.0, dy=10.0, dz=10.0, - item_dx=40.0, - item_dy=40.0, + item_dx=40.0, # 列间距(A到B的横向距离) + item_dy=40.0, # 行间距(01到02到03的竖向距离) item_dz=50.0, - # 用更小的 resource_size 来表现 "小点的孔位" + # ⭐ 竖向warehouse:槽位尺寸也是竖向的(小瓶已经是正方形,无需调整) resource_size_x=30.0, resource_size_y=30.0, resource_size_z=12.0, category="warehouse", col_offset=0, - layout="row-major", + layout="vertical-col-major", # ⭐ 竖向warehouse专用布局 ) def bioyond_warehouse_reagent_storage(name: str) -> WareHouse: - """创建BioYond站内试剂存放堆栈(A01~A02, 1行×2列)""" + """创建BioYond站内试剂存放堆栈 - 竖向排列1列2行 + 布局(竖向,从下到上): + | A02 | ← 顶部 + | A01 | ← 底部 + """ return warehouse_factory( name=name, - num_items_x=2, # 2列(01-02) - num_items_y=1, # 1行(A) + num_items_x=1, # 1列 + num_items_y=2, # 2行(01-02,从下到上) num_items_z=1, # 1层 dx=10.0, dy=10.0, dz=10.0, - item_dx=137.0, - item_dy=96.0, + item_dx=96.0, # 列间距(这里只有1列,不重要) + item_dy=137.0, # 行间距(A01到A02的竖向距离) item_dz=120.0, + # ⭐ 竖向warehouse:交换槽位尺寸,使槽位框也是竖向的 + resource_size_x=86.0, # 原来的 resource_size_y + resource_size_y=127.0, # 原来的 resource_size_x + resource_size_z=25.0, category="warehouse", + layout="vertical-col-major", # ⭐ 竖向warehouse专用布局 ) -def bioyond_warehouse_tipbox_storage(name: str) -> WareHouse: - """创建BioYond站内Tip盒堆栈(A01~B03),用于存放枪头盒""" +def bioyond_warehouse_tipbox_storage_left(name: str) -> WareHouse: + """创建BioYond站内Tip盒堆栈左侧部分(A02~B03),2列2行""" return warehouse_factory( name=name, - num_items_x=3, # 3列(01-03) + num_items_x=2, # 2列 num_items_y=2, # 2行(A-B) num_items_z=1, # 1层 dx=10.0, @@ -97,7 +111,25 @@ def bioyond_warehouse_tipbox_storage(name: str) -> WareHouse: item_dy=96.0, item_dz=120.0, category="warehouse", - col_offset=0, + col_offset=1, # 从02开始: A02, A03 + layout="row-major", + ) + +def bioyond_warehouse_tipbox_storage_right(name: str) -> WareHouse: + """创建BioYond站内Tip盒堆栈右侧部分(A01~B01),1列2行""" + return warehouse_factory( + name=name, + num_items_x=1, # 1列 + num_items_y=2, # 2行(A-B) + num_items_z=1, # 1层 + dx=10.0, + dy=10.0, + dz=10.0, + item_dx=137.0, + item_dy=96.0, + item_dz=120.0, + category="warehouse", + col_offset=0, # 从01开始: A01 layout="row-major", ) diff --git a/unilabos/resources/graphio.py b/unilabos/resources/graphio.py index 252c8f45..1c514d44 100644 --- a/unilabos/resources/graphio.py +++ b/unilabos/resources/graphio.py @@ -779,6 +779,22 @@ def resource_bioyond_to_plr(bioyond_materials: list[dict], type_mapping: Dict[st if not locations: logger.debug(f"[物料位置] {unique_name} 没有location信息,跳过warehouse放置") + # ⭐ 预先检查:如果物料的任何location在竖向warehouse中,提前交换尺寸 + # 这样可以避免多个location时尺寸不一致的问题 + needs_size_swap = False + for loc in locations: + wh_name_check = loc.get("whName") + if wh_name_check in ["站内试剂存放堆栈", "测量小瓶仓库(测密度)"]: + needs_size_swap = True + break + + if needs_size_swap and hasattr(plr_material, 'size_x') and hasattr(plr_material, 'size_y'): + original_x = plr_material.size_x + original_y = plr_material.size_y + plr_material.size_x = original_y + plr_material.size_y = original_x + logger.debug(f" 物料 {unique_name} 将放入竖向warehouse,预先交换尺寸: {original_x}×{original_y} → {plr_material.size_x}×{plr_material.size_y}") + for loc in locations: wh_name = loc.get("whName") logger.debug(f"[物料位置] {unique_name} 尝试放置到 warehouse: {wh_name} (Bioyond坐标: x={loc.get('x')}, y={loc.get('y')}, z={loc.get('z')})") @@ -795,12 +811,20 @@ def resource_bioyond_to_plr(bioyond_materials: list[dict], type_mapping: Dict[st logger.warning(f"物料 {material['name']} 的列号 x={x_val} 超出范围,无法映射到堆栈1左或堆栈1右") continue + # 特殊处理: Bioyond的"站内Tip盒堆栈"也需要进行拆分映射 + if wh_name == "站内Tip盒堆栈": + y_val = loc.get("y", 1) + if y_val == 1: + wh_name = "站内Tip盒堆栈(右)" + elif y_val in [2, 3]: + wh_name = "站内Tip盒堆栈(左)" + y = y - 1 # 调整列号,因为左侧仓库对应的 Bioyond y=2 实际上是它的第1列 + if hasattr(deck, "warehouses") and wh_name in deck.warehouses: warehouse = deck.warehouses[wh_name] logger.debug(f"[Warehouse匹配] 找到warehouse: {wh_name} (容量: {warehouse.capacity}, 行×列: {warehouse.num_items_x}×{warehouse.num_items_y})") # Bioyond坐标映射 (重要!): x→行(1=A,2=B...), y→列(1=01,2=02...), z→层(通常=1) - # PyLabRobot warehouse是列优先存储: A01,B01,C01,D01, A02,B02,C02,D02, ... x = loc.get("x", 1) # 行号 (1-based: 1=A, 2=B, 3=C, 4=D) y = loc.get("y", 1) # 列号 (1-based: 1=01, 2=02, 3=03...) z = loc.get("z", 1) # 层号 (1-based, 通常为1) @@ -809,12 +833,23 @@ def resource_bioyond_to_plr(bioyond_materials: list[dict], type_mapping: Dict[st if wh_name == "堆栈1右": y = y - 4 # 将5-8映射到1-4 - # 特殊处理:对于1行×N列的横向warehouse(如站内试剂存放堆栈) - # Bioyond的y坐标表示线性位置序号,而不是列号 - if warehouse.num_items_y == 1: - # 1行warehouse: 直接用y作为线性索引 - idx = y - 1 - logger.debug(f"1行warehouse {wh_name}: y={y} → idx={idx}") + # 特殊处理竖向warehouse(站内试剂存放堆栈、测量小瓶仓库) + # 这些warehouse使用 vertical-col-major 布局 + if wh_name in ["站内试剂存放堆栈", "测量小瓶仓库(测密度)"]: + # vertical-col-major 布局的坐标映射: + # - Bioyond的x(1=A,2=B)对应warehouse的列(col, x方向) + # - Bioyond的y(1=01,2=02,3=03)对应warehouse的行(row, y方向),从下到上 + # vertical-col-major 中: row=0 对应底部,row=n-1 对应顶部 + # Bioyond y=1(01) 对应底部 → row=0, y=2(02) 对应中间 → row=1 + # 索引计算: idx = row * num_cols + col + col_idx = x - 1 # Bioyond的x(A,B) → col索引(0,1) + row_idx = y - 1 # Bioyond的y(01,02,03) → row索引(0,1,2) + layer_idx = z - 1 + + idx = layer_idx * (warehouse.num_items_x * warehouse.num_items_y) + row_idx * warehouse.num_items_y + col_idx + logger.debug(f"🔍 竖向warehouse {wh_name}: Bioyond(x={x},y={y},z={z}) → warehouse(col={col_idx},row={row_idx},layer={layer_idx}) → idx={idx}, capacity={warehouse.capacity}") + + # 普通横向warehouse的处理 else: # 多行warehouse: 根据 layout 使用不同的索引计算 row_idx = x - 1 # x表示行: 转为0-based @@ -838,6 +873,7 @@ def resource_bioyond_to_plr(bioyond_materials: list[dict], type_mapping: Dict[st if 0 <= idx < warehouse.capacity: if warehouse[idx] is None or isinstance(warehouse[idx], ResourceHolder): + # 物料尺寸已在放入warehouse前根据需要进行了交换 warehouse[idx] = plr_material logger.debug(f"✅ 物料 {unique_name} 放置到 {wh_name}[{idx}] (Bioyond坐标: x={loc.get('x')}, y={loc.get('y')})") else: @@ -1011,11 +1047,24 @@ def resource_plr_to_bioyond(plr_resources: list[ResourcePLR], type_mapping: dict logger.debug(f" 📭 [单瓶物料] {resource.name} 无液体,使用资源名: {material_name}") # 🎯 处理物料默认参数和单位 - # 检查是否有该物料名称的默认参数配置 + # 优先级: typeId参数 > 物料名称参数 > 默认值 default_unit = "个" # 默认单位 material_parameters = {} - if material_name in material_params: + # 1️⃣ 首先检查是否有 typeId 对应的参数配置(从 material_params 中获取,key 格式为 "type:") + type_params_key = f"type:{type_id}" + if type_params_key in material_params: + params_config = material_params[type_params_key].copy() + + # 提取 unit 字段(如果有) + if "unit" in params_config: + default_unit = params_config.pop("unit") # 从参数中移除,放到外层 + + # 剩余的字段放入 Parameters + material_parameters = params_config + logger.debug(f" 🔧 [物料参数-按typeId] 为 typeId={type_id[:8]}... 应用配置: unit={default_unit}, parameters={material_parameters}") + # 2️⃣ 其次检查是否有该物料名称的默认参数配置 + elif material_name in material_params: params_config = material_params[material_name].copy() # 提取 unit 字段(如果有) @@ -1024,7 +1073,7 @@ def resource_plr_to_bioyond(plr_resources: list[ResourcePLR], type_mapping: dict # 剩余的字段放入 Parameters material_parameters = params_config - logger.debug(f" 🔧 [物料参数] 为 {material_name} 应用配置: unit={default_unit}, parameters={material_parameters}") + logger.debug(f" 🔧 [物料参数-按名称] 为 {material_name} 应用配置: unit={default_unit}, parameters={material_parameters}") # 转换为 JSON 字符串 parameters_json = json.dumps(material_parameters) if material_parameters else "{}" diff --git a/unilabos/resources/itemized_carrier.py b/unilabos/resources/itemized_carrier.py index a5207d4c..fe55c39e 100644 --- a/unilabos/resources/itemized_carrier.py +++ b/unilabos/resources/itemized_carrier.py @@ -29,7 +29,7 @@ class Bottle(Well): size_x: float = 0.0, size_y: float = 0.0, size_z: float = 0.0, - barcode: Optional[str] = "", + barcode: Optional[str] = None, category: str = "container", model: Optional[str] = None, **kwargs, @@ -50,13 +50,45 @@ class Bottle(Well): self.barcode = barcode def serialize(self) -> dict: + # Pylabrobot expects barcode to be an object with serialize(), but here it is a str. + # We temporarily unset it to avoid AttributeError in super().serialize(). + _barcode = self.barcode + self.barcode = None + try: + data = super().serialize() + finally: + self.barcode = _barcode + return { - **super().serialize(), + **data, "diameter": self.diameter, "height": self.height, - "barcode": self.barcode, } + @classmethod + def deserialize(cls, data: dict, allow_marshal: bool = False): + # Extract barcode before calling parent deserialize to avoid type error + barcode_data = data.pop("barcode", None) + + # Call parent deserialize + instance = super(Bottle, cls).deserialize(data, allow_marshal=allow_marshal) + + # Set barcode as string (not as Barcode object) + if barcode_data: + if isinstance(barcode_data, str): + instance.barcode = barcode_data + elif isinstance(barcode_data, dict): + # If it's a dict (Barcode serialized format), extract the data field + instance.barcode = barcode_data.get("data", "") + else: + instance.barcode = "" + + # Set additional attributes + instance.diameter = data.get("diameter", instance._size_x) + instance.height = data.get("height", instance._size_z) + + return instance + T = TypeVar("T", bound=ResourceHolder) S = TypeVar("S", bound=ResourceHolder) diff --git a/unilabos/resources/resource_tracker.py b/unilabos/resources/resource_tracker.py index afd4c3b9..4097782d 100644 --- a/unilabos/resources/resource_tracker.py +++ b/unilabos/resources/resource_tracker.py @@ -621,6 +621,16 @@ class ResourceTreeSet(object): """ return [tree.root_node for tree in self.trees] + @property + def root_nodes_uuid(self) -> List[ResourceDictInstance]: + """ + 获取所有树的根节点 + + Returns: + 所有根节点的资源实例列表 + """ + return [tree.root_node.res_content.uuid for tree in self.trees] + @property def all_nodes(self) -> List[ResourceDictInstance]: """ diff --git a/unilabos/resources/warehouse.py b/unilabos/resources/warehouse.py index 4dcda6d9..929a4e4d 100644 --- a/unilabos/resources/warehouse.py +++ b/unilabos/resources/warehouse.py @@ -27,6 +27,7 @@ def warehouse_factory( category: str = "warehouse", model: Optional[str] = None, col_offset: int = 0, # 列起始偏移量,用于生成A05-D08等命名 + row_offset: int = 0, # 行起始偏移量,用于生成F01-J03等命名 layout: str = "col-major", # 新增:排序方式,"col-major"=列优先,"row-major"=行优先 ): # 创建位置坐标 @@ -42,6 +43,10 @@ def warehouse_factory( if layout == "row-major": # 行优先:row=0(A行) 应该显示在上方,需要较小的 y 值 y = dy + row * item_dy + elif layout == "vertical-col-major": + # 竖向warehouse: row=0 对应顶部(y小),row=n-1 对应底部(y大) + # 但标签 01 应该在底部,所以使用反向映射 + y = dy + (num_items_y - row - 1) * item_dy else: # 列优先:保持原逻辑(row=0 对应较大的 y) y = dy + (num_items_y - row - 1) * item_dy @@ -65,10 +70,10 @@ def warehouse_factory( if layout == "row-major": # 行优先顺序: A01,A02,A03,A04, B01,B02,B03,B04 # locations[0] 对应 row=0, y最大(前端顶部)→ 应该是 A01 - keys = [f"{LETTERS[j]}{i + 1 + col_offset:02d}" for j in range(len_y) for i in range(len_x)] + keys = [f"{LETTERS[j + row_offset]}{i + 1 + col_offset:02d}" for j in range(len_y) for i in range(len_x)] else: # 列优先顺序: A01,B01,C01,D01, A02,B02,C02,D02 - keys = [f"{LETTERS[j]}{i + 1 + col_offset:02d}" for i in range(len_x) for j in range(len_y)] + keys = [f"{LETTERS[j + row_offset]}{i + 1 + col_offset:02d}" for i in range(len_x) for j in range(len_y)] sites = {i: site for i, site in zip(keys, _sites.values())} diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index c248882b..737167ab 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -625,7 +625,7 @@ class BaseROS2DeviceNode(Node, Generic[T]): ) # type: ignore raw_nodes = json.loads(response.response) tree_set = ResourceTreeSet.from_raw_dict_list(raw_nodes) - self.lab_logger().debug(f"获取资源结果: {len(tree_set.trees)} 个资源树") + self.lab_logger().trace(f"获取资源结果: {len(tree_set.trees)} 个资源树 {tree_set.root_nodes}") return tree_set async def get_resource_with_dir(self, resource_id: str, with_children: bool = True) -> "ResourcePLR": diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index cf9fd704..101476a1 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -735,7 +735,7 @@ class HostNode(BaseROS2DeviceNode): if bCreate: self.lab_logger().trace(f"Status created: {device_id}.{property_name} = {msg.data}") else: - self.lab_logger().debug(f"Status updated: {device_id}.{property_name} = {msg.data}") + self.lab_logger().trace(f"Status updated: {device_id}.{property_name} = {msg.data}") def send_goal( self, diff --git a/unilabos/test/experiments/dispensing_station_bioyond.json b/unilabos/test/experiments/dispensing_station_bioyond.json index 0be4129a..a6bd5332 100644 --- a/unilabos/test/experiments/dispensing_station_bioyond.json +++ b/unilabos/test/experiments/dispensing_station_bioyond.json @@ -9,49 +9,125 @@ "parent": null, "type": "device", "class": "bioyond_dispensing_station", - "config": { - "config": { - "api_key": "DE9BDDA0", - "api_host": "http://192.168.1.200:44388", - "material_type_mappings": { - "BIOYOND_PolymerStation_1FlaskCarrier": [ - "烧杯", - "3a14196b-24f2-ca49-9081-0cab8021bf1a" - ], - "BIOYOND_PolymerStation_1BottleCarrier": [ - "试剂瓶", - "3a14196b-8bcf-a460-4f74-23f21ca79e72" - ], - "BIOYOND_PolymerStation_6StockCarrier": [ - "分装板", - "3a14196e-5dfe-6e21-0c79-fe2036d052c4" - ], - "BIOYOND_PolymerStation_Liquid_Vial": [ - "10%分装小瓶", - "3a14196c-76be-2279-4e22-7310d69aed68" - ], - "BIOYOND_PolymerStation_Solid_Vial": [ - "90%分装小瓶", - "3a14196c-cdcf-088d-dc7d-5cf38f0ad9ea" - ], - "BIOYOND_PolymerStation_8StockCarrier": [ - "样品板", - "3a14196e-b7a0-a5da-1931-35f3000281e9" - ], - "BIOYOND_PolymerStation_Solid_Stock": [ - "样品瓶", - "3a14196a-cf7d-8aea-48d8-b9662c7dba94" - ] - } - }, - "deck": { - "data": { - "_resource_child_name": "Bioyond_Dispensing_Deck", - "_resource_type": "unilabos.resources.bioyond.decks:BIOYOND_PolymerPreparationStation_Deck" - } - }, - "protocol_type": [] + "position": { + "x": 0, + "y": 0, + "z": 0 }, + "config": { + "api_key": "YOUR_API_KEY", + "api_host": "http://your-api-host:port", + "material_type_mappings": { + "BIOYOND_PolymerStation_1FlaskCarrier": [ + "烧杯", + "uuid-placeholder-flask" + ], + "BIOYOND_PolymerStation_1BottleCarrier": [ + "试剂瓶", + "uuid-placeholder-bottle" + ], + "BIOYOND_PolymerStation_6StockCarrier": [ + "分装板", + "uuid-placeholder-stock-6" + ], + "BIOYOND_PolymerStation_Liquid_Vial": [ + "10%分装小瓶", + "uuid-placeholder-liquid-vial" + ], + "BIOYOND_PolymerStation_Solid_Vial": [ + "90%分装小瓶", + "uuid-placeholder-solid-vial" + ], + "BIOYOND_PolymerStation_8StockCarrier": [ + "样品板", + "uuid-placeholder-stock-8" + ], + "BIOYOND_PolymerStation_Solid_Stock": [ + "样品瓶", + "uuid-placeholder-solid-stock" + ] + }, + "warehouse_mapping": { + "粉末堆栈": { + "uuid": "uuid-placeholder-powder-stack", + "site_uuids": { + "A01": "uuid-placeholder-powder-A01", + "A02": "uuid-placeholder-powder-A02", + "A03": "uuid-placeholder-powder-A03", + "A04": "uuid-placeholder-powder-A04", + "B01": "uuid-placeholder-powder-B01", + "B02": "uuid-placeholder-powder-B02", + "B03": "uuid-placeholder-powder-B03", + "B04": "uuid-placeholder-powder-B04", + "C01": "uuid-placeholder-powder-C01", + "C02": "uuid-placeholder-powder-C02", + "C03": "uuid-placeholder-powder-C03", + "C04": "uuid-placeholder-powder-C04", + "D01": "uuid-placeholder-powder-D01", + "D02": "uuid-placeholder-powder-D02", + "D03": "uuid-placeholder-powder-D03", + "D04": "uuid-placeholder-powder-D04" + } + }, + "溶液堆栈": { + "uuid": "uuid-placeholder-liquid-stack", + "site_uuids": { + "A01": "uuid-placeholder-liquid-A01", + "A02": "uuid-placeholder-liquid-A02", + "A03": "uuid-placeholder-liquid-A03", + "A04": "uuid-placeholder-liquid-A04", + "B01": "uuid-placeholder-liquid-B01", + "B02": "uuid-placeholder-liquid-B02", + "B03": "uuid-placeholder-liquid-B03", + "B04": "uuid-placeholder-liquid-B04", + "C01": "uuid-placeholder-liquid-C01", + "C02": "uuid-placeholder-liquid-C02", + "C03": "uuid-placeholder-liquid-C03", + "C04": "uuid-placeholder-liquid-C04", + "D01": "uuid-placeholder-liquid-D01", + "D02": "uuid-placeholder-liquid-D02", + "D03": "uuid-placeholder-liquid-D03", + "D04": "uuid-placeholder-liquid-D04" + } + }, + "试剂堆栈": { + "uuid": "uuid-placeholder-reagent-stack", + "site_uuids": { + "A01": "uuid-placeholder-reagent-A01", + "A02": "uuid-placeholder-reagent-A02", + "A03": "uuid-placeholder-reagent-A03", + "A04": "uuid-placeholder-reagent-A04", + "B01": "uuid-placeholder-reagent-B01", + "B02": "uuid-placeholder-reagent-B02", + "B03": "uuid-placeholder-reagent-B03", + "B04": "uuid-placeholder-reagent-B04" + } + } + }, + "http_service_config": { + "http_service_host": "127.0.0.1", + "http_service_port": 8080 + }, + "material_default_parameters": { + "NMP": { + "unit": "毫升", + "density": "1.03", + "densityUnit": "g/mL", + "description": "N-甲基吡咯烷酮 (N-Methyl-2-pyrrolidone)" + } + }, + "material_type_parameters": {} + }, + "deck": { + "data": { + "_resource_child_name": "Bioyond_Dispensing_Deck", + "_resource_type": "unilabos.resources.bioyond.decks:BIOYOND_PolymerPreparationStation_Deck" + } + }, + "size_x": 2700.0, + "size_y": 1080.0, + "size_z": 1500.0, + "protocol_type": [], "data": {} }, { @@ -80,4 +156,4 @@ "data": {} } ] -} +} \ No newline at end of file diff --git a/unilabos/test/experiments/reaction_station_bioyond.json b/unilabos/test/experiments/reaction_station_bioyond.json index 5cbe5b43..74f2d6d9 100644 --- a/unilabos/test/experiments/reaction_station_bioyond.json +++ b/unilabos/test/experiments/reaction_station_bioyond.json @@ -14,60 +14,200 @@ ], "type": "device", "class": "reaction_station.bioyond", - "position": {"x": 0, "y": 3800, "z": 0}, - "config": { - "config": { - "api_key": "DE9BDDA0", - "api_host": "http://192.168.1.200:44402", - "workflow_mappings": { - "reactor_taken_out": "3a16081e-4788-ca37-eff4-ceed8d7019d1", - "reactor_taken_in": "3a160df6-76b3-0957-9eb0-cb496d5721c6", - "Solid_feeding_vials": "3a160877-87e7-7699-7bc6-ec72b05eb5e6", - "Liquid_feeding_vials(non-titration)": "3a167d99-6158-c6f0-15b5-eb030f7d8e47", - "Liquid_feeding_solvents": "3a160824-0665-01ed-285a-51ef817a9046", - "Liquid_feeding(titration)": "3a16082a-96ac-0449-446a-4ed39f3365b6", - "liquid_feeding_beaker": "3a16087e-124f-8ddb-8ec1-c2dff09ca784", - "Drip_back": "3a162cf9-6aac-565a-ddd7-682ba1796a4a" - }, - "material_type_mappings": { - "BIOYOND_PolymerStation_Reactor": [ - "反应器", - "3a14233b-902d-0d7b-4533-3f60f1c41c1b" - ], - "BIOYOND_PolymerStation_1BottleCarrier": [ - "试剂瓶", - "3a14233b-56e3-6c53-a8ab-fcaac163a9ba" - ], - "BIOYOND_PolymerStation_1FlaskCarrier": [ - "烧杯", - "3a14233b-f0a9-ba84-eaa9-0d4718b361b6" - ], - "BIOYOND_PolymerStation_6StockCarrier": [ - "样品板", - "3a142339-80de-8f25-6093-1b1b1b6c322e" - ], - "BIOYOND_PolymerStation_Solid_Vial": [ - "90%分装小瓶", - "3a14233a-26e1-28f8-af6a-60ca06ba0165" - ], - "BIOYOND_PolymerStation_Liquid_Vial": [ - "10%分装小瓶", - "3a14233a-84a3-088d-6676-7cb4acd57c64" - ], - "BIOYOND_PolymerStation_TipBox": [ - "枪头盒", - "3a143890-9d51-60ac-6d6f-6edb43c12041" - ] - } - }, - "deck": { - "data": { - "_resource_child_name": "Bioyond_Deck", - "_resource_type": "unilabos.resources.bioyond.decks:BIOYOND_PolymerReactionStation_Deck" - } - }, - "protocol_type": [] + "position": { + "x": 0, + "y": 1100, + "z": 0 }, + "config": { + "api_key": "YOUR_API_KEY", + "api_host": "http://your-api-host:port", + "workflow_mappings": { + "reactor_taken_out": "workflow-uuid-reactor-out", + "reactor_taken_in": "workflow-uuid-reactor-in", + "Solid_feeding_vials": "workflow-uuid-solid-vials", + "Liquid_feeding_vials(non-titration)": "workflow-uuid-liquid-vials", + "Liquid_feeding_solvents": "workflow-uuid-solvents", + "Liquid_feeding(titration)": "workflow-uuid-titration", + "liquid_feeding_beaker": "workflow-uuid-beaker", + "Drip_back": "workflow-uuid-drip-back" + }, + "material_type_mappings": { + "BIOYOND_PolymerStation_Reactor": [ + "反应器", + "uuid-placeholder-reactor" + ], + "BIOYOND_PolymerStation_1BottleCarrier": [ + "试剂瓶", + "uuid-placeholder-bottle" + ], + "BIOYOND_PolymerStation_1FlaskCarrier": [ + "烧杯", + "uuid-placeholder-beaker" + ], + "BIOYOND_PolymerStation_6StockCarrier": [ + "样品板", + "uuid-placeholder-sample-plate" + ], + "BIOYOND_PolymerStation_Solid_Vial": [ + "90%分装小瓶", + "uuid-placeholder-solid-vial" + ], + "BIOYOND_PolymerStation_Liquid_Vial": [ + "10%分装小瓶", + "uuid-placeholder-liquid-vial" + ], + "BIOYOND_PolymerStation_TipBox": [ + "枪头盒", + "uuid-placeholder-tipbox" + ], + "BIOYOND_PolymerStation_Measurement_Vial": [ + "测量小瓶", + "uuid-placeholder-measure-vial" + ] + }, + "warehouse_mapping": { + "堆栈1左": { + "uuid": "uuid-placeholder-stack1-left", + "site_uuids": { + "A01": "uuid-placeholder-site-A01", + "A02": "uuid-placeholder-site-A02", + "A03": "uuid-placeholder-site-A03", + "A04": "uuid-placeholder-site-A04", + "B01": "uuid-placeholder-site-B01", + "B02": "uuid-placeholder-site-B02", + "B03": "uuid-placeholder-site-B03", + "B04": "uuid-placeholder-site-B04", + "C01": "uuid-placeholder-site-C01", + "C02": "uuid-placeholder-site-C02", + "C03": "uuid-placeholder-site-C03", + "C04": "uuid-placeholder-site-C04", + "D01": "uuid-placeholder-site-D01", + "D02": "uuid-placeholder-site-D02", + "D03": "uuid-placeholder-site-D03", + "D04": "uuid-placeholder-site-D04" + } + }, + "堆栈1右": { + "uuid": "uuid-placeholder-stack1-right", + "site_uuids": { + "A05": "uuid-placeholder-site-A05", + "A06": "uuid-placeholder-site-A06", + "A07": "uuid-placeholder-site-A07", + "A08": "uuid-placeholder-site-A08", + "B05": "uuid-placeholder-site-B05", + "B06": "uuid-placeholder-site-B06", + "B07": "uuid-placeholder-site-B07", + "B08": "uuid-placeholder-site-B08", + "C05": "uuid-placeholder-site-C05", + "C06": "uuid-placeholder-site-C06", + "C07": "uuid-placeholder-site-C07", + "C08": "uuid-placeholder-site-C08", + "D05": "uuid-placeholder-site-D05", + "D06": "uuid-placeholder-site-D06", + "D07": "uuid-placeholder-site-D07", + "D08": "uuid-placeholder-site-D08" + } + }, + "站内试剂存放堆栈": { + "uuid": "uuid-placeholder-reagent-stack", + "site_uuids": { + "A01": "uuid-placeholder-reagent-A01", + "A02": "uuid-placeholder-reagent-A02" + } + }, + "测量小瓶仓库(测密度)": { + "uuid": "uuid-placeholder-density-stack", + "site_uuids": { + "A01": "uuid-placeholder-density-A01", + "A02": "uuid-placeholder-density-A02", + "A03": "uuid-placeholder-density-A03", + "B01": "uuid-placeholder-density-B01", + "B02": "uuid-placeholder-density-B02", + "B03": "uuid-placeholder-density-B03" + } + }, + "站内Tip盒堆栈(左)": { + "uuid": "uuid-placeholder-tipstack-left", + "site_uuids": { + "A02": "uuid-placeholder-tip-A02", + "A03": "uuid-placeholder-tip-A03", + "B02": "uuid-placeholder-tip-B02", + "B03": "uuid-placeholder-tip-B03" + } + }, + "站内Tip盒堆栈(右)": { + "uuid": "uuid-placeholder-tipstack-right", + "site_uuids": { + "A01": "uuid-placeholder-tip-A01", + "B01": "uuid-placeholder-tip-B01" + } + } + }, + "workflow_to_section_map": { + "reactor_taken_in": "反应器放入", + "reactor_taken_out": "反应器取出", + "Solid_feeding_vials": "固体投料-小瓶", + "Liquid_feeding_vials(non-titration)": "液体投料-小瓶(非滴定)", + "Liquid_feeding_solvents": "液体投料-溶剂", + "Liquid_feeding(titration)": "液体投料-滴定", + "liquid_feeding_beaker": "液体投料-烧杯", + "Drip_back": "液体回滴" + }, + "action_names": { + "reactor_taken_in": { + "config": "通量-配置", + "stirring": "反应模块-开始搅拌" + }, + "solid_feeding_vials": { + "feeding": "粉末加样模块-投料", + "observe": "反应模块-观察搅拌结果" + }, + "liquid_feeding_vials_non_titration": { + "liquid": "稀释液瓶加液位-液体投料", + "observe": "反应模块-滴定结果观察" + }, + "liquid_feeding_solvents": { + "liquid": "试剂AB放置位-试剂吸液分液", + "observe": "反应模块-观察搅拌结果" + }, + "liquid_feeding_titration": { + "liquid": "稀释液瓶加液位-稀释液吸液分液", + "observe": "反应模块-滴定结果观察" + }, + "liquid_feeding_beaker": { + "liquid": "烧杯溶液放置位-烧杯吸液分液", + "observe": "反应模块-观察搅拌结果" + }, + "drip_back": { + "liquid": "试剂AB放置位-试剂吸液分液", + "observe": "反应模块-向下滴定结果观察" + } + }, + "http_service_config": { + "http_service_host": "127.0.0.1", + "http_service_port": 8080 + }, + "material_default_parameters": { + "NMP": { + "unit": "毫升", + "density": "1.03", + "densityUnit": "g/mL", + "description": "N-甲基吡咯烷酮 (N-Methyl-2-pyrrolidone)" + } + }, + "material_type_parameters": {} + }, + "deck": { + "data": { + "_resource_child_name": "Bioyond_Deck", + "_resource_type": "unilabos.resources.bioyond.decks:BIOYOND_PolymerReactionStation_Deck" + } + }, + "size_x": 2700.0, + "size_y": 1080.0, + "size_z": 2500.0, + "protocol_type": [], "data": {} }, { @@ -77,7 +217,11 @@ "parent": "reaction_station_bioyond", "type": "device", "class": "reaction_station.reactor", - "position": {"x": 1150, "y": 380, "z": 0}, + "position": { + "x": 1150, + "y": 300, + "z": 0 + }, "config": {}, "data": {} }, @@ -88,7 +232,11 @@ "parent": "reaction_station_bioyond", "type": "device", "class": "reaction_station.reactor", - "position": {"x": 1365, "y": 380, "z": 0}, + "position": { + "x": 1365, + "y": 300, + "z": 0 + }, "config": {}, "data": {} }, @@ -99,7 +247,11 @@ "parent": "reaction_station_bioyond", "type": "device", "class": "reaction_station.reactor", - "position": {"x": 1580, "y": 380, "z": 0}, + "position": { + "x": 1580, + "y": 300, + "z": 0 + }, "config": {}, "data": {} }, @@ -110,7 +262,11 @@ "parent": "reaction_station_bioyond", "type": "device", "class": "reaction_station.reactor", - "position": {"x": 1790, "y": 380, "z": 0}, + "position": { + "x": 1790, + "y": 300, + "z": 0 + }, "config": {}, "data": {} }, @@ -121,7 +277,11 @@ "parent": "reaction_station_bioyond", "type": "device", "class": "reaction_station.reactor", - "position": {"x": 2010, "y": 380, "z": 0}, + "position": { + "x": 2010, + "y": 300, + "z": 0 + }, "config": {}, "data": {} }, @@ -134,7 +294,7 @@ "class": "BIOYOND_PolymerReactionStation_Deck", "position": { "x": 0, - "y": 0, + "y": 1100, "z": 0 }, "config": { @@ -150,4 +310,4 @@ "data": {} } ] -} +} \ No newline at end of file diff --git a/unilabos/utils/README_LOGGING.md b/unilabos/utils/README_LOGGING.md new file mode 100644 index 00000000..9cb551bb --- /dev/null +++ b/unilabos/utils/README_LOGGING.md @@ -0,0 +1,187 @@ +# UniLabOS 日志配置说明 + +> **文件位置**: `unilabos/utils/log.py` +> **最后更新**: 2026-01-11 +> **维护者**: Uni-Lab-OS 开发团队 + +本文档说明 UniLabOS 日志系统中对第三方库和内部模块的日志级别配置,避免控制台被过多的 DEBUG 日志淹没。 + +--- + +## 📋 已屏蔽的日志 + +以下库/模块的日志已被设置为 **WARNING** 或 **INFO** 级别,不再显示 DEBUG 日志: + +### 1. pymodbus(Modbus 通信库) + +**配置位置**: `log.py` 第196-200行 + +```python +# pymodbus 库的日志太详细,设置为 WARNING +logging.getLogger('pymodbus').setLevel(logging.WARNING) +logging.getLogger('pymodbus.logging').setLevel(logging.WARNING) +logging.getLogger('pymodbus.logging.base').setLevel(logging.WARNING) +logging.getLogger('pymodbus.logging.decoders').setLevel(logging.WARNING) +``` + +**屏蔽原因**: +- pymodbus 在 DEBUG 级别会输出每一次 Modbus 通信的详细信息 +- 包括 `Processing: 0x5 0x1e 0x0 0x0...` 等原始数据 +- 包括 `decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(...)` 等解码信息 +- 这些信息对日常使用价值不大,但会快速刷屏 + +**典型被屏蔽的日志**: +``` +[DEBUG] Processing: 0x5 0x1e 0x0 0x0 0x0 0x7 0x1 0x3 0x4 0x0 0x0 0x0 0x0 [handleFrame:72] [pymodbus.logging.base] +[DEBUG] decoded PDU function_code(3 sub -1) -> ReadHoldingRegistersResponse(...) [decode:79] [pymodbus.logging.decoders] +``` + +--- + +### 2. websockets(WebSocket 库) + +**配置位置**: `log.py` 第202-205行 + +```python +# websockets 库的日志输出较多,设置为 WARNING +logging.getLogger('websockets').setLevel(logging.WARNING) +logging.getLogger('websockets.client').setLevel(logging.WARNING) +logging.getLogger('websockets.server').setLevel(logging.WARNING) +``` + +**屏蔽原因**: +- WebSocket 连接、断开、心跳等信息在 DEBUG 级别会频繁输出 +- 对于长时间运行的服务,这些日志意义不大 + +--- + +### 3. ROS Host Node(设备状态更新) + +**配置位置**: `log.py` 第207-208行 + +```python +# ROS 节点的状态更新日志过于频繁,设置为 INFO +logging.getLogger('unilabos.ros.nodes.presets.host_node').setLevel(logging.INFO) +``` + +**屏蔽原因**: +- 设备状态更新(如手套箱压力)每隔几秒就会更新一次 +- DEBUG 日志会记录每一次状态变化,导致日志刷屏 +- 这些频繁的状态更新对调试价值不大 + +**典型被屏蔽的日志**: +``` +[DEBUG] [/devices/host_node] Status updated: BatteryStation.data_glove_box_pressure = 4.229457855224609 [property_callback:666] [unilabos.ros.nodes.presets.host_node] +``` + +--- + +### 4. asyncio 和 urllib3 + +**配置位置**: `log.py` 第224-225行 + +```python +logging.getLogger("asyncio").setLevel(logging.INFO) +logging.getLogger("urllib3").setLevel(logging.INFO) +``` + +**屏蔽原因**: +- asyncio: 异步 IO 的内部调试信息 +- urllib3: HTTP 请求库的连接池、重试等详细信息 + +--- + +## 🔧 如何临时启用这些日志(调试用) + +### 方法1: 修改 log.py(永久启用) + +在 `log.py` 的 `configure_logger()` 函数中,将对应库的日志级别改为 `logging.DEBUG`: + +```python +# 临时启用 pymodbus 的 DEBUG 日志 +logging.getLogger('pymodbus').setLevel(logging.DEBUG) +logging.getLogger('pymodbus.logging').setLevel(logging.DEBUG) +logging.getLogger('pymodbus.logging.base').setLevel(logging.DEBUG) +logging.getLogger('pymodbus.logging.decoders').setLevel(logging.DEBUG) +``` + +### 方法2: 在代码中临时启用(单次调试) + +在需要调试的代码文件中添加: + +```python +import logging + +# 临时启用 pymodbus DEBUG 日志 +logging.getLogger('pymodbus').setLevel(logging.DEBUG) + +# 你的 Modbus 调试代码 +... + +# 调试完成后恢复 +logging.getLogger('pymodbus').setLevel(logging.WARNING) +``` + +### 方法3: 使用环境变量或配置文件(推荐) + +未来可以考虑在启动参数中添加 `--debug-modbus` 等选项来动态控制。 + +--- + +## 📊 日志级别说明 + +| 级别 | 数值 | 用途 | 是否显示 | +|------|------|------|---------| +| TRACE | 5 | 最详细的跟踪信息 | ✅ | +| DEBUG | 10 | 调试信息 | ✅ | +| INFO | 20 | 一般信息 | ✅ | +| WARNING | 30 | 警告信息 | ✅ | +| ERROR | 40 | 错误信息 | ✅ | +| CRITICAL | 50 | 严重错误 | ✅ | + +**当前配置**: +- UniLabOS 自身代码: DEBUG 及以上全部显示 +- pymodbus/websockets: **WARNING** 及以上显示(屏蔽 DEBUG/INFO) +- ROS host_node: **INFO** 及以上显示(屏蔽 DEBUG) + +--- + +## ⚠️ 重要提示 + +### 修改生效时间 +- 修改 `log.py` 后需要 **重启 unilab 服务** 才能生效 +- 不需要重新安装或重新编译 + +### 调试 Modbus 通信问题 +如果需要调试 Modbus 通信故障,应该: +1. 临时启用 pymodbus DEBUG 日志(方法2) +2. 复现问题 +3. 查看详细的通信日志 +4. 调试完成后记得恢复 WARNING 级别 + +### 调试设备状态问题 +如果需要调试设备状态更新问题: +```python +logging.getLogger('unilabos.ros.nodes.presets.host_node').setLevel(logging.DEBUG) +``` + +--- + +## 📝 维护记录 + +| 日期 | 修改内容 | 操作人 | +|------|---------|--------| +| 2026-01-11 | 初始创建,添加 pymodbus、websockets、ROS host_node 屏蔽 | - | +| 2026-01-07 | 添加 pymodbus 和 websockets 屏蔽(log-0107.py) | - | + +--- + +## 🔗 相关文件 + +- `log.py` - 日志配置主文件 +- `unilabos/devices/workstation/coin_cell_assembly/` - 使用 Modbus 的扣电工作站代码 +- `unilabos/ros/nodes/presets/host_node.py` - ROS 主机节点代码 + +--- + +**维护提示**: 如果添加了新的第三方库或发现新的日志刷屏问题,请在此文档中记录并更新 `log.py` 配置。 diff --git a/unilabos/utils/log.py b/unilabos/utils/log.py index ffe13c02..f10bd518 100644 --- a/unilabos/utils/log.py +++ b/unilabos/utils/log.py @@ -191,6 +191,21 @@ def configure_logger(loglevel=None, working_dir=None): # 添加处理器到根日志记录器 root_logger.addHandler(console_handler) + + # 降低第三方库的日志级别,避免过多输出 + # pymodbus 库的日志太详细,设置为 WARNING + logging.getLogger('pymodbus').setLevel(logging.WARNING) + logging.getLogger('pymodbus.logging').setLevel(logging.WARNING) + logging.getLogger('pymodbus.logging.base').setLevel(logging.WARNING) + logging.getLogger('pymodbus.logging.decoders').setLevel(logging.WARNING) + + # websockets 库的日志输出较多,设置为 WARNING + logging.getLogger('websockets').setLevel(logging.WARNING) + logging.getLogger('websockets.client').setLevel(logging.WARNING) + logging.getLogger('websockets.server').setLevel(logging.WARNING) + + # ROS 节点的状态更新日志过于频繁,设置为 INFO + logging.getLogger('unilabos.ros.nodes.presets.host_node').setLevel(logging.INFO) # 如果指定了工作目录,添加文件处理器 if working_dir is not None: @@ -215,6 +230,7 @@ def configure_logger(loglevel=None, working_dir=None): logging.getLogger("urllib3").setLevel(logging.INFO) + # 配置日志系统 configure_logger() diff --git a/yibin_electrolyte_config_example.json b/yibin_electrolyte_config_example.json new file mode 100644 index 00000000..d5efc357 --- /dev/null +++ b/yibin_electrolyte_config_example.json @@ -0,0 +1,126 @@ +{ + "nodes": [ + { + "id": "bioyond_cell_workstation", + "name": "配液分液工站 (示例)", + "parent": null, + "children": [ + "YB_Bioyond_Deck" + ], + "type": "device", + "class": "bioyond_cell", + "config": { + "deck": { + "data": { + "_resource_child_name": "YB_Bioyond_Deck", + "_resource_type": "unilabos.resources.bioyond.decks:BIOYOND_YB_Deck" + } + }, + "protocol_type": [], + "bioyond_config": { + "api_host": "http://YOUR_API_HOST:PORT", + "api_key": "YOUR_API_KEY", + "timeout": 30, + "report_token": "YOUR_REPORT_TOKEN", + "HTTP_host": "YOUR_LOCAL_IP", + "HTTP_port": 8080, + "debug_mode": false, + "material_type_mappings": { + "100ml液体": [ + "YB_100ml_yeti", + "00000000-0000-0000-0000-000000000000" + ], + "液": [ + "YB_ye", + "00000000-0000-0000-0000-000000000000" + ], + "高粘液": [ + "YB_gaonianye", + "00000000-0000-0000-0000-000000000000" + ], + "加样头(大)": [ + "YB_jia_yang_tou_da_Carrier", + "00000000-0000-0000-0000-000000000000" + ], + "5ml分液瓶板": [ + "YB_5ml_fenyepingban", + "00000000-0000-0000-0000-000000000000" + ], + "5ml分液瓶": [ + "YB_5ml_fenyeping", + "00000000-0000-0000-0000-000000000000" + ], + "20ml分液瓶板": [ + "YB_20ml_fenyepingban", + "00000000-0000-0000-0000-000000000000" + ], + "20ml分液瓶": [ + "YB_20ml_fenyeping", + "00000000-0000-0000-0000-000000000000" + ], + "配液瓶(小)板": [ + "YB_peiyepingxiaoban", + "00000000-0000-0000-0000-000000000000" + ], + "配液瓶(小)": [ + "YB_pei_ye_xiao_Bottle", + "00000000-0000-0000-0000-000000000000" + ], + "枪头盒": [ + "YB_qiang_tou_he", + "00000000-0000-0000-0000-000000000000" + ] + }, + "warehouse_mapping": { + "示例堆栈": { + "uuid": "00000000-0000-0000-0000-000000000000", + "site_uuids": { + "A01": "00000000-0000-0000-0000-000000000000", + "B01": "00000000-0000-0000-0000-000000000000" + } + } + }, + "solid_liquid_mappings": { + "示例物料": { + "typeId": "00000000-0000-0000-0000-000000000000", + "code": "", + "barCode": "", + "name": "Example_Material", + "unit": "g", + "parameters": "", + "quantity": "2", + "warningQuantity": "1", + "details": [] + } + } + } + }, + "data": {} + }, + { + "id": "YB_Bioyond_Deck", + "name": "YB_Bioyond_Deck", + "children": [], + "parent": "bioyond_cell_workstation", + "type": "deck", + "class": "BIOYOND_YB_Deck", + "position": { + "x": 0, + "y": 0, + "z": 0 + }, + "config": { + "type": "BIOYOND_YB_Deck", + "setup": true, + "rotation": { + "x": 0, + "y": 0, + "z": 0, + "type": "Rotation" + } + }, + "data": {} + } + ], + "links": [] +} \ No newline at end of file From ec7ca6a1fea55d3fcf2a06e1a77d534856f045cb Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Sat, 17 Jan 2026 16:50:20 +0800 Subject: [PATCH 33/40] Fix/workstation yb revision (#217) * Revert log change & update registry * Revert opcua client & move electrolyte node --- unilabos/device_comms/opcua_client/client.py | 907 +++--------- unilabos/registry/devices/bioyond.yaml | 589 -------- unilabos/registry/devices/bioyond_cell.yaml | 1311 ++++++++++++++++- .../devices/bioyond_dispensing_station.yaml | 129 ++ .../devices/coin_cell_workstation.yaml | 2 +- unilabos/registry/devices/opcua_example.yaml | 114 +- .../devices/reaction_station_bioyond.yaml | 362 ++++- unilabos/registry/registry.py | 72 +- .../yibin_electrolyte_config_example.json | 0 unilabos/utils/log.py | 15 - 10 files changed, 2057 insertions(+), 1444 deletions(-) delete mode 100644 unilabos/registry/devices/bioyond.yaml rename yibin_electrolyte_config_example.json => unilabos/test/experiments/yibin_electrolyte_config_example.json (100%) diff --git a/unilabos/device_comms/opcua_client/client.py b/unilabos/device_comms/opcua_client/client.py index 27a401ff..9c8eb506 100644 --- a/unilabos/device_comms/opcua_client/client.py +++ b/unilabos/device_comms/opcua_client/client.py @@ -5,6 +5,7 @@ from typing import Any, Union, List, Dict, Callable, Optional, Tuple from pydantic import BaseModel from opcua import Client, ua +from opcua.ua import NodeClass import pandas as pd import os @@ -12,7 +13,7 @@ from unilabos.device_comms.opcua_client.node.uniopcua import Base as OpcUaNodeBa from unilabos.device_comms.opcua_client.node.uniopcua import Variable, Method, NodeType, DataType from unilabos.device_comms.universal_driver import UniversalDriver from unilabos.utils.log import logger -from unilabos.devices.workstation.post_process.decks import post_process_deck + class OpcUaNode(BaseModel): name: str @@ -54,6 +55,8 @@ class OpcUaWorkflowModel(BaseModel): """ 前后端Json解析用 """ + + class NodeFunctionJson(BaseModel): func_name: str node_name: str @@ -116,8 +119,6 @@ class BaseClient(UniversalDriver): _variables_to_find: Dict[str, Dict[str, Any]] = {} _name_mapping: Dict[str, str] = {} # 英文名到中文名的映射 _reverse_mapping: Dict[str, str] = {} # 中文名到英文名的映射 - # 直接缓存已找到的 ua.Node 对象,避免因字符串 NodeId 格式导致订阅失败 - _found_node_objects: Dict[str, Any] = {} def __init__(self): super().__init__() @@ -126,9 +127,6 @@ class BaseClient(UniversalDriver): # 初始化名称映射字典 self._name_mapping = {} self._reverse_mapping = {} - # 初始化线程锁(在子类中会被重新创建,这里提供默认实现) - import threading - self._client_lock = threading.RLock() def _set_client(self, client: Optional[Client]) -> None: if client is None: @@ -156,24 +154,15 @@ class BaseClient(UniversalDriver): if not self.client: raise ValueError('client is not connected') - logger.info(f'开始查找 {len(self._variables_to_find)} 个节点...') + logger.info('开始查找节点...') try: # 获取根节点 root = self.client.get_root_node() objects = root.get_child(["0:Objects"]) - # 记录查找前的状态 - before_count = len(self._node_registry) - # 查找节点 self._find_nodes_recursive(objects) - # 记录查找后的状态 - after_count = len(self._node_registry) - newly_found = after_count - before_count - - logger.info(f"本次查找新增 {newly_found} 个节点,当前共 {after_count} 个") - # 检查是否所有节点都已找到 not_found = [] for var_name, var_info in self._variables_to_find.items(): @@ -181,13 +170,9 @@ class BaseClient(UniversalDriver): not_found.append(var_name) if not_found: - logger.warning(f"⚠ 以下 {len(not_found)} 个节点未找到: {', '.join(not_found[:10])}{'...' if len(not_found) > 10 else ''}") - logger.warning(f"提示:请检查这些节点名称是否与服务器的 BrowseName 完全匹配(包括大小写、空格等)") - # 提供一个示例来帮助调试 - if not_found: - logger.info(f"尝试在服务器中查找第一个未找到的节点 '{not_found[0]}' 的相似节点...") + logger.warning(f"以下节点未找到: {', '.join(not_found)}") else: - logger.info(f"✓ 所有 {len(self._variables_to_find)} 个节点均已找到并注册") + logger.info("所有节点均已找到") except Exception as e: logger.error(f"查找节点失败: {e}") @@ -205,20 +190,18 @@ class BaseClient(UniversalDriver): var_info = self._variables_to_find[node_name] node_type = var_info.get("node_type") data_type = var_info.get("data_type") - node_id_str = str(node.nodeid) # 根据节点类型创建相应的对象 if node_type == NodeType.VARIABLE: - self._node_registry[node_name] = Variable(self.client, node_name, node_id_str, data_type) - logger.info(f"✓ 找到变量节点: '{node_name}', NodeId: {node_id_str}, DataType: {data_type}") - # 缓存真实的 ua.Node 对象用于订阅 - self._found_node_objects[node_name] = node + self._node_registry[node_name] = Variable(self.client, node_name, str(node.nodeid), data_type) + logger.info(f"找到变量节点: {node_name}") elif node_type == NodeType.METHOD: # 对于方法节点,需要获取父节点ID parent_node = node.get_parent() parent_node_id = str(parent_node.nodeid) - self._node_registry[node_name] = Method(self.client, node_name, node_id_str, parent_node_id, data_type) - logger.info(f"✓ 找到方法节点: '{node_name}', NodeId: {node_id_str}, ParentId: {parent_node_id}") + self._node_registry[node_name] = Method(self.client, node_name, str(node.nodeid), parent_node_id, + data_type) + logger.info(f"找到方法节点: {node_name}") # 递归处理子节点 for child in node.get_children(): @@ -316,17 +299,13 @@ class BaseClient(UniversalDriver): if name in self._name_mapping: chinese_name = self._name_mapping[name] if chinese_name in self._node_registry: - node = self._node_registry[chinese_name] - logger.debug(f"使用节点: '{name}' -> '{chinese_name}', NodeId: {node.node_id}") - return node + return self._node_registry[chinese_name] elif chinese_name in self._variables_to_find: logger.warning(f"节点 {chinese_name} (英文名: {name}) 尚未找到,尝试重新查找") if self.client: self._find_nodes() if chinese_name in self._node_registry: - node = self._node_registry[chinese_name] - logger.info(f"重新查找成功: '{chinese_name}', NodeId: {node.node_id}") - return node + return self._node_registry[chinese_name] raise ValueError(f'节点 {chinese_name} (英文名: {name}) 未注册或未找到') # 直接使用原始名称查找 @@ -336,14 +315,9 @@ class BaseClient(UniversalDriver): if self.client: self._find_nodes() if name in self._node_registry: - node = self._node_registry[name] - logger.info(f"重新查找成功: '{name}', NodeId: {node.node_id}") - return node - logger.error(f"❌ 节点 '{name}' 未注册或未找到。已注册节点: {list(self._node_registry.keys())[:5]}...") + return self._node_registry[name] raise ValueError(f'节点 {name} 未注册或未找到') - node = self._node_registry[name] - logger.debug(f"使用节点: '{name}', NodeId: {node.node_id}") - return node + return self._node_registry[name] def get_node_registry(self) -> Dict[str, OpcUaNodeBase]: return self._node_registry @@ -364,13 +338,12 @@ class BaseClient(UniversalDriver): return self logger.info(f'开始注册 {len(node_list)} 个节点...') - new_nodes_count = 0 for node in node_list: if node is None: continue if node.name in self._node_registry: - logger.debug(f'节点 "{node.name}" 已存在于注册表') + logger.info(f'节点 {node.name} 已存在') exist = self._node_registry[node.name] if exist.type != node.node_type: raise ValueError(f'节点 {node.name} 类型 {node.node_type} 与已存在的类型 {exist.type} 不一致') @@ -381,10 +354,9 @@ class BaseClient(UniversalDriver): "node_type": node.node_type, "data_type": node.data_type } - new_nodes_count += 1 - logger.debug(f'添加节点 "{node.name}" ({node.node_type}) 到待查找列表') + logger.info(f'添加节点 {node.name} 到待查找列表') - logger.info(f'节点注册完成:新增 {new_nodes_count} 个待查找节点,总计 {len(self._variables_to_find)} 个') + logger.info('节点注册完成') # 如果客户端已连接,立即开始查找 if self.client: @@ -477,7 +449,8 @@ class BaseClient(UniversalDriver): function_name: Dict[str, Callable[[Callable[[str], OpcUaNodeBase]], bool]] = {} - def create_node_function(self, func_name: str = None, node_name: str = None, mode: str = None, value: Any = None, **kwargs) -> Callable[[Callable[[str], OpcUaNodeBase]], bool]: + def create_node_function(self, func_name: str = None, node_name: str = None, mode: str = None, value: Any = None, + **kwargs) -> Callable[[Callable[[str], OpcUaNodeBase]], bool]: def execute_node_function(use_node: Callable[[str], OpcUaNodeBase]) -> Union[bool, Tuple[Any, bool]]: target_node = use_node(node_name) @@ -502,8 +475,6 @@ class BaseClient(UniversalDriver): err = result_dict.get("error") print(f"读取 {node_name} 返回值 = {val} (类型: {type(val).__name__}), 错误 = {err}") - - print(f"读取 {node_name} 返回值 = {val} (类型: {type(val).__name__}, 错误 = {err}") return val, err except Exception as e: print(f"解析读取结果失败: {e}, 原始结果: {result_str}") @@ -551,25 +522,15 @@ class BaseClient(UniversalDriver): raise ValueError("必须提供write_nodes参数") def execute_init_function(use_node: Callable[[str], OpcUaNodeBase]) -> bool: - """根据 _workflow_params 为各节点写入真实数值。 - - 约定: - - write_nodes 为 list 时: 节点名 == 参数名,从 _workflow_params[node_name] 取值; - - write_nodes 为 dict 时: - * value 为字符串且在 _workflow_params 中: 当作参数名去取值; - * 否则 value 视为常量直接写入。 - """ - - params = getattr(self, "_workflow_params", {}) or {} - if isinstance(write_nodes, list): - # 节点列表形式: 节点名与参数名一致 + # 处理节点列表 for node_name in write_nodes: - if node_name not in params: - print(f"初始化函数: 参数中未找到 {node_name}, 跳过写入") - continue + # 尝试从参数中获取同名参数的值 + current_value = True # 默认值 + if hasattr(self, '_workflow_params') and node_name in self._workflow_params: + current_value = self._workflow_params[node_name] + print(f"初始化函数: 从参数获取值 {node_name} = {current_value}") - current_value = params[node_name] print(f"初始化函数: 写入节点 {node_name} = {current_value}") input_json = json.dumps({"node_name": node_name, "value": current_value}) result_str = self.write_node(input_json) @@ -581,14 +542,14 @@ class BaseClient(UniversalDriver): except Exception as e: print(f"初始化函数: 解析写入结果失败: {e}, 原始结果: {result_str}") elif isinstance(write_nodes, dict): - # 映射形式: 节点名 -> 参数名或常量 + # 处理节点字典,使用指定的值 for node_name, node_value in write_nodes.items(): - if isinstance(node_value, str) and node_value in params: - current_value = params[node_value] + # 检查值是否是字符串类型的参数名 + current_value = node_value + if isinstance(node_value, str) and hasattr(self, + '_workflow_params') and node_value in self._workflow_params: + current_value = self._workflow_params[node_value] print(f"初始化函数: 从参数获取值 {node_value} = {current_value}") - else: - current_value = node_value - print(f"初始化函数: 使用常量值 写入 {node_name} = {current_value}") print(f"初始化函数: 写入节点 {node_name} = {current_value}") input_json = json.dumps({"node_name": node_name, "value": current_value}) @@ -705,7 +666,9 @@ class BaseClient(UniversalDriver): self.function_name[func_name] = execute_cleanup_function return execute_cleanup_function - def create_start_function(self, func_name: str, stop_condition_expression: str = "True", write_nodes: Union[Dict[str, Any], List[str]] = None, condition_nodes: Union[Dict[str, str], List[str]] = None): + def create_start_function(self, func_name: str, stop_condition_expression: str = "True", + write_nodes: Union[Dict[str, Any], List[str]] = None, + condition_nodes: Union[Dict[str, str], List[str]] = None): """ 创建开始函数 @@ -715,21 +678,22 @@ class BaseClient(UniversalDriver): write_nodes: 写节点配置,可以是节点名列表[节点1,节点2]或节点值映射{节点1:值1,节点2:值2} condition_nodes: 条件节点列表 [节点名1, 节点名2] """ + def execute_start_function(use_node: Callable[[str], OpcUaNodeBase]) -> bool: - """开始函数: 写入触发节点, 然后轮询条件节点直到满足停止条件。""" - - params = getattr(self, "_workflow_params", {}) or {} - - # 先处理写入节点(触发位等) + # 直接处理写入节点 if write_nodes: if isinstance(write_nodes, list): - # 列表形式: 节点名与参数名一致, 若无参数则直接写 True - for node_name in write_nodes: - if node_name in params: - current_value = params[node_name] - else: - current_value = True + # 处理节点列表,默认值都是True + for i, node_name in enumerate(write_nodes): + # 尝试获取与节点对应的参数值 + param_name = f"write_{i}" + # 获取参数值(如果有) + current_value = True # 默认值 + if hasattr(self, '_workflow_params') and param_name in self._workflow_params: + current_value = self._workflow_params[param_name] + + # 直接写入节点 print(f"直接写入节点 {node_name} = {current_value}") input_json = json.dumps({"node_name": node_name, "value": current_value}) result_str = self.write_node(input_json) @@ -741,13 +705,14 @@ class BaseClient(UniversalDriver): except Exception as e: print(f"解析直接写入结果失败: {e}, 原始结果: {result_str}") elif isinstance(write_nodes, dict): - # 字典形式: 节点名 -> 常量值(如 True/False) + # 处理节点字典,值是指定的 for node_name, node_value in write_nodes.items(): - if node_name in params: - current_value = params[node_name] - else: - current_value = node_value + # 尝试获取参数值(如果节点名与参数名匹配) + current_value = node_value # 使用指定的默认值 + if hasattr(self, '_workflow_params') and node_name in self._workflow_params: + current_value = self._workflow_params[node_name] + # 直接写入节点 print(f"直接写入节点 {node_name} = {current_value}") input_json = json.dumps({"node_name": node_name, "value": current_value}) result_str = self.write_node(input_json) @@ -775,7 +740,6 @@ class BaseClient(UniversalDriver): # 直接读取节点 result_str = self.read_node(node_name) try: - time.sleep(1) result_str = result_str.replace("'", '"') result_dict = json.loads(result_str) read_res = result_dict.get("value") @@ -1079,33 +1043,31 @@ class BaseClient(UniversalDriver): 读取节点值的便捷方法 返回包含result字段的字典 """ - # 使用锁保护客户端访问 - with self._client_lock: - try: - node = self.use_node(node_name) - value, error = node.read() + try: + node = self.use_node(node_name) + value, error = node.read() - # 创建结果字典 - result = { - "value": value, - "error": error, - "node_name": node_name, - "timestamp": time.time() - } + # 创建结果字典 + result = { + "value": value, + "error": error, + "node_name": node_name, + "timestamp": time.time() + } - # 返回JSON字符串 - return json.dumps(result) - except Exception as e: - logger.error(f"读取节点 {node_name} 失败: {e}") - # 创建错误结果字典 - result = { - "value": None, - "error": True, - "node_name": node_name, - "error_message": str(e), - "timestamp": time.time() - } - return json.dumps(result) + # 返回JSON字符串 + return json.dumps(result) + except Exception as e: + logger.error(f"读取节点 {node_name} 失败: {e}") + # 创建错误结果字典 + result = { + "value": None, + "error": True, + "node_name": node_name, + "error_message": str(e), + "timestamp": time.time() + } + return json.dumps(result) def write_node(self, json_input: str) -> str: """ @@ -1114,49 +1076,48 @@ class BaseClient(UniversalDriver): eg:'{\"node_name\":\"反应罐号码\",\"value\":\"2\"}' 返回JSON格式的字符串,包含操作结果 """ - # 使用锁保护客户端访问 - with self._client_lock: + try: + # 解析JSON格式的输入 + if not isinstance(json_input, str): + json_input = str(json_input) + try: - # 解析JSON格式的输入 - if not isinstance(json_input, str): - json_input = str(json_input) + input_data = json.loads(json_input) + if not isinstance(input_data, dict): + return json.dumps( + {"error": True, "error_message": "输入必须是包含node_name和value的JSON对象", "success": False}) - try: - input_data = json.loads(json_input) - if not isinstance(input_data, dict): - return json.dumps({"error": True, "error_message": "输入必须是包含node_name和value的JSON对象", "success": False}) + # 从JSON中提取节点名称和值 + node_name = input_data.get("node_name") + value = input_data.get("value") - # 从JSON中提取节点名称和值 - node_name = input_data.get("node_name") - value = input_data.get("value") + if node_name is None: + return json.dumps({"error": True, "error_message": "JSON中缺少node_name字段", "success": False}) + except json.JSONDecodeError as e: + return json.dumps({"error": True, "error_message": f"JSON解析错误: {str(e)}", "success": False}) - if node_name is None: - return json.dumps({"error": True, "error_message": "JSON中缺少node_name字段", "success": False}) - except json.JSONDecodeError as e: - return json.dumps({"error": True, "error_message": f"JSON解析错误: {str(e)}", "success": False}) + node = self.use_node(node_name) + error = node.write(value) - node = self.use_node(node_name) - error = node.write(value) + # 创建结果字典 + result = { + "value": value, + "error": error, + "node_name": node_name, + "timestamp": time.time(), + "success": not error + } - # 创建结果字典 - result = { - "value": value, - "error": error, - "node_name": node_name, - "timestamp": time.time(), - "success": not error - } - - return json.dumps(result) - except Exception as e: - logger.error(f"写入节点失败: {e}") - result = { - "error": True, - "error_message": str(e), - "timestamp": time.time(), - "success": False - } - return json.dumps(result) + return json.dumps(result) + except Exception as e: + logger.error(f"写入节点失败: {e}") + result = { + "error": True, + "error_message": str(e), + "timestamp": time.time(), + "success": False + } + return json.dumps(result) def call_method(self, node_name: str, *args) -> Tuple[Any, bool]: """ @@ -1176,51 +1137,14 @@ class BaseClient(UniversalDriver): class OpcUaClient(BaseClient): - def __init__( - self, - url: str, - deck: Optional[Union[post_process_deck, Dict[str, Any]]] = None, - config_path: str = None, - username: str = None, - password: str = None, - use_subscription: bool = True, - cache_timeout: float = 5.0, - subscription_interval: int = 500, - *args, - **kwargs, - ): + def __init__(self, url: str, config_path: str = None, username: str = None, password: str = None, + refresh_interval: float = 1.0): # 降低OPCUA库的日志级别 import logging logging.getLogger("opcua").setLevel(logging.WARNING) super().__init__() - - # ===== 关键修改:参照 BioyondWorkstation 处理 deck ===== - - super().__init__() - - # 处理 deck 参数 - if deck is None: - self.deck = post_process_deck(setup=True) - elif isinstance(deck, dict): - self.deck = post_process_deck(setup=True) - elif hasattr(deck, 'children'): - self.deck = deck - else: - raise ValueError(f"deck 参数类型不支持: {type(deck)}") - - if self.deck is None: - raise ValueError("Deck 配置不能为空") - - # 统计仓库信息 - warehouse_count = 0 - if hasattr(self.deck, 'children'): - warehouse_count = len(self.deck.children) - logger.info(f"Deck 初始化完成,加载 {warehouse_count} 个资源") - - - # OPC UA 客户端初始化 client = Client(url) if username and password: @@ -1228,152 +1152,75 @@ class OpcUaClient(BaseClient): client.set_password(password) self._set_client(client) - - # 订阅相关属性 - self._use_subscription = use_subscription - self._subscription = None - self._subscription_handles = {} - self._subscription_interval = subscription_interval - - # 缓存相关属性 - self._node_values = {} # 修改为支持时间戳的缓存结构 - self._cache_timeout = cache_timeout - - # 连接状态监控 - self._connection_check_interval = 30.0 # 连接检查间隔(秒) - self._connection_monitor_running = False - self._connection_monitor_thread = None - - # 添加线程锁,保护OPC UA客户端的并发访问 - import threading - self._client_lock = threading.RLock() - - # 连接到服务器 self._connect() + # 节点值缓存和刷新相关属性 + self._node_values = {} # 缓存节点值 + self._refresh_interval = refresh_interval # 刷新间隔(秒) + self._refresh_running = False + self._refresh_thread = None + # 如果提供了配置文件路径,则加载配置并注册工作流 if config_path: self.load_config(config_path) - # 启动连接监控 - self._start_connection_monitor() + # 启动节点值刷新线程 + self.start_node_refresh() + def _register_nodes_as_attributes(self): + """将所有节点注册为实例属性,可以通过self.node_name访问""" + for node_name, node in self._node_registry.items(): + # 检查是否有对应的英文名称 + eng_name = self._reverse_mapping.get(node_name) + if eng_name: + # 如果有对应的英文名称,使用英文名称作为属性名 + attr_name = eng_name + else: + # 如果没有对应的英文名称,使用原始名称,但替换空格和特殊字符 + attr_name = node_name.replace(' ', '_').replace('-', '_') - def _connect(self) -> None: - """连接到OPC UA服务器""" - logger.info('尝试连接到 OPC UA 服务器...') - if self.client: - try: - self.client.connect() - logger.info('✓ 客户端已连接!') + # 创建获取节点值的属性方法,使用中文名称获取节点值 + def create_property_getter(node_key): + def getter(self): + # 优先从缓存获取值 + if node_key in self._node_values: + return self._node_values[node_key] + # 缓存中没有则直接读取 + value, _ = self.use_node(node_key).read() + return value - # 连接后开始查找节点 - if self._variables_to_find: - self._find_nodes() + return getter - # 如果启用订阅模式,设置订阅 - if self._use_subscription: - self._setup_subscriptions() - else: - logger.info("订阅模式已禁用,将使用按需读取模式") + # 使用property装饰器将方法注册为类属性 + setattr(OpcUaClient, attr_name, property(create_property_getter(node_name))) + logger.info(f"已注册节点 '{node_name}' 为属性 '{attr_name}'") - except Exception as e: - logger.error(f'客户端连接失败: {e}') - raise - else: - raise ValueError('客户端未初始化') - - class SubscriptionHandler: - """freeopcua订阅处理器:必须实现 datachange_notification 方法""" - def __init__(self, outer): - self.outer = outer - - def datachange_notification(self, node, val, data): - # 委托给外层类的处理函数 - try: - self.outer._on_subscription_datachange(node, val, data) - except Exception as e: - logger.error(f"订阅数据回调处理失败: {e}") - - # 可选:事件通知占位,避免库调用时报缺失 - def event_notification(self, event): - pass - - def _setup_subscriptions(self): - """设置 OPC UA 订阅""" - if not self.client or not self._use_subscription: + def refresh_node_values(self): + """刷新所有节点的值到缓存""" + if not self.client: + logger.warning("客户端未初始化,无法刷新节点值") return - with self._client_lock: - try: - logger.info(f"开始设置订阅 (发布间隔: {self._subscription_interval}ms)...") - - # 创建订阅 - handler = OpcUaClient.SubscriptionHandler(self) - self._subscription = self.client.create_subscription( - self._subscription_interval, - handler - ) - - # 为所有变量节点创建监控项 - subscribed_count = 0 - skipped_count = 0 - - for node_name, node in self._node_registry.items(): - # 只为变量节点创建订阅 - if node.type == NodeType.VARIABLE and node.node_id: - try: - # 优先使用在查找阶段缓存的真实 ua.Node 对象 - ua_node = self._found_node_objects.get(node_name) - if ua_node is None: - ua_node = self.client.get_node(node.node_id) - handle = self._subscription.subscribe_data_change(ua_node) - self._subscription_handles[node_name] = handle - subscribed_count += 1 - logger.debug(f"✓ 已订阅节点: {node_name}") - except Exception as e: - skipped_count += 1 - logger.warning(f"✗ 订阅节点 {node_name} 失败: {e}") - else: - skipped_count += 1 - - logger.info(f"订阅设置完成: 成功 {subscribed_count} 个, 跳过 {skipped_count} 个") - - except Exception as e: - logger.error(f"设置订阅失败: {e}") - traceback.print_exc() - # 订阅失败时回退到按需读取模式 - self._use_subscription = False - logger.warning("订阅模式设置失败,已自动切换到按需读取模式") - - def _on_subscription_datachange(self, node, val, data): - """订阅数据变化处理器(供内部 SubscriptionHandler 调用)""" try: - node_id = str(node.nodeid) - current_time = time.time() - # 查找对应的节点名称 - for node_name, node_obj in self._node_registry.items(): - if node_obj.node_id == node_id: - self._node_values[node_name] = { - 'value': val, - 'timestamp': current_time, - 'source': 'subscription' - } - logger.debug(f"订阅更新: {node_name} = {val}") - break + # 简单检查连接状态,如果不连接会抛出异常 + self.client.get_namespace_array() except Exception as e: - logger.error(f"处理订阅数据失败: {e}") + logger.warning(f"客户端连接异常,无法刷新节点值: {e}") + return - def get_node_value(self, name, use_cache=True, force_read=False): - """ - 获取节点值(智能缓存版本) + for node_name, node in self._node_registry.items(): + try: + if hasattr(node, 'read'): + value, error = node.read() + if not error: + self._node_values[node_name] = value + # logger.debug(f"已刷新节点 '{node_name}' 的值: {value}") + except Exception as e: + logger.error(f"刷新节点 '{node_name}' 失败: {e}") - 参数: - name: 节点名称(支持中文名或英文名) - use_cache: 是否使用缓存 - force_read: 是否强制从服务器读取(忽略缓存) - """ - # 处理名称映射 + def get_node_value(self, name): + """获取节点值,支持中文名和英文名""" + # 如果提供的是英文名,转换为中文名 if name in self._name_mapping: chinese_name = self._name_mapping[name] # 优先从缓存获取值 @@ -1393,63 +1240,15 @@ class OpcUaClient(BaseClient): else: raise ValueError(f"未找到名称为 '{name}' 的节点") - elif name in self._node_registry: - chinese_name = name - else: - raise ValueError(f"未找到名称为 '{name}' 的节点") - - # 如果强制读取,直接从服务器读取 - if force_read: - with self._client_lock: - value, _ = self.use_node(chinese_name).read() - # 更新缓存 - self._node_values[chinese_name] = { - 'value': value, - 'timestamp': time.time(), - 'source': 'forced_read' - } - return value - - # 检查缓存 - if use_cache and chinese_name in self._node_values: - cache_entry = self._node_values[chinese_name] - cache_age = time.time() - cache_entry['timestamp'] - - # 如果是订阅模式,缓存永久有效(由订阅更新) - # 如果是按需读取模式,检查缓存超时 - if cache_entry.get('source') == 'subscription' or cache_age < self._cache_timeout: - logger.debug(f"从缓存读取: {chinese_name} = {cache_entry['value']} (age: {cache_age:.2f}s, source: {cache_entry.get('source', 'unknown')})") - return cache_entry['value'] - - # 缓存过期或不存在,从服务器读取 - with self._client_lock: - try: - value, error = self.use_node(chinese_name).read() - if not error: - # 更新缓存 - self._node_values[chinese_name] = { - 'value': value, - 'timestamp': time.time(), - 'source': 'on_demand_read' - } - return value - else: - logger.warning(f"读取节点 {chinese_name} 失败") - return None - except Exception as e: - logger.error(f"读取节点 {chinese_name} 出错: {e}") - return None - def set_node_value(self, name, value): - """ - 设置节点值 - 写入成功后会立即更新本地缓存 - """ - # 处理名称映射 + """设置节点值,支持中文名和英文名""" + # 如果提供的是英文名,转换为中文名 if name in self._name_mapping: chinese_name = self._name_mapping[name] + node = self.use_node(chinese_name) + # 如果提供的是中文名,直接使用 elif name in self._node_registry: - chinese_name = name + node = self.use_node(name) else: raise ValueError(f"未找到名称为 '{name}' 的节点") @@ -1468,50 +1267,6 @@ class OpcUaClient(BaseClient): logger.info(f"节点值刷新线程已启动,刷新间隔: {self._refresh_interval}秒") while self._refresh_running: - - with self._client_lock: - try: - node = self.use_node(chinese_name) - error = node.write(value) - - if not error: - # 写入成功,立即更新缓存 - self._node_values[chinese_name] = { - 'value': value, - 'timestamp': time.time(), - 'source': 'write' - } - logger.debug(f"写入成功: {chinese_name} = {value}") - return True - else: - logger.warning(f"写入节点 {chinese_name} 失败") - return False - except Exception as e: - logger.error(f"写入节点 {chinese_name} 出错: {e}") - return False - - def _check_connection(self) -> bool: - """检查连接状态""" - try: - with self._client_lock: - if self.client: - # 尝试获取命名空间数组来验证连接 - self.client.get_namespace_array() - return True - except Exception as e: - logger.warning(f"连接检查失败: {e}") - return False - return False - - def _connection_monitor_worker(self): - """连接监控线程工作函数""" - self._connection_monitor_running = True - logger.info(f"连接监控线程已启动 (检查间隔: {self._connection_check_interval}秒)") - - reconnect_attempts = 0 - max_reconnect_attempts = 5 - - while self._connection_monitor_running: try: self.refresh_node_values() except Exception as e: @@ -1524,49 +1279,6 @@ class OpcUaClient(BaseClient): """启动节点值刷新线程""" if self._refresh_thread is not None and self._refresh_thread.is_alive(): logger.warning("节点值刷新线程已在运行") - # 检查连接状态 - if not self._check_connection(): - logger.warning("检测到连接断开,尝试重新连接...") - reconnect_attempts += 1 - - if reconnect_attempts <= max_reconnect_attempts: - try: - # 尝试重新连接 - with self._client_lock: - if self.client: - try: - self.client.disconnect() - except: - pass - - self.client.connect() - logger.info("✓ 重新连接成功") - - # 重新设置订阅 - if self._use_subscription: - self._setup_subscriptions() - - reconnect_attempts = 0 - except Exception as e: - logger.error(f"重新连接失败 (尝试 {reconnect_attempts}/{max_reconnect_attempts}): {e}") - time.sleep(5) # 重连失败后等待5秒 - else: - logger.error(f"达到最大重连次数 ({max_reconnect_attempts}),停止重连") - self._connection_monitor_running = False - else: - # 连接正常,重置重连计数 - reconnect_attempts = 0 - - except Exception as e: - logger.error(f"连接监控出错: {e}") - - # 等待下次检查 - time.sleep(self._connection_check_interval) - - def _start_connection_monitor(self): - """启动连接监控线程""" - if self._connection_monitor_thread is not None and self._connection_monitor_thread.is_alive(): - logger.warning("连接监控线程已在运行") return import threading @@ -1580,94 +1292,6 @@ class OpcUaClient(BaseClient): self._refresh_thread.join(timeout=2.0) logger.info("节点值刷新线程已停止") - self._connection_monitor_thread = threading.Thread( - target=self._connection_monitor_worker, - daemon=True, - name="OpcUaConnectionMonitor" - ) - self._connection_monitor_thread.start() - - def _stop_connection_monitor(self): - """停止连接监控线程""" - self._connection_monitor_running = False - if self._connection_monitor_thread and self._connection_monitor_thread.is_alive(): - self._connection_monitor_thread.join(timeout=2.0) - logger.info("连接监控线程已停止") - - def read_node(self, node_name: str) -> str: - """ - 读取节点值的便捷方法(使用缓存) - 返回JSON格式字符串 - """ - try: - # 使用get_node_value方法,自动处理缓存 - value = self.get_node_value(node_name, use_cache=True) - - # 获取缓存信息 - chinese_name = self._name_mapping.get(node_name, node_name) - cache_info = self._node_values.get(chinese_name, {}) - - result = { - "value": value, - "error": False, - "node_name": node_name, - "timestamp": time.time(), - "cache_age": time.time() - cache_info.get('timestamp', time.time()), - "source": cache_info.get('source', 'unknown') - } - - return json.dumps(result) - except Exception as e: - logger.error(f"读取节点 {node_name} 失败: {e}") - result = { - "value": None, - "error": True, - "node_name": node_name, - "error_message": str(e), - "timestamp": time.time() - } - return json.dumps(result) - - def get_cache_stats(self) -> Dict[str, Any]: - """获取缓存统计信息""" - current_time = time.time() - stats = { - 'total_cached_nodes': len(self._node_values), - 'subscription_nodes': 0, - 'on_demand_nodes': 0, - 'expired_nodes': 0, - 'cache_timeout': self._cache_timeout, - 'using_subscription': self._use_subscription - } - - for node_name, cache_entry in self._node_values.items(): - source = cache_entry.get('source', 'unknown') - cache_age = current_time - cache_entry['timestamp'] - - if source == 'subscription': - stats['subscription_nodes'] += 1 - elif source in ['on_demand_read', 'forced_read', 'write']: - stats['on_demand_nodes'] += 1 - - if cache_age > self._cache_timeout: - stats['expired_nodes'] += 1 - - return stats - - def print_cache_stats(self): - """打印缓存统计信息""" - stats = self.get_cache_stats() - print("\n" + "="*80) - print("缓存统计信息") - print("="*80) - print(f"总缓存节点数: {stats['total_cached_nodes']}") - print(f"订阅模式: {'启用' if stats['using_subscription'] else '禁用'}") - print(f" - 订阅更新节点: {stats['subscription_nodes']}") - print(f" - 按需读取节点: {stats['on_demand_nodes']}") - print(f" - 已过期节点: {stats['expired_nodes']}") - print(f"缓存超时时间: {stats['cache_timeout']}秒") - print("="*80 + "\n") - def load_config(self, config_path: str) -> None: """从JSON配置文件加载并注册工作流""" try: @@ -1676,206 +1300,42 @@ class OpcUaClient(BaseClient): # 处理节点注册 if "register_node_list_from_csv_path" in config_data: + # 获取配置文件所在目录 config_dir = os.path.dirname(os.path.abspath(config_path)) # 处理CSV路径,如果是相对路径,则相对于配置文件所在目录 - if "path" in config_data["register_node_list_from_csv_path"]: csv_path = config_data["register_node_list_from_csv_path"]["path"] if not os.path.isabs(csv_path): + # 转换为绝对路径 csv_path = os.path.join(config_dir, csv_path) config_data["register_node_list_from_csv_path"]["path"] = csv_path # 直接使用字典 - self.register_node_list_from_csv_path(**config_data["register_node_list_from_csv_path"]) - if self.client and self._variables_to_find: - logger.info("CSV加载完成,开始查找服务器节点...") - self._find_nodes() - # 处理工作流创建 if "create_flow" in config_data: + # 直接传递字典列表 self.create_workflow_from_json(config_data["create_flow"]) + # 将工作流注册为实例方法 self.register_workflows_as_methods() - # 将所有节点注册为属性(只注册已找到的节点) + # 将所有节点注册为属性 self._register_nodes_as_attributes() - # 打印统计信息 - found_count = len(self._node_registry) - total_count = len(self._variables_to_find) - if found_count < total_count: - logger.warning(f"节点查找完成:找到 {found_count}/{total_count} 个节点") - else: - logger.info(f"✓ 节点查找完成:所有 {found_count} 个节点均已找到") - - # 如果使用订阅模式,重新设置订阅(确保新节点被订阅) - if self._use_subscription and found_count > 0: - self._setup_subscriptions() - logger.info(f"成功从 {config_path} 加载配置") except Exception as e: logger.error(f"加载配置文件 {config_path} 失败: {e}") traceback.print_exc() - def print_node_registry_status(self): - """打印节点注册状态,用于调试""" - print("\n" + "="*80) - print("节点注册状态诊断报告") - print("="*80) - print(f"\n待查找节点总数: {len(self._variables_to_find)}") - print(f"已找到节点总数: {len(self._node_registry)}") - print(f"未找到节点总数: {len(self._variables_to_find) - len(self._node_registry)}") - - # 显示已找到的节点(前10个) - if self._node_registry: - print(f"\n✓ 已找到的节点 (显示前10个):") - for i, (name, node) in enumerate(list(self._node_registry.items())[:10]): - eng_name = self._reverse_mapping.get(name, "") - eng_info = f" ({eng_name})" if eng_name else "" - print(f" {i+1}. '{name}'{eng_info}") - print(f" NodeId: {node.node_id}") - print(f" Type: {node.type}") - - # 显示未找到的节点 - not_found = [name for name in self._variables_to_find if name not in self._node_registry] - if not_found: - print(f"\n✗ 未找到的节点 (显示前20个):") - for i, name in enumerate(not_found[:20]): - eng_name = self._reverse_mapping.get(name, "") - eng_info = f" ({eng_name})" if eng_name else "" - node_info = self._variables_to_find[name] - print(f" {i+1}. '{name}'{eng_info} - {node_info['node_type']}") - - print("\n" + "="*80) - print("提示:") - print("1. 如果大量节点未找到,请检查CSV中的节点名称是否与服务器BrowseName完全匹配") - print("2. 可以使用 client.browse_server_nodes() 查看服务器的实际节点结构") - print("3. 节点名称区分大小写,且包括所有空格和特殊字符") - print("="*80 + "\n") - - def browse_server_nodes(self, max_depth=3, start_path=["0:Objects"]): - """浏览服务器节点树,用于调试和对比""" - if not self.client: - print("客户端未连接") - return - - print("\n" + "="*80) - print(f"服务器节点浏览 (最大深度: {max_depth})") - print("="*80 + "\n") - - try: - root = self.client.get_root_node() - start_node = root.get_child(start_path) - self._browse_node_recursive(start_node, depth=0, max_depth=max_depth) - except Exception as e: - print(f"浏览失败: {e}") - traceback.print_exc() - - def _browse_node_recursive(self, node, depth=0, max_depth=3): - """递归浏览节点""" - if depth > max_depth: - return - - try: - browse_name = node.get_browse_name() - node_class = node.get_node_class() - indent = " " * depth - - # 显示节点信息 - print(f"{indent}├─ {browse_name.Name}") - print(f"{indent}│ NodeId: {str(node.nodeid)}") - print(f"{indent}│ NodeClass: {node_class}") - - # 如果是变量,显示数据类型 - if node_class == NodeClass.Variable: - try: - data_type = node.get_data_type() - print(f"{indent}│ DataType: {data_type}") - except: - pass - - # 递归处理子节点(限制数量避免输出过多) - if depth < max_depth: - children = node.get_children() - for i, child in enumerate(children[:20]): # 每层最多显示20个子节点 - self._browse_node_recursive(child, depth + 1, max_depth) - if len(children) > 20: - print(f"{indent} ... ({len(children) - 20} more children)") - except Exception as e: - # 忽略单个节点的错误 - pass - def disconnect(self): # 停止刷新线程 self.stop_node_refresh() - """断开连接并清理资源""" - logger.info("正在断开连接...") - - # 停止连接监控 - self._stop_connection_monitor() - - # 删除订阅 - if self._subscription: - try: - with self._client_lock: - self._subscription.delete() - logger.info("订阅已删除") - except Exception as e: - logger.warning(f"删除订阅失败: {e}") - - # 断开客户端连接 if self.client: - try: - with self._client_lock: - self.client.disconnect() - logger.info("✓ OPC UA 客户端已断开连接") - except Exception as e: - logger.error(f"断开连接失败: {e}") - - def _register_nodes_as_attributes(self): - """将所有节点注册为实例属性""" - for node_name, node in self._node_registry.items(): - if not node.node_id or node.node_id == "": - logger.warning(f"⚠ 节点 '{node_name}' 的 node_id 为空,跳过注册为属性") - continue - - eng_name = self._reverse_mapping.get(node_name) - attr_name = eng_name if eng_name else node_name.replace(' ', '_').replace('-', '_') - - def create_property_getter(node_key): - def getter(self): - return self.get_node_value(node_key, use_cache=True) - return getter - - setattr(OpcUaClient, attr_name, property(create_property_getter(node_name))) - logger.debug(f"已注册节点 '{node_name}' 为属性 '{attr_name}'") - - def post_init(self, ros_node): - """ROS2 节点就绪后的初始化""" - if not (hasattr(self, 'deck') and self.deck): - return - - if not (hasattr(ros_node, 'resource_tracker') and ros_node.resource_tracker): - logger.warning("resource_tracker 不存在,无法注册 deck") - return - - # 1. 本地注册(必需) - ros_node.resource_tracker.add_resource(self.deck) - - # 2. 上传云端 - try: - from unilabos.ros.nodes.base_device_node import ROS2DeviceNode - ROS2DeviceNode.run_async_func( - ros_node.update_resource, - True, - resources=[self.deck] - ) - logger.info("Deck 已上传到云端") - except Exception as e: - logger.error(f"上传失败: {e}") + self.client.disconnect() + logger.info("OPC UA client disconnected") if __name__ == '__main__': @@ -1883,14 +1343,15 @@ if __name__ == '__main__': # 使用配置文件创建客户端并自动注册工作流 import os + current_dir = os.path.dirname(os.path.abspath(__file__)) config_path = os.path.join(current_dir, "opcua_huairou.json") # 创建OPC UA客户端并加载配置 try: client = OpcUaClient( - url="opc.tcp://192.168.1.88:4840/freeopcua/server/", # 替换为实际的OPC UA服务器地址 - config_path="D:\\Uni-Lab-OS\\unilabos\\device_comms\\opcua_client\\opcua_huairou.json" # 传入配置文件路径 + url="opc.tcp://localhost:4840/freeopcua/server/", # 替换为实际的OPC UA服务器地址 + config_path=config_path # 传入配置文件路径 ) # 列出所有已注册的工作流 @@ -1900,9 +1361,7 @@ if __name__ == '__main__': # 测试trigger_grab_action工作流 - 使用英文参数名 print("\n测试trigger_grab_action工作流 - 使用英文参数名:") - client.trigger_grab_action(reaction_tank_number=2, raw_tank_number=2) - # client.set_node_value("reaction_tank_number", 2) - + client.trigger_grab_action(reaction_tank_number=2, raw_tank_number=3) # 读取节点值 - 使用英文节点名 grab_complete = client.get_node_value("grab_complete") diff --git a/unilabos/registry/devices/bioyond.yaml b/unilabos/registry/devices/bioyond.yaml deleted file mode 100644 index 3325a260..00000000 --- a/unilabos/registry/devices/bioyond.yaml +++ /dev/null @@ -1,589 +0,0 @@ -workstation.bioyond_dispensing_station: - category: - - workstation - - bioyond - class: - action_value_mappings: - auto-batch_create_90_10_vial_feeding_tasks: - feedback: {} - goal: {} - goal_default: - delay_time: null - hold_m_name: null - liquid_material_name: NMP - speed: null - temperature: null - titration: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - delay_time: - type: string - hold_m_name: - type: string - liquid_material_name: - default: NMP - type: string - speed: - type: string - temperature: - type: string - titration: - type: string - required: - - titration - type: object - result: {} - required: - - goal - title: batch_create_90_10_vial_feeding_tasks参数 - type: object - type: UniLabJsonCommand - auto-batch_create_diamine_solution_tasks: - feedback: {} - goal: {} - goal_default: - delay_time: null - liquid_material_name: NMP - solutions: null - speed: null - temperature: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - delay_time: - type: string - liquid_material_name: - default: NMP - type: string - solutions: - type: string - speed: - type: string - temperature: - type: string - required: - - solutions - type: object - result: {} - required: - - goal - title: batch_create_diamine_solution_tasks参数 - type: object - type: UniLabJsonCommand - auto-brief_step_parameters: - feedback: {} - goal: {} - goal_default: - data: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - data: - type: object - required: - - data - type: object - result: {} - required: - - goal - title: brief_step_parameters参数 - type: object - type: UniLabJsonCommand - auto-compute_experiment_design: - feedback: {} - goal: {} - goal_default: - m_tot: '70' - ratio: null - titration_percent: '0.03' - wt_percent: '0.25' - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - m_tot: - default: '70' - type: string - ratio: - type: object - titration_percent: - default: '0.03' - type: string - wt_percent: - default: '0.25' - type: string - required: - - ratio - type: object - result: - properties: - feeding_order: - items: {} - title: Feeding Order - type: array - return_info: - title: Return Info - type: string - solutions: - items: {} - title: Solutions - type: array - solvents: - additionalProperties: true - title: Solvents - type: object - titration: - additionalProperties: true - title: Titration - type: object - required: - - solutions - - titration - - solvents - - feeding_order - - return_info - title: ComputeExperimentDesignReturn - type: object - required: - - goal - title: compute_experiment_design参数 - type: object - type: UniLabJsonCommand - auto-process_order_finish_report: - feedback: {} - goal: {} - goal_default: - report_request: null - used_materials: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - report_request: - type: string - used_materials: - type: string - required: - - report_request - - used_materials - type: object - result: {} - required: - - goal - title: process_order_finish_report参数 - type: object - type: UniLabJsonCommand - auto-project_order_report: - feedback: {} - goal: {} - goal_default: - order_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - order_id: - type: string - required: - - order_id - type: object - result: {} - required: - - goal - title: project_order_report参数 - type: object - type: UniLabJsonCommand - auto-query_resource_by_name: - feedback: {} - goal: {} - goal_default: - material_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - material_name: - type: string - required: - - material_name - type: object - result: {} - required: - - goal - title: query_resource_by_name参数 - type: object - type: UniLabJsonCommand - auto-transfer_materials_to_reaction_station: - feedback: {} - goal: {} - goal_default: - target_device_id: null - transfer_groups: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - target_device_id: - type: string - transfer_groups: - type: array - required: - - target_device_id - - transfer_groups - type: object - result: {} - required: - - goal - title: transfer_materials_to_reaction_station参数 - type: object - type: UniLabJsonCommand - auto-wait_for_multiple_orders_and_get_reports: - feedback: {} - goal: {} - goal_default: - batch_create_result: null - check_interval: 10 - timeout: 7200 - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - batch_create_result: - type: string - check_interval: - default: 10 - type: integer - timeout: - default: 7200 - type: integer - required: [] - type: object - result: {} - required: - - goal - title: wait_for_multiple_orders_and_get_reports参数 - type: object - type: UniLabJsonCommand - auto-workflow_sample_locations: - feedback: {} - goal: {} - goal_default: - workflow_id: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - workflow_id: - type: string - required: - - workflow_id - type: object - result: {} - required: - - goal - title: workflow_sample_locations参数 - type: object - type: UniLabJsonCommand - create_90_10_vial_feeding_task: - feedback: {} - goal: - delay_time: delay_time - hold_m_name: hold_m_name - order_name: order_name - percent_10_1_assign_material_name: percent_10_1_assign_material_name - percent_10_1_liquid_material_name: percent_10_1_liquid_material_name - percent_10_1_target_weigh: percent_10_1_target_weigh - percent_10_1_volume: percent_10_1_volume - percent_10_2_assign_material_name: percent_10_2_assign_material_name - percent_10_2_liquid_material_name: percent_10_2_liquid_material_name - percent_10_2_target_weigh: percent_10_2_target_weigh - percent_10_2_volume: percent_10_2_volume - percent_10_3_assign_material_name: percent_10_3_assign_material_name - percent_10_3_liquid_material_name: percent_10_3_liquid_material_name - percent_10_3_target_weigh: percent_10_3_target_weigh - percent_10_3_volume: percent_10_3_volume - percent_90_1_assign_material_name: percent_90_1_assign_material_name - percent_90_1_target_weigh: percent_90_1_target_weigh - percent_90_2_assign_material_name: percent_90_2_assign_material_name - percent_90_2_target_weigh: percent_90_2_target_weigh - percent_90_3_assign_material_name: percent_90_3_assign_material_name - percent_90_3_target_weigh: percent_90_3_target_weigh - speed: speed - temperature: temperature - goal_default: - delay_time: '' - hold_m_name: '' - order_name: '' - percent_10_1_assign_material_name: '' - percent_10_1_liquid_material_name: '' - percent_10_1_target_weigh: '' - percent_10_1_volume: '' - percent_10_2_assign_material_name: '' - percent_10_2_liquid_material_name: '' - percent_10_2_target_weigh: '' - percent_10_2_volume: '' - percent_10_3_assign_material_name: '' - percent_10_3_liquid_material_name: '' - percent_10_3_target_weigh: '' - percent_10_3_volume: '' - percent_90_1_assign_material_name: '' - percent_90_1_target_weigh: '' - percent_90_2_assign_material_name: '' - percent_90_2_target_weigh: '' - percent_90_3_assign_material_name: '' - percent_90_3_target_weigh: '' - speed: '' - temperature: '' - handles: {} - result: - return_info: return_info - schema: - description: '' - properties: - feedback: - properties: {} - required: [] - title: DispenStationVialFeed_Feedback - type: object - goal: - properties: - delay_time: - type: string - hold_m_name: - type: string - order_name: - type: string - percent_10_1_assign_material_name: - type: string - percent_10_1_liquid_material_name: - type: string - percent_10_1_target_weigh: - type: string - percent_10_1_volume: - type: string - percent_10_2_assign_material_name: - type: string - percent_10_2_liquid_material_name: - type: string - percent_10_2_target_weigh: - type: string - percent_10_2_volume: - type: string - percent_10_3_assign_material_name: - type: string - percent_10_3_liquid_material_name: - type: string - percent_10_3_target_weigh: - type: string - percent_10_3_volume: - type: string - percent_90_1_assign_material_name: - type: string - percent_90_1_target_weigh: - type: string - percent_90_2_assign_material_name: - type: string - percent_90_2_target_weigh: - type: string - percent_90_3_assign_material_name: - type: string - percent_90_3_target_weigh: - type: string - speed: - type: string - temperature: - type: string - required: - - order_name - - percent_90_1_assign_material_name - - percent_90_1_target_weigh - - percent_90_2_assign_material_name - - percent_90_2_target_weigh - - percent_90_3_assign_material_name - - percent_90_3_target_weigh - - percent_10_1_assign_material_name - - percent_10_1_target_weigh - - percent_10_1_volume - - percent_10_1_liquid_material_name - - percent_10_2_assign_material_name - - percent_10_2_target_weigh - - percent_10_2_volume - - percent_10_2_liquid_material_name - - percent_10_3_assign_material_name - - percent_10_3_target_weigh - - percent_10_3_volume - - percent_10_3_liquid_material_name - - speed - - temperature - - delay_time - - hold_m_name - title: DispenStationVialFeed_Goal - type: object - result: - properties: - return_info: - type: string - required: - - return_info - title: DispenStationVialFeed_Result - type: object - required: - - goal - title: DispenStationVialFeed - type: object - type: DispenStationVialFeed - create_diamine_solution_task: - feedback: {} - goal: - delay_time: delay_time - hold_m_name: hold_m_name - liquid_material_name: liquid_material_name - material_name: material_name - order_name: order_name - speed: speed - target_weigh: target_weigh - temperature: temperature - volume: volume - goal_default: - delay_time: '' - hold_m_name: '' - liquid_material_name: '' - material_name: '' - order_name: '' - speed: '' - target_weigh: '' - temperature: '' - volume: '' - handles: {} - result: - return_info: return_info - schema: - description: '' - properties: - feedback: - properties: {} - required: [] - title: DispenStationSolnPrep_Feedback - type: object - goal: - properties: - delay_time: - type: string - hold_m_name: - type: string - liquid_material_name: - type: string - material_name: - type: string - order_name: - type: string - speed: - type: string - target_weigh: - type: string - temperature: - type: string - volume: - type: string - required: - - order_name - - material_name - - target_weigh - - volume - - liquid_material_name - - speed - - temperature - - delay_time - - hold_m_name - title: DispenStationSolnPrep_Goal - type: object - result: - properties: - return_info: - type: string - required: - - return_info - title: DispenStationSolnPrep_Result - type: object - required: - - goal - title: DispenStationSolnPrep - type: object - type: DispenStationSolnPrep - module: unilabos.devices.workstation.bioyond_studio.dispensing_station:BioyondDispensingStation - status_types: {} - type: python - config_info: [] - description: '' - handles: [] - icon: '' - init_param_schema: - config: - properties: - config: - type: string - deck: - type: string - required: - - config - - deck - type: object - data: - properties: {} - required: [] - type: object - version: 1.0.0 diff --git a/unilabos/registry/devices/bioyond_cell.yaml b/unilabos/registry/devices/bioyond_cell.yaml index 9243e21e..fc4b75cb 100644 --- a/unilabos/registry/devices/bioyond_cell.yaml +++ b/unilabos/registry/devices/bioyond_cell.yaml @@ -32,7 +32,112 @@ bioyond_cell: feedback: {} goal: {} goal_default: - xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + WH3_x1_y1_z3_1_materialId: '' + WH3_x1_y1_z3_1_materialType: '' + WH3_x1_y1_z3_1_quantity: 0 + WH3_x1_y2_z3_4_materialId: '' + WH3_x1_y2_z3_4_materialType: '' + WH3_x1_y2_z3_4_quantity: 0 + WH3_x1_y3_z3_7_materialId: '' + WH3_x1_y3_z3_7_materialType: '' + WH3_x1_y3_z3_7_quantity: 0 + WH3_x1_y4_z3_10_materialId: '' + WH3_x1_y4_z3_10_materialType: '' + WH3_x1_y4_z3_10_quantity: 0 + WH3_x1_y5_z3_13_materialId: '' + WH3_x1_y5_z3_13_materialType: '' + WH3_x1_y5_z3_13_quantity: 0 + WH3_x2_y1_z3_2_materialId: '' + WH3_x2_y1_z3_2_materialType: '' + WH3_x2_y1_z3_2_quantity: 0 + WH3_x2_y2_z3_5_materialId: '' + WH3_x2_y2_z3_5_materialType: '' + WH3_x2_y2_z3_5_quantity: 0 + WH3_x2_y3_z3_8_materialId: '' + WH3_x2_y3_z3_8_materialType: '' + WH3_x2_y3_z3_8_quantity: 0 + WH3_x2_y4_z3_11_materialId: '' + WH3_x2_y4_z3_11_materialType: '' + WH3_x2_y4_z3_11_quantity: 0 + WH3_x2_y5_z3_14_materialId: '' + WH3_x2_y5_z3_14_materialType: '' + WH3_x2_y5_z3_14_quantity: 0 + WH3_x3_y1_z3_3_materialId: '' + WH3_x3_y1_z3_3_materialType: '' + WH3_x3_y1_z3_3_quantity: 0 + WH3_x3_y2_z3_6_materialId: '' + WH3_x3_y2_z3_6_materialType: '' + WH3_x3_y2_z3_6_quantity: 0 + WH3_x3_y3_z3_9_materialId: '' + WH3_x3_y3_z3_9_materialType: '' + WH3_x3_y3_z3_9_quantity: 0 + WH3_x3_y4_z3_12_materialId: '' + WH3_x3_y4_z3_12_materialType: '' + WH3_x3_y4_z3_12_quantity: 0 + WH3_x3_y5_z3_15_materialId: '' + WH3_x3_y5_z3_15_materialType: '' + WH3_x3_y5_z3_15_quantity: 0 + WH4_x1_y1_z1_1_materialName: '' + WH4_x1_y1_z1_1_quantity: 0.0 + WH4_x1_y1_z2_1_materialName: '' + WH4_x1_y1_z2_1_materialType: '' + WH4_x1_y1_z2_1_quantity: 0.0 + WH4_x1_y1_z2_1_targetWH: '' + WH4_x1_y2_z1_6_materialName: '' + WH4_x1_y2_z1_6_quantity: 0.0 + WH4_x1_y2_z2_4_materialName: '' + WH4_x1_y2_z2_4_materialType: '' + WH4_x1_y2_z2_4_quantity: 0.0 + WH4_x1_y2_z2_4_targetWH: '' + WH4_x1_y3_z1_11_materialName: '' + WH4_x1_y3_z1_11_quantity: 0.0 + WH4_x1_y3_z2_7_materialName: '' + WH4_x1_y3_z2_7_materialType: '' + WH4_x1_y3_z2_7_quantity: 0.0 + WH4_x1_y3_z2_7_targetWH: '' + WH4_x2_y1_z1_2_materialName: '' + WH4_x2_y1_z1_2_quantity: 0.0 + WH4_x2_y1_z2_2_materialName: '' + WH4_x2_y1_z2_2_materialType: '' + WH4_x2_y1_z2_2_quantity: 0.0 + WH4_x2_y1_z2_2_targetWH: '' + WH4_x2_y2_z1_7_materialName: '' + WH4_x2_y2_z1_7_quantity: 0.0 + WH4_x2_y2_z2_5_materialName: '' + WH4_x2_y2_z2_5_materialType: '' + WH4_x2_y2_z2_5_quantity: 0.0 + WH4_x2_y2_z2_5_targetWH: '' + WH4_x2_y3_z1_12_materialName: '' + WH4_x2_y3_z1_12_quantity: 0.0 + WH4_x2_y3_z2_8_materialName: '' + WH4_x2_y3_z2_8_materialType: '' + WH4_x2_y3_z2_8_quantity: 0.0 + WH4_x2_y3_z2_8_targetWH: '' + WH4_x3_y1_z1_3_materialName: '' + WH4_x3_y1_z1_3_quantity: 0.0 + WH4_x3_y1_z2_3_materialName: '' + WH4_x3_y1_z2_3_materialType: '' + WH4_x3_y1_z2_3_quantity: 0.0 + WH4_x3_y1_z2_3_targetWH: '' + WH4_x3_y2_z1_8_materialName: '' + WH4_x3_y2_z1_8_quantity: 0.0 + WH4_x3_y2_z2_6_materialName: '' + WH4_x3_y2_z2_6_materialType: '' + WH4_x3_y2_z2_6_quantity: 0.0 + WH4_x3_y2_z2_6_targetWH: '' + WH4_x3_y3_z2_9_materialName: '' + WH4_x3_y3_z2_9_materialType: '' + WH4_x3_y3_z2_9_quantity: 0.0 + WH4_x3_y3_z2_9_targetWH: '' + WH4_x4_y1_z1_4_materialName: '' + WH4_x4_y1_z1_4_quantity: 0.0 + WH4_x4_y2_z1_9_materialName: '' + WH4_x4_y2_z1_9_quantity: 0.0 + WH4_x5_y1_z1_5_materialName: '' + WH4_x5_y1_z1_5_quantity: 0.0 + WH4_x5_y2_z1_10_materialName: '' + WH4_x5_y2_z1_10_quantity: 0.0 + xlsx_path: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx handles: {} placeholder_keys: {} result: {} @@ -42,8 +147,323 @@ bioyond_cell: feedback: {} goal: properties: + WH3_x1_y1_z3_1_materialId: + default: '' + type: string + WH3_x1_y1_z3_1_materialType: + default: '' + type: string + WH3_x1_y1_z3_1_quantity: + default: 0 + type: number + WH3_x1_y2_z3_4_materialId: + default: '' + type: string + WH3_x1_y2_z3_4_materialType: + default: '' + type: string + WH3_x1_y2_z3_4_quantity: + default: 0 + type: number + WH3_x1_y3_z3_7_materialId: + default: '' + type: string + WH3_x1_y3_z3_7_materialType: + default: '' + type: string + WH3_x1_y3_z3_7_quantity: + default: 0 + type: number + WH3_x1_y4_z3_10_materialId: + default: '' + type: string + WH3_x1_y4_z3_10_materialType: + default: '' + type: string + WH3_x1_y4_z3_10_quantity: + default: 0 + type: number + WH3_x1_y5_z3_13_materialId: + default: '' + type: string + WH3_x1_y5_z3_13_materialType: + default: '' + type: string + WH3_x1_y5_z3_13_quantity: + default: 0 + type: number + WH3_x2_y1_z3_2_materialId: + default: '' + type: string + WH3_x2_y1_z3_2_materialType: + default: '' + type: string + WH3_x2_y1_z3_2_quantity: + default: 0 + type: number + WH3_x2_y2_z3_5_materialId: + default: '' + type: string + WH3_x2_y2_z3_5_materialType: + default: '' + type: string + WH3_x2_y2_z3_5_quantity: + default: 0 + type: number + WH3_x2_y3_z3_8_materialId: + default: '' + type: string + WH3_x2_y3_z3_8_materialType: + default: '' + type: string + WH3_x2_y3_z3_8_quantity: + default: 0 + type: number + WH3_x2_y4_z3_11_materialId: + default: '' + type: string + WH3_x2_y4_z3_11_materialType: + default: '' + type: string + WH3_x2_y4_z3_11_quantity: + default: 0 + type: number + WH3_x2_y5_z3_14_materialId: + default: '' + type: string + WH3_x2_y5_z3_14_materialType: + default: '' + type: string + WH3_x2_y5_z3_14_quantity: + default: 0 + type: number + WH3_x3_y1_z3_3_materialId: + default: '' + type: string + WH3_x3_y1_z3_3_materialType: + default: '' + type: string + WH3_x3_y1_z3_3_quantity: + default: 0 + type: number + WH3_x3_y2_z3_6_materialId: + default: '' + type: string + WH3_x3_y2_z3_6_materialType: + default: '' + type: string + WH3_x3_y2_z3_6_quantity: + default: 0 + type: number + WH3_x3_y3_z3_9_materialId: + default: '' + type: string + WH3_x3_y3_z3_9_materialType: + default: '' + type: string + WH3_x3_y3_z3_9_quantity: + default: 0 + type: number + WH3_x3_y4_z3_12_materialId: + default: '' + type: string + WH3_x3_y4_z3_12_materialType: + default: '' + type: string + WH3_x3_y4_z3_12_quantity: + default: 0 + type: number + WH3_x3_y5_z3_15_materialId: + default: '' + type: string + WH3_x3_y5_z3_15_materialType: + default: '' + type: string + WH3_x3_y5_z3_15_quantity: + default: 0 + type: number + WH4_x1_y1_z1_1_materialName: + default: '' + type: string + WH4_x1_y1_z1_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_materialName: + default: '' + type: string + WH4_x1_y1_z2_1_materialType: + default: '' + type: string + WH4_x1_y1_z2_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_targetWH: + default: '' + type: string + WH4_x1_y2_z1_6_materialName: + default: '' + type: string + WH4_x1_y2_z1_6_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_materialName: + default: '' + type: string + WH4_x1_y2_z2_4_materialType: + default: '' + type: string + WH4_x1_y2_z2_4_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_targetWH: + default: '' + type: string + WH4_x1_y3_z1_11_materialName: + default: '' + type: string + WH4_x1_y3_z1_11_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_materialName: + default: '' + type: string + WH4_x1_y3_z2_7_materialType: + default: '' + type: string + WH4_x1_y3_z2_7_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_targetWH: + default: '' + type: string + WH4_x2_y1_z1_2_materialName: + default: '' + type: string + WH4_x2_y1_z1_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_materialName: + default: '' + type: string + WH4_x2_y1_z2_2_materialType: + default: '' + type: string + WH4_x2_y1_z2_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_targetWH: + default: '' + type: string + WH4_x2_y2_z1_7_materialName: + default: '' + type: string + WH4_x2_y2_z1_7_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_materialName: + default: '' + type: string + WH4_x2_y2_z2_5_materialType: + default: '' + type: string + WH4_x2_y2_z2_5_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_targetWH: + default: '' + type: string + WH4_x2_y3_z1_12_materialName: + default: '' + type: string + WH4_x2_y3_z1_12_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_materialName: + default: '' + type: string + WH4_x2_y3_z2_8_materialType: + default: '' + type: string + WH4_x2_y3_z2_8_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_targetWH: + default: '' + type: string + WH4_x3_y1_z1_3_materialName: + default: '' + type: string + WH4_x3_y1_z1_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_materialName: + default: '' + type: string + WH4_x3_y1_z2_3_materialType: + default: '' + type: string + WH4_x3_y1_z2_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_targetWH: + default: '' + type: string + WH4_x3_y2_z1_8_materialName: + default: '' + type: string + WH4_x3_y2_z1_8_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_materialName: + default: '' + type: string + WH4_x3_y2_z2_6_materialType: + default: '' + type: string + WH4_x3_y2_z2_6_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_targetWH: + default: '' + type: string + WH4_x3_y3_z2_9_materialName: + default: '' + type: string + WH4_x3_y3_z2_9_materialType: + default: '' + type: string + WH4_x3_y3_z2_9_quantity: + default: 0.0 + type: number + WH4_x3_y3_z2_9_targetWH: + default: '' + type: string + WH4_x4_y1_z1_4_materialName: + default: '' + type: string + WH4_x4_y1_z1_4_quantity: + default: 0.0 + type: number + WH4_x4_y2_z1_9_materialName: + default: '' + type: string + WH4_x4_y2_z1_9_quantity: + default: 0.0 + type: number + WH4_x5_y1_z1_5_materialName: + default: '' + type: string + WH4_x5_y1_z1_5_quantity: + default: 0.0 + type: number + WH4_x5_y2_z1_10_materialName: + default: '' + type: string + WH4_x5_y2_z1_10_quantity: + default: 0.0 + type: number xlsx_path: - default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/2025122301.xlsx + default: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx type: string required: [] type: object @@ -507,7 +927,112 @@ bioyond_cell: feedback: {} goal: {} goal_default: - xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + WH3_x1_y1_z3_1_materialId: '' + WH3_x1_y1_z3_1_materialType: '' + WH3_x1_y1_z3_1_quantity: 0 + WH3_x1_y2_z3_4_materialId: '' + WH3_x1_y2_z3_4_materialType: '' + WH3_x1_y2_z3_4_quantity: 0 + WH3_x1_y3_z3_7_materialId: '' + WH3_x1_y3_z3_7_materialType: '' + WH3_x1_y3_z3_7_quantity: 0 + WH3_x1_y4_z3_10_materialId: '' + WH3_x1_y4_z3_10_materialType: '' + WH3_x1_y4_z3_10_quantity: 0 + WH3_x1_y5_z3_13_materialId: '' + WH3_x1_y5_z3_13_materialType: '' + WH3_x1_y5_z3_13_quantity: 0 + WH3_x2_y1_z3_2_materialId: '' + WH3_x2_y1_z3_2_materialType: '' + WH3_x2_y1_z3_2_quantity: 0 + WH3_x2_y2_z3_5_materialId: '' + WH3_x2_y2_z3_5_materialType: '' + WH3_x2_y2_z3_5_quantity: 0 + WH3_x2_y3_z3_8_materialId: '' + WH3_x2_y3_z3_8_materialType: '' + WH3_x2_y3_z3_8_quantity: 0 + WH3_x2_y4_z3_11_materialId: '' + WH3_x2_y4_z3_11_materialType: '' + WH3_x2_y4_z3_11_quantity: 0 + WH3_x2_y5_z3_14_materialId: '' + WH3_x2_y5_z3_14_materialType: '' + WH3_x2_y5_z3_14_quantity: 0 + WH3_x3_y1_z3_3_materialId: '' + WH3_x3_y1_z3_3_materialType: '' + WH3_x3_y1_z3_3_quantity: 0 + WH3_x3_y2_z3_6_materialId: '' + WH3_x3_y2_z3_6_materialType: '' + WH3_x3_y2_z3_6_quantity: 0 + WH3_x3_y3_z3_9_materialId: '' + WH3_x3_y3_z3_9_materialType: '' + WH3_x3_y3_z3_9_quantity: 0 + WH3_x3_y4_z3_12_materialId: '' + WH3_x3_y4_z3_12_materialType: '' + WH3_x3_y4_z3_12_quantity: 0 + WH3_x3_y5_z3_15_materialId: '' + WH3_x3_y5_z3_15_materialType: '' + WH3_x3_y5_z3_15_quantity: 0 + WH4_x1_y1_z1_1_materialName: '' + WH4_x1_y1_z1_1_quantity: 0.0 + WH4_x1_y1_z2_1_materialName: '' + WH4_x1_y1_z2_1_materialType: '' + WH4_x1_y1_z2_1_quantity: 0.0 + WH4_x1_y1_z2_1_targetWH: '' + WH4_x1_y2_z1_6_materialName: '' + WH4_x1_y2_z1_6_quantity: 0.0 + WH4_x1_y2_z2_4_materialName: '' + WH4_x1_y2_z2_4_materialType: '' + WH4_x1_y2_z2_4_quantity: 0.0 + WH4_x1_y2_z2_4_targetWH: '' + WH4_x1_y3_z1_11_materialName: '' + WH4_x1_y3_z1_11_quantity: 0.0 + WH4_x1_y3_z2_7_materialName: '' + WH4_x1_y3_z2_7_materialType: '' + WH4_x1_y3_z2_7_quantity: 0.0 + WH4_x1_y3_z2_7_targetWH: '' + WH4_x2_y1_z1_2_materialName: '' + WH4_x2_y1_z1_2_quantity: 0.0 + WH4_x2_y1_z2_2_materialName: '' + WH4_x2_y1_z2_2_materialType: '' + WH4_x2_y1_z2_2_quantity: 0.0 + WH4_x2_y1_z2_2_targetWH: '' + WH4_x2_y2_z1_7_materialName: '' + WH4_x2_y2_z1_7_quantity: 0.0 + WH4_x2_y2_z2_5_materialName: '' + WH4_x2_y2_z2_5_materialType: '' + WH4_x2_y2_z2_5_quantity: 0.0 + WH4_x2_y2_z2_5_targetWH: '' + WH4_x2_y3_z1_12_materialName: '' + WH4_x2_y3_z1_12_quantity: 0.0 + WH4_x2_y3_z2_8_materialName: '' + WH4_x2_y3_z2_8_materialType: '' + WH4_x2_y3_z2_8_quantity: 0.0 + WH4_x2_y3_z2_8_targetWH: '' + WH4_x3_y1_z1_3_materialName: '' + WH4_x3_y1_z1_3_quantity: 0.0 + WH4_x3_y1_z2_3_materialName: '' + WH4_x3_y1_z2_3_materialType: '' + WH4_x3_y1_z2_3_quantity: 0.0 + WH4_x3_y1_z2_3_targetWH: '' + WH4_x3_y2_z1_8_materialName: '' + WH4_x3_y2_z1_8_quantity: 0.0 + WH4_x3_y2_z2_6_materialName: '' + WH4_x3_y2_z2_6_materialType: '' + WH4_x3_y2_z2_6_quantity: 0.0 + WH4_x3_y2_z2_6_targetWH: '' + WH4_x3_y3_z2_9_materialName: '' + WH4_x3_y3_z2_9_materialType: '' + WH4_x3_y3_z2_9_quantity: 0.0 + WH4_x3_y3_z2_9_targetWH: '' + WH4_x4_y1_z1_4_materialName: '' + WH4_x4_y1_z1_4_quantity: 0.0 + WH4_x4_y2_z1_9_materialName: '' + WH4_x4_y2_z1_9_quantity: 0.0 + WH4_x5_y1_z1_5_materialName: '' + WH4_x5_y1_z1_5_quantity: 0.0 + WH4_x5_y2_z1_10_materialName: '' + WH4_x5_y2_z1_10_quantity: 0.0 + xlsx_path: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx handles: {} placeholder_keys: {} result: {} @@ -517,8 +1042,323 @@ bioyond_cell: feedback: {} goal: properties: + WH3_x1_y1_z3_1_materialId: + default: '' + type: string + WH3_x1_y1_z3_1_materialType: + default: '' + type: string + WH3_x1_y1_z3_1_quantity: + default: 0 + type: number + WH3_x1_y2_z3_4_materialId: + default: '' + type: string + WH3_x1_y2_z3_4_materialType: + default: '' + type: string + WH3_x1_y2_z3_4_quantity: + default: 0 + type: number + WH3_x1_y3_z3_7_materialId: + default: '' + type: string + WH3_x1_y3_z3_7_materialType: + default: '' + type: string + WH3_x1_y3_z3_7_quantity: + default: 0 + type: number + WH3_x1_y4_z3_10_materialId: + default: '' + type: string + WH3_x1_y4_z3_10_materialType: + default: '' + type: string + WH3_x1_y4_z3_10_quantity: + default: 0 + type: number + WH3_x1_y5_z3_13_materialId: + default: '' + type: string + WH3_x1_y5_z3_13_materialType: + default: '' + type: string + WH3_x1_y5_z3_13_quantity: + default: 0 + type: number + WH3_x2_y1_z3_2_materialId: + default: '' + type: string + WH3_x2_y1_z3_2_materialType: + default: '' + type: string + WH3_x2_y1_z3_2_quantity: + default: 0 + type: number + WH3_x2_y2_z3_5_materialId: + default: '' + type: string + WH3_x2_y2_z3_5_materialType: + default: '' + type: string + WH3_x2_y2_z3_5_quantity: + default: 0 + type: number + WH3_x2_y3_z3_8_materialId: + default: '' + type: string + WH3_x2_y3_z3_8_materialType: + default: '' + type: string + WH3_x2_y3_z3_8_quantity: + default: 0 + type: number + WH3_x2_y4_z3_11_materialId: + default: '' + type: string + WH3_x2_y4_z3_11_materialType: + default: '' + type: string + WH3_x2_y4_z3_11_quantity: + default: 0 + type: number + WH3_x2_y5_z3_14_materialId: + default: '' + type: string + WH3_x2_y5_z3_14_materialType: + default: '' + type: string + WH3_x2_y5_z3_14_quantity: + default: 0 + type: number + WH3_x3_y1_z3_3_materialId: + default: '' + type: string + WH3_x3_y1_z3_3_materialType: + default: '' + type: string + WH3_x3_y1_z3_3_quantity: + default: 0 + type: number + WH3_x3_y2_z3_6_materialId: + default: '' + type: string + WH3_x3_y2_z3_6_materialType: + default: '' + type: string + WH3_x3_y2_z3_6_quantity: + default: 0 + type: number + WH3_x3_y3_z3_9_materialId: + default: '' + type: string + WH3_x3_y3_z3_9_materialType: + default: '' + type: string + WH3_x3_y3_z3_9_quantity: + default: 0 + type: number + WH3_x3_y4_z3_12_materialId: + default: '' + type: string + WH3_x3_y4_z3_12_materialType: + default: '' + type: string + WH3_x3_y4_z3_12_quantity: + default: 0 + type: number + WH3_x3_y5_z3_15_materialId: + default: '' + type: string + WH3_x3_y5_z3_15_materialType: + default: '' + type: string + WH3_x3_y5_z3_15_quantity: + default: 0 + type: number + WH4_x1_y1_z1_1_materialName: + default: '' + type: string + WH4_x1_y1_z1_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_materialName: + default: '' + type: string + WH4_x1_y1_z2_1_materialType: + default: '' + type: string + WH4_x1_y1_z2_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_targetWH: + default: '' + type: string + WH4_x1_y2_z1_6_materialName: + default: '' + type: string + WH4_x1_y2_z1_6_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_materialName: + default: '' + type: string + WH4_x1_y2_z2_4_materialType: + default: '' + type: string + WH4_x1_y2_z2_4_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_targetWH: + default: '' + type: string + WH4_x1_y3_z1_11_materialName: + default: '' + type: string + WH4_x1_y3_z1_11_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_materialName: + default: '' + type: string + WH4_x1_y3_z2_7_materialType: + default: '' + type: string + WH4_x1_y3_z2_7_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_targetWH: + default: '' + type: string + WH4_x2_y1_z1_2_materialName: + default: '' + type: string + WH4_x2_y1_z1_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_materialName: + default: '' + type: string + WH4_x2_y1_z2_2_materialType: + default: '' + type: string + WH4_x2_y1_z2_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_targetWH: + default: '' + type: string + WH4_x2_y2_z1_7_materialName: + default: '' + type: string + WH4_x2_y2_z1_7_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_materialName: + default: '' + type: string + WH4_x2_y2_z2_5_materialType: + default: '' + type: string + WH4_x2_y2_z2_5_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_targetWH: + default: '' + type: string + WH4_x2_y3_z1_12_materialName: + default: '' + type: string + WH4_x2_y3_z1_12_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_materialName: + default: '' + type: string + WH4_x2_y3_z2_8_materialType: + default: '' + type: string + WH4_x2_y3_z2_8_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_targetWH: + default: '' + type: string + WH4_x3_y1_z1_3_materialName: + default: '' + type: string + WH4_x3_y1_z1_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_materialName: + default: '' + type: string + WH4_x3_y1_z2_3_materialType: + default: '' + type: string + WH4_x3_y1_z2_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_targetWH: + default: '' + type: string + WH4_x3_y2_z1_8_materialName: + default: '' + type: string + WH4_x3_y2_z1_8_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_materialName: + default: '' + type: string + WH4_x3_y2_z2_6_materialType: + default: '' + type: string + WH4_x3_y2_z2_6_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_targetWH: + default: '' + type: string + WH4_x3_y3_z2_9_materialName: + default: '' + type: string + WH4_x3_y3_z2_9_materialType: + default: '' + type: string + WH4_x3_y3_z2_9_quantity: + default: 0.0 + type: number + WH4_x3_y3_z2_9_targetWH: + default: '' + type: string + WH4_x4_y1_z1_4_materialName: + default: '' + type: string + WH4_x4_y1_z1_4_quantity: + default: 0.0 + type: number + WH4_x4_y2_z1_9_materialName: + default: '' + type: string + WH4_x4_y2_z1_9_quantity: + default: 0.0 + type: number + WH4_x5_y1_z1_5_materialName: + default: '' + type: string + WH4_x5_y1_z1_5_quantity: + default: 0.0 + type: number + WH4_x5_y2_z1_10_materialName: + default: '' + type: string + WH4_x5_y2_z1_10_quantity: + default: 0.0 + type: number xlsx_path: - default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + default: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx type: string required: [] type: object @@ -532,7 +1372,112 @@ bioyond_cell: feedback: {} goal: {} goal_default: - xlsx_path: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + WH3_x1_y1_z3_1_materialId: '' + WH3_x1_y1_z3_1_materialType: '' + WH3_x1_y1_z3_1_quantity: 0 + WH3_x1_y2_z3_4_materialId: '' + WH3_x1_y2_z3_4_materialType: '' + WH3_x1_y2_z3_4_quantity: 0 + WH3_x1_y3_z3_7_materialId: '' + WH3_x1_y3_z3_7_materialType: '' + WH3_x1_y3_z3_7_quantity: 0 + WH3_x1_y4_z3_10_materialId: '' + WH3_x1_y4_z3_10_materialType: '' + WH3_x1_y4_z3_10_quantity: 0 + WH3_x1_y5_z3_13_materialId: '' + WH3_x1_y5_z3_13_materialType: '' + WH3_x1_y5_z3_13_quantity: 0 + WH3_x2_y1_z3_2_materialId: '' + WH3_x2_y1_z3_2_materialType: '' + WH3_x2_y1_z3_2_quantity: 0 + WH3_x2_y2_z3_5_materialId: '' + WH3_x2_y2_z3_5_materialType: '' + WH3_x2_y2_z3_5_quantity: 0 + WH3_x2_y3_z3_8_materialId: '' + WH3_x2_y3_z3_8_materialType: '' + WH3_x2_y3_z3_8_quantity: 0 + WH3_x2_y4_z3_11_materialId: '' + WH3_x2_y4_z3_11_materialType: '' + WH3_x2_y4_z3_11_quantity: 0 + WH3_x2_y5_z3_14_materialId: '' + WH3_x2_y5_z3_14_materialType: '' + WH3_x2_y5_z3_14_quantity: 0 + WH3_x3_y1_z3_3_materialId: '' + WH3_x3_y1_z3_3_materialType: '' + WH3_x3_y1_z3_3_quantity: 0 + WH3_x3_y2_z3_6_materialId: '' + WH3_x3_y2_z3_6_materialType: '' + WH3_x3_y2_z3_6_quantity: 0 + WH3_x3_y3_z3_9_materialId: '' + WH3_x3_y3_z3_9_materialType: '' + WH3_x3_y3_z3_9_quantity: 0 + WH3_x3_y4_z3_12_materialId: '' + WH3_x3_y4_z3_12_materialType: '' + WH3_x3_y4_z3_12_quantity: 0 + WH3_x3_y5_z3_15_materialId: '' + WH3_x3_y5_z3_15_materialType: '' + WH3_x3_y5_z3_15_quantity: 0 + WH4_x1_y1_z1_1_materialName: '' + WH4_x1_y1_z1_1_quantity: 0.0 + WH4_x1_y1_z2_1_materialName: '' + WH4_x1_y1_z2_1_materialType: '' + WH4_x1_y1_z2_1_quantity: 0.0 + WH4_x1_y1_z2_1_targetWH: '' + WH4_x1_y2_z1_6_materialName: '' + WH4_x1_y2_z1_6_quantity: 0.0 + WH4_x1_y2_z2_4_materialName: '' + WH4_x1_y2_z2_4_materialType: '' + WH4_x1_y2_z2_4_quantity: 0.0 + WH4_x1_y2_z2_4_targetWH: '' + WH4_x1_y3_z1_11_materialName: '' + WH4_x1_y3_z1_11_quantity: 0.0 + WH4_x1_y3_z2_7_materialName: '' + WH4_x1_y3_z2_7_materialType: '' + WH4_x1_y3_z2_7_quantity: 0.0 + WH4_x1_y3_z2_7_targetWH: '' + WH4_x2_y1_z1_2_materialName: '' + WH4_x2_y1_z1_2_quantity: 0.0 + WH4_x2_y1_z2_2_materialName: '' + WH4_x2_y1_z2_2_materialType: '' + WH4_x2_y1_z2_2_quantity: 0.0 + WH4_x2_y1_z2_2_targetWH: '' + WH4_x2_y2_z1_7_materialName: '' + WH4_x2_y2_z1_7_quantity: 0.0 + WH4_x2_y2_z2_5_materialName: '' + WH4_x2_y2_z2_5_materialType: '' + WH4_x2_y2_z2_5_quantity: 0.0 + WH4_x2_y2_z2_5_targetWH: '' + WH4_x2_y3_z1_12_materialName: '' + WH4_x2_y3_z1_12_quantity: 0.0 + WH4_x2_y3_z2_8_materialName: '' + WH4_x2_y3_z2_8_materialType: '' + WH4_x2_y3_z2_8_quantity: 0.0 + WH4_x2_y3_z2_8_targetWH: '' + WH4_x3_y1_z1_3_materialName: '' + WH4_x3_y1_z1_3_quantity: 0.0 + WH4_x3_y1_z2_3_materialName: '' + WH4_x3_y1_z2_3_materialType: '' + WH4_x3_y1_z2_3_quantity: 0.0 + WH4_x3_y1_z2_3_targetWH: '' + WH4_x3_y2_z1_8_materialName: '' + WH4_x3_y2_z1_8_quantity: 0.0 + WH4_x3_y2_z2_6_materialName: '' + WH4_x3_y2_z2_6_materialType: '' + WH4_x3_y2_z2_6_quantity: 0.0 + WH4_x3_y2_z2_6_targetWH: '' + WH4_x3_y3_z2_9_materialName: '' + WH4_x3_y3_z2_9_materialType: '' + WH4_x3_y3_z2_9_quantity: 0.0 + WH4_x3_y3_z2_9_targetWH: '' + WH4_x4_y1_z1_4_materialName: '' + WH4_x4_y1_z1_4_quantity: 0.0 + WH4_x4_y2_z1_9_materialName: '' + WH4_x4_y2_z1_9_quantity: 0.0 + WH4_x5_y1_z1_5_materialName: '' + WH4_x5_y1_z1_5_quantity: 0.0 + WH4_x5_y2_z1_10_materialName: '' + WH4_x5_y2_z1_10_quantity: 0.0 + xlsx_path: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx handles: {} placeholder_keys: {} result: {} @@ -542,8 +1487,323 @@ bioyond_cell: feedback: {} goal: properties: + WH3_x1_y1_z3_1_materialId: + default: '' + type: string + WH3_x1_y1_z3_1_materialType: + default: '' + type: string + WH3_x1_y1_z3_1_quantity: + default: 0 + type: number + WH3_x1_y2_z3_4_materialId: + default: '' + type: string + WH3_x1_y2_z3_4_materialType: + default: '' + type: string + WH3_x1_y2_z3_4_quantity: + default: 0 + type: number + WH3_x1_y3_z3_7_materialId: + default: '' + type: string + WH3_x1_y3_z3_7_materialType: + default: '' + type: string + WH3_x1_y3_z3_7_quantity: + default: 0 + type: number + WH3_x1_y4_z3_10_materialId: + default: '' + type: string + WH3_x1_y4_z3_10_materialType: + default: '' + type: string + WH3_x1_y4_z3_10_quantity: + default: 0 + type: number + WH3_x1_y5_z3_13_materialId: + default: '' + type: string + WH3_x1_y5_z3_13_materialType: + default: '' + type: string + WH3_x1_y5_z3_13_quantity: + default: 0 + type: number + WH3_x2_y1_z3_2_materialId: + default: '' + type: string + WH3_x2_y1_z3_2_materialType: + default: '' + type: string + WH3_x2_y1_z3_2_quantity: + default: 0 + type: number + WH3_x2_y2_z3_5_materialId: + default: '' + type: string + WH3_x2_y2_z3_5_materialType: + default: '' + type: string + WH3_x2_y2_z3_5_quantity: + default: 0 + type: number + WH3_x2_y3_z3_8_materialId: + default: '' + type: string + WH3_x2_y3_z3_8_materialType: + default: '' + type: string + WH3_x2_y3_z3_8_quantity: + default: 0 + type: number + WH3_x2_y4_z3_11_materialId: + default: '' + type: string + WH3_x2_y4_z3_11_materialType: + default: '' + type: string + WH3_x2_y4_z3_11_quantity: + default: 0 + type: number + WH3_x2_y5_z3_14_materialId: + default: '' + type: string + WH3_x2_y5_z3_14_materialType: + default: '' + type: string + WH3_x2_y5_z3_14_quantity: + default: 0 + type: number + WH3_x3_y1_z3_3_materialId: + default: '' + type: string + WH3_x3_y1_z3_3_materialType: + default: '' + type: string + WH3_x3_y1_z3_3_quantity: + default: 0 + type: number + WH3_x3_y2_z3_6_materialId: + default: '' + type: string + WH3_x3_y2_z3_6_materialType: + default: '' + type: string + WH3_x3_y2_z3_6_quantity: + default: 0 + type: number + WH3_x3_y3_z3_9_materialId: + default: '' + type: string + WH3_x3_y3_z3_9_materialType: + default: '' + type: string + WH3_x3_y3_z3_9_quantity: + default: 0 + type: number + WH3_x3_y4_z3_12_materialId: + default: '' + type: string + WH3_x3_y4_z3_12_materialType: + default: '' + type: string + WH3_x3_y4_z3_12_quantity: + default: 0 + type: number + WH3_x3_y5_z3_15_materialId: + default: '' + type: string + WH3_x3_y5_z3_15_materialType: + default: '' + type: string + WH3_x3_y5_z3_15_quantity: + default: 0 + type: number + WH4_x1_y1_z1_1_materialName: + default: '' + type: string + WH4_x1_y1_z1_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_materialName: + default: '' + type: string + WH4_x1_y1_z2_1_materialType: + default: '' + type: string + WH4_x1_y1_z2_1_quantity: + default: 0.0 + type: number + WH4_x1_y1_z2_1_targetWH: + default: '' + type: string + WH4_x1_y2_z1_6_materialName: + default: '' + type: string + WH4_x1_y2_z1_6_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_materialName: + default: '' + type: string + WH4_x1_y2_z2_4_materialType: + default: '' + type: string + WH4_x1_y2_z2_4_quantity: + default: 0.0 + type: number + WH4_x1_y2_z2_4_targetWH: + default: '' + type: string + WH4_x1_y3_z1_11_materialName: + default: '' + type: string + WH4_x1_y3_z1_11_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_materialName: + default: '' + type: string + WH4_x1_y3_z2_7_materialType: + default: '' + type: string + WH4_x1_y3_z2_7_quantity: + default: 0.0 + type: number + WH4_x1_y3_z2_7_targetWH: + default: '' + type: string + WH4_x2_y1_z1_2_materialName: + default: '' + type: string + WH4_x2_y1_z1_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_materialName: + default: '' + type: string + WH4_x2_y1_z2_2_materialType: + default: '' + type: string + WH4_x2_y1_z2_2_quantity: + default: 0.0 + type: number + WH4_x2_y1_z2_2_targetWH: + default: '' + type: string + WH4_x2_y2_z1_7_materialName: + default: '' + type: string + WH4_x2_y2_z1_7_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_materialName: + default: '' + type: string + WH4_x2_y2_z2_5_materialType: + default: '' + type: string + WH4_x2_y2_z2_5_quantity: + default: 0.0 + type: number + WH4_x2_y2_z2_5_targetWH: + default: '' + type: string + WH4_x2_y3_z1_12_materialName: + default: '' + type: string + WH4_x2_y3_z1_12_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_materialName: + default: '' + type: string + WH4_x2_y3_z2_8_materialType: + default: '' + type: string + WH4_x2_y3_z2_8_quantity: + default: 0.0 + type: number + WH4_x2_y3_z2_8_targetWH: + default: '' + type: string + WH4_x3_y1_z1_3_materialName: + default: '' + type: string + WH4_x3_y1_z1_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_materialName: + default: '' + type: string + WH4_x3_y1_z2_3_materialType: + default: '' + type: string + WH4_x3_y1_z2_3_quantity: + default: 0.0 + type: number + WH4_x3_y1_z2_3_targetWH: + default: '' + type: string + WH4_x3_y2_z1_8_materialName: + default: '' + type: string + WH4_x3_y2_z1_8_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_materialName: + default: '' + type: string + WH4_x3_y2_z2_6_materialType: + default: '' + type: string + WH4_x3_y2_z2_6_quantity: + default: 0.0 + type: number + WH4_x3_y2_z2_6_targetWH: + default: '' + type: string + WH4_x3_y3_z2_9_materialName: + default: '' + type: string + WH4_x3_y3_z2_9_materialType: + default: '' + type: string + WH4_x3_y3_z2_9_quantity: + default: 0.0 + type: number + WH4_x3_y3_z2_9_targetWH: + default: '' + type: string + WH4_x4_y1_z1_4_materialName: + default: '' + type: string + WH4_x4_y1_z1_4_quantity: + default: 0.0 + type: number + WH4_x4_y2_z1_9_materialName: + default: '' + type: string + WH4_x4_y2_z1_9_quantity: + default: 0.0 + type: number + WH4_x5_y1_z1_5_materialName: + default: '' + type: string + WH4_x5_y1_z1_5_quantity: + default: 0.0 + type: number + WH4_x5_y2_z1_10_materialName: + default: '' + type: string + WH4_x5_y2_z1_10_quantity: + default: 0.0 + type: number xlsx_path: - default: D:/UniLab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx + default: D:\UniLab\Uni-Lab-OS\unilabos\devices\workstation\bioyond_studio\bioyond_cell\material_template.xlsx type: string required: [] type: object @@ -785,6 +2045,39 @@ bioyond_cell: title: wait_for_order_finish参数 type: object type: UniLabJsonCommand + auto-wait_for_order_finish_polling: + feedback: {} + goal: {} + goal_default: + order_code: null + poll_interval: 0.5 + timeout: 36000 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + order_code: + type: string + poll_interval: + default: 0.5 + type: number + timeout: + default: 36000 + type: integer + required: + - order_code + type: object + result: {} + required: + - goal + title: wait_for_order_finish_polling参数 + type: object + type: UniLabJsonCommand auto-wait_for_transfer_task: feedback: {} goal: {} @@ -820,6 +2113,7 @@ bioyond_cell: module: unilabos.devices.workstation.bioyond_studio.bioyond_cell.bioyond_cell_workstation:BioyondCellWorkstation status_types: device_id: String + material_info: dict type: python config_info: [] description: '' @@ -828,7 +2122,7 @@ bioyond_cell: init_param_schema: config: properties: - config: + bioyond_config: type: object deck: type: string @@ -840,8 +2134,11 @@ bioyond_cell: properties: device_id: type: string + material_info: + type: object required: - device_id + - material_info type: object registry_type: device version: 1.0.0 diff --git a/unilabos/registry/devices/bioyond_dispensing_station.yaml b/unilabos/registry/devices/bioyond_dispensing_station.yaml index 97b55cc1..7b9ebc90 100644 --- a/unilabos/registry/devices/bioyond_dispensing_station.yaml +++ b/unilabos/registry/devices/bioyond_dispensing_station.yaml @@ -5,6 +5,135 @@ bioyond_dispensing_station: - bioyond_dispensing_station class: action_value_mappings: + auto-brief_step_parameters: + feedback: {} + goal: {} + goal_default: + data: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + data: + type: object + required: + - data + type: object + result: {} + required: + - goal + title: brief_step_parameters参数 + type: object + type: UniLabJsonCommand + auto-process_order_finish_report: + feedback: {} + goal: {} + goal_default: + report_request: null + used_materials: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + report_request: + type: string + used_materials: + type: string + required: + - report_request + - used_materials + type: object + result: {} + required: + - goal + title: process_order_finish_report参数 + type: object + type: UniLabJsonCommand + auto-project_order_report: + feedback: {} + goal: {} + goal_default: + order_id: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + order_id: + type: string + required: + - order_id + type: object + result: {} + required: + - goal + title: project_order_report参数 + type: object + type: UniLabJsonCommand + auto-query_resource_by_name: + feedback: {} + goal: {} + goal_default: + material_name: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + material_name: + type: string + required: + - material_name + type: object + result: {} + required: + - goal + title: query_resource_by_name参数 + type: object + type: UniLabJsonCommand + auto-workflow_sample_locations: + feedback: {} + goal: {} + goal_default: + workflow_id: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + workflow_id: + type: string + required: + - workflow_id + type: object + result: {} + required: + - goal + title: workflow_sample_locations参数 + type: object + type: UniLabJsonCommand batch_create_90_10_vial_feeding_tasks: feedback: {} goal: diff --git a/unilabos/registry/devices/coin_cell_workstation.yaml b/unilabos/registry/devices/coin_cell_workstation.yaml index c8a671a7..2e9f6073 100644 --- a/unilabos/registry/devices/coin_cell_workstation.yaml +++ b/unilabos/registry/devices/coin_cell_workstation.yaml @@ -405,7 +405,7 @@ coincellassemblyworkstation_device: goal: properties: bottle_num: - type: integer + type: string required: - bottle_num type: object diff --git a/unilabos/registry/devices/opcua_example.yaml b/unilabos/registry/devices/opcua_example.yaml index 0f500cfa..a7e6b4e3 100644 --- a/unilabos/registry/devices/opcua_example.yaml +++ b/unilabos/registry/devices/opcua_example.yaml @@ -49,32 +49,7 @@ opcua_example: title: load_config参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - auto-print_cache_stats: + auto-refresh_node_values: feedback: {} goal: {} goal_default: {} @@ -92,32 +67,7 @@ opcua_example: result: {} required: - goal - title: print_cache_stats参数 - type: object - type: UniLabJsonCommand - auto-read_node: - feedback: {} - goal: {} - goal_default: - node_name: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - node_name: - type: string - required: - - node_name - type: object - result: {} - required: - - goal - title: read_node参数 + title: refresh_node_values参数 type: object type: UniLabJsonCommand auto-set_node_value: @@ -149,9 +99,50 @@ opcua_example: title: set_node_value参数 type: object type: UniLabJsonCommand + auto-start_node_refresh: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: start_node_refresh参数 + type: object + type: UniLabJsonCommand + auto-stop_node_refresh: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: stop_node_refresh参数 + type: object + type: UniLabJsonCommand module: unilabos.device_comms.opcua_client.client:OpcUaClient status_types: - cache_stats: dict node_value: String type: python config_info: [] @@ -161,23 +152,15 @@ opcua_example: init_param_schema: config: properties: - cache_timeout: - default: 5.0 - type: number config_path: type: string - deck: - type: string password: type: string - subscription_interval: - default: 500 - type: integer + refresh_interval: + default: 1.0 + type: number url: type: string - use_subscription: - default: true - type: boolean username: type: string required: @@ -185,12 +168,9 @@ opcua_example: type: object data: properties: - cache_stats: - type: object node_value: type: string required: - node_value - - cache_stats type: object version: 1.0.0 diff --git a/unilabos/registry/devices/reaction_station_bioyond.yaml b/unilabos/registry/devices/reaction_station_bioyond.yaml index cf46d7ef..8b4622dc 100644 --- a/unilabos/registry/devices/reaction_station_bioyond.yaml +++ b/unilabos/registry/devices/reaction_station_bioyond.yaml @@ -58,6 +58,313 @@ reaction_station.bioyond: title: add_time_constraint参数 type: object type: UniLabJsonCommand + auto-clear_workflows: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: clear_workflows参数 + type: object + type: UniLabJsonCommand + auto-create_order: + feedback: {} + goal: {} + goal_default: + json_str: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + json_str: + type: string + required: + - json_str + type: object + result: {} + required: + - goal + title: create_order参数 + type: object + type: UniLabJsonCommand + auto-hard_delete_merged_workflows: + feedback: {} + goal: {} + goal_default: + workflow_ids: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + workflow_ids: + items: + type: string + type: array + required: + - workflow_ids + type: object + result: {} + required: + - goal + title: hard_delete_merged_workflows参数 + type: object + type: UniLabJsonCommand + auto-merge_workflow_with_parameters: + feedback: {} + goal: {} + goal_default: + json_str: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + json_str: + type: string + required: + - json_str + type: object + result: {} + required: + - goal + title: merge_workflow_with_parameters参数 + type: object + type: UniLabJsonCommand + auto-process_temperature_cutoff_report: + feedback: {} + goal: {} + goal_default: + report_request: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + report_request: + type: string + required: + - report_request + type: object + result: {} + required: + - goal + title: process_temperature_cutoff_report参数 + type: object + type: UniLabJsonCommand + auto-process_web_workflows: + feedback: {} + goal: {} + goal_default: + web_workflow_json: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + web_workflow_json: + type: string + required: + - web_workflow_json + type: object + result: {} + required: + - goal + title: process_web_workflows参数 + type: object + type: UniLabJsonCommand + auto-set_reactor_temperature: + feedback: {} + goal: {} + goal_default: + reactor_id: null + temperature: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + reactor_id: + type: integer + temperature: + type: number + required: + - reactor_id + - temperature + type: object + result: {} + required: + - goal + title: set_reactor_temperature参数 + type: object + type: UniLabJsonCommand + auto-skip_titration_steps: + feedback: {} + goal: {} + goal_default: + preintake_id: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + preintake_id: + type: string + required: + - preintake_id + type: object + result: {} + required: + - goal + title: skip_titration_steps参数 + type: object + type: UniLabJsonCommand + auto-sync_workflow_sequence_from_bioyond: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: sync_workflow_sequence_from_bioyond参数 + type: object + type: UniLabJsonCommand + auto-wait_for_multiple_orders_and_get_reports: + feedback: {} + goal: {} + goal_default: + batch_create_result: null + check_interval: 10 + timeout: 7200 + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + batch_create_result: + type: string + check_interval: + default: 10 + type: integer + timeout: + default: 7200 + type: integer + required: [] + type: object + result: {} + required: + - goal + title: wait_for_multiple_orders_and_get_reports参数 + type: object + type: UniLabJsonCommand + auto-workflow_sequence: + feedback: {} + goal: {} + goal_default: + value: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + value: + items: + type: string + type: array + required: + - value + type: object + result: {} + required: + - goal + title: workflow_sequence参数 + type: object + type: UniLabJsonCommand + auto-workflow_step_query: + feedback: {} + goal: {} + goal_default: + workflow_id: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + workflow_id: + type: string + required: + - workflow_id + type: object + result: {} + required: + - goal + title: workflow_step_query参数 + type: object + type: UniLabJsonCommand clean_all_server_workflows: feedback: {} goal: {} @@ -674,17 +981,7 @@ reaction_station.bioyond: module: unilabos.devices.workstation.bioyond_studio.reaction_station.reaction_station:BioyondReactionStation protocol_type: [] status_types: - average_viscosity: Float64 - force: Float64 - in_temperature: Float64 - out_temperature: Float64 - pt100_temperature: Float64 - sensor_average_temperature: Float64 - setting_temperature: Float64 - speed: Float64 - target_temperature: Float64 - viscosity: Float64 - workflow_sequence: String + workflow_sequence: str type: python config_info: [] description: Bioyond反应站 @@ -704,9 +1001,7 @@ reaction_station.bioyond: data: properties: workflow_sequence: - items: - type: string - type: array + type: string required: - workflow_sequence type: object @@ -716,19 +1011,34 @@ reaction_station.reactor: - reactor - reaction_station_bioyond class: - action_value_mappings: {} + action_value_mappings: + auto-update_metrics: + feedback: {} + goal: {} + goal_default: + payload: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: '' + properties: + feedback: {} + goal: + properties: + payload: + type: object + required: + - payload + type: object + result: {} + required: + - goal + title: update_metrics参数 + type: object + type: UniLabJsonCommand module: unilabos.devices.workstation.bioyond_studio.reaction_station.reaction_station:BioyondReactor - status_types: - average_viscosity: Float64 - force: Float64 - in_temperature: Float64 - out_temperature: Float64 - pt100_temperature: Float64 - sensor_average_temperature: Float64 - setting_temperature: Float64 - speed: Float64 - target_temperature: Float64 - viscosity: Float64 + status_types: {} type: python config_info: [] description: 反应站子设备-反应器 diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index 64aba3c8..f09b79c1 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -479,7 +479,11 @@ class Registry: return status_schema def _generate_unilab_json_command_schema( - self, method_args: List[Dict[str, Any]], method_name: str, return_annotation: Any = None + self, + method_args: List[Dict[str, Any]], + method_name: str, + return_annotation: Any = None, + previous_schema: Dict[str, Any] | None = None, ) -> Dict[str, Any]: """ 根据UniLabJsonCommand方法信息生成JSON Schema,暂不支持嵌套类型 @@ -488,6 +492,7 @@ class Registry: method_args: 方法信息字典,包含args等 method_name: 方法名称 return_annotation: 返回类型注解,用于生成result schema(仅支持TypedDict) + previous_schema: 之前的 schema,用于保留 goal/feedback/result 下一级字段的 description Returns: JSON Schema格式的参数schema @@ -521,7 +526,7 @@ class Registry: if return_annotation is not None and self._is_typed_dict(return_annotation): result_schema = self._generate_typed_dict_result_schema(return_annotation) - return { + final_schema = { "title": f"{method_name}参数", "description": f"", "type": "object", @@ -529,6 +534,39 @@ class Registry: "required": ["goal"], } + # 保留之前 schema 中 goal/feedback/result 下一级字段的 description + if previous_schema: + self._preserve_field_descriptions(final_schema, previous_schema) + + return final_schema + + def _preserve_field_descriptions( + self, new_schema: Dict[str, Any], previous_schema: Dict[str, Any] + ) -> None: + """ + 保留之前 schema 中 goal/feedback/result 下一级字段的 description + + Args: + new_schema: 新生成的 schema(会被修改) + previous_schema: 之前的 schema + """ + for section in ["goal", "feedback", "result"]: + new_section = new_schema.get("properties", {}).get(section, {}) + prev_section = previous_schema.get("properties", {}).get(section, {}) + + if not new_section or not prev_section: + continue + + new_props = new_section.get("properties", {}) + prev_props = prev_section.get("properties", {}) + + for field_name, field_schema in new_props.items(): + if field_name in prev_props: + prev_field = prev_props[field_name] + # 保留字段的 description + if "description" in prev_field and prev_field["description"]: + field_schema["description"] = prev_field["description"] + def _is_typed_dict(self, annotation: Any) -> bool: """ 检查类型注解是否是TypedDict @@ -697,13 +735,10 @@ class Registry: sorted(device_config["class"]["status_types"].items()) ) if complete_registry: - # 保存原有的description信息 - old_descriptions = {} + # 保存原有的 action 配置(用于保留 schema 的 description 和 handles 等) + old_action_configs = {} for action_name, action_config in device_config["class"]["action_value_mappings"].items(): - if "description" in action_config.get("schema", {}): - description = action_config["schema"]["description"] - if len(description): - old_descriptions[action_name] = action_config["schema"]["description"] + old_action_configs[action_name] = action_config device_config["class"]["action_value_mappings"] = { k: v @@ -719,10 +754,15 @@ class Registry: "feedback": {}, "result": {}, "schema": self._generate_unilab_json_command_schema( - v["args"], k, v.get("return_annotation") + v["args"], + k, + v.get("return_annotation"), + # 传入旧的 schema 以保留字段 description + old_action_configs.get(f"auto-{k}", {}).get("schema"), ), "goal_default": {i["name"]: i["default"] for i in v["args"]}, - "handles": [], + # 保留原有的 handles 配置 + "handles": old_action_configs.get(f"auto-{k}", {}).get("handles", []), "placeholder_keys": { i["name"]: ( "unilabos_resources" @@ -746,12 +786,14 @@ class Registry: if k not in device_config["class"]["action_value_mappings"] } ) - # 恢复原有的description信息(auto开头的不修改) - for action_name, description in old_descriptions.items(): + # 恢复原有的 description 信息(非 auto- 开头的动作) + for action_name, old_config in old_action_configs.items(): if action_name in device_config["class"]["action_value_mappings"]: # 有一些会被删除 - device_config["class"]["action_value_mappings"][action_name]["schema"][ - "description" - ] = description + old_schema = old_config.get("schema", {}) + if "description" in old_schema and old_schema["description"]: + device_config["class"]["action_value_mappings"][action_name]["schema"][ + "description" + ] = old_schema["description"] device_config["init_param_schema"] = {} device_config["init_param_schema"]["config"] = self._generate_unilab_json_command_schema( enhanced_info["init_params"], "__init__" diff --git a/yibin_electrolyte_config_example.json b/unilabos/test/experiments/yibin_electrolyte_config_example.json similarity index 100% rename from yibin_electrolyte_config_example.json rename to unilabos/test/experiments/yibin_electrolyte_config_example.json diff --git a/unilabos/utils/log.py b/unilabos/utils/log.py index f10bd518..cee3269b 100644 --- a/unilabos/utils/log.py +++ b/unilabos/utils/log.py @@ -191,21 +191,6 @@ def configure_logger(loglevel=None, working_dir=None): # 添加处理器到根日志记录器 root_logger.addHandler(console_handler) - - # 降低第三方库的日志级别,避免过多输出 - # pymodbus 库的日志太详细,设置为 WARNING - logging.getLogger('pymodbus').setLevel(logging.WARNING) - logging.getLogger('pymodbus.logging').setLevel(logging.WARNING) - logging.getLogger('pymodbus.logging.base').setLevel(logging.WARNING) - logging.getLogger('pymodbus.logging.decoders').setLevel(logging.WARNING) - - # websockets 库的日志输出较多,设置为 WARNING - logging.getLogger('websockets').setLevel(logging.WARNING) - logging.getLogger('websockets.client').setLevel(logging.WARNING) - logging.getLogger('websockets.server').setLevel(logging.WARNING) - - # ROS 节点的状态更新日志过于频繁,设置为 INFO - logging.getLogger('unilabos.ros.nodes.presets.host_node').setLevel(logging.INFO) # 如果指定了工作目录,添加文件处理器 if working_dir is not None: From 216f19fb6201ebff48b8dd11894ba94c1f6ad268 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:15:13 +0800 Subject: [PATCH 34/40] Workbench example, adjust log level, and ci check (#220) * TestLatency Return Value Example & gitignore update * Adjust log level & Add workbench virtual example & Add not action decorator & Add check_mode & * Add CI Check --- .conda/scripts/post-link.bat | 9 - .conda/scripts/post-link.sh | 9 - .cursorignore | 26 - .github/dependabot.yml | 19 + .github/workflows/ci-check.yml | 52 + .gitignore | 1 + unilabos/app/main.py | 24 +- unilabos/app/web/controller.py | 4 +- unilabos/app/ws_client.py | 31 +- unilabos/config/config.py | 1 + unilabos/devices/virtual/workbench.py | 687 ++ unilabos/registry/devices/virtual_device.yaml | 6054 +---------------- unilabos/registry/registry.py | 38 +- unilabos/ros/msgs/message_converter.py | 40 +- unilabos/ros/nodes/presets/host_node.py | 67 +- unilabos/test/experiments/virtual_bench.json | 28 + unilabos/utils/decorator.py | 46 + unilabos/utils/import_manager.py | 14 + 18 files changed, 1329 insertions(+), 5821 deletions(-) delete mode 100644 .conda/scripts/post-link.bat delete mode 100644 .conda/scripts/post-link.sh delete mode 100644 .cursorignore create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci-check.yml create mode 100644 unilabos/devices/virtual/workbench.py create mode 100644 unilabos/test/experiments/virtual_bench.json diff --git a/.conda/scripts/post-link.bat b/.conda/scripts/post-link.bat deleted file mode 100644 index 352b78ca..00000000 --- a/.conda/scripts/post-link.bat +++ /dev/null @@ -1,9 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -REM upgrade pip -"%PREFIX%\python.exe" -m pip install --upgrade pip - -REM install extra deps -"%PREFIX%\python.exe" -m pip install paho-mqtt opentrons_shared_data -"%PREFIX%\python.exe" -m pip install git+https://github.com/Xuwznln/pylabrobot.git diff --git a/.conda/scripts/post-link.sh b/.conda/scripts/post-link.sh deleted file mode 100644 index ef96f159..00000000 --- a/.conda/scripts/post-link.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -set -euxo pipefail - -# make sure pip is available -"$PREFIX/bin/python" -m pip install --upgrade pip - -# install extra deps -"$PREFIX/bin/python" -m pip install paho-mqtt opentrons_shared_data -"$PREFIX/bin/python" -m pip install git+https://github.com/Xuwznln/pylabrobot.git diff --git a/.cursorignore b/.cursorignore deleted file mode 100644 index 7b0d4f90..00000000 --- a/.cursorignore +++ /dev/null @@ -1,26 +0,0 @@ -.conda -# .github -.idea -# .vscode -output -pylabrobot_repo -recipes -scripts -service -temp -# unilabos/test -# unilabos/app/web -unilabos/device_mesh -unilabos_data -unilabos_msgs -unilabos.egg-info -CONTRIBUTORS -# LICENSE -MANIFEST.in -pyrightconfig.json -# README.md -# README_zh.md -setup.py -setup.cfg -.gitattrubutes -**/__pycache__ diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..20a5faa5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,19 @@ +version: 2 +updates: +# GitHub Actions +- package-ecosystem: "github-actions" + directory: "/" + target-branch: "dev" + schedule: + interval: "weekly" + day: "monday" + time: "06:00" + open-pull-requests-limit: 5 + reviewers: + - "msgcenterpy-team" + labels: + - "dependencies" + - "github-actions" + commit-message: + prefix: "ci" + include: "scope" diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml new file mode 100644 index 00000000..fa5ada7c --- /dev/null +++ b/.github/workflows/ci-check.yml @@ -0,0 +1,52 @@ +name: CI Check + +on: + pull_request: + branches: [main, dev] + +jobs: + registry-check: + runs-on: ubuntu-latest + + defaults: + run: + shell: bash -l {0} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Miniconda + uses: conda-incubator/setup-miniconda@v3 + with: + miniconda-version: 'latest' + channels: conda-forge,robostack-staging,uni-lab,defaults + channel-priority: strict + activate-environment: check-env + auto-activate-base: false + auto-update-conda: false + show-channel-urls: true + + - name: Install minimal ROS dependencies + run: | + conda install ros-humble-ros-core ros-humble-std-msgs ros-humble-geometry-msgs ros-humble-control-msgs -c robostack-staging -c conda-forge + + - name: Install unilabos-msgs and project + run: | + conda install ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-forge + pip install -e . + + - name: Run check mode (complete_registry) + run: | + python -m unilabos --check_mode --skip_env_check + + - name: Check for uncommitted changes + run: | + if ! git diff --exit-code; then + echo "::error::检测到文件变化!请先在本地运行 'python -m unilabos --complete_registry' 并提交变更" + echo "变化的文件:" + git diff --name-only + exit 1 + fi + echo "检查通过:无文件变化" diff --git a/.gitignore b/.gitignore index 610be614..838331e3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ temp/ output/ unilabos_data/ pyrightconfig.json +.cursorignore ## Python # Byte-compiled / optimized / DLL files diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 8ec26c03..8cea5f63 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -161,6 +161,12 @@ def parse_args(): default=False, help="Complete registry information", ) + parser.add_argument( + "--check_mode", + action="store_true", + default=False, + help="Run in check mode for CI: validates registry imports and ensures no file changes", + ) parser.add_argument( "--no_update_feedback", action="store_true", @@ -314,6 +320,12 @@ def main(): BasicConfig.machine_name = machine_name BasicConfig.vis_2d_enable = args_dict["2d_vis"] + # Check mode 处理 + check_mode = args_dict.get("check_mode", False) + BasicConfig.check_mode = check_mode + if check_mode: + print_status("Check mode 启用,将进行 complete_registry 检查", "info") + from unilabos.resources.graphio import ( read_node_link_json, read_graphml, @@ -331,10 +343,14 @@ def main(): # 显示启动横幅 print_unilab_banner(args_dict) - # 注册表 - lab_registry = build_registry( - args_dict["registry_path"], args_dict.get("complete_registry", False), BasicConfig.upload_registry - ) + # 注册表 - check_mode 时强制启用 complete_registry + complete_registry = args_dict.get("complete_registry", False) or check_mode + lab_registry = build_registry(args_dict["registry_path"], complete_registry, BasicConfig.upload_registry) + + # Check mode: complete_registry 完成后直接退出,git diff 检测由 CI workflow 执行 + if check_mode: + print_status("Check mode: complete_registry 完成,退出", "info") + os._exit(0) if BasicConfig.upload_registry: # 设备注册到服务端 - 需要 ak 和 sk diff --git a/unilabos/app/web/controller.py b/unilabos/app/web/controller.py index 9b0f1ff6..acd1f56b 100644 --- a/unilabos/app/web/controller.py +++ b/unilabos/app/web/controller.py @@ -58,14 +58,14 @@ class JobResultStore: feedback=feedback or {}, timestamp=time.time(), ) - logger.debug(f"[JobResultStore] Stored result for job {job_id[:8]}, status={status}") + logger.trace(f"[JobResultStore] Stored result for job {job_id[:8]}, status={status}") def get_and_remove(self, job_id: str) -> Optional[JobResult]: """获取并删除任务结果""" with self._results_lock: result = self._results.pop(job_id, None) if result: - logger.debug(f"[JobResultStore] Retrieved and removed result for job {job_id[:8]}") + logger.trace(f"[JobResultStore] Retrieved and removed result for job {job_id[:8]}") return result def get_result(self, job_id: str) -> Optional[JobResult]: diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 95526f0c..17d69ac6 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -154,7 +154,7 @@ class DeviceActionManager: job_info.set_ready_timeout(10) # 设置10秒超时 self.active_jobs[device_key] = job_info job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) - logger.info(f"[DeviceActionManager] Job {job_log} can start immediately for {device_key}") + logger.trace(f"[DeviceActionManager] Job {job_log} can start immediately for {device_key}") return True def start_job(self, job_id: str) -> bool: @@ -210,8 +210,9 @@ class DeviceActionManager: job_info.update_timestamp() # 从all_jobs中移除已结束的job del self.all_jobs[job_id] - job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) - logger.info(f"[DeviceActionManager] Job {job_log} ended for {device_key}") + # job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) + # logger.debug(f"[DeviceActionManager] Job {job_log} ended for {device_key}") + pass else: job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) logger.warning(f"[DeviceActionManager] Job {job_log} was not active for {device_key}") @@ -227,7 +228,7 @@ class DeviceActionManager: next_job_log = format_job_log( next_job.job_id, next_job.task_id, next_job.device_id, next_job.action_name ) - logger.info(f"[DeviceActionManager] Next job {next_job_log} can start for {device_key}") + logger.trace(f"[DeviceActionManager] Next job {next_job_log} can start for {device_key}") return next_job return None @@ -268,7 +269,7 @@ class DeviceActionManager: # 从all_jobs中移除 del self.all_jobs[job_id] job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) - logger.info(f"[DeviceActionManager] Active job {job_log} cancelled for {device_key}") + logger.trace(f"[DeviceActionManager] Active job {job_log} cancelled for {device_key}") # 启动下一个任务 if device_key in self.device_queues and self.device_queues[device_key]: @@ -281,7 +282,7 @@ class DeviceActionManager: next_job_log = format_job_log( next_job.job_id, next_job.task_id, next_job.device_id, next_job.action_name ) - logger.info(f"[DeviceActionManager] Next job {next_job_log} can start after cancel") + logger.trace(f"[DeviceActionManager] Next job {next_job_log} can start after cancel") return True # 如果是排队中的任务 @@ -295,7 +296,7 @@ class DeviceActionManager: job_log = format_job_log( job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name ) - logger.info(f"[DeviceActionManager] Queued job {job_log} cancelled for {device_key}") + logger.trace(f"[DeviceActionManager] Queued job {job_log} cancelled for {device_key}") return True job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) @@ -565,7 +566,7 @@ class MessageProcessor: async def _process_message(self, message_type: str, message_data: Dict[str, Any]): """处理收到的消息""" - logger.debug(f"[MessageProcessor] Processing message: {message_type}") + logger.trace(f"[MessageProcessor] Processing message: {message_type}") try: if message_type == "pong": @@ -637,13 +638,13 @@ class MessageProcessor: await self._send_action_state_response( device_id, action_name, task_id, job_id, "query_action_status", True, 0 ) - logger.info(f"[MessageProcessor] Job {job_log} can start immediately") + logger.trace(f"[MessageProcessor] Job {job_log} can start immediately") else: # 需要排队 await self._send_action_state_response( device_id, action_name, task_id, job_id, "query_action_status", False, 10 ) - logger.info(f"[MessageProcessor] Job {job_log} queued") + logger.trace(f"[MessageProcessor] Job {job_log} queued") # 通知QueueProcessor有新的队列更新 if self.queue_processor: @@ -1128,7 +1129,7 @@ class QueueProcessor: success = self.message_processor.send_message(message) job_log = format_job_log(job_info.job_id, job_info.task_id, job_info.device_id, job_info.action_name) if success: - logger.debug(f"[QueueProcessor] Sent busy/need_more for queued job {job_log}") + logger.trace(f"[QueueProcessor] Sent busy/need_more for queued job {job_log}") else: logger.warning(f"[QueueProcessor] Failed to send busy status for job {job_log}") @@ -1151,7 +1152,7 @@ class QueueProcessor: job_info.action_name, ) - logger.info(f"[QueueProcessor] Job {job_log} completed with status: {status}") + logger.trace(f"[QueueProcessor] Job {job_log} completed with status: {status}") # 结束任务,获取下一个可执行的任务 next_job = self.device_manager.end_job(job_id) @@ -1171,8 +1172,8 @@ class QueueProcessor: }, } self.message_processor.send_message(message) - next_job_log = format_job_log(next_job.job_id, next_job.task_id, next_job.device_id, next_job.action_name) - logger.info(f"[QueueProcessor] Notified next job {next_job_log} can start") + # next_job_log = format_job_log(next_job.job_id, next_job.task_id, next_job.device_id, next_job.action_name) + # logger.debug(f"[QueueProcessor] Notified next job {next_job_log} can start") # 立即触发下一轮状态检查 self.notify_queue_update() @@ -1314,7 +1315,7 @@ class WebSocketClient(BaseCommunicationClient): except (KeyError, AttributeError): logger.warning(f"[WebSocketClient] Failed to remove job {item.job_id} from HostNode status") - logger.info(f"[WebSocketClient] Intercepting final status for job_id: {item.job_id} - {status}") + # logger.debug(f"[WebSocketClient] Intercepting final status for job_id: {item.job_id} - {status}") # 通知队列处理器job完成(包括timeout的job) self.queue_processor.handle_job_completed(item.job_id, status) diff --git a/unilabos/config/config.py b/unilabos/config/config.py index f3dba5da..c91a07d4 100644 --- a/unilabos/config/config.py +++ b/unilabos/config/config.py @@ -22,6 +22,7 @@ class BasicConfig: startup_json_path = None # 填写绝对路径 disable_browser = False # 禁止浏览器自动打开 port = 8002 # 本地HTTP服务 + check_mode = False # CI 检查模式,用于验证 registry 导入和文件一致性 # 'TRACE', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL' log_level: Literal["TRACE", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = "DEBUG" diff --git a/unilabos/devices/virtual/workbench.py b/unilabos/devices/virtual/workbench.py new file mode 100644 index 00000000..7a8e1454 --- /dev/null +++ b/unilabos/devices/virtual/workbench.py @@ -0,0 +1,687 @@ +""" +Virtual Workbench Device - 模拟工作台设备 +包含: +- 1个机械臂 (每次操作3s, 独占锁) +- 3个加热台 (每次加热10s, 可并行) + +工作流程: +1. A1-A5 物料同时启动,竞争机械臂 +2. 机械臂将物料移动到空闲加热台 +3. 加热完成后,机械臂将物料移动到C1-C5 + +注意:调用来自线程池,使用 threading.Lock 进行同步 +""" +import logging +import time +from typing import Dict, Any, Optional +from dataclasses import dataclass +from enum import Enum +from threading import Lock, RLock + +from typing_extensions import TypedDict + +from unilabos.ros.nodes.base_device_node import BaseROS2DeviceNode +from unilabos.utils.decorator import not_action + + +# ============ TypedDict 返回类型定义 ============ + +class MoveToHeatingStationResult(TypedDict): + """move_to_heating_station 返回类型""" + success: bool + station_id: int + material_id: str + material_number: int + message: str + + +class StartHeatingResult(TypedDict): + """start_heating 返回类型""" + success: bool + station_id: int + material_id: str + material_number: int + message: str + + +class MoveToOutputResult(TypedDict): + """move_to_output 返回类型""" + success: bool + station_id: int + material_id: str + + +class PrepareMaterialsResult(TypedDict): + """prepare_materials 返回类型 - 批量准备物料""" + success: bool + count: int + material_1: int # 物料编号1 + material_2: int # 物料编号2 + material_3: int # 物料编号3 + material_4: int # 物料编号4 + material_5: int # 物料编号5 + message: str + + +# ============ 状态枚举 ============ + +class HeatingStationState(Enum): + """加热台状态枚举""" + IDLE = "idle" # 空闲 + OCCUPIED = "occupied" # 已放置物料,等待加热 + HEATING = "heating" # 加热中 + COMPLETED = "completed" # 加热完成,等待取走 + + +class ArmState(Enum): + """机械臂状态枚举""" + IDLE = "idle" # 空闲 + BUSY = "busy" # 工作中 + + +@dataclass +class HeatingStation: + """加热台数据结构""" + station_id: int + state: HeatingStationState = HeatingStationState.IDLE + current_material: Optional[str] = None # 当前物料 (如 "A1", "A2") + material_number: Optional[int] = None # 物料编号 (1-5) + heating_start_time: Optional[float] = None + heating_progress: float = 0.0 + + +class VirtualWorkbench: + """ + Virtual Workbench Device - 虚拟工作台设备 + + 模拟一个包含1个机械臂和3个加热台的工作站 + - 机械臂操作耗时3秒,同一时间只能执行一个操作 + - 加热台加热耗时10秒,3个加热台可并行工作 + + 工作流: + 1. 物料A1-A5并发启动(线程池),竞争机械臂使用权 + 2. 获取机械臂后,查找空闲加热台 + 3. 机械臂将物料放入加热台,开始加热 + 4. 加热完成后,机械臂将物料移动到目标位置Cn + """ + + _ros_node: BaseROS2DeviceNode + + # 配置常量 + ARM_OPERATION_TIME: float = 3.0 # 机械臂操作时间(秒) + HEATING_TIME: float = 10.0 # 加热时间(秒) + NUM_HEATING_STATIONS: int = 3 # 加热台数量 + + def __init__(self, device_id: Optional[str] = None, config: Optional[Dict[str, Any]] = None, **kwargs): + # 处理可能的不同调用方式 + if device_id is None and "id" in kwargs: + device_id = kwargs.pop("id") + if config is None and "config" in kwargs: + config = kwargs.pop("config") + + self.device_id = device_id or "virtual_workbench" + self.config = config or {} + + self.logger = logging.getLogger(f"VirtualWorkbench.{self.device_id}") + self.data: Dict[str, Any] = {} + + # 从config中获取可配置参数 + self.ARM_OPERATION_TIME = float(self.config.get("arm_operation_time", 3.0)) + self.HEATING_TIME = float(self.config.get("heating_time", 10.0)) + self.NUM_HEATING_STATIONS = int(self.config.get("num_heating_stations", 3)) + + # 机械臂状态和锁 (使用threading.Lock) + self._arm_lock = Lock() + self._arm_state = ArmState.IDLE + self._arm_current_task: Optional[str] = None + + # 加热台状态 (station_id -> HeatingStation) - 立即初始化,不依赖initialize() + self._heating_stations: Dict[int, HeatingStation] = { + i: HeatingStation(station_id=i) + for i in range(1, self.NUM_HEATING_STATIONS + 1) + } + self._stations_lock = RLock() # 可重入锁,保护加热台状态 + + # 任务追踪 + self._active_tasks: Dict[str, Dict[str, Any]] = {} # material_id -> task_info + self._tasks_lock = Lock() + + # 处理其他kwargs参数 + skip_keys = {"arm_operation_time", "heating_time", "num_heating_stations"} + for key, value in kwargs.items(): + if key not in skip_keys and not hasattr(self, key): + setattr(self, key, value) + + self.logger.info(f"=== 虚拟工作台 {self.device_id} 已创建 ===") + self.logger.info( + f"机械臂操作时间: {self.ARM_OPERATION_TIME}s | " + f"加热时间: {self.HEATING_TIME}s | " + f"加热台数量: {self.NUM_HEATING_STATIONS}" + ) + + @not_action + def post_init(self, ros_node: BaseROS2DeviceNode): + """ROS节点初始化后回调""" + self._ros_node = ros_node + + @not_action + def initialize(self) -> bool: + """初始化虚拟工作台""" + self.logger.info(f"初始化虚拟工作台 {self.device_id}") + + # 重置加热台状态 (已在__init__中创建,这里重置为初始状态) + with self._stations_lock: + for station in self._heating_stations.values(): + station.state = HeatingStationState.IDLE + station.current_material = None + station.material_number = None + station.heating_progress = 0.0 + + # 初始化状态 + self.data.update({ + "status": "Ready", + "arm_state": ArmState.IDLE.value, + "arm_current_task": None, + "heating_stations": self._get_stations_status(), + "active_tasks_count": 0, + "message": "工作台就绪", + }) + + self.logger.info(f"工作台初始化完成: {self.NUM_HEATING_STATIONS}个加热台就绪") + return True + + @not_action + def cleanup(self) -> bool: + """清理虚拟工作台""" + self.logger.info(f"清理虚拟工作台 {self.device_id}") + + self._arm_state = ArmState.IDLE + self._arm_current_task = None + + with self._stations_lock: + self._heating_stations.clear() + + with self._tasks_lock: + self._active_tasks.clear() + + self.data.update({ + "status": "Offline", + "arm_state": ArmState.IDLE.value, + "heating_stations": {}, + "message": "工作台已关闭", + }) + return True + + def _get_stations_status(self) -> Dict[int, Dict[str, Any]]: + """获取所有加热台状态""" + with self._stations_lock: + return { + station_id: { + "state": station.state.value, + "current_material": station.current_material, + "material_number": station.material_number, + "heating_progress": station.heating_progress, + } + for station_id, station in self._heating_stations.items() + } + + def _update_data_status(self, message: Optional[str] = None): + """更新状态数据""" + self.data.update({ + "arm_state": self._arm_state.value, + "arm_current_task": self._arm_current_task, + "heating_stations": self._get_stations_status(), + "active_tasks_count": len(self._active_tasks), + }) + if message: + self.data["message"] = message + + def _find_available_heating_station(self) -> Optional[int]: + """查找空闲的加热台 + + Returns: + 空闲加热台ID,如果没有则返回None + """ + with self._stations_lock: + for station_id, station in self._heating_stations.items(): + if station.state == HeatingStationState.IDLE: + return station_id + return None + + def _acquire_arm(self, task_description: str) -> bool: + """获取机械臂使用权(阻塞直到获取) + + Args: + task_description: 任务描述,用于日志 + + Returns: + 是否成功获取 + """ + self.logger.info(f"[{task_description}] 等待获取机械臂...") + + # 阻塞等待获取锁 + self._arm_lock.acquire() + + self._arm_state = ArmState.BUSY + self._arm_current_task = task_description + self._update_data_status(f"机械臂执行: {task_description}") + + self.logger.info(f"[{task_description}] 成功获取机械臂使用权") + return True + + def _release_arm(self): + """释放机械臂""" + task = self._arm_current_task + self._arm_state = ArmState.IDLE + self._arm_current_task = None + self._arm_lock.release() + self._update_data_status(f"机械臂已释放 (完成: {task})") + self.logger.info(f"机械臂已释放 (完成: {task})") + + def prepare_materials( + self, + count: int = 5, + ) -> PrepareMaterialsResult: + """ + 批量准备物料 - 虚拟起始节点 + + 作为工作流的起始节点,生成指定数量的物料编号供后续节点使用。 + 输出5个handle (material_1 ~ material_5),分别对应实验1~5。 + + Args: + count: 待生成的物料数量,默认5 (生成 A1-A5) + + Returns: + PrepareMaterialsResult: 包含 material_1 ~ material_5 用于传递给 move_to_heating_station + """ + # 生成物料列表 A1 - A{count} + materials = [i for i in range(1, count + 1)] + + self.logger.info( + f"[准备物料] 生成 {count} 个物料: " + f"A1-A{count} -> material_1~material_{count}" + ) + + return { + "success": True, + "count": count, + "material_1": materials[0] if len(materials) > 0 else 0, + "material_2": materials[1] if len(materials) > 1 else 0, + "material_3": materials[2] if len(materials) > 2 else 0, + "material_4": materials[3] if len(materials) > 3 else 0, + "material_5": materials[4] if len(materials) > 4 else 0, + "message": f"已准备 {count} 个物料: A1-A{count}", + } + + def move_to_heating_station( + self, + material_number: int, + ) -> MoveToHeatingStationResult: + """ + 将物料从An位置移动到加热台 + + 多线程并发调用时,会竞争机械臂使用权,并自动查找空闲加热台 + + Args: + material_number: 物料编号 (1-5) + + Returns: + MoveToHeatingStationResult: 包含 station_id, material_number 等用于传递给下一个节点 + """ + # 根据物料编号生成物料ID + material_id = f"A{material_number}" + task_desc = f"移动{material_id}到加热台" + self.logger.info(f"[任务] {task_desc} - 开始执行") + + # 记录任务 + with self._tasks_lock: + self._active_tasks[material_id] = { + "status": "waiting_for_arm", + "start_time": time.time(), + } + + try: + # 步骤1: 等待获取机械臂使用权(竞争) + with self._tasks_lock: + self._active_tasks[material_id]["status"] = "waiting_for_arm" + self._acquire_arm(task_desc) + + # 步骤2: 查找空闲加热台 + with self._tasks_lock: + self._active_tasks[material_id]["status"] = "finding_station" + station_id = None + + # 循环等待直到找到空闲加热台 + while station_id is None: + station_id = self._find_available_heating_station() + if station_id is None: + self.logger.info(f"[{material_id}] 没有空闲加热台,等待中...") + # 释放机械臂,等待后重试 + self._release_arm() + time.sleep(0.5) + self._acquire_arm(task_desc) + + # 步骤3: 占用加热台 - 立即标记为OCCUPIED,防止其他任务选择同一加热台 + with self._stations_lock: + self._heating_stations[station_id].state = HeatingStationState.OCCUPIED + self._heating_stations[station_id].current_material = material_id + self._heating_stations[station_id].material_number = material_number + + # 步骤4: 模拟机械臂移动操作 (3秒) + with self._tasks_lock: + self._active_tasks[material_id]["status"] = "arm_moving" + self._active_tasks[material_id]["assigned_station"] = station_id + self.logger.info(f"[{material_id}] 机械臂正在移动到加热台{station_id}...") + + time.sleep(self.ARM_OPERATION_TIME) + + # 步骤5: 放入加热台完成 + self._update_data_status(f"{material_id}已放入加热台{station_id}") + self.logger.info(f"[{material_id}] 已放入加热台{station_id} (用时{self.ARM_OPERATION_TIME}s)") + + # 释放机械臂 + self._release_arm() + + with self._tasks_lock: + self._active_tasks[material_id]["status"] = "placed_on_station" + + return { + "success": True, + "station_id": station_id, + "material_id": material_id, + "material_number": material_number, + "message": f"{material_id}已成功移动到加热台{station_id}", + } + + except Exception as e: + self.logger.error(f"[{material_id}] 移动失败: {str(e)}") + if self._arm_lock.locked(): + self._release_arm() + return { + "success": False, + "station_id": -1, + "material_id": material_id, + "material_number": material_number, + "message": f"移动失败: {str(e)}", + } + + def start_heating( + self, + station_id: int, + material_number: int, + ) -> StartHeatingResult: + """ + 启动指定加热台的加热程序 + + Args: + station_id: 加热台ID (1-3),从 move_to_heating_station 的 handle 传入 + material_number: 物料编号,从 move_to_heating_station 的 handle 传入 + + Returns: + StartHeatingResult: 包含 station_id, material_number 等用于传递给下一个节点 + """ + self.logger.info(f"[加热台{station_id}] 开始加热") + + if station_id not in self._heating_stations: + return { + "success": False, + "station_id": station_id, + "material_id": "", + "material_number": material_number, + "message": f"无效的加热台ID: {station_id}", + } + + with self._stations_lock: + station = self._heating_stations[station_id] + + if station.current_material is None: + return { + "success": False, + "station_id": station_id, + "material_id": "", + "material_number": material_number, + "message": f"加热台{station_id}上没有物料", + } + + if station.state == HeatingStationState.HEATING: + return { + "success": False, + "station_id": station_id, + "material_id": station.current_material, + "material_number": material_number, + "message": f"加热台{station_id}已经在加热中", + } + + material_id = station.current_material + + # 开始加热 + station.state = HeatingStationState.HEATING + station.heating_start_time = time.time() + station.heating_progress = 0.0 + + with self._tasks_lock: + if material_id in self._active_tasks: + self._active_tasks[material_id]["status"] = "heating" + + self._update_data_status(f"加热台{station_id}开始加热{material_id}") + + # 模拟加热过程 (10秒) + start_time = time.time() + while True: + elapsed = time.time() - start_time + progress = min(100.0, (elapsed / self.HEATING_TIME) * 100) + + with self._stations_lock: + self._heating_stations[station_id].heating_progress = progress + + self._update_data_status(f"加热台{station_id}加热中: {progress:.1f}%") + + if elapsed >= self.HEATING_TIME: + break + + time.sleep(1.0) + + # 加热完成 + with self._stations_lock: + self._heating_stations[station_id].state = HeatingStationState.COMPLETED + self._heating_stations[station_id].heating_progress = 100.0 + + with self._tasks_lock: + if material_id in self._active_tasks: + self._active_tasks[material_id]["status"] = "heating_completed" + + self._update_data_status(f"加热台{station_id}加热完成") + self.logger.info(f"[加热台{station_id}] {material_id}加热完成 (用时{self.HEATING_TIME}s)") + + return { + "success": True, + "station_id": station_id, + "material_id": material_id, + "material_number": material_number, + "message": f"加热台{station_id}加热完成", + } + + def move_to_output( + self, + station_id: int, + material_number: int, + ) -> MoveToOutputResult: + """ + 将物料从加热台移动到输出位置Cn + + Args: + station_id: 加热台ID (1-3),从 start_heating 的 handle 传入 + material_number: 物料编号,从 start_heating 的 handle 传入,用于确定输出位置 Cn + + Returns: + MoveToOutputResult: 包含执行结果 + """ + output_number = material_number # 物料编号决定输出位置 + + if station_id not in self._heating_stations: + return { + "success": False, + "station_id": station_id, + "material_id": "", + "output_position": f"C{output_number}", + "message": f"无效的加热台ID: {station_id}", + } + + with self._stations_lock: + station = self._heating_stations[station_id] + material_id = station.current_material + + if material_id is None: + return { + "success": False, + "station_id": station_id, + "material_id": "", + "output_position": f"C{output_number}", + "message": f"加热台{station_id}上没有物料", + } + + if station.state != HeatingStationState.COMPLETED: + return { + "success": False, + "station_id": station_id, + "material_id": material_id, + "output_position": f"C{output_number}", + "message": f"加热台{station_id}尚未完成加热 (当前状态: {station.state.value})", + } + + output_position = f"C{output_number}" + task_desc = f"从加热台{station_id}移动{material_id}到{output_position}" + self.logger.info(f"[任务] {task_desc}") + + try: + with self._tasks_lock: + if material_id in self._active_tasks: + self._active_tasks[material_id]["status"] = "waiting_for_arm_output" + + # 获取机械臂 + self._acquire_arm(task_desc) + + with self._tasks_lock: + if material_id in self._active_tasks: + self._active_tasks[material_id]["status"] = "arm_moving_to_output" + + # 模拟机械臂操作 (3秒) + self.logger.info(f"[{material_id}] 机械臂正在从加热台{station_id}取出并移动到{output_position}...") + time.sleep(self.ARM_OPERATION_TIME) + + # 清空加热台 + with self._stations_lock: + self._heating_stations[station_id].state = HeatingStationState.IDLE + self._heating_stations[station_id].current_material = None + self._heating_stations[station_id].material_number = None + self._heating_stations[station_id].heating_progress = 0.0 + self._heating_stations[station_id].heating_start_time = None + + # 释放机械臂 + self._release_arm() + + # 任务完成 + with self._tasks_lock: + if material_id in self._active_tasks: + self._active_tasks[material_id]["status"] = "completed" + self._active_tasks[material_id]["end_time"] = time.time() + + self._update_data_status(f"{material_id}已移动到{output_position}") + self.logger.info(f"[{material_id}] 已成功移动到{output_position} (用时{self.ARM_OPERATION_TIME}s)") + + return { + "success": True, + "station_id": station_id, + "material_id": material_id, + "output_position": output_position, + "message": f"{material_id}已成功移动到{output_position}", + } + + except Exception as e: + self.logger.error(f"移动到输出位置失败: {str(e)}") + if self._arm_lock.locked(): + self._release_arm() + return { + "success": False, + "station_id": station_id, + "material_id": "", + "output_position": output_position, + "message": f"移动失败: {str(e)}", + } + + # ============ 状态属性 ============ + + @property + def status(self) -> str: + return self.data.get("status", "Unknown") + + @property + def arm_state(self) -> str: + return self._arm_state.value + + @property + def arm_current_task(self) -> str: + return self._arm_current_task or "" + + @property + def heating_station_1_state(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(1) + return station.state.value if station else "unknown" + + @property + def heating_station_1_material(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(1) + return station.current_material or "" if station else "" + + @property + def heating_station_1_progress(self) -> float: + with self._stations_lock: + station = self._heating_stations.get(1) + return station.heating_progress if station else 0.0 + + @property + def heating_station_2_state(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(2) + return station.state.value if station else "unknown" + + @property + def heating_station_2_material(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(2) + return station.current_material or "" if station else "" + + @property + def heating_station_2_progress(self) -> float: + with self._stations_lock: + station = self._heating_stations.get(2) + return station.heating_progress if station else 0.0 + + @property + def heating_station_3_state(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(3) + return station.state.value if station else "unknown" + + @property + def heating_station_3_material(self) -> str: + with self._stations_lock: + station = self._heating_stations.get(3) + return station.current_material or "" if station else "" + + @property + def heating_station_3_progress(self) -> float: + with self._stations_lock: + station = self._heating_stations.get(3) + return station.heating_progress if station else 0.0 + + @property + def active_tasks_count(self) -> int: + with self._tasks_lock: + return len(self._active_tasks) + + @property + def message(self) -> str: + return self.data.get("message", "") diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml index 77ac5336..b1b1ab64 100644 --- a/unilabos/registry/devices/virtual_device.yaml +++ b/unilabos/registry/devices/virtual_device.yaml @@ -1,267 +1,324 @@ -virtual_centrifuge: +virtual_workbench: category: - virtual_device class: action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: + auto-move_to_heating_station: feedback: {} goal: {} goal_default: - ros_node: null - handles: {} + material_number: null + handles: + input: + - data_key: material_number + data_source: handle + data_type: workbench_material + handler_key: material_input + label: 物料编号 + output: + - data_key: station_id + data_source: executor + data_type: workbench_station + handler_key: heating_station_output + label: 加热台ID + - data_key: material_number + data_source: executor + data_type: workbench_material + handler_key: material_number_output + label: 物料编号 placeholder_keys: {} result: {} schema: - description: '' + description: 将物料从An位置移动到空闲加热台,返回分配的加热台ID properties: feedback: {} goal: properties: - ros_node: - type: object + material_number: + description: 物料编号,1-5,物料ID自动生成为A{n} + type: integer required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - type: object - required: - - vessel - - speed - - time - - temp - title: Centrifuge_Goal + - material_number type: object result: + description: move_to_heating_station 返回类型 properties: + material_id: + title: Material Id + type: string + material_number: + title: Material Number + type: integer message: + title: Message type: string - return_info: - type: string + station_id: + description: 分配的加热台ID + title: Station Id + type: integer success: + title: Success type: boolean required: - success + - station_id + - material_id + - material_number - message - - return_info - title: Centrifuge_Result + title: MoveToHeatingStationResult type: object required: - goal - title: Centrifuge + title: move_to_heating_station参数 type: object - type: Centrifuge - module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge + type: UniLabJsonCommand + auto-move_to_output: + feedback: {} + goal: {} + goal_default: + material_number: null + station_id: null + handles: + input: + - data_key: station_id + data_source: handle + data_type: workbench_station + handler_key: output_station_input + label: 加热台ID + - data_key: material_number + data_source: handle + data_type: workbench_material + handler_key: output_material_input + label: 物料编号 + placeholder_keys: {} + result: {} + schema: + description: 将物料从加热台移动到输出位置Cn + properties: + feedback: {} + goal: + properties: + material_number: + description: 物料编号,用于确定输出位置Cn + type: integer + station_id: + description: 加热台ID,1-3,从上一节点传入 + type: integer + required: + - station_id + - material_number + type: object + result: + description: move_to_output 返回类型 + properties: + material_id: + title: Material Id + type: string + station_id: + title: Station Id + type: integer + success: + title: Success + type: boolean + required: + - success + - station_id + - material_id + title: MoveToOutputResult + type: object + required: + - goal + title: move_to_output参数 + type: object + type: UniLabJsonCommand + auto-prepare_materials: + feedback: {} + goal: {} + goal_default: + count: 5 + handles: + output: + - data_key: material_1 + data_source: executor + data_type: workbench_material + handler_key: channel_1 + label: 实验1 + - data_key: material_2 + data_source: executor + data_type: workbench_material + handler_key: channel_2 + label: 实验2 + - data_key: material_3 + data_source: executor + data_type: workbench_material + handler_key: channel_3 + label: 实验3 + - data_key: material_4 + data_source: executor + data_type: workbench_material + handler_key: channel_4 + label: 实验4 + - data_key: material_5 + data_source: executor + data_type: workbench_material + handler_key: channel_5 + label: 实验5 + placeholder_keys: {} + result: {} + schema: + description: 批量准备物料 - 虚拟起始节点,生成A1-A5物料,输出5个handle供后续节点使用 + properties: + feedback: {} + goal: + properties: + count: + default: 5 + description: 待生成的物料数量,默认5 (生成 A1-A5) + type: integer + required: [] + type: object + result: + description: prepare_materials 返回类型 - 批量准备物料 + properties: + count: + title: Count + type: integer + material_1: + title: Material 1 + type: integer + material_2: + title: Material 2 + type: integer + material_3: + title: Material 3 + type: integer + material_4: + title: Material 4 + type: integer + material_5: + title: Material 5 + type: integer + message: + title: Message + type: string + success: + title: Success + type: boolean + required: + - success + - count + - material_1 + - material_2 + - material_3 + - material_4 + - material_5 + - message + title: PrepareMaterialsResult + type: object + required: + - goal + title: prepare_materials参数 + type: object + type: UniLabJsonCommand + auto-start_heating: + feedback: {} + goal: {} + goal_default: + material_number: null + station_id: null + handles: + input: + - data_key: station_id + data_source: handle + data_type: workbench_station + handler_key: station_id_input + label: 加热台ID + - data_key: material_number + data_source: handle + data_type: workbench_material + handler_key: material_number_input + label: 物料编号 + output: + - data_key: station_id + data_source: executor + data_type: workbench_station + handler_key: heating_done_station + label: 加热完成-加热台ID + - data_key: material_number + data_source: executor + data_type: workbench_material + handler_key: heating_done_material + label: 加热完成-物料编号 + placeholder_keys: {} + result: {} + schema: + description: 启动指定加热台的加热程序 + properties: + feedback: {} + goal: + properties: + material_number: + description: 物料编号,从上一节点传入 + type: integer + station_id: + description: 加热台ID,1-3,从上一节点传入 + type: integer + required: + - station_id + - material_number + type: object + result: + description: start_heating 返回类型 + properties: + material_id: + title: Material Id + type: string + material_number: + title: Material Number + type: integer + message: + title: Message + type: string + station_id: + title: Station Id + type: integer + success: + title: Success + type: boolean + required: + - success + - station_id + - material_id + - material_number + - message + title: StartHeatingResult + type: object + required: + - goal + title: start_heating参数 + type: object + type: UniLabJsonCommand + module: unilabos.devices.virtual.workbench:VirtualWorkbench status_types: - centrifuge_state: str - current_speed: float - current_temp: float - max_speed: float - max_temp: float + active_tasks_count: int + arm_current_task: str + arm_state: str + heating_station_1_material: str + heating_station_1_progress: float + heating_station_1_state: str + heating_station_2_material: str + heating_station_2_progress: float + heating_station_2_state: str + heating_station_3_material: str + heating_station_3_progress: float + heating_station_3_state: str 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 + description: Virtual Workbench with 1 robotic arm and 3 heating stations for concurrent + material processing + handles: [] icon: '' init_param_schema: config: @@ -274,5521 +331,48 @@ virtual_centrifuge: type: object data: properties: - centrifuge_state: + active_tasks_count: + type: integer + arm_current_task: type: string - current_speed: + arm_state: + type: string + heating_station_1_material: + type: string + heating_station_1_progress: type: number - current_temp: + heating_station_1_state: + type: string + heating_station_2_material: + type: string + heating_station_2_progress: type: number - max_speed: - type: number - max_temp: + heating_station_2_state: + type: string + heating_station_3_material: + type: string + heating_station_3_progress: type: number + heating_station_3_state: + type: string 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 + - arm_state + - arm_current_task + - heating_station_1_state + - heating_station_1_material + - heating_station_1_progress + - heating_station_2_state + - heating_station_2_material + - heating_station_2_progress + - heating_station_3_state + - heating_station_3_material + - heating_station_3_progress + - active_tasks_count - message type: object version: 1.0.0 -virtual_column: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - run_column: - feedback: - current_status: current_status - processed_volume: processed_volume - progress: progress - goal: - column: column - from_vessel: from_vessel - to_vessel: to_vessel - 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 - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: from_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: to_vessel - 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: - 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 - config_info: [] - description: Virtual Column Chromatography Device for RunColumn Protocol Testing - handles: - - data_key: from_vessel - data_source: handle - data_type: transport - description: 样品输入口 - handler_key: columnin - io_type: target - label: columnin - side: WEST - - data_key: to_vessel - data_source: handle - 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: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - 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 - vessel: vessel - volume: volume - 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: - message: message - return_info: message - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: filtrate_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: - 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 - - current_status - - filtered_volume - - message - - max_temp - - max_stir_speed - - max_volume - type: object - version: 1.0.0 -virtual_gas_source: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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_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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - heat_chill: - feedback: - status: status - goal: - purpose: purpose - stir: stir - stir_speed: stir_speed - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: - 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: - auto-close: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: - current_port: str - current_position: int - flow_path: str - 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: target - label: '8' - 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: - current_port: - type: string - current_position: - type: integer - flow_path: - type: string - 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 - - flow_path - type: object - version: 1.0.0 -virtual_rotavap: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - evaporate: - feedback: - current_device: current_device - status: status - goal: - pressure: pressure - 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: {} - result: - message: message - 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: time_remaining - type: object - time_spent: - properties: - nanosec: - maximum: 4294967295 - minimum: 0 - type: integer - sec: - maximum: 2147483647 - minimum: -2147483648 - type: integer - required: - - sec - - nanosec - title: time_spent - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - separate: - feedback: - current_status: status - progress: progress - goal: - from_vessel: from_vessel - product_phase: product_phase - purpose: purpose - repeats: repeats - separation_vessel: separation_vessel - settling_time: settling_time - solvent: solvent - solvent_volume: solvent_volume - stir_speed: stir_speed - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: from_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: product_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: separation_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: to_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: waste_phase_to_vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: waste_vessel - 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: 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: is_closed的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: is_closed参数 - type: object - type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - auto-reset: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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 - status: str - valve_position: str - valve_state: str - type: python - config_info: [] - description: Virtual Solenoid Valve for simple on/off flow control - handles: - - data_key: fluid_port_in - data_source: handle - data_type: fluid - description: 电磁阀的进液口 - handler_key: in - io_type: target - label: in - side: NORTH - - data_key: fluid_port_out - data_source: handle - data_type: fluid - description: 电磁阀的出液口 - handler_key: out - io_type: source - label: out - side: SOUTH - icon: '' - init_param_schema: - config: - properties: - config: - type: object - device_id: - type: string - required: [] - type: object - data: - properties: - is_open: - type: boolean - status: - type: string - valve_position: - type: string - valve_state: - type: string - required: - - status - - valve_state - - is_open - - valve_position - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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 - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser - status_types: - current_reagent: str - 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_type: resource - description: 固体试剂输出口 - handler_key: SolidOut - io_type: source - 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 - dispensed_amount: - type: number - status: - type: string - total_operations: - type: integer - required: - - status - - current_reagent - - dispensed_amount - - total_operations - type: object - version: 1.0.0 -virtual_stirrer: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: initialize的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: initialize参数 - type: object - type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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: orientation - type: object - position: - properties: - x: - type: number - y: - type: number - z: - type: number - required: - - x - - y - - z - title: position - 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: vessel - 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 - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - result: {} - schema: - description: is_full的参数schema - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: is_full参数 - type: object - type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand - auto-pull_plunger: - feedback: {} - goal: {} - goal_default: - velocity: null - volume: null - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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 - 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_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 - remaining_capacity: - type: number - status: - type: string - transfer_rate: - type: number - required: - - status - - position - - current_volume - - max_velocity - - transfer_rate - - remaining_capacity - type: object - version: 1.0.0 -virtual_vacuum_pump: - category: - - virtual_device - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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: {} - placeholder_keys: {} - 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 - status_types: - status: str - type: python - config_info: [] - description: Virtual vacuum pump - handles: - - data_key: fluid_in - data_source: handle - data_type: fluid - description: 真空泵进气口 - handler_key: vacuumpump - io_type: source - 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/registry.py b/unilabos/registry/registry.py index f09b79c1..e486d6ce 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -71,6 +71,20 @@ class Registry: from unilabos.app.web.utils.action_utils import get_yaml_from_goal_type + # 获取 HostNode 类的增强信息,用于自动生成 action schema + host_node_enhanced_info = get_enhanced_class_info( + "unilabos.ros.nodes.presets.host_node:HostNode", use_dynamic=True + ) + + # 为 test_latency 生成 schema,保留原有 description + test_latency_method_info = host_node_enhanced_info.get("action_methods", {}).get("test_latency", {}) + test_latency_schema = self._generate_unilab_json_command_schema( + test_latency_method_info.get("args", []), + "test_latency", + test_latency_method_info.get("return_annotation"), + ) + test_latency_schema["description"] = "用于测试延迟的动作,返回延迟时间和时间差。" + self.device_type_registry.update( { "host_node": { @@ -152,14 +166,19 @@ class Registry: }, }, "test_latency": { - "type": self.EmptyIn, + "type": ( + "UniLabJsonCommandAsync" + if test_latency_method_info.get("is_async", False) + else "UniLabJsonCommand" + ), "goal": {}, "feedback": {}, "result": {}, - "schema": ros_action_to_json_schema( - self.EmptyIn, "用于测试延迟的动作,返回延迟时间和时间差。" - ), - "goal_default": {}, + "schema": test_latency_schema, + "goal_default": { + arg["name"]: arg["default"] + for arg in test_latency_method_info.get("args", []) + }, "handles": {}, }, "auto-test_resource": { @@ -540,11 +559,9 @@ class Registry: return final_schema - def _preserve_field_descriptions( - self, new_schema: Dict[str, Any], previous_schema: Dict[str, Any] - ) -> None: + def _preserve_field_descriptions(self, new_schema: Dict[str, Any], previous_schema: Dict[str, Any]) -> None: """ - 保留之前 schema 中 goal/feedback/result 下一级字段的 description + 保留之前 schema 中 goal/feedback/result 下一级字段的 description 和 title Args: new_schema: 新生成的 schema(会被修改) @@ -566,6 +583,9 @@ class Registry: # 保留字段的 description if "description" in prev_field and prev_field["description"]: field_schema["description"] = prev_field["description"] + # 保留字段的 title(用户自定义的中文名) + if "title" in prev_field and prev_field["title"]: + field_schema["title"] = prev_field["title"] def _is_typed_dict(self, annotation: Any) -> bool: """ diff --git a/unilabos/ros/msgs/message_converter.py b/unilabos/ros/msgs/message_converter.py index 632d5e1a..b526d5f5 100644 --- a/unilabos/ros/msgs/message_converter.py +++ b/unilabos/ros/msgs/message_converter.py @@ -770,13 +770,16 @@ def ros_message_to_json_schema(msg_class: Any, field_name: str) -> Dict[str, Any return schema -def ros_action_to_json_schema(action_class: Any, description="") -> Dict[str, Any]: +def ros_action_to_json_schema( + action_class: Any, description="", previous_schema: Optional[Dict[str, Any]] = None +) -> Dict[str, Any]: """ 将 ROS Action 类转换为 JSON Schema Args: action_class: ROS Action 类 description: 描述 + previous_schema: 之前的 schema,用于保留 goal/feedback/result 下一级字段的 description Returns: 完整的 JSON Schema 定义 @@ -810,9 +813,44 @@ def ros_action_to_json_schema(action_class: Any, description="") -> Dict[str, An "required": ["goal"], } + # 保留之前 schema 中 goal/feedback/result 下一级字段的 description + if previous_schema: + _preserve_field_descriptions(schema, previous_schema) + return schema +def _preserve_field_descriptions( + new_schema: Dict[str, Any], previous_schema: Dict[str, Any] +) -> None: + """ + 保留之前 schema 中 goal/feedback/result 下一级字段的 description 和 title + + Args: + new_schema: 新生成的 schema(会被修改) + previous_schema: 之前的 schema + """ + for section in ["goal", "feedback", "result"]: + new_section = new_schema.get("properties", {}).get(section, {}) + prev_section = previous_schema.get("properties", {}).get(section, {}) + + if not new_section or not prev_section: + continue + + new_props = new_section.get("properties", {}) + prev_props = prev_section.get("properties", {}) + + for field_name, field_schema in new_props.items(): + if field_name in prev_props: + prev_field = prev_props[field_name] + # 保留字段的 description + if "description" in prev_field and prev_field["description"]: + field_schema["description"] = prev_field["description"] + # 保留字段的 title(用户自定义的中文名) + if "title" in prev_field and prev_field["title"]: + field_schema["title"] = prev_field["title"] + + def convert_ros_action_to_jsonschema( action_name_or_type: Union[str, Type], output_file: Optional[str] = None, format: str = "json" ) -> Dict[str, Any]: diff --git a/unilabos/ros/nodes/presets/host_node.py b/unilabos/ros/nodes/presets/host_node.py index 101476a1..9a27e049 100644 --- a/unilabos/ros/nodes/presets/host_node.py +++ b/unilabos/ros/nodes/presets/host_node.py @@ -5,7 +5,8 @@ import threading import time import traceback import uuid -from typing import TYPE_CHECKING, Optional, Dict, Any, List, ClassVar, Set, TypedDict, Union +from typing import TYPE_CHECKING, Optional, Dict, Any, List, ClassVar, Set, Union +from typing_extensions import TypedDict from action_msgs.msg import GoalStatus from geometry_msgs.msg import Point @@ -62,6 +63,18 @@ class TestResourceReturn(TypedDict): devices: List[DeviceSlot] +class TestLatencyReturn(TypedDict): + """test_latency方法的返回值类型""" + + avg_rtt_ms: float + avg_time_diff_ms: float + max_time_error_ms: float + task_delay_ms: float + raw_delay_ms: float + test_count: int + status: str + + class HostNode(BaseROS2DeviceNode): """ 主机节点类,负责管理设备、资源和控制器 @@ -853,8 +866,13 @@ class HostNode(BaseROS2DeviceNode): # 适配后端的一些额外处理 return_value = return_info.get("return_value") if isinstance(return_value, dict): - unilabos_samples = return_info.get("unilabos_samples") - if isinstance(unilabos_samples, list): + unilabos_samples = return_value.pop("unilabos_samples", None) + if isinstance(unilabos_samples, list) and unilabos_samples: + self.lab_logger().info( + f"[Host Node] Job {job_id[:8]} returned {len(unilabos_samples)} sample(s): " + f"{[s.get('name', s.get('id', 'unknown')) if isinstance(s, dict) else str(s)[:20] for s in unilabos_samples[:5]]}" + f"{'...' if len(unilabos_samples) > 5 else ''}" + ) return_info["unilabos_samples"] = unilabos_samples suc = return_info.get("suc", False) if not suc: @@ -881,7 +899,7 @@ class HostNode(BaseROS2DeviceNode): # 清理 _goals 中的记录 if job_id in self._goals: del self._goals[job_id] - self.lab_logger().debug(f"[Host Node] Removed goal {job_id[:8]} from _goals") + self.lab_logger().trace(f"[Host Node] Removed goal {job_id[:8]} from _goals") # 存储结果供 HTTP API 查询 try: @@ -1326,10 +1344,20 @@ class HostNode(BaseROS2DeviceNode): self.lab_logger().debug(f"[Host Node-Resource] List parameters: {request}") return response - def test_latency(self): + def test_latency(self) -> TestLatencyReturn: """ 测试网络延迟的action实现 通过5次ping-pong机制校对时间误差并计算实际延迟 + + Returns: + TestLatencyReturn: 包含延迟测试结果的字典,包括: + - avg_rtt_ms: 平均往返时间(毫秒) + - avg_time_diff_ms: 平均时间差(毫秒) + - max_time_error_ms: 最大时间误差(毫秒) + - task_delay_ms: 实际任务延迟(毫秒),-1表示无法计算 + - raw_delay_ms: 原始时间差(毫秒),-1表示无法计算 + - test_count: 有效测试次数 + - status: 测试状态,"success"表示成功,"all_timeout"表示全部超时 """ import uuid as uuid_module @@ -1392,7 +1420,15 @@ class HostNode(BaseROS2DeviceNode): if not ping_results: self.lab_logger().error("❌ 所有ping-pong测试都失败了") - return {"status": "all_timeout"} + return { + "avg_rtt_ms": -1.0, + "avg_time_diff_ms": -1.0, + "max_time_error_ms": -1.0, + "task_delay_ms": -1.0, + "raw_delay_ms": -1.0, + "test_count": 0, + "status": "all_timeout", + } # 统计分析 rtts = [r["rtt_ms"] for r in ping_results] @@ -1400,7 +1436,7 @@ class HostNode(BaseROS2DeviceNode): avg_rtt_ms = sum(rtts) / len(rtts) avg_time_diff_ms = sum(time_diffs) / len(time_diffs) - max_time_diff_error_ms = max(abs(min(time_diffs)), abs(max(time_diffs))) + max_time_diff_error_ms: float = max(abs(min(time_diffs)), abs(max(time_diffs))) self.lab_logger().info("-" * 50) self.lab_logger().info("[测试统计]") @@ -1440,7 +1476,7 @@ class HostNode(BaseROS2DeviceNode): self.lab_logger().info("=" * 60) - return { + res: TestLatencyReturn = { "avg_rtt_ms": avg_rtt_ms, "avg_time_diff_ms": avg_time_diff_ms, "max_time_error_ms": max_time_diff_error_ms, @@ -1451,9 +1487,14 @@ class HostNode(BaseROS2DeviceNode): "test_count": len(ping_results), "status": "success", } + return res def test_resource( - self, resource: ResourceSlot = None, resources: List[ResourceSlot] = None, device: DeviceSlot = None, devices: List[DeviceSlot] = None + self, + resource: ResourceSlot = None, + resources: List[ResourceSlot] = None, + device: DeviceSlot = None, + devices: List[DeviceSlot] = None, ) -> TestResourceReturn: if resources is None: resources = [] @@ -1514,7 +1555,9 @@ class HostNode(BaseROS2DeviceNode): # 构建服务地址 srv_address = f"/srv{namespace}/s2c_resource_tree" - self.lab_logger().trace(f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation started -------") + self.lab_logger().trace( + f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation started -------" + ) # 创建服务客户端 sclient = self.create_client(SerialCommand, srv_address) @@ -1549,7 +1592,9 @@ class HostNode(BaseROS2DeviceNode): time.sleep(0.05) response = future.result() - self.lab_logger().trace(f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation completed -------") + self.lab_logger().trace( + f"[Host Node-Resource] Host -> {device_id} ResourceTree {action} operation completed -------" + ) return True except Exception as e: diff --git a/unilabos/test/experiments/virtual_bench.json b/unilabos/test/experiments/virtual_bench.json new file mode 100644 index 00000000..d37fa6ee --- /dev/null +++ b/unilabos/test/experiments/virtual_bench.json @@ -0,0 +1,28 @@ +{ + "nodes": [ + { + "id": "workbench_1", + "name": "虚拟工作台", + "children": [], + "parent": null, + "type": "device", + "class": "virtual_workbench", + "position": { + "x": 400, + "y": 300, + "z": 0 + }, + "config": { + "arm_operation_time": 3.0, + "heating_time": 10.0, + "num_heating_stations": 3 + }, + "data": { + "status": "Ready", + "arm_state": "idle", + "message": "工作台就绪" + } + } + ], + "links": [] +} diff --git a/unilabos/utils/decorator.py b/unilabos/utils/decorator.py index 667f3531..57e968a8 100644 --- a/unilabos/utils/decorator.py +++ b/unilabos/utils/decorator.py @@ -182,3 +182,49 @@ def get_all_subscriptions(instance) -> list: except Exception: pass return subscriptions + + +def not_action(func: F) -> F: + """ + 标记方法为非动作的装饰器 + + 用于装饰 driver 类中的方法,使其在 complete_registry 时不被识别为动作。 + 适用于辅助方法、内部工具方法等不应暴露为设备动作的公共方法。 + + Example: + class MyDriver: + @not_action + def helper_method(self): + # 这个方法不会被注册为动作 + pass + + def actual_action(self, param: str): + # 这个方法会被注册为动作 + self.helper_method() + + Note: + - 可以与其他装饰器组合使用,@not_action 应放在最外层 + - 仅影响 complete_registry 的动作识别,不影响方法的正常调用 + """ + + @wraps(func) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + + # 在函数上附加标记 + wrapper._is_not_action = True # type: ignore[attr-defined] + + return wrapper # type: ignore[return-value] + + +def is_not_action(func) -> bool: + """ + 检查函数是否被标记为非动作 + + Args: + func: 被检查的函数 + + Returns: + 如果函数被 @not_action 装饰则返回 True,否则返回 False + """ + return getattr(func, "_is_not_action", False) diff --git a/unilabos/utils/import_manager.py b/unilabos/utils/import_manager.py index 00fcd06b..2df76360 100644 --- a/unilabos/utils/import_manager.py +++ b/unilabos/utils/import_manager.py @@ -28,6 +28,7 @@ __all__ = [ from ast import Constant from unilabos.utils import logger +from unilabos.utils.decorator import is_not_action class ImportManager: @@ -275,6 +276,9 @@ class ImportManager: method_info = self._analyze_method_signature(method) result["status_methods"][actual_name] = method_info elif not name.startswith("_"): + # 检查是否被 @not_action 装饰器标记 + if is_not_action(method): + continue # 其他非_开头的方法归类为action method_info = self._analyze_method_signature(method) result["action_methods"][name] = method_info @@ -330,6 +334,9 @@ class ImportManager: if actual_name not in result["status_methods"]: result["status_methods"][actual_name] = method_info else: + # 检查是否被 @not_action 装饰器标记 + if self._is_not_action_method(node): + continue # 其他非_开头的方法归类为action result["action_methods"][method_name] = method_info return result @@ -450,6 +457,13 @@ class ImportManager: return True return False + def _is_not_action_method(self, node: ast.FunctionDef) -> bool: + """检查是否是@not_action装饰的方法""" + for decorator in node.decorator_list: + if isinstance(decorator, ast.Name) and decorator.id == "not_action": + return True + return False + def _get_property_name_from_setter(self, node: ast.FunctionDef) -> str: """从setter装饰器中获取属性名""" for decorator in node.decorator_list: From 37b1fca962fd4bb2830f6cbfee0ac34f3fc1a694 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:22:21 +0800 Subject: [PATCH 35/40] CI Check Fix 1 --- .github/workflows/ci-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index fa5ada7c..f11d484f 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -30,7 +30,7 @@ jobs: - name: Install minimal ROS dependencies run: | - conda install ros-humble-ros-core ros-humble-std-msgs ros-humble-geometry-msgs ros-humble-control-msgs -c robostack-staging -c conda-forge + conda install robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs -c robostack-staging -c conda-forge - name: Install unilabos-msgs and project run: | From 39dc4433994f0ee1259a80aeeb09de3f56356ae5 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 02:23:40 +0800 Subject: [PATCH 36/40] CI Check Fix 2 --- .github/workflows/ci-check.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index f11d484f..54d67100 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -1,6 +1,8 @@ name: CI Check on: + push: + branches: [main, dev] pull_request: branches: [main, dev] From d6accc3f1cb72abcdce45b26d302e92c8e2c00b3 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:14:21 +0800 Subject: [PATCH 37/40] CI Check Fix 3 --- .github/workflows/ci-check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index 54d67100..6a40e485 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -32,11 +32,11 @@ jobs: - name: Install minimal ROS dependencies run: | - conda install robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs -c robostack-staging -c conda-forge + conda install -n check-env robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs -c robostack-staging -c conda-forge -y - name: Install unilabos-msgs and project run: | - conda install ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-forge + conda install -n check-env ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-forge -y pip install -e . - name: Run check mode (complete_registry) From a02cecfd187ed63a508b6c8984e3c33199c6a762 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:20:17 +0800 Subject: [PATCH 38/40] CI Check Fix 4 --- .github/workflows/ci-check.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index 6a40e485..b292549d 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -23,20 +23,27 @@ jobs: uses: conda-incubator/setup-miniconda@v3 with: miniconda-version: 'latest' - channels: conda-forge,robostack-staging,uni-lab,defaults - channel-priority: strict + channels: robostack-staging,conda-forge,uni-lab,defaults + channel-priority: flexible activate-environment: check-env auto-activate-base: false auto-update-conda: false show-channel-urls: true - - name: Install minimal ROS dependencies + - name: Install ROS dependencies and unilabos-msgs run: | - conda install -n check-env robostack-staging::ros-humble-ros-core robostack-staging::ros-humble-action-msgs robostack-staging::ros-humble-std-msgs robostack-staging::ros-humble-geometry-msgs robostack-staging::ros-humble-control-msgs -c robostack-staging -c conda-forge -y + # Install all packages together for proper dependency resolution + conda install -n check-env \ + robostack-staging::ros-humble-ros-core \ + robostack-staging::ros-humble-action-msgs \ + robostack-staging::ros-humble-std-msgs \ + robostack-staging::ros-humble-geometry-msgs \ + robostack-staging::ros-humble-control-msgs \ + uni-lab::ros-humble-unilabos-msgs \ + -c robostack-staging -c conda-forge -c uni-lab -y - - name: Install unilabos-msgs and project + - name: Install unilabos project run: | - conda install -n check-env ros-humble-unilabos-msgs -c uni-lab -c robostack-staging -c conda-forge -y pip install -e . - name: Run check mode (complete_registry) From fd73bb7dcb5f8efc30e4b2dff4e94d75a988979d Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:47:27 +0800 Subject: [PATCH 39/40] CI Check Fix 5 --- .github/workflows/ci-check.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index b292549d..f62676e9 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -19,11 +19,12 @@ jobs: with: fetch-depth: 0 - - name: Setup Miniconda + - name: Setup Miniforge uses: conda-incubator/setup-miniconda@v3 with: - miniconda-version: 'latest' - channels: robostack-staging,conda-forge,uni-lab,defaults + miniforge-version: latest + use-mamba: true + channels: robostack-staging,conda-forge,uni-lab channel-priority: flexible activate-environment: check-env auto-activate-base: false @@ -33,7 +34,9 @@ jobs: - name: Install ROS dependencies and unilabos-msgs run: | # Install all packages together for proper dependency resolution - conda install -n check-env \ + # Use mamba for faster and more reliable solving + mamba install -n check-env \ + python=3.11.11 \ robostack-staging::ros-humble-ros-core \ robostack-staging::ros-humble-action-msgs \ robostack-staging::ros-humble-std-msgs \ From 2cf58ca4523caf42ca1bebf912573b583ebdba86 Mon Sep 17 00:00:00 2001 From: Xuwznln <18435084+Xuwznln@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:47:54 +0800 Subject: [PATCH 40/40] Upgrade to py 3.11.14; ros 0.7; unilabos 0.10.16 --- .github/workflows/ci-check.yml | 44 +++++- recipes/msgs/recipe.yaml | 8 +- recipes/unilabos/recipe.yaml | 2 +- setup.py | 2 +- unilabos/__init__.py | 2 +- unilabos/__main__.py | 6 + unilabos/app/ws_client.py | 50 ++++--- unilabos/ros/nodes/base_device_node.py | 28 +++- unilabos/ros/x/__init__.py | 0 unilabos/ros/x/rclpyx.py | 182 ------------------------- unilabos/utils/pywinauto_util.py | 8 +- unilabos_msgs/package.xml | 2 +- 12 files changed, 118 insertions(+), 216 deletions(-) create mode 100644 unilabos/__main__.py delete mode 100644 unilabos/ros/x/__init__.py delete mode 100644 unilabos/ros/x/rclpyx.py diff --git a/.github/workflows/ci-check.yml b/.github/workflows/ci-check.yml index f62676e9..6341c276 100644 --- a/.github/workflows/ci-check.yml +++ b/.github/workflows/ci-check.yml @@ -36,21 +36,61 @@ jobs: # Install all packages together for proper dependency resolution # Use mamba for faster and more reliable solving mamba install -n check-env \ - python=3.11.11 \ + python=3.11.14 \ robostack-staging::ros-humble-ros-core \ robostack-staging::ros-humble-action-msgs \ robostack-staging::ros-humble-std-msgs \ robostack-staging::ros-humble-geometry-msgs \ robostack-staging::ros-humble-control-msgs \ + robostack-staging::ros-humble-nav2-msgs \ uni-lab::ros-humble-unilabos-msgs \ + robostack-staging::ros-humble-cv-bridge \ + robostack-staging::ros-humble-vision-opencv \ + robostack-staging::ros-humble-tf-transformations \ + robostack-staging::ros-humble-moveit-msgs \ + robostack-staging::ros-humble-tf2-ros \ + robostack-staging::ros-humble-tf2-ros-py \ + conda-forge::transforms3d \ -c robostack-staging -c conda-forge -c uni-lab -y - - name: Install unilabos project + - name: Install pip dependencies and unilabos run: | + # Activate the environment + conda activate check-env + + # Core dependencies for devices + pip install uv + uv pip install networkx \ + typing_extensions \ + websockets \ + msgcenterpy \ + opentrons_shared_data \ + pint \ + fastapi \ + jinja2 \ + requests \ + uvicorn \ + git+https://github.com/Xuwznln/pylabrobot.git \ + opencv-python \ + pyautogui \ + opcua \ + pyserial \ + pandas \ + crcmod-plus \ + pymodbus \ + pywinauto_recorder \ + matplotlib \ + + + # PyLabRobot (custom fork) + pip install + + # Install unilabos in editable mode pip install -e . - name: Run check mode (complete_registry) run: | + conda activate check-env python -m unilabos --check_mode --skip_env_check - name: Check for uncommitted changes diff --git a/recipes/msgs/recipe.yaml b/recipes/msgs/recipe.yaml index 6d329081..168f427b 100644 --- a/recipes/msgs/recipe.yaml +++ b/recipes/msgs/recipe.yaml @@ -1,6 +1,6 @@ package: name: ros-humble-unilabos-msgs - version: 0.10.15 + version: 0.10.16 source: path: ../../unilabos_msgs target_directory: src @@ -25,7 +25,7 @@ requirements: build: - ${{ compiler('cxx') }} - ${{ compiler('c') }} - - python ==3.11.11 + - python ==3.11.14 - numpy - if: build_platform != target_platform then: @@ -63,14 +63,14 @@ requirements: - robostack-staging::ros-humble-rosidl-default-generators - robostack-staging::ros-humble-std-msgs - robostack-staging::ros-humble-geometry-msgs - - robostack-staging::ros2-distro-mutex=0.6 + - robostack-staging::ros2-distro-mutex=0.7 run: - robostack-staging::ros-humble-action-msgs - robostack-staging::ros-humble-ros-workspace - robostack-staging::ros-humble-rosidl-default-runtime - robostack-staging::ros-humble-std-msgs - robostack-staging::ros-humble-geometry-msgs - - robostack-staging::ros2-distro-mutex=0.6 + - robostack-staging::ros2-distro-mutex=0.7 - if: osx and x86_64 then: - __osx >=${{ MACOSX_DEPLOYMENT_TARGET|default('10.14') }} diff --git a/recipes/unilabos/recipe.yaml b/recipes/unilabos/recipe.yaml index be3f1a16..641d5b1e 100644 --- a/recipes/unilabos/recipe.yaml +++ b/recipes/unilabos/recipe.yaml @@ -1,6 +1,6 @@ package: name: unilabos - version: "0.10.15" + version: "0.10.16" source: path: ../.. diff --git a/setup.py b/setup.py index b6ae5edb..d286cf87 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ package_name = 'unilabos' setup( name=package_name, - version='0.10.15', + version='0.10.16', packages=find_packages(), include_package_data=True, install_requires=['setuptools'], diff --git a/unilabos/__init__.py b/unilabos/__init__.py index d5ac10aa..c69a94bd 100644 --- a/unilabos/__init__.py +++ b/unilabos/__init__.py @@ -1 +1 @@ -__version__ = "0.10.15" +__version__ = "0.10.16" diff --git a/unilabos/__main__.py b/unilabos/__main__.py new file mode 100644 index 00000000..64832260 --- /dev/null +++ b/unilabos/__main__.py @@ -0,0 +1,6 @@ +"""Entry point for `python -m unilabos`.""" + +from unilabos.app.main import main + +if __name__ == "__main__": + main() diff --git a/unilabos/app/ws_client.py b/unilabos/app/ws_client.py index 17d69ac6..8644353b 100644 --- a/unilabos/app/ws_client.py +++ b/unilabos/app/ws_client.py @@ -23,7 +23,7 @@ from typing import Optional, Dict, Any, List from urllib.parse import urlparse from enum import Enum -from jedi.inference.gradual.typing import TypedDict +from typing_extensions import TypedDict from unilabos.app.model import JobAddReq from unilabos.ros.nodes.presets.host_node import HostNode @@ -495,8 +495,12 @@ class MessageProcessor: await self._process_message(message_type, message_data) else: if message_type.endswith("_material"): - logger.trace(f"[MessageProcessor] 收到一条归属 {data.get('edge_session')} 的旧消息:{data}") - logger.debug(f"[MessageProcessor] 跳过了一条归属 {data.get('edge_session')} 的旧消息: {data.get('action')}") + logger.trace( + f"[MessageProcessor] 收到一条归属 {data.get('edge_session')} 的旧消息:{data}" + ) + logger.debug( + f"[MessageProcessor] 跳过了一条归属 {data.get('edge_session')} 的旧消息: {data.get('action')}" + ) else: await self._process_message(message_type, message_data) except json.JSONDecodeError: @@ -848,9 +852,7 @@ class MessageProcessor: device_action_groups[key_add] = [] device_action_groups[key_add].append(item["uuid"]) - logger.info( - f"[资源同步] 跨站Transfer: {item['uuid'][:8]} from {device_old_id} to {device_id}" - ) + logger.info(f"[资源同步] 跨站Transfer: {item['uuid'][:8]} from {device_old_id} to {device_id}") else: # 正常update key = (device_id, "update") @@ -864,7 +866,9 @@ class MessageProcessor: device_action_groups[key] = [] device_action_groups[key].append(item["uuid"]) - logger.trace(f"[资源同步] 动作 {action} 分组数量: {len(device_action_groups)}, 总数量: {len(resource_uuid_list)}") + logger.trace( + f"[资源同步] 动作 {action} 分组数量: {len(device_action_groups)}, 总数量: {len(resource_uuid_list)}" + ) # 为每个(device_id, action)创建独立的更新线程 for (device_id, actual_action), items in device_action_groups.items(): @@ -912,13 +916,13 @@ class MessageProcessor: # 发送确认消息 if self.websocket_client: - await self.websocket_client.send_message({ - "action": "restart_acknowledged", - "data": {"reason": reason, "delay": delay} - }) + await self.websocket_client.send_message( + {"action": "restart_acknowledged", "data": {"reason": reason, "delay": delay}} + ) # 设置全局重启标志 import unilabos.app.main as main_module + main_module._restart_requested = True main_module._restart_reason = reason @@ -928,10 +932,12 @@ class MessageProcessor: # 在新线程中执行清理,避免阻塞当前事件循环 def do_cleanup(): import time + time.sleep(0.5) # 给当前消息处理完成的时间 logger.info(f"[MessageProcessor] Starting cleanup for restart, reason: {reason}") try: from unilabos.app.utils import cleanup_for_restart + if cleanup_for_restart(): logger.info("[MessageProcessor] Cleanup successful, main() will restart") else: @@ -1382,7 +1388,9 @@ class WebSocketClient(BaseCommunicationClient): if host_node: # 获取设备信息 for device_id, namespace in host_node.devices_names.items(): - device_key = f"{namespace}/{device_id}" if namespace.startswith("/") else f"/{namespace}/{device_id}" + device_key = ( + f"{namespace}/{device_id}" if namespace.startswith("/") else f"/{namespace}/{device_id}" + ) is_online = device_key in host_node._online_devices # 获取设备的动作信息 @@ -1396,14 +1404,16 @@ class WebSocketClient(BaseCommunicationClient): "action_type": str(type(client).__name__), } - devices.append({ - "device_id": device_id, - "namespace": namespace, - "device_key": device_key, - "is_online": is_online, - "machine_name": host_node.device_machine_names.get(device_id, machine_name), - "actions": actions, - }) + devices.append( + { + "device_id": device_id, + "namespace": namespace, + "device_key": device_key, + "is_online": is_online, + "machine_name": host_node.device_machine_names.get(device_id, machine_name), + "actions": actions, + } + ) logger.info(f"[WebSocketClient] Collected {len(devices)} devices for host_ready") except Exception as e: diff --git a/unilabos/ros/nodes/base_device_node.py b/unilabos/ros/nodes/base_device_node.py index 737167ab..95fc0752 100644 --- a/unilabos/ros/nodes/base_device_node.py +++ b/unilabos/ros/nodes/base_device_node.py @@ -49,7 +49,6 @@ from unilabos.resources.resource_tracker import ( ResourceTreeInstance, ResourceDictInstance, ) -from unilabos.ros.x.rclpyx import get_event_loop from unilabos.ros.utils.driver_creator import WorkstationNodeCreator, PyLabRobotCreator, DeviceClassCreator from rclpy.task import Task, Future from unilabos.utils.import_manager import default_manager @@ -185,7 +184,7 @@ class PropertyPublisher: f"创建发布者 {name} 失败,可能由于注册表有误,类型: {msg_type},错误: {ex}\n{traceback.format_exc()}" ) self.timer = node.create_timer(self.timer_period, self.publish_property) - self.__loop = get_event_loop() + self.__loop = ROS2DeviceNode.get_asyncio_loop() str_msg_type = str(msg_type)[8:-2] self.node.lab_logger().trace(f"发布属性: {name}, 类型: {str_msg_type}, 周期: {initial_period}秒, QoS: {qos}") @@ -1757,6 +1756,15 @@ class ROS2DeviceNode: 它不继承设备类,而是通过代理模式访问设备类的属性和方法。 """ + # 类变量,用于循环管理 + _asyncio_loop = None + _asyncio_loop_running = False + _asyncio_loop_thread = None + + @classmethod + def get_asyncio_loop(cls): + return cls._asyncio_loop + @staticmethod async def safe_task_wrapper(trace_callback, func, **kwargs): try: @@ -1833,6 +1841,11 @@ class ROS2DeviceNode: print_publish: 是否打印发布信息 driver_is_ros: """ + # 在初始化时检查循环状态 + if ROS2DeviceNode._asyncio_loop_running and ROS2DeviceNode._asyncio_loop_thread is not None: + pass + elif ROS2DeviceNode._asyncio_loop_thread is None: + self._start_loop() # 保存设备类是否支持异步上下文 self._has_async_context = hasattr(driver_class, "__aenter__") and hasattr(driver_class, "__aexit__") @@ -1924,6 +1937,17 @@ class ROS2DeviceNode: except Exception as e: self._ros_node.lab_logger().error(f"设备后初始化失败: {e}") + def _start_loop(self): + def run_event_loop(): + loop = asyncio.new_event_loop() + ROS2DeviceNode._asyncio_loop = loop + asyncio.set_event_loop(loop) + loop.run_forever() + + ROS2DeviceNode._asyncio_loop_thread = threading.Thread(target=run_event_loop, daemon=True, name="ROS2DeviceNode") + ROS2DeviceNode._asyncio_loop_thread.start() + logger.info(f"循环线程已启动") + class DeviceInfoType(TypedDict): id: str diff --git a/unilabos/ros/x/__init__.py b/unilabos/ros/x/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/unilabos/ros/x/rclpyx.py b/unilabos/ros/x/rclpyx.py deleted file mode 100644 index a723922d..00000000 --- a/unilabos/ros/x/rclpyx.py +++ /dev/null @@ -1,182 +0,0 @@ -import asyncio -from asyncio import events -import threading - -import rclpy -from rclpy.impl.implementation_singleton import rclpy_implementation as _rclpy -from rclpy.executors import await_or_execute, Executor -from rclpy.action import ActionClient, ActionServer -from rclpy.action.server import ServerGoalHandle, GoalResponse, GoalInfo, GoalStatus -from std_msgs.msg import String -from action_tutorials_interfaces.action import Fibonacci - - -loop = None - -def get_event_loop(): - global loop - return loop - - -async def default_handle_accepted_callback_async(goal_handle): - """Execute the goal.""" - await goal_handle.execute() - - -class ServerGoalHandleX(ServerGoalHandle): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - async def execute(self, execute_callback=None): - # It's possible that there has been a request to cancel the goal prior to executing. - # In this case we want to avoid the illegal state transition to EXECUTING - # but still call the users execute callback to let them handle canceling the goal. - if not self.is_cancel_requested: - self._update_state(_rclpy.GoalEvent.EXECUTE) - await self._action_server.notify_execute_async(self, execute_callback) - - -class ActionServerX(ActionServer): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.register_handle_accepted_callback(default_handle_accepted_callback_async) - - async def _execute_goal_request(self, request_header_and_message): - request_header, goal_request = request_header_and_message - goal_uuid = goal_request.goal_id - goal_info = GoalInfo() - goal_info.goal_id = goal_uuid - - self._node.get_logger().debug('New goal request with ID: {0}'.format(goal_uuid.uuid)) - - # Check if goal ID is already being tracked by this action server - with self._lock: - goal_id_exists = self._handle.goal_exists(goal_info) - - accepted = False - if not goal_id_exists: - # Call user goal callback - response = await await_or_execute(self._goal_callback, goal_request.goal) - if not isinstance(response, GoalResponse): - self._node.get_logger().warning( - 'Goal request callback did not return a GoalResponse type. Rejecting goal.') - else: - accepted = GoalResponse.ACCEPT == response - - if accepted: - # Stamp time of acceptance - goal_info.stamp = self._node.get_clock().now().to_msg() - - # Create a goal handle - try: - with self._lock: - goal_handle = ServerGoalHandleX(self, goal_info, goal_request.goal) - except RuntimeError as e: - self._node.get_logger().error( - 'Failed to accept new goal with ID {0}: {1}'.format(goal_uuid.uuid, e)) - accepted = False - else: - self._goal_handles[bytes(goal_uuid.uuid)] = goal_handle - - # Send response - response_msg = self._action_type.Impl.SendGoalService.Response() - response_msg.accepted = accepted - response_msg.stamp = goal_info.stamp - self._handle.send_goal_response(request_header, response_msg) - - if not accepted: - self._node.get_logger().debug('New goal rejected: {0}'.format(goal_uuid.uuid)) - return - - self._node.get_logger().debug('New goal accepted: {0}'.format(goal_uuid.uuid)) - - # Provide the user a reference to the goal handle - # await await_or_execute(self._handle_accepted_callback, goal_handle) - asyncio.create_task(self._handle_accepted_callback(goal_handle)) - - async def notify_execute_async(self, goal_handle, execute_callback): - # Use provided callback, defaulting to a previously registered callback - if execute_callback is None: - if self._execute_callback is None: - return - execute_callback = self._execute_callback - - # Schedule user callback for execution - self._node.get_logger().info(f"{events.get_running_loop()}") - asyncio.create_task(self._execute_goal(execute_callback, goal_handle)) - # loop = asyncio.new_event_loop() - # asyncio.set_event_loop(loop) - # task = loop.create_task(self._execute_goal(execute_callback, goal_handle)) - # await task - - -class ActionClientX(ActionClient): - feedback_queue = asyncio.Queue() - - async def feedback_cb(self, msg): - await self.feedback_queue.put(msg) - - async def send_goal_async(self, goal_msg): - goal_future = super().send_goal_async( - goal_msg, - feedback_callback=self.feedback_cb - ) - client_goal_handle = await asyncio.ensure_future(goal_future) - if not client_goal_handle.accepted: - raise Exception("Goal rejected.") - result_future = client_goal_handle.get_result_async() - while True: - feedback_future = asyncio.ensure_future(self.feedback_queue.get()) - tasks = [result_future, feedback_future] - await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED) - if result_future.done(): - result = result_future.result().result - yield (None, result) - break - else: - feedback = feedback_future.result().feedback - yield (feedback, None) - - -async def main(node): - print('Node started.') - action_client = ActionClientX(node, Fibonacci, 'fibonacci') - goal_msg = Fibonacci.Goal() - goal_msg.order = 10 - async for (feedback, result) in action_client.send_goal_async(goal_msg): - if feedback: - print(f'Feedback: {feedback}') - else: - print(f'Result: {result}') - print('Finished.') - - -async def ros_loop_node(node): - while rclpy.ok(): - rclpy.spin_once(node, timeout_sec=0) - await asyncio.sleep(1e-4) - - -async def ros_loop(executor: Executor): - while rclpy.ok(): - executor.spin_once(timeout_sec=0) - await asyncio.sleep(1e-4) - - -def run_event_loop(): - global loop - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - loop.run_forever() - - -def run_event_loop_in_thread(): - thread = threading.Thread(target=run_event_loop, args=()) - thread.start() - - -if __name__ == "__main__": - rclpy.init() - node = rclpy.create_node('async_subscriber') - future = asyncio.wait([ros_loop(node), main()]) - asyncio.get_event_loop().run_until_complete(future) \ No newline at end of file diff --git a/unilabos/utils/pywinauto_util.py b/unilabos/utils/pywinauto_util.py index 3b78632a..70eeb96d 100644 --- a/unilabos/utils/pywinauto_util.py +++ b/unilabos/utils/pywinauto_util.py @@ -1,7 +1,11 @@ import psutil import pywinauto -from pywinauto_recorder import UIApplication -from pywinauto_recorder.player import UIPath, click, focus_on_application, exists, find, get_wrapper_path +try: + from pywinauto_recorder import UIApplication + from pywinauto_recorder.player import UIPath, click, focus_on_application, exists, find, get_wrapper_path +except ImportError: + print("未安装pywinauto_recorder,部分功能无法使用,安装时注意enum") + pass from pywinauto.controls.uiawrapper import UIAWrapper from pywinauto.application import WindowSpecification from pywinauto import findbestmatch diff --git a/unilabos_msgs/package.xml b/unilabos_msgs/package.xml index b9c26326..42d295a3 100644 --- a/unilabos_msgs/package.xml +++ b/unilabos_msgs/package.xml @@ -2,7 +2,7 @@ unilabos_msgs - 0.10.15 + 0.10.16 ROS2 Messages package for unilabos devices Junhan Chang Xuwznln