From 1e00a66a6575383d3e9c2c323fde7e49996de737 Mon Sep 17 00:00:00 2001 From: Guangxin Zhang Date: Fri, 6 Jun 2025 11:05:36 +0800 Subject: [PATCH 1/2] New parameter for biomek to run. --- unilabos/devices/liquid_handling/biomek.py | 44 +- unilabos/devices/liquid_handling/biomek.txt | 642 ++++ .../biomek_temporary_protocol.json | 2697 +++++++++++++++++ .../devices/liquid_handling/biomek_test.py | 498 +-- 4 files changed, 3620 insertions(+), 261 deletions(-) create mode 100644 unilabos/devices/liquid_handling/biomek.txt create mode 100644 unilabos/devices/liquid_handling/biomek_temporary_protocol.json diff --git a/unilabos/devices/liquid_handling/biomek.py b/unilabos/devices/liquid_handling/biomek.py index 4f0a3137..8fbeb40f 100644 --- a/unilabos/devices/liquid_handling/biomek.py +++ b/unilabos/devices/liquid_handling/biomek.py @@ -285,20 +285,29 @@ class LiquidHandlerBiomek(LiquidHandlerAbstract): 处理Biomek的液体转移操作。 """ - + items = [] + asp_params = self.aspirate_techniques.get(aspirate_techniques, {}) dis_params = self.dispense_techniques.get(dispense_techniques, {}) + asp_params['Position'] = source + dis_params['Position'] = target + asp_params['Volume'] = str(volume) + dis_params['Volume'] = str(volume) + + items.append(asp_params) + items.append(dis_params) + transfer_params = { "Span8": False, "Pod": "Pod1", - "items": {}, + "items": [], "Wash": False, "Dynamic?": True, "AutoSelectActiveWashTechnique": False, "ActiveWashTechnique": "", - "ChangeTipsBetweenDests": False, - "ChangeTipsBetweenSources": True, + "ChangeTipsBetweenDests": True, + "ChangeTipsBetweenSources": False, "DefaultCaption": "", "UseExpression": False, "LeaveTipsOn": False, @@ -315,31 +324,25 @@ class LiquidHandlerBiomek(LiquidHandlerAbstract): "SplitVolume": False, "SplitVolumeCleaning": False, "Stop": "Destinations", - "TipLocation": "BC1025F", + "TipLocation": "BC230", "UseCurrentTips": False, - "UseDisposableTips": True, + "UseDisposableTips": False, "UseFixedTips": False, "UseJIT": True, "UseMandrelSelection": True, "UseProbes": [True, True, True, True, True, True, True, True], - "WashCycles": "1", + "WashCycles": "4", "WashVolume": "110%", "Wizard": False } - - items: dict = {} - items["Source"] = source - items["Destination"] = target - items["Volume"] = volume transfer_params["items"] = items - transfer_params["Solvent"] = asp_params['Solvent'] + transfer_params["Solvent"] = 'Water' transfer_params["TipLocation"] = tip_rack - transfer_params.update(asp_params) - transfer_params.update(dis_params) self.temp_protocol["steps"].append(transfer_params) - + return + steps_info = ''' { "steps": [ @@ -604,6 +607,7 @@ steps_info = ''' ''' + labware_with_liquid = ''' [ { "id": "stock plate on P1", @@ -806,6 +810,7 @@ labware_with_liquid = ''' ''' handler = LiquidHandlerBiomek() + handler.temp_protocol = { "meta": {}, "labwares": [], @@ -819,16 +824,13 @@ for step in input_steps['steps']: if step['operation'] != 'transfer': continue parameters = step['parameters'] - tip_rack=parameters['tip_rack'] - # 找到labwares中与tip_rack匹配的项的id - tip_rack_id = [lw['id'] for lw in labwares if lw['class_name'] == tip_rack][0] handler.transfer_biomek(source=parameters['source'], target=parameters['target'], volume=parameters['volume'], - tip_rack=tip_rack_id, + tip_rack=parameters['tip_rack'], aspirate_techniques='MC P300 high', dispense_techniques='MC P300 high' ) -print(json.dumps(handler.temp_protocol['steps'],indent=4, ensure_ascii=False)) + diff --git a/unilabos/devices/liquid_handling/biomek.txt b/unilabos/devices/liquid_handling/biomek.txt new file mode 100644 index 00000000..2d830a6d --- /dev/null +++ b/unilabos/devices/liquid_handling/biomek.txt @@ -0,0 +1,642 @@ + + 当前方法 Method0530 包含 36 个步骤 + + 步骤 0: + Bitmap: OStepUI.ocx,START + Let: {} + Weak: {} + Prompt: {} + + 步骤 1: + BarcodeInput?: False + DeckItems: {'P1': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\Matrix96_750uL', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0), 'Nominal': False, 'EvalLiquids': ('Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water')}], 'P10': [{'Tips': {'Class': 'TipClasses\\T50F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T50F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC50F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P8': [], 'P9': [{'Tips': {'Class': 'TipClasses\\T50F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T50F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC50F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P11': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\BCDeep96Round', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), 'Nominal': False, 'EvalLiquids': ('Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water')}], 'P12': [], 'P13': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\BCDeep96Round', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), 'Nominal': False, 'EvalLiquids': ('Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water')}], 'P14': [], 'P15': [], 'P16': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P17': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P18': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P19': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P20': [], 'P2': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\Matrix96_750uL', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0), 'Nominal': False, 'EvalLiquids': ('Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water')}], 'P21': [], 'P22': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\AgilentReservoir', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (0.0,), 'Nominal': False, 'EvalLiquids': ('Water',)}], 'P23': [], 'P24': [], 'P25': [], 'P26': [], 'P27': [], 'P28': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P29': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'P30': [], 'P3': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\AgilentReservoir', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (300000.0,), 'Nominal': False, 'EvalLiquids': ('Water',)}], 'P4': [{'Properties': {'Name': '', 'Device': '', 'liquidtype': 'Water', 'BarCode': '', 'SenseEveryTime': False}, 'Known': True, 'Class': 'LabwareClasses\\Matrix96_750uL', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}, 'EvalAmounts': (500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0, 500.0), 'Nominal': False, 'EvalLiquids': ('Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water', 'Water')}], 'P5': [], 'P6': [], 'P7': [], 'TL1': [{'Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC230', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'TL2': [{'Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC230', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'TL3': [{'Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T230', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC230', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'TL4': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'TL5': [{'Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'RT_Tips': {'Class': 'TipClasses\\T1025F', 'Contents': [], '_RT_Contents': [], 'Used': False, 'RT_Used': False, 'Dirty': False, 'RT_Dirty': False, 'MaxVolumeUsed': 0.0, 'RT_MaxVolumeUsed': 0.0}, 'Properties': {}, 'Known': False, 'Class': 'LabwareClasses\\BC1025F', 'DataSets': {'Volume': {}}, 'RuntimeDataSets': {'Volume': {}}}], 'TR1': [], 'WS1': 'Water'} + Layout: Multichannel + Pause?: True + PodSetup: {'LeftHasTips': False, 'LeftTipType': '', 'RightHasTips': False, 'RightTipType': ''} + SplitterPosition: 206 + VerifyPodSetup?: True + + 步骤 2: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P1', 'Height': -2.0, 'Volume': '50', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'Matrix96_750uL', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P11', 'Height': -2.0, 'Volume': '50', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 50 µL from P1 to P11 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC230 + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 3: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P2', 'Height': -2.0, 'Volume': '100', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'Matrix96_750uL', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P11', 'Height': -2.0, 'Volume': '100', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 100 µL from P2 to P11 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC230 + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 4: + Pod: Pod1 + GripSide: A1 near + Source: P11 + Target: Orbital1 + LeaveBottomLabware: False + + 步骤 5: + Device: + Parameters: () + Command: + + 步骤 6: + Device: + Parameters: () + Command: + + 步骤 7: + Pod: Pod1 + GripSide: A1 near + Source: Orbital1 + Target: P11 + LeaveBottomLabware: False + + 步骤 8: + Pod: Pod1 + GripSide: A1 near + Source: P11 + Target: P12 + LeaveBottomLabware: False + + 步骤 9: + Message: Paused + Location: the whole system + Time: 180 + Mode: TimedResource + + 步骤 10: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '150', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P22', 'Height': -2.0, 'Volume': '150', 'liquidtype': 'Tip Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 150 µL from P12 to P22 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC230 + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 11: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P3', 'Height': -2.0, 'Volume': '400', 'liquidtype': 'Well Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P3 to P12 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 12: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P3', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P3 to P12 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 13: + Pod: Pod1 + GripSide: A1 near + Source: P12 + Target: Orbital1 + LeaveBottomLabware: False + + 步骤 14: + Device: + Parameters: () + Command: + + 步骤 15: + Pod: Pod1 + GripSide: A1 near + Source: Orbital1 + Target: P12 + LeaveBottomLabware: False + + 步骤 16: + Message: Paused + Location: the whole system + Time: 180 + Mode: TimedResource + + 步骤 17: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P22', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P12 to P22 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 18: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P22', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P12 to P22 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 19: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P3', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P3 to P12 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 20: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P3', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P3 to P12 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 21: + Pod: Pod1 + GripSide: A1 near + Source: P12 + Target: Orbital1 + LeaveBottomLabware: False + + 步骤 22: + Device: OrbitalShaker0 + Parameters: ('800', '3', '45', 'CounterClockwise', None) + Command: Timed Shake + + 步骤 23: + Pod: Pod1 + GripSide: A1 near + Source: Orbital1 + Target: P12 + LeaveBottomLabware: False + + 步骤 24: + Message: Paused + Location: the whole system + Time: 180 + Mode: TimedResource + + 步骤 25: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P22', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P12 to P22 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 26: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P22', 'Height': -2.0, 'Volume': '200', 'liquidtype': 'Tip Contents', 'LabwareClass': 'AgilentReservoir', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True,), 'Prototype': 'MC P300 High', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 200 µL from P12 to P22 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC1025F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 27: + Message: Paused + Location: the whole system + Time: 900 + Mode: TimedResource + + 步骤 28: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P4', 'Height': -2.0, 'Volume': '40', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'Matrix96_750uL', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P12', 'Height': -2.0, 'Volume': '40', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 40 µL from P4 to P12 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC50F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 29: + Pod: Pod1 + GripSide: A1 near + Source: P12 + Target: Orbital1 + LeaveBottomLabware: False + + 步骤 30: + Device: OrbitalShaker0 + Parameters: ('800', '3', '60', 'CounterClockwise', None) + Command: Timed Shake + + 步骤 31: + Message: Paused + Location: the whole system + Time: 180 + Mode: TimedResource + + 步骤 32: + Pod: Pod1 + GripSide: A1 near + Source: Orbital1 + Target: P12 + LeaveBottomLabware: False + + 步骤 33: + Message: Paused + Location: the whole system + Time: 120 + Mode: TimedResource + + 步骤 34: + Span8: False + Pod: Pod1 + Wash: False + items: [{'Position': 'P12', 'Height': -2.0, 'Volume': '40', 'liquidtype': 'Well Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Aspirate', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': True, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}, {'Position': 'P13', 'Height': -2.0, 'Volume': '40', 'liquidtype': 'Tip Contents', 'WellsX': 12, 'LabwareClass': 'BCDeep96Round', 'AutoSelectPrototype': True, 'ColsFirst': True, 'CustomHeight': False, 'DataSetPattern': False, 'HeightFrom': 0, 'LocalPattern': True, 'Operation': 'Dispense', 'OverrideHeight': False, 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), 'Prototype': 'MC', 'ReferencedPattern': '', 'RowsFirst': False, 'SectionExpression': '', 'SelectionInfo': (1,), 'SetMark': True, 'Source': False, 'StartAtMark': False, 'StartAtSelection': True, 'UseExpression': False}] + Dynamic?: True + AutoSelectActiveWashTechnique: False + ActiveWashTechnique: + ChangeTipsBetweenDests: True + ChangeTipsBetweenSources: False + DefaultCaption: Transfer 40 µL from P12 to P13 + UseExpression: False + LeaveTipsOn: False + MandrelExpression: + Repeats: 1 + RepeatsByVolume: False + Replicates: 1 + ShowTipHandlingDetails: True + ShowTransferDetails: True + Solvent: Water + Span8Wash: False + Span8WashVolume: 2 + Span8WasteVolume: 1 + SplitVolume: False + SplitVolumeCleaning: False + Stop: Destinations + TipLocation: BC50F + UseCurrentTips: False + UseDisposableTips: False + UseFixedTips: False + UseJIT: True + UseMandrelSelection: True + UseProbes: (True, True, True, True, True, True, True, True) + WashCycles: 4 + WashVolume: 110% + Wizard: False + + 步骤 35: + Type: + Bitmap: OStepUI.ocx,FINISH + cleardeck: True + cleardevices: True + cleanuppods: True + PodsToMaxZ: True + ClearGlobals: True + ParkPods: True + Authent: False + Collapsed: True + ConnectionString: + Password: + Path: + Report: False + Server: + TableName: + UserName: + Catalog: diff --git a/unilabos/devices/liquid_handling/biomek_temporary_protocol.json b/unilabos/devices/liquid_handling/biomek_temporary_protocol.json new file mode 100644 index 00000000..129c3ba2 --- /dev/null +++ b/unilabos/devices/liquid_handling/biomek_temporary_protocol.json @@ -0,0 +1,2697 @@ +{ + "meta": {}, + "labwares": [], + "steps": [ + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + }, + { + "Span8": false, + "Pod": "Pod1", + "items": [ + { + "Position": "P12", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Well Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Aspirate", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": true, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + }, + { + "Position": "P13", + "Height": -2.0, + "Volume": "40", + "liquidtype": "Tip Contents", + "WellsX": 12, + "LabwareClass": "Matrix96_750uL", + "AutoSelectPrototype": true, + "ColsFirst": true, + "CustomHeight": false, + "DataSetPattern": false, + "HeightFrom": 0, + "LocalPattern": true, + "Operation": "Dispense", + "OverrideHeight": false, + "Pattern": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "Prototype": "MC P300 High", + "ReferencedPattern": "", + "RowsFirst": false, + "SectionExpression": "", + "SelectionInfo": [ + 1 + ], + "SetMark": true, + "Source": false, + "StartAtMark": false, + "StartAtSelection": true, + "UseExpression": false + } + ], + "Wash": false, + "Dynamic?": true, + "AutoSelectActiveWashTechnique": false, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": true, + "ChangeTipsBetweenSources": false, + "DefaultCaption": "", + "UseExpression": false, + "LeaveTipsOn": false, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": false, + "Replicates": "1", + "ShowTipHandlingDetails": false, + "ShowTransferDetails": true, + "Solvent": "Water", + "Span8Wash": false, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": false, + "SplitVolumeCleaning": false, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": false, + "UseDisposableTips": false, + "UseFixedTips": false, + "UseJIT": true, + "UseMandrelSelection": true, + "UseProbes": [ + true, + true, + true, + true, + true, + true, + true, + true + ], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": false + } + ] +} \ No newline at end of file diff --git a/unilabos/devices/liquid_handling/biomek_test.py b/unilabos/devices/liquid_handling/biomek_test.py index 8096e8d6..c1f05f23 100644 --- a/unilabos/devices/liquid_handling/biomek_test.py +++ b/unilabos/devices/liquid_handling/biomek_test.py @@ -15,6 +15,262 @@ from pylabrobot.resources import ( import json from typing import Sequence, Optional, List, Union, Literal + + +#class LiquidHandlerBiomek(LiquidHandlerAbstract): + + +class LiquidHandlerBiomek: + """ + Biomek液体处理器的实现类,继承自LiquidHandlerAbstract。 + 该类用于处理Biomek液体处理器的特定操作。 + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._status = "Idle" # 初始状态为 Idle + self._success = False # 初始成功状态为 False + self._status_queue = kwargs.get("status_queue", None) # 状态队列 + self.temp_protocol = {} + self.py32_path = "/opt/py32" # Biomek的Python 3.2路径 + self.aspirate_techniques = { + 'MC P300 high':{ + 'Position': 'P1', + 'Height': -2.0, + 'Volume': '50', + 'liquidtype': 'Well Contents', + 'WellsX': 12, + 'LabwareClass': 'Matrix96_750uL', + 'AutoSelectPrototype': True, + 'ColsFirst': True, + 'CustomHeight': False, + 'DataSetPattern': False, + 'HeightFrom': 0, + 'LocalPattern': True, + 'Operation': 'Aspirate', + 'OverrideHeight': False, + 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), + 'Prototype': 'MC P300 High', + 'ReferencedPattern': '', + 'RowsFirst': False, + 'SectionExpression': '', + 'SelectionInfo': (1,), + 'SetMark': True, + 'Source': True, + 'StartAtMark': False, + 'StartAtSelection': True, + 'UseExpression': False}, + } + + self.dispense_techniques = { + 'MC P300 high':{ + 'Position': 'P11', + 'Height': -2.0, + 'Volume': '50', + 'liquidtype': 'Tip Contents', + 'WellsX': 12, + 'LabwareClass': 'Matrix96_750uL', + 'AutoSelectPrototype': True, + 'ColsFirst': True, + 'CustomHeight': False, + 'DataSetPattern': False, + 'HeightFrom': 0, + 'LocalPattern': True, + 'Operation': 'Dispense', + 'OverrideHeight': False, + 'Pattern': (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True), + 'Prototype': 'MC P300 High', + 'ReferencedPattern': '', + 'RowsFirst': False, + 'SectionExpression': '', + 'SelectionInfo': (1,), + 'SetMark': True, + 'Source': False, + 'StartAtMark': False, + 'StartAtSelection': True, + 'UseExpression': False} + } + + + def create_protocol( + self, + protocol_name: str, + protocol_description: str, + protocol_version: str, + protocol_author: str, + protocol_date: str, + protocol_type: str, + none_keys: List[str] = [], + ): + """ + 创建一个新的协议。 + + Args: + protocol_name (str): 协议名称 + protocol_description (str): 协议描述 + protocol_version (str): 协议版本 + protocol_author (str): 协议作者 + protocol_date (str): 协议日期 + protocol_type (str): 协议类型 + none_keys (List[str]): 需要设置为None的键列表 + + Returns: + dict: 创建的协议字典 + """ + self.temp_protocol = { + "meta": { + "name": protocol_name, + "description": protocol_description, + "version": protocol_version, + "author": protocol_author, + "date": protocol_date, + "type": protocol_type, + }, + "labwares": [], + "steps": [], + } + return self.temp_protocol + +# def run_protocol(self): +# """ +# 执行创建的实验流程。 +# 工作站的完整执行流程是, +# 从 create_protocol 开始,创建新的 method, +# 随后执行 transfer_liquid 等操作向实验流程添加步骤, +# 最后 run_protocol 执行整个方法。 + +# Returns: +# dict: 执行结果 +# """ +# #use popen or subprocess to create py32 process and communicate send the temp protocol to it +# if not self.temp_protocol: +# raise ValueError("No protocol created. Please create a protocol first.") + +# # 模拟执行协议 +# self._status = "Running" +# self._success = True +# # 在这里可以添加实际执行协议的逻辑 + +# response = requests.post("localhost:5000/api/protocols", json=self.temp_protocol) + +# def create_resource( +# self, +# resource_tracker: DeviceNodeResourceTracker, +# resources: list[Resource], +# bind_parent_id: str, +# bind_location: dict[str, float], +# liquid_input_slot: list[int], +# liquid_type: list[str], +# liquid_volume: list[int], +# slot_on_deck: int, +# res_id, +# class_name, +# bind_locations, +# parent +# ): +# """ +# 创建一个新的资源。 + +# Args: +# device_id (str): 设备ID +# res_id (str): 资源ID +# class_name (str): 资源类名 +# parent (str): 父级ID +# bind_locations (Point): 绑定位置 +# liquid_input_slot (list[int]): 液体输入槽列表 +# liquid_type (list[str]): 液体类型列表 +# liquid_volume (list[int]): 液体体积列表 +# slot_on_deck (int): 甲板上的槽位 + +# Returns: +# dict: 创建的资源字典 +# """ +# # TODO:需要对好接口,下面这个是临时的 +# resource = { +# "id": res_id, +# "class": class_name, +# "parent": parent, +# "bind_locations": bind_locations.to_dict(), +# "liquid_input_slot": liquid_input_slot, +# "liquid_type": liquid_type, +# "liquid_volume": liquid_volume, +# "slot_on_deck": slot_on_deck, +# } +# self.temp_protocol["labwares"].append(resource) +# return resource + + + def transfer_biomek( + self, + source: str, + target: str, + tip_rack: str, + volume: float, + aspirate_techniques: str, + dispense_techniques: str, + ): + """ + 处理Biomek的液体转移操作。 + + """ + items = [] + + asp_params = self.aspirate_techniques.get(aspirate_techniques, {}) + dis_params = self.dispense_techniques.get(dispense_techniques, {}) + + asp_params['Position'] = source + dis_params['Position'] = target + asp_params['Volume'] = str(volume) + dis_params['Volume'] = str(volume) + + items.append(asp_params) + items.append(dis_params) + + transfer_params = { + "Span8": False, + "Pod": "Pod1", + "items": [], + "Wash": False, + "Dynamic?": True, + "AutoSelectActiveWashTechnique": False, + "ActiveWashTechnique": "", + "ChangeTipsBetweenDests": True, + "ChangeTipsBetweenSources": False, + "DefaultCaption": "", + "UseExpression": False, + "LeaveTipsOn": False, + "MandrelExpression": "", + "Repeats": "1", + "RepeatsByVolume": False, + "Replicates": "1", + "ShowTipHandlingDetails": False, + "ShowTransferDetails": True, + "Solvent": "Water", + "Span8Wash": False, + "Span8WashVolume": "2", + "Span8WasteVolume": "1", + "SplitVolume": False, + "SplitVolumeCleaning": False, + "Stop": "Destinations", + "TipLocation": "BC230", + "UseCurrentTips": False, + "UseDisposableTips": False, + "UseFixedTips": False, + "UseJIT": True, + "UseMandrelSelection": True, + "UseProbes": [True, True, True, True, True, True, True, True], + "WashCycles": "4", + "WashVolume": "110%", + "Wizard": False + } + transfer_params["items"] = items + transfer_params["Solvent"] = 'Water' + transfer_params["TipLocation"] = tip_rack + self.temp_protocol["steps"].append(transfer_params) + + return + + steps_info = ''' { "steps": [ @@ -280,241 +536,6 @@ steps_info = ''' -#class LiquidHandlerBiomek(LiquidHandlerAbstract): - - -class LiquidHandlerBiomek: - """ - Biomek液体处理器的实现类,继承自LiquidHandlerAbstract。 - 该类用于处理Biomek液体处理器的特定操作。 - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._status = "Idle" # 初始状态为 Idle - self._success = False # 初始成功状态为 False - self._status_queue = kwargs.get("status_queue", None) # 状态队列 - self.temp_protocol = {} - self.py32_path = "/opt/py32" # Biomek的Python 3.2路径 - self.aspirate_techniques = { - 'MC P300 high':{ - "Solvent": "Water", - } - } - self.dispense_techniques = { - 'MC P300 high':{ - "Span8": False, - "Pod": "Pod1", - "Wash": False, - "Dynamic?": True, - "AutoSelectActiveWashTechnique": False, - "ActiveWashTechnique": "", - "ChangeTipsBetweenDests": True, - "ChangeTipsBetweenSources": False, - "DefaultCaption": "", - "UseExpression": False, - "LeaveTipsOn": False, - "MandrelExpression": "", - "Repeats": "1", - "RepeatsByVolume": False, - "Replicates": "1", - "ShowTipHandlingDetails": False, - "ShowTransferDetails": True, - "Span8Wash": False, - "Span8WashVolume": "2", - "Span8WasteVolume": "1", - "SplitVolume": False, - "SplitVolumeCleaning": False, - "Stop": "Destinations", - "UseCurrentTips": False, - "UseDisposableTips": False, - "UseFixedTips": False, - "UseJIT": True, - "UseMandrelSelection": True, - "UseProbes": [True, True, True, True, True, True, True, True], - "WashCycles": "3", - "WashVolume": "110%", - "Wizard": False - } - } - - - def create_protocol( - self, - protocol_name: str, - protocol_description: str, - protocol_version: str, - protocol_author: str, - protocol_date: str, - protocol_type: str, - none_keys: List[str] = [], - ): - """ - 创建一个新的协议。 - - Args: - protocol_name (str): 协议名称 - protocol_description (str): 协议描述 - protocol_version (str): 协议版本 - protocol_author (str): 协议作者 - protocol_date (str): 协议日期 - protocol_type (str): 协议类型 - none_keys (List[str]): 需要设置为None的键列表 - - Returns: - dict: 创建的协议字典 - """ - self.temp_protocol = { - "meta": { - "name": protocol_name, - "description": protocol_description, - "version": protocol_version, - "author": protocol_author, - "date": protocol_date, - "type": protocol_type, - }, - "labwares": [], - "steps": [], - } - return self.temp_protocol - -# def run_protocol(self): -# """ -# 执行创建的实验流程。 -# 工作站的完整执行流程是, -# 从 create_protocol 开始,创建新的 method, -# 随后执行 transfer_liquid 等操作向实验流程添加步骤, -# 最后 run_protocol 执行整个方法。 - -# Returns: -# dict: 执行结果 -# """ -# #use popen or subprocess to create py32 process and communicate send the temp protocol to it -# if not self.temp_protocol: -# raise ValueError("No protocol created. Please create a protocol first.") - -# # 模拟执行协议 -# self._status = "Running" -# self._success = True -# # 在这里可以添加实际执行协议的逻辑 - -# response = requests.post("localhost:5000/api/protocols", json=self.temp_protocol) - -# def create_resource( -# self, -# resource_tracker: DeviceNodeResourceTracker, -# resources: list[Resource], -# bind_parent_id: str, -# bind_location: dict[str, float], -# liquid_input_slot: list[int], -# liquid_type: list[str], -# liquid_volume: list[int], -# slot_on_deck: int, -# res_id, -# class_name, -# bind_locations, -# parent -# ): -# """ -# 创建一个新的资源。 - -# Args: -# device_id (str): 设备ID -# res_id (str): 资源ID -# class_name (str): 资源类名 -# parent (str): 父级ID -# bind_locations (Point): 绑定位置 -# liquid_input_slot (list[int]): 液体输入槽列表 -# liquid_type (list[str]): 液体类型列表 -# liquid_volume (list[int]): 液体体积列表 -# slot_on_deck (int): 甲板上的槽位 - -# Returns: -# dict: 创建的资源字典 -# """ -# # TODO:需要对好接口,下面这个是临时的 -# resource = { -# "id": res_id, -# "class": class_name, -# "parent": parent, -# "bind_locations": bind_locations.to_dict(), -# "liquid_input_slot": liquid_input_slot, -# "liquid_type": liquid_type, -# "liquid_volume": liquid_volume, -# "slot_on_deck": slot_on_deck, -# } -# self.temp_protocol["labwares"].append(resource) -# return resource - - - def transfer_biomek( - self, - source: str, - target: str, - tip_rack: str, - volume: float, - aspirate_techniques: str, - dispense_techniques: str, - ): - """ - 处理Biomek的液体转移操作。 - - """ - - asp_params = self.aspirate_techniques.get(aspirate_techniques, {}) - dis_params = self.dispense_techniques.get(dispense_techniques, {}) - - transfer_params = { - "Span8": False, - "Pod": "Pod1", - "items": {}, - "Wash": False, - "Dynamic?": True, - "AutoSelectActiveWashTechnique": False, - "ActiveWashTechnique": "", - "ChangeTipsBetweenDests": False, - "ChangeTipsBetweenSources": True, - "DefaultCaption": "", - "UseExpression": False, - "LeaveTipsOn": False, - "MandrelExpression": "", - "Repeats": "1", - "RepeatsByVolume": False, - "Replicates": "1", - "ShowTipHandlingDetails": False, - "ShowTransferDetails": True, - "Solvent": "Water", - "Span8Wash": False, - "Span8WashVolume": "2", - "Span8WasteVolume": "1", - "SplitVolume": False, - "SplitVolumeCleaning": False, - "Stop": "Destinations", - "TipLocation": "BC1025F", - "UseCurrentTips": False, - "UseDisposableTips": True, - "UseFixedTips": False, - "UseJIT": True, - "UseMandrelSelection": True, - "UseProbes": [True, True, True, True, True, True, True, True], - "WashCycles": "1", - "WashVolume": "110%", - "Wizard": False - } - - items: dict = {} - items["Source"] = source - items["Destination"] = target - items["Volume"] = volume - transfer_params["items"] = items - transfer_params["Solvent"] = asp_params['Solvent'] - transfer_params["TipLocation"] = tip_rack - transfer_params.update(asp_params) - transfer_params.update(dis_params) - self.temp_protocol["steps"].append(transfer_params) - - return - labware_with_liquid = ''' [ { "id": "stock plate on P1", @@ -716,8 +737,6 @@ labware_with_liquid = ''' ''' - - handler = LiquidHandlerBiomek() handler.temp_protocol = { @@ -733,7 +752,6 @@ for step in input_steps['steps']: if step['operation'] != 'transfer': continue parameters = step['parameters'] - handler.transfer_biomek(source=parameters['source'], target=parameters['target'], @@ -742,6 +760,6 @@ for step in input_steps['steps']: aspirate_techniques='MC P300 high', dispense_techniques='MC P300 high' ) - -print(json.dumps(handler.temp_protocol['steps'],indent=4, ensure_ascii=False)) +with open('biomek_temporary_protocol.json', 'w') as f: + json.dump(handler.temp_protocol, f, indent=4, ensure_ascii=False) From 106d71e1db24cf9abc572c79eb69194063b5de65 Mon Sep 17 00:00:00 2001 From: Guangxin Zhang Date: Fri, 6 Jun 2025 11:11:17 +0800 Subject: [PATCH 2/2] Refine --- .../devices/liquid_handling/biomek_test.py | 873 +++++++++--------- 1 file changed, 443 insertions(+), 430 deletions(-) diff --git a/unilabos/devices/liquid_handling/biomek_test.py b/unilabos/devices/liquid_handling/biomek_test.py index c1f05f23..98b732f2 100644 --- a/unilabos/devices/liquid_handling/biomek_test.py +++ b/unilabos/devices/liquid_handling/biomek_test.py @@ -271,268 +271,270 @@ class LiquidHandlerBiomek: return -steps_info = ''' -{ - "steps": [ +if __name__ == "__main__": + + steps_info = ''' { - "step_number": 1, - "operation": "transfer", - "description": "转移PCR产物或酶促反应液至0.05ml 96孔板中", - "parameters": { - "source": "P1", - "target": "P11", - "tip_rack": "BC230", - "volume": 50 - } - }, - { - "step_number": 2, - "operation": "transfer", - "description": "加入2倍体积Bind Beads BC至产物中", - "parameters": { - "source": "P2", - "target": "P11", - "tip_rack": "BC230", - "volume": 100 - } - }, - { - "step_number": 3, - "operation": "move_labware", - "description": "移动P11至Orbital1用于振荡混匀", - "parameters": { - "source": "P11", - "target": "Orbital1" - } - }, - { - "step_number": 4, - "operation": "oscillation", - "description": "在Orbital1上振荡混匀Bind Beads BC与PCR产物(700-900rpm,300秒)", - "parameters": { - "rpm": 800, - "time": 300 - } - }, - { - "step_number": 5, - "operation": "move_labware", - "description": "移动混匀后的板回P11", - "parameters": { - "source": "Orbital1", - "target": "P11" - } - }, - { - "step_number": 6, - "operation": "move_labware", - "description": "将P11移动到磁力架(P12)吸附3分钟", - "parameters": { - "source": "P11", - "target": "P12" - } - }, - { - "step_number": 7, - "operation": "incubation", - "description": "磁力架上室温静置3分钟完成吸附", - "parameters": { - "time": 180 - } - }, - { - "step_number": 8, - "operation": "transfer", - "description": "去除上清液至废液槽", - "parameters": { - "source": "P12", - "target": "P22", - "tip_rack": "BC230", - "volume": 150 - } - }, - { - "step_number": 9, - "operation": "transfer", - "description": "加入300-500μl 75%乙醇清洗", - "parameters": { - "source": "P3", - "target": "P12", - "tip_rack": "BC230", - "volume": 400 - } - }, - { - "step_number": 10, - "operation": "move_labware", - "description": "移动清洗板到Orbital1进行振荡", - "parameters": { - "source": "P12", - "target": "Orbital1" - } - }, - { - "step_number": 11, - "operation": "oscillation", - "description": "乙醇清洗液振荡混匀(700-900rpm, 45秒)", - "parameters": { - "rpm": 800, - "time": 45 - } - }, - { - "step_number": 12, - "operation": "move_labware", - "description": "振荡后将板移回磁力架P12吸附", - "parameters": { - "source": "Orbital1", - "target": "P12" - } - }, - { - "step_number": 13, - "operation": "incubation", - "description": "吸附3分钟", - "parameters": { - "time": 180 - } - }, - { - "step_number": 14, - "operation": "transfer", - "description": "去除乙醇上清液至废液槽", - "parameters": { - "source": "P12", - "target": "P22", - "tip_rack": "BC230", - "volume": 400 - } - }, - { - "step_number": 15, - "operation": "transfer", - "description": "第二次加入300-500μl 75%乙醇清洗", - "parameters": { - "source": "P3", - "target": "P12", - "tip_rack": "BC230", - "volume": 400 - } - }, - { - "step_number": 16, - "operation": "move_labware", - "description": "再次移动清洗板到Orbital1振荡", - "parameters": { - "source": "P12", - "target": "Orbital1" - } - }, - { - "step_number": 17, - "operation": "oscillation", - "description": "再次乙醇清洗液振荡混匀(700-900rpm, 45秒)", - "parameters": { - "rpm": 800, - "time": 45 - } - }, - { - "step_number": 18, - "operation": "move_labware", - "description": "振荡后板送回磁力架P12吸附", - "parameters": { - "source": "Orbital1", - "target": "P12" - } - }, - { - "step_number": 19, - "operation": "incubation", - "description": "再次吸附3分钟", - "parameters": { - "time": 180 - } - }, - { - "step_number": 20, - "operation": "transfer", - "description": "去除乙醇上清液至废液槽", - "parameters": { - "source": "P12", - "target": "P22", - "tip_rack": "BC230", - "volume": 400 - } - }, - { - "step_number": 21, - "operation": "incubation", - "description": "空气干燥15分钟", - "parameters": { - "time": 900 - } - }, - { - "step_number": 22, - "operation": "transfer", - "description": "加30-50μl Elution Buffer洗脱", - "parameters": { - "source": "P4", - "target": "P12", - "tip_rack": "BC230", - "volume": 40 - } - }, - { - "step_number": 23, - "operation": "move_labware", - "description": "移动到Orbital1振荡混匀(60秒)", - "parameters": { - "source": "P12", - "target": "Orbital1" - } - }, - { - "step_number": 24, - "operation": "oscillation", - "description": "Elution Buffer振荡混匀(700-900rpm, 60秒)", - "parameters": { - "rpm": 800, - "time": 60 - } - }, - { - "step_number": 25, - "operation": "move_labware", - "description": "振荡后送回磁力架P12", - "parameters": { - "source": "Orbital1", - "target": "P12" - } - }, - { - "step_number": 26, - "operation": "incubation", - "description": "室温静置3分钟(洗脱反应)", - "parameters": { - "time": 180 - } - }, - { - "step_number": 27, - "operation": "transfer", - "description": "将上清液(DNA)转移到新板(P13)", - "parameters": { - "source": "P12", - "target": "P13", - "tip_rack": "BC230", - "volume": 40 - } + "steps": [ + { + "step_number": 1, + "operation": "transfer", + "description": "转移PCR产物或酶促反应液至0.05ml 96孔板中", + "parameters": { + "source": "P1", + "target": "P11", + "tip_rack": "BC230", + "volume": 50 + } + }, + { + "step_number": 2, + "operation": "transfer", + "description": "加入2倍体积Bind Beads BC至产物中", + "parameters": { + "source": "P2", + "target": "P11", + "tip_rack": "BC230", + "volume": 100 + } + }, + { + "step_number": 3, + "operation": "move_labware", + "description": "移动P11至Orbital1用于振荡混匀", + "parameters": { + "source": "P11", + "target": "Orbital1" + } + }, + { + "step_number": 4, + "operation": "oscillation", + "description": "在Orbital1上振荡混匀Bind Beads BC与PCR产物(700-900rpm,300秒)", + "parameters": { + "rpm": 800, + "time": 300 + } + }, + { + "step_number": 5, + "operation": "move_labware", + "description": "移动混匀后的板回P11", + "parameters": { + "source": "Orbital1", + "target": "P11" + } + }, + { + "step_number": 6, + "operation": "move_labware", + "description": "将P11移动到磁力架(P12)吸附3分钟", + "parameters": { + "source": "P11", + "target": "P12" + } + }, + { + "step_number": 7, + "operation": "incubation", + "description": "磁力架上室温静置3分钟完成吸附", + "parameters": { + "time": 180 + } + }, + { + "step_number": 8, + "operation": "transfer", + "description": "去除上清液至废液槽", + "parameters": { + "source": "P12", + "target": "P22", + "tip_rack": "BC230", + "volume": 150 + } + }, + { + "step_number": 9, + "operation": "transfer", + "description": "加入300-500μl 75%乙醇清洗", + "parameters": { + "source": "P3", + "target": "P12", + "tip_rack": "BC230", + "volume": 400 + } + }, + { + "step_number": 10, + "operation": "move_labware", + "description": "移动清洗板到Orbital1进行振荡", + "parameters": { + "source": "P12", + "target": "Orbital1" + } + }, + { + "step_number": 11, + "operation": "oscillation", + "description": "乙醇清洗液振荡混匀(700-900rpm, 45秒)", + "parameters": { + "rpm": 800, + "time": 45 + } + }, + { + "step_number": 12, + "operation": "move_labware", + "description": "振荡后将板移回磁力架P12吸附", + "parameters": { + "source": "Orbital1", + "target": "P12" + } + }, + { + "step_number": 13, + "operation": "incubation", + "description": "吸附3分钟", + "parameters": { + "time": 180 + } + }, + { + "step_number": 14, + "operation": "transfer", + "description": "去除乙醇上清液至废液槽", + "parameters": { + "source": "P12", + "target": "P22", + "tip_rack": "BC230", + "volume": 400 + } + }, + { + "step_number": 15, + "operation": "transfer", + "description": "第二次加入300-500μl 75%乙醇清洗", + "parameters": { + "source": "P3", + "target": "P12", + "tip_rack": "BC230", + "volume": 400 + } + }, + { + "step_number": 16, + "operation": "move_labware", + "description": "再次移动清洗板到Orbital1振荡", + "parameters": { + "source": "P12", + "target": "Orbital1" + } + }, + { + "step_number": 17, + "operation": "oscillation", + "description": "再次乙醇清洗液振荡混匀(700-900rpm, 45秒)", + "parameters": { + "rpm": 800, + "time": 45 + } + }, + { + "step_number": 18, + "operation": "move_labware", + "description": "振荡后板送回磁力架P12吸附", + "parameters": { + "source": "Orbital1", + "target": "P12" + } + }, + { + "step_number": 19, + "operation": "incubation", + "description": "再次吸附3分钟", + "parameters": { + "time": 180 + } + }, + { + "step_number": 20, + "operation": "transfer", + "description": "去除乙醇上清液至废液槽", + "parameters": { + "source": "P12", + "target": "P22", + "tip_rack": "BC230", + "volume": 400 + } + }, + { + "step_number": 21, + "operation": "incubation", + "description": "空气干燥15分钟", + "parameters": { + "time": 900 + } + }, + { + "step_number": 22, + "operation": "transfer", + "description": "加30-50μl Elution Buffer洗脱", + "parameters": { + "source": "P4", + "target": "P12", + "tip_rack": "BC230", + "volume": 40 + } + }, + { + "step_number": 23, + "operation": "move_labware", + "description": "移动到Orbital1振荡混匀(60秒)", + "parameters": { + "source": "P12", + "target": "Orbital1" + } + }, + { + "step_number": 24, + "operation": "oscillation", + "description": "Elution Buffer振荡混匀(700-900rpm, 60秒)", + "parameters": { + "rpm": 800, + "time": 60 + } + }, + { + "step_number": 25, + "operation": "move_labware", + "description": "振荡后送回磁力架P12", + "parameters": { + "source": "Orbital1", + "target": "P12" + } + }, + { + "step_number": 26, + "operation": "incubation", + "description": "室温静置3分钟(洗脱反应)", + "parameters": { + "time": 180 + } + }, + { + "step_number": 27, + "operation": "transfer", + "description": "将上清液(DNA)转移到新板(P13)", + "parameters": { + "source": "P12", + "target": "P13", + "tip_rack": "BC230", + "volume": 40 + } + } + ] } - ] -} -''' + ''' @@ -561,181 +563,193 @@ labware_with_liquid = ''' ] }, { - "id": "Tip Rack BC230 on TL3", - "parent": "deck", - "slot_on_deck": "TL3", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "Tip Rack BC230 on TL4", - "parent": "deck", - "slot_on_deck": "TL4", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "Tip Rack BC230 on TL5", - "parent": "deck", - "slot_on_deck": "TL5", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 TL2", + "parent": "deck", + "slot_on_deck": "TL2", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "Tip Rack BC230 on P5", - "parent": "deck", - "slot_on_deck": "P5", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 on TL3", + "parent": "deck", + "slot_on_deck": "TL3", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "Tip Rack BC230 on TL4", + "parent": "deck", + "slot_on_deck": "TL4", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "Tip Rack BC230 on TL5", + "parent": "deck", + "slot_on_deck": "TL5", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "Tip Rack BC230 on P6", - "parent": "deck", - "slot_on_deck": "P6", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 on P5", + "parent": "deck", + "slot_on_deck": "P5", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "Tip Rack BC230 on P7", - "parent": "deck", - "slot_on_deck": "P7", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "Tip Rack BC230 on P8", - "parent": "deck", - "slot_on_deck": "P8", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 on P6", + "parent": "deck", + "slot_on_deck": "P6", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "Tip Rack BC230 on P7", + "parent": "deck", + "slot_on_deck": "P7", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "Tip Rack BC230 P16", - "parent": "deck", - "slot_on_deck": "P16", - "class_name": "BC230", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "stock plate on 4", - "parent": "deck", - "slot_on_deck": "P2", - "class_name": "nest_12_reservoir_15ml", - "liquid_type": [ - "bind beads" - ], - "liquid_volume": [10000], - "liquid_input_wells": [ - "A1" - ] - }, - { - "id": "stock plate on P2", - "parent": "deck", - "slot_on_deck": "P2", - "class_name": "nest_12_reservoir_15ml", - "liquid_type": [ - "bind beads" - ], - "liquid_volume": [10000], - "liquid_input_wells": [ - "A1" - ] - }, - { - "id": "stock plate on P3", - "parent": "deck", - "slot_on_deck": "P3", - "class_name": "nest_12_reservoir_15ml", - "liquid_type": [ - "ethyl alcohol" - ], - "liquid_volume": [10000], - "liquid_input_wells": [ - "A1" - ] - }, - - { - "id": "oscillation", - "parent": "deck", - "slot_on_deck": "Orbital1", - "class_name": "Orbital", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "working plate on P11", - "parent": "deck", - "slot_on_deck": "P11", - "class_name": "NEST 2ml Deep Well Plate", - "liquid_type": [ - ], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 on P8", + "parent": "deck", + "slot_on_deck": "P8", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "magnetics module on P12", - "parent": "deck", - "slot_on_deck": "P12", - "class_name": "magnetics module", - "liquid_type": [], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, - { - "id": "working plate on P13", - "parent": "deck", - "slot_on_deck": "P13", - "class_name": "NEST 2ml Deep Well Plate", - "liquid_type": [ - ], - "liquid_volume": [], - "liquid_input_wells": [ - ] - }, + "id": "Tip Rack BC230 P16", + "parent": "deck", + "slot_on_deck": "P16", + "class_name": "BC230", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, { - "id": "waste on P22", - "parent": "deck", - "slot_on_deck": "P22", - "class_name": "nest_1_reservoir_195ml", - "liquid_type": [ - ], - "liquid_volume": [], - "liquid_input_wells": [ - ] - } -] + "id": "stock plate on 4", + "parent": "deck", + "slot_on_deck": "P2", + "class_name": "nest_12_reservoir_15ml", + "liquid_type": [ + "bind beads" + ], + "liquid_volume": [10000], + "liquid_input_wells": [ + "A1" + ] + }, + { + "id": "stock plate on P2", + "parent": "deck", + "slot_on_deck": "P2", + "class_name": "nest_12_reservoir_15ml", + "liquid_type": [ + "bind beads" + ], + "liquid_volume": [10000], + "liquid_input_wells": [ + "A1" + ] + }, + { + "id": "stock plate on P3", + "parent": "deck", + "slot_on_deck": "P3", + "class_name": "nest_12_reservoir_15ml", + "liquid_type": [ + "ethyl alcohol" + ], + "liquid_volume": [10000], + "liquid_input_wells": [ + "A1" + ] + }, + + { + "id": "oscillation", + "parent": "deck", + "slot_on_deck": "Orbital1", + "class_name": "Orbital", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "working plate on P11", + "parent": "deck", + "slot_on_deck": "P11", + "class_name": "NEST 2ml Deep Well Plate", + "liquid_type": [ + ], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "magnetics module on P12", + "parent": "deck", + "slot_on_deck": "P12", + "class_name": "magnetics module", + "liquid_type": [], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "working plate on P13", + "parent": "deck", + "slot_on_deck": "P13", + "class_name": "NEST 2ml Deep Well Plate", + "liquid_type": [ + ], + "liquid_volume": [], + "liquid_input_wells": [ + ] + }, + { + "id": "waste on P22", + "parent": "deck", + "slot_on_deck": "P22", + "class_name": "nest_1_reservoir_195ml", + "liquid_type": [ + ], + "liquid_volume": [], + "liquid_input_wells": [ + ] + } + ] + + ''' + -''' handler = LiquidHandlerBiomek() @@ -760,6 +774,5 @@ for step in input_steps['steps']: aspirate_techniques='MC P300 high', dispense_techniques='MC P300 high' ) -with open('biomek_temporary_protocol.json', 'w') as f: - json.dump(handler.temp_protocol, f, indent=4, ensure_ascii=False) +print(json.dumps(handler.temp_protocol, indent=4))