Enhance PRCXI classes by adding category parameter and updating logic for channel handling; update resource tracking to include tube_rack category.

This commit is contained in:
ALITTLELZ
2026-01-14 15:14:48 +08:00
parent 1340bae838
commit 44a4c2362d
4 changed files with 35 additions and 29 deletions

View File

@@ -405,16 +405,19 @@ class PRCXI9300TubeRack(TubeRack):
if items_to_pass is not None: if items_to_pass is not None:
super().__init__(name, size_x, size_y, size_z, super().__init__(name, size_x, size_y, size_z,
ordered_items=items_to_pass, ordered_items=items_to_pass,
category=category,
model=model, model=model,
**kwargs) **kwargs)
elif ordering_param is not None: elif ordering_param is not None:
# 传递 ordering 参数,让 TubeRack 自己创建 Tube 对象 # 传递 ordering 参数,让 TubeRack 自己创建 Tube 对象
super().__init__(name, size_x, size_y, size_z, super().__init__(name, size_x, size_y, size_z,
ordering=ordering_param, ordering=ordering_param,
category=category,
model=model, model=model,
**kwargs) **kwargs)
else: else:
super().__init__(name, size_x, size_y, size_z, super().__init__(name, size_x, size_y, size_z,
category=category,
model=model, model=model,
**kwargs) **kwargs)
@@ -1273,7 +1276,7 @@ class PRCXI9300Backend(LiquidHandlerBackend):
PlateNo = plate_indexes[0] + 1 PlateNo = plate_indexes[0] + 1
hole_col = tip_columns[0] + 1 hole_col = tip_columns[0] + 1
hole_row = 1 hole_row = 1
if self.num_channels == 1: if self.num_channels == 1 or self.num_channels == 2:
hole_row = tipspot_index % 8 + 1 hole_row = tipspot_index % 8 + 1
assert mix_time > 0 assert mix_time > 0
@@ -1330,7 +1333,7 @@ class PRCXI9300Backend(LiquidHandlerBackend):
PlateNo = plate_indexes[0] + 1 PlateNo = plate_indexes[0] + 1
hole_col = tip_columns[0] + 1 hole_col = tip_columns[0] + 1
hole_row = 1 hole_row = 1
if self.num_channels == 1: if self.num_channels == 1 or self.num_channels == 2:
hole_row = tipspot_index % 8 + 1 hole_row = tipspot_index % 8 + 1
step = self.api_client.Imbibing( step = self.api_client.Imbibing(
@@ -1388,7 +1391,7 @@ class PRCXI9300Backend(LiquidHandlerBackend):
hole_col = tip_columns[0] + 1 hole_col = tip_columns[0] + 1
hole_row = 1 hole_row = 1
if self.num_channels == 1: if self.num_channels == 1 or self.num_channels == 2:
hole_row = tipspot_index % 8 + 1 hole_row = tipspot_index % 8 + 1
step = self.api_client.Tapping( step = self.api_client.Tapping(

View File

@@ -592,6 +592,7 @@ def resource_plr_to_ulab(resource_plr: "ResourcePLR", parent_name: str = None, w
"trash": "trash", "trash": "trash",
"deck": "deck", "deck": "deck",
"tip_rack": "tip_rack", "tip_rack": "tip_rack",
"tube_rack": "tube_rack",
"warehouse": "warehouse", "warehouse": "warehouse",
"container": "container", "container": "container",
"tube": "tube", "tube": "tube",

View File

@@ -333,6 +333,7 @@ class ResourceTreeSet(object):
"well": "well", "well": "well",
"deck": "deck", "deck": "deck",
"tip_rack": "tip_rack", "tip_rack": "tip_rack",
"tube_rack": "tube_rack",
"tip_spot": "tip_spot", "tip_spot": "tip_spot",
"tube": "tube", "tube": "tube",
"bottle_carrier": "bottle_carrier", "bottle_carrier": "bottle_carrier",
@@ -379,33 +380,36 @@ class ResourceTreeSet(object):
} }
# 先构建当前节点的字典不包含children # 先构建当前节点的字典不包含children
# 获取category优先从顶层获取如果不存在则从config中获取
category = d.get("category") or d.get("config", {}).get("category", "")
config_dict = {
k: v
for k, v in d.items()
if k
not in [
"name",
"children",
"parent_name",
"location",
"rotation",
"size_x",
"size_y",
"size_z",
"cross_section_type",
"bottom_type",
]
}
r_dict = { r_dict = {
"id": d["name"], "id": d["name"],
"uuid": current_uuid, "uuid": current_uuid,
"name": d["name"], "name": d["name"],
"parent": parent_resource, # 直接传入 ResourceDict 对象 "parent": parent_resource, # 直接传入 ResourceDict 对象
"parent_uuid": parent_uuid, # 使用 parent_uuid 而不是 parent 对象 "parent_uuid": parent_uuid, # 使用 parent_uuid 而不是 parent 对象
"type": replace_plr_type(d.get("category", "")), "type": replace_plr_type(category),
"class": d.get("class", ""), "class": d.get("class", ""),
"position": pos, "position": pos,
"pose": pos, "pose": pos,
"config": { "config": config_dict,
k: v
for k, v in d.items()
if k
not in [
"name",
"children",
"parent_name",
"location",
"rotation",
"size_x",
"size_y",
"size_z",
"cross_section_type",
"bottom_type",
]
},
"data": states[d["name"]], "data": states[d["name"]],
"extra": extra, "extra": extra,
} }

View File

@@ -6719,9 +6719,9 @@
}, },
"data": { "data": {
"Material": { "Material": {
"uuid": "b05b3b2aafd94ec38ea0cd3215ecea8f", "uuid": "73bb9b10bc394978b70e027bf45ce2d3",
"Code": "ZX-78-096", "Code": "ZX-023-0.2",
"Name": "细菌培养皿" "Name": "0.2ml PCR板"
} }
} }
}, },
@@ -16495,11 +16495,9 @@
}, },
"data": { "data": {
"Material": { "Material": {
"uuid": "e146697c395e4eabb3d6b74f0dd6aaf7", "uuid": "73bb9b10bc394978b70e027bf45ce2d3",
"Code": "1", "Code": "ZX-023-0.2",
"SupplyType": 1, "Name": "0.2ml PCR板"
"Name": "ep适配器",
"SummaryName": "ep适配器"
} }
} }
}, },