[{"data":1,"prerenderedAt":2691},["ShallowReactive",2],{"navigation":3,"\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing":909,"\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing-surround":2686},[4,59,188,271,445,591,760,791],{"title":5,"type":6,"device":6,"path":7,"stem":8,"children":9,"page":41},"Get Started",null,"\u002Fget-started\u002F","01.get-started",[10,15,42,47,51,55],{"title":11,"path":12,"stem":13,"type":14,"device":6},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome\u002F","01.get-started\u002F00.welcome","landing",{"title":16,"type":6,"device":6,"path":17,"stem":18,"children":19,"page":41},"Setup","\u002Fget-started\u002Fsetup\u002F","01.get-started\u002F01.setup",[20,25,29,33,37],{"title":21,"path":22,"stem":23,"type":24,"device":6},"Get access","\u002Fget-started\u002Fsetup\u002Fget-access\u002F","01.get-started\u002F01.setup\u002F00.get-access","howto",{"title":26,"path":27,"stem":28,"type":24,"device":6},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F","01.get-started\u002F01.setup\u002F10.groundcontrol",{"title":30,"path":31,"stem":32,"type":24,"device":6},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform\u002F","01.get-started\u002F01.setup\u002F20.connect-to-platform",{"title":34,"path":35,"stem":36,"type":24,"device":6},"Set up your development machine","\u002Fget-started\u002Fsetup\u002Fdeveloper-machine\u002F","01.get-started\u002F01.setup\u002F30.developer-machine",{"title":38,"path":39,"stem":40,"type":24,"device":6},"SDK installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F","01.get-started\u002F01.setup\u002F40.sdk-installation",false,{"title":43,"path":44,"stem":45,"type":46,"device":6},"Control a device","\u002Fget-started\u002Fcontrol-a-device\u002F","01.get-started\u002F02.control-a-device","tutorial",{"title":48,"path":49,"stem":50,"type":46,"device":6},"Liquid handling as code","\u002Fget-started\u002Fliquid-handling-as-code\u002F","01.get-started\u002F03.liquid-handling-as-code",{"title":52,"path":53,"stem":54,"type":46,"device":6},"Automate your workflows","\u002Fget-started\u002Fautomate-your-workflows\u002F","01.get-started\u002F04.automate-your-workflows",{"title":56,"path":57,"stem":58,"type":6,"device":6},"Self-Paced Setup Guide","\u002Fget-started\u002Fself-onboarding\u002F","01.get-started\u002F90.self-onboarding",{"title":60,"type":6,"device":6,"path":61,"stem":62,"children":63,"page":41},"How-to","\u002Fhow-to\u002F","02.how-to",[64,118,163,180],{"title":65,"type":6,"device":6,"path":66,"stem":67,"children":68,"page":41},"Connectors and devices","\u002Fhow-to\u002Fintegrate\u002F","02.how-to\u002F02.integrate",[69,102],{"title":70,"type":6,"device":6,"path":71,"stem":72,"children":73,"page":41},"Connect a device","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device",[74,78,82,86,90,94,98],{"title":75,"path":76,"stem":77,"type":24,"device":6},"Connector Configuration","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fconnector-configuration\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F10.connector-configuration",{"title":79,"path":80,"stem":81,"type":24,"device":6},"With an executable","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fwith-an-executable\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F20.with-an-executable",{"title":83,"path":84,"stem":85,"type":24,"device":6},"From source","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Ffrom-source\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F30.from-source",{"title":87,"path":88,"stem":89,"type":24,"device":6},"Build your own","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fbuild-yourself\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F40.build-yourself",{"title":91,"path":92,"stem":93,"type":24,"device":6},"Headless install","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fheadless-install\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F50.headless-install",{"title":95,"path":96,"stem":97,"type":24,"device":6},"Raspberry Pi","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fraspberry-pi\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F55.raspberry-pi",{"title":99,"path":100,"stem":101,"type":24,"device":6},"Multi-device Networking","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fmultiple-devices\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F60.multiple-devices",{"title":103,"type":6,"device":6,"path":104,"stem":105,"children":106,"page":41},"Use a device","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device",[107,110,114],{"title":26,"path":108,"stem":109,"type":24,"device":6},"\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fgroundcontrol\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F10.groundcontrol",{"title":111,"path":112,"stem":113,"type":24,"device":6},"Platform","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fplatform\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F20.platform",{"title":115,"path":116,"stem":117,"type":24,"device":6},"UniteLabs SDK & REST API","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fpython\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F30.python",{"title":119,"type":6,"device":6,"path":120,"stem":121,"children":122,"page":41},"Workflows","\u002Fhow-to\u002Fautomate\u002F","02.how-to\u002F07.automate",[123,127,131,135,139,143,147,151,155,159],{"title":124,"path":125,"stem":126,"type":24,"device":6},"Deploy a workflow","\u002Fhow-to\u002Fautomate\u002Fdeploy-a-workflow\u002F","02.how-to\u002F07.automate\u002F30.deploy-a-workflow",{"title":128,"path":129,"stem":130,"type":24,"device":6},"Run a workflow","\u002Fhow-to\u002Fautomate\u002Frun-a-workflow\u002F","02.how-to\u002F07.automate\u002F35.run-a-workflow",{"title":132,"path":133,"stem":134,"type":24,"device":6},"CI\u002FCD for workflows","\u002Fhow-to\u002Fautomate\u002Fcicd-for-workflows\u002F","02.how-to\u002F07.automate\u002F40.cicd-for-workflows",{"title":136,"path":137,"stem":138,"type":24,"device":6},"HITL basics","\u002Fhow-to\u002Fautomate\u002Fbasic-hitl\u002F","02.how-to\u002F07.automate\u002F50.basic-hitl",{"title":140,"path":141,"stem":142,"type":24,"device":6},"Slack notifications and operator confirmation","\u002Fhow-to\u002Fautomate\u002Fslack-notifications\u002F","02.how-to\u002F07.automate\u002F52.slack-notifications",{"title":144,"path":145,"stem":146,"type":24,"device":6},"Typed operator inputs","\u002Fhow-to\u002Fautomate\u002Ftyped-operator-inputs\u002F","02.how-to\u002F07.automate\u002F55.typed-operator-inputs",{"title":148,"path":149,"stem":150,"type":24,"device":6},"Pause and resume a run","\u002Fhow-to\u002Fautomate\u002Fpause-and-resume\u002F","02.how-to\u002F07.automate\u002F57.pause-and-resume",{"title":152,"path":153,"stem":154,"type":24,"device":6},"Error recovery","\u002Fhow-to\u002Fautomate\u002Fbasic-error-handling\u002F","02.how-to\u002F07.automate\u002F60.basic-error-handling",{"title":156,"path":157,"stem":158,"type":24,"device":6},"Advanced error handling","\u002Fhow-to\u002Fautomate\u002Fadvanced-error-handling\u002F","02.how-to\u002F07.automate\u002F70.advanced-error-handling",{"title":160,"path":161,"stem":162,"type":24,"device":6},"Emit lineage events","\u002Fhow-to\u002Fautomate\u002Femitting-lineage-events\u002F","02.how-to\u002F07.automate\u002F90.emitting-lineage-events",{"title":164,"type":6,"device":6,"path":165,"stem":166,"children":167,"page":41},"Data","\u002Fhow-to\u002Fobserve\u002F","02.how-to\u002F08.observe",[168,172,176],{"title":169,"path":170,"stem":171,"type":24,"device":6},"File System Connector","\u002Fhow-to\u002Fobserve\u002Ffilesystem-connector\u002F","02.how-to\u002F08.observe\u002F10.filesystem-connector",{"title":173,"path":174,"stem":175,"type":24,"device":6},"Building an ETL","\u002Fhow-to\u002Fobserve\u002Fbuilding-an-etl\u002F","02.how-to\u002F08.observe\u002F20.building-an-etl",{"title":177,"path":178,"stem":179,"type":24,"device":6},"Read lineage events","\u002Fhow-to\u002Fobserve\u002Freading-lineage-events\u002F","02.how-to\u002F08.observe\u002F30.reading-lineage-events",{"title":111,"type":6,"device":6,"path":181,"stem":182,"children":183,"page":41},"\u002Fhow-to\u002Fplatform\u002F","02.how-to\u002F09.platform",[184],{"title":185,"path":186,"stem":187,"type":24,"device":6},"UniteLabs Desktop","\u002Fhow-to\u002Fplatform\u002Funitelabs-desktop\u002F","02.how-to\u002F09.platform\u002F10.unitelabs-desktop",{"title":189,"type":6,"device":6,"path":190,"stem":191,"children":192},"Technical Reference","\u002Ftechnical-reference\u002F","03.technical-reference",[193,196,201,213,226,235,244,253,262],{"title":194,"path":190,"stem":195,"type":14,"device":6},"Overview","03.technical-reference\u002Findex",{"title":197,"path":198,"stem":199,"type":200,"device":6},"REST API","\u002Ftechnical-reference\u002Frest-api\u002F","03.technical-reference\u002F01.rest-api","reference",{"title":119,"type":6,"device":6,"path":202,"stem":203,"children":204,"page":41},"\u002Ftechnical-reference\u002Fautomate\u002F","03.technical-reference\u002F07.automate",[205,209],{"title":206,"path":207,"stem":208,"type":200,"device":6},"Workflow template","\u002Ftechnical-reference\u002Fautomate\u002Fworkflow-template\u002F","03.technical-reference\u002F07.automate\u002F05.workflow-template",{"title":210,"path":211,"stem":212,"type":200,"device":6},"Workflows REST API","\u002Ftechnical-reference\u002Fautomate\u002Fworkflows-api\u002F","03.technical-reference\u002F07.automate\u002F80.workflows-api",{"title":26,"type":6,"device":6,"path":214,"stem":215,"children":216},"\u002Ftechnical-reference\u002Fgroundcontrol\u002F","03.technical-reference\u002F10.groundcontrol\u002Findex",[217,218,222],{"title":194,"path":214,"stem":215,"type":14,"device":6},{"title":219,"path":220,"stem":221,"type":200,"device":6},"Network requirements","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fnetwork-requirements\u002F","03.technical-reference\u002F10.groundcontrol\u002F10.network-requirements",{"title":223,"path":224,"stem":225,"type":200,"device":6},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog\u002F","03.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":227,"type":6,"device":6,"path":228,"stem":229,"children":230},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk\u002F","03.technical-reference\u002F20.python-sdk\u002Findex",[231,232],{"title":194,"path":228,"stem":229,"type":14,"device":6},{"title":223,"path":233,"stem":234,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog\u002F","03.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":236,"type":6,"device":6,"path":237,"stem":238,"children":239},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002Findex",[240,241],{"title":194,"path":237,"stem":238,"type":14,"device":6},{"title":223,"path":242,"stem":243,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":245,"type":6,"device":6,"path":246,"stem":247,"children":248},"Labware","\u002Ftechnical-reference\u002Flabware\u002F","03.technical-reference\u002F40.labware\u002Findex",[249,250],{"title":194,"path":246,"stem":247,"type":14,"device":6},{"title":223,"path":251,"stem":252,"type":200,"device":6},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog\u002F","03.technical-reference\u002F40.labware\u002F20.changelog",{"title":254,"type":6,"device":6,"path":255,"stem":256,"children":257},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus\u002F","03.technical-reference\u002F50.python-omnibus\u002Findex",[258,259],{"title":194,"path":255,"stem":256,"type":14,"device":6},{"title":223,"path":260,"stem":261,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog\u002F","03.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":263,"type":6,"device":6,"path":264,"stem":265,"children":266},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk\u002F","03.technical-reference\u002F60.python-cdk\u002Findex",[267,268],{"title":194,"path":264,"stem":265,"type":14,"device":6},{"title":223,"path":269,"stem":270,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog\u002F","03.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":272,"type":6,"device":6,"path":273,"stem":274,"children":275,"page":41},"Concepts","\u002Fconcepts\u002F","04.concepts",[276,315,339,383,422],{"title":277,"type":6,"device":6,"path":278,"stem":279,"children":280,"page":41},"Labs as code","\u002Fconcepts\u002Flabs-as-code\u002F","04.concepts\u002F01.labs-as-code",[281,286,290],{"title":282,"path":283,"stem":284,"type":285,"device":6},"Lab as Code","\u002Fconcepts\u002Flabs-as-code\u002Fwhy-code\u002F","04.concepts\u002F01.labs-as-code\u002F00.why-code","explanation",{"title":287,"path":288,"stem":289,"type":285,"device":6},"How it works","\u002Fconcepts\u002Flabs-as-code\u002Fhow-it-works\u002F","04.concepts\u002F01.labs-as-code\u002F01.how-it-works",{"title":291,"type":6,"device":6,"path":292,"stem":293,"children":294,"page":41},"Use Cases","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases",[295,299,303,307,311],{"title":296,"path":297,"stem":298,"type":285,"device":6},"Instrument Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Flow-level-instrument-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":300,"path":301,"stem":302,"type":285,"device":6},"Multi-device Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fmulti-device-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F20.multi-device-control",{"title":304,"path":305,"stem":306,"type":285,"device":6},"Workflow Orchestration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fworkflow-orchestration\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F30.workflow-orchestration",{"title":308,"path":309,"stem":310,"type":285,"device":6},"Custom Apps and LIMS Integration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fcustom-apps-lims\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F40.custom-apps-lims",{"title":312,"path":313,"stem":314,"type":285,"device":6},"Scale and Fleet Management","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fscale-and-fleet\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F50.scale-and-fleet",{"title":65,"type":6,"device":6,"path":316,"stem":317,"children":318,"page":41},"\u002Fconcepts\u002Fintegrate\u002F","04.concepts\u002F02.integrate",[319,323,327,331,335],{"title":320,"path":321,"stem":322,"type":285,"device":6},"Device","\u002Fconcepts\u002Fintegrate\u002Fdevice\u002F","04.concepts\u002F02.integrate\u002F05.device",{"title":324,"path":325,"stem":326,"type":285,"device":6},"Connector","\u002Fconcepts\u002Fintegrate\u002Fconnector\u002F","04.concepts\u002F02.integrate\u002F10.connector",{"title":328,"path":329,"stem":330,"type":285,"device":6},"Module","\u002Fconcepts\u002Fintegrate\u002Fmodule\u002F","04.concepts\u002F02.integrate\u002F20.module",{"title":332,"path":333,"stem":334,"type":285,"device":6},"Action","\u002Fconcepts\u002Fintegrate\u002Faction\u002F","04.concepts\u002F02.integrate\u002F30.action",{"title":336,"path":337,"stem":338,"type":285,"device":6},"Subscription","\u002Fconcepts\u002Fintegrate\u002Fsubscription\u002F","04.concepts\u002F02.integrate\u002F40.subscription",{"title":340,"type":6,"device":6,"path":341,"stem":342,"children":343,"page":41},"Liquid handling and robots","\u002Fconcepts\u002Foperate\u002F","04.concepts\u002F03.operate",[344,348,352,356,359,363,367,371,375,379],{"title":345,"path":346,"stem":347,"type":285,"device":6},"Liquid Handling","\u002Fconcepts\u002Foperate\u002Fliquid-handling\u002F","04.concepts\u002F03.operate\u002F10.liquid-handling",{"title":349,"path":350,"stem":351,"type":285,"device":6},"Modules","\u002Fconcepts\u002Foperate\u002Fmodules\u002F","04.concepts\u002F03.operate\u002F20.modules",{"title":353,"path":354,"stem":355,"type":285,"device":6},"Deck","\u002Fconcepts\u002Foperate\u002Fdeck\u002F","04.concepts\u002F03.operate\u002F30.deck",{"title":245,"path":357,"stem":358,"type":285,"device":6},"\u002Fconcepts\u002Foperate\u002Flabware\u002F","04.concepts\u002F03.operate\u002F40.labware",{"title":360,"path":361,"stem":362,"type":285,"device":6},"Liquids","\u002Fconcepts\u002Foperate\u002Fliquids\u002F","04.concepts\u002F03.operate\u002F50.liquids",{"title":364,"path":365,"stem":366,"type":285,"device":6},"Liquid Classes","\u002Fconcepts\u002Foperate\u002Fliquid-classes\u002F","04.concepts\u002F03.operate\u002F60.liquid-classes",{"title":368,"path":369,"stem":370,"type":285,"device":6},"Parameter Sets","\u002Fconcepts\u002Foperate\u002Fparameter-sets\u002F","04.concepts\u002F03.operate\u002F65.parameter-sets",{"title":372,"path":373,"stem":374,"type":285,"device":6},"Tips and Tip Tracking","\u002Fconcepts\u002Foperate\u002Ftips\u002F","04.concepts\u002F03.operate\u002F70.tips",{"title":376,"path":377,"stem":378,"type":285,"device":6},"Simulation","\u002Fconcepts\u002Foperate\u002Fsimulation\u002F","04.concepts\u002F03.operate\u002F80.simulation",{"title":380,"path":381,"stem":382,"type":285,"device":6},"Error Handling","\u002Fconcepts\u002Foperate\u002Ferror-handling\u002F","04.concepts\u002F03.operate\u002F90.error-handling",{"title":119,"type":6,"device":6,"path":384,"stem":385,"children":386,"page":41},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[387,391,395,399,403,407,411,415,419],{"title":388,"path":389,"stem":390,"type":285,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":392,"path":393,"stem":394,"type":285,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":396,"path":397,"stem":398,"type":285,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":400,"path":401,"stem":402,"type":285,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":404,"path":405,"stem":406,"type":285,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":408,"path":409,"stem":410,"type":285,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":412,"path":413,"stem":414,"type":285,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":416,"path":417,"stem":418,"type":285,"device":6},"Human in the Loop","\u002Fconcepts\u002Fautomate\u002Fhuman-in-the-loop\u002F","04.concepts\u002F07.automate\u002F80.human-in-the-loop",{"title":380,"path":420,"stem":421,"type":285,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":164,"type":6,"device":6,"path":423,"stem":424,"children":425,"page":41},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[426,429,433,437,441],{"title":194,"path":427,"stem":428,"type":14,"device":6},"\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":430,"path":431,"stem":432,"type":285,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":434,"path":435,"stem":436,"type":285,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":438,"path":439,"stem":440,"type":285,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":442,"path":443,"stem":444,"type":285,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":446,"type":6,"device":6,"path":447,"stem":448,"children":449,"page":41},"Devices","\u002Fdevices\u002F","05.devices",[450,453,501,514,530,567],{"title":194,"path":451,"stem":452,"type":14,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":454,"path":455,"page":41,"children":456},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[457,478,488],{"title":458,"path":459,"stem":460,"type":200,"device":461},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":462,"vendor":463,"category":464,"connector":462,"package":465,"models":466,"communication":473,"vendor_software":6,"os":474},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[467,468,469,470,471,472],"BioShake 3000 \u002F 3000 elm \u002F 3000 elm DWP","BioShake 3000-T \u002F 3000-T elm","BioShake 5000 elm","BioShake D30 \u002F D30 elm \u002F D30-T \u002F D30-T elm","BioShake Q1 \u002F Q1 (1.2 mm) \u002F Q1 (3.0 mm) \u002F Q2","HeatPlate","serial (RS-232 over USB)",[475,476,477],"windows","linux","macos",{"title":479,"path":480,"stem":481,"type":200,"device":482},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":483,"vendor":463,"category":464,"connector":462,"package":465,"models":484,"communication":473,"vendor_software":6,"os":487},"qinstruments-coldplate",[485,486],"ColdPlate","ColdPlate slim",[475,476,477],{"title":489,"path":490,"stem":491,"type":200,"device":492},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":493,"vendor":494,"category":464,"connector":495,"models":496},"inheco-thermoshake","Inheco","inheco-tec-controller",[497,498,499,500],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":502,"path":503,"page":41,"children":504},"Incubation","\u002Fdevices\u002Fincubation\u002F",[505],{"title":506,"path":507,"stem":508,"type":200,"device":509},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":510,"vendor":494,"category":502,"connector":510,"models":511},"inheco-scila",[512,513],"SCILA","SCILA MIX 2-gas mixing device",{"title":515,"path":516,"page":41,"children":517},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[518],{"title":519,"path":520,"stem":521,"type":200,"device":522},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":523,"vendor":494,"category":524,"connector":523,"models":525},"inheco-odtc","Thermal Cycler",[526,527,528,529],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":531,"path":532,"page":41,"children":533},"Readers","\u002Fdevices\u002Freaders\u002F",[534,543,552],{"title":535,"path":536,"stem":537,"type":200,"device":538},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":539,"vendor":540,"category":541,"connector":542},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":544,"path":545,"stem":546,"type":200,"device":547},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":548,"vendor":540,"category":541,"connector":549,"models":550},"biotek-synergy-h1","agilent-synergy-h1",[551],"BioTek Synergy H1",{"title":553,"path":554,"stem":555,"type":200,"device":556},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":557,"vendor":558,"category":541,"connector":557,"package":559,"models":560,"communication":564,"vendor_software":565,"os":566},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[561,562,563],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[475,476,477],{"title":568,"path":569,"page":41,"children":570},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[571,581],{"title":572,"path":573,"stem":574,"type":200,"device":575},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":576,"vendor":463,"category":577,"connector":462,"package":465,"models":578,"communication":473,"vendor_software":6,"os":580},"qinstruments-tiltstation","Plate Tilting",[579],"TiltStation",[475,476,477],{"title":582,"path":583,"stem":584,"type":200,"device":585},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":586,"vendor":463,"category":587,"connector":462,"package":465,"models":588,"communication":473,"vendor_software":6,"os":590},"qinstruments-turnstation","Plate Rotating",[589],"TurnStation",[475,476,477],{"title":592,"type":6,"device":6,"path":593,"stem":594,"children":595,"page":41},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[596,599,611,635,638,679,704,721,738],{"title":194,"path":597,"stem":598,"type":14,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":353,"type":6,"device":6,"path":600,"stem":601,"children":602,"page":41},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[603,607],{"title":604,"path":605,"stem":606,"type":24,"device":6},"Building a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F10.building-a-deck",{"title":608,"path":609,"stem":610,"type":24,"device":6},"Save\u002FLoad a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fsave-load-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F20.save-load-deck",{"title":612,"type":6,"device":6,"path":613,"stem":614,"children":615,"page":41},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[616,620,624,628,631],{"title":617,"path":618,"stem":619,"type":24,"device":6},"Basic Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F10.basic-pipetting",{"title":621,"path":622,"stem":623,"type":24,"device":6},"Advanced Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fadvanced-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F20.advanced-pipetting",{"title":625,"path":626,"stem":627,"type":24,"device":6},"Tip Handling","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F30.tip-handling",{"title":364,"path":629,"stem":630,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":632,"path":633,"stem":634,"type":24,"device":6},"Labware Transport","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Flabware-transport\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F50.labware-transport",{"title":376,"path":636,"stem":637,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":639,"type":6,"device":6,"path":640,"stem":641,"children":642,"page":41},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[643,647,651,655,659,663,667,671,675],{"title":644,"path":645,"stem":646,"type":24,"device":6},"Positioning & Movement","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fpositioning\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F10.positioning",{"title":648,"path":649,"stem":650,"type":24,"device":6},"Gripper Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcore-gripper\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F20.core-gripper",{"title":652,"path":653,"stem":654,"type":24,"device":6},"iSWAP Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fiswap\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F30.iswap",{"title":656,"path":657,"stem":658,"type":24,"device":6},"Using TADM","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Ftadm\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F40.tadm",{"title":660,"path":661,"stem":662,"type":24,"device":6},"Autoload Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fautoload\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F50.autoload",{"title":664,"path":665,"stem":666,"type":24,"device":6},"Waste Block","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fwaste-block\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F60.waste-block",{"title":668,"path":669,"stem":670,"type":24,"device":6},"Complex Mixing","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F66.complex-mixing",{"title":672,"path":673,"stem":674,"type":24,"device":6},"Teaching Gripper Paddle Positions","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fgripper-positions\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F70.gripper-positions",{"title":676,"path":677,"stem":678,"type":24,"device":6},"Training a Custom Deck Position With the iSWAP","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcustom-deck-position\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F75.custom-deck-position",{"title":680,"type":6,"device":6,"path":681,"stem":682,"children":683,"page":41},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[684,688,692,696,700],{"title":685,"path":686,"stem":687,"type":24,"device":6},"Waste Configuration","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fwaste-configuration\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F05.waste-configuration",{"title":689,"path":690,"stem":691,"type":24,"device":6},"Covers and Lights","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fcovers-and-lights\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F10.covers-and-lights",{"title":693,"path":694,"stem":695,"type":24,"device":6},"IDL Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fidl\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F20.idl",{"title":697,"path":698,"stem":699,"type":24,"device":6},"IPG Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fipg\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F30.ipg",{"title":701,"path":702,"stem":703,"type":24,"device":6},"XL Pipettes","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fxl-channels\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F40.xl-channels",{"title":705,"type":6,"device":6,"path":706,"stem":707,"children":708,"page":41},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[709,712,715,718],{"title":625,"path":710,"stem":711,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F10.tip-handling",{"title":617,"path":713,"stem":714,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F20.basic-pipetting",{"title":364,"path":716,"stem":717,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F25.liquid-classes",{"title":648,"path":719,"stem":720,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F30.using-the-gripper",{"title":722,"type":6,"device":6,"path":723,"stem":724,"children":725,"page":41},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[726,730,734],{"title":727,"path":728,"stem":729,"type":24,"device":6},"Connect & Run a Method","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fconnect-and-run\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F10.connect-and-run",{"title":731,"path":732,"stem":733,"type":24,"device":6},"Sending XML Commands","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fsending-xml-commands\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":735,"path":736,"stem":737,"type":24,"device":6},"Full Workflow Example","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Ffull-workflow-example\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":739,"type":6,"device":6,"path":740,"stem":741,"children":742,"page":41},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[743,747,750,753,757],{"title":744,"path":745,"stem":746,"type":24,"device":6},"Deck & Carriers","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fdeck-and-carriers\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F10.deck-and-carriers",{"title":625,"path":748,"stem":749,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F20.tip-handling",{"title":617,"path":751,"stem":752,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F30.basic-pipetting",{"title":754,"path":755,"stem":756,"type":24,"device":6},"Using the Gripper (RoMa)","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F40.using-the-gripper",{"title":364,"path":758,"stem":759,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F50.liquid-classes",{"title":245,"type":6,"device":6,"path":761,"stem":762,"children":763,"page":41},"\u002Flabware\u002F","07.labware",[764,767,771,775,779,783,787],{"title":194,"path":765,"stem":766,"type":14,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":768,"path":769,"stem":770,"type":200,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":772,"path":773,"stem":774,"type":200,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":776,"path":777,"stem":778,"type":200,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":780,"path":781,"stem":782,"type":200,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":784,"path":785,"stem":786,"type":200,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":788,"path":789,"stem":790,"type":200,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":792,"type":6,"device":6,"path":793,"stem":794,"children":795},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[796,798,822,855,863,903],{"title":194,"path":793,"stem":797,"type":14,"device":6},"20.connector-development\u002Findex",{"title":799,"path":800,"stem":801,"children":802,"page":41},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[803,806,810,814,818],{"title":194,"path":804,"stem":805,"type":285,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":807,"path":808,"stem":809,"type":24,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":811,"path":812,"stem":813,"type":24,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":815,"path":816,"stem":817,"type":24,"device":6},"Python Environment and Project Management","\u002Fconnector-development\u002Fgetting-started\u002Fpython-environments\u002F","20.connector-development\u002F10.getting-started\u002F35.python-environments",{"title":819,"path":820,"stem":821,"type":24,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":823,"path":824,"stem":825,"children":826,"page":41},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[827,831,835,839,843,847,851],{"title":828,"path":829,"stem":830,"type":46,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":832,"path":833,"stem":834,"type":46,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":836,"path":837,"stem":838,"type":46,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":840,"path":841,"stem":842,"type":46,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":844,"path":845,"stem":846,"type":46,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":848,"path":849,"stem":850,"type":46,"device":6},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure\u002F","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":852,"path":853,"stem":854,"type":46,"device":6},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication\u002F","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":272,"type":6,"device":6,"path":856,"stem":857,"children":858,"page":41},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[859],{"title":860,"path":861,"stem":862,"type":285,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002Fsila",{"title":864,"path":865,"stem":866,"children":867,"page":41},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[868,872,876,880,884,888,892,895,899],{"title":869,"path":870,"stem":871,"type":24,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":873,"path":874,"stem":875,"type":24,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":877,"path":878,"stem":879,"type":24,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":881,"path":882,"stem":883,"type":24,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":885,"path":886,"stem":887,"type":24,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":889,"path":890,"stem":891,"type":24,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":380,"path":893,"stem":894,"type":24,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":896,"path":897,"stem":898,"type":24,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":900,"path":901,"stem":902,"type":24,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":904,"path":905,"stem":906,"children":907,"type":6,"device":6},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[908],{"title":904,"path":905,"stem":906,"type":200,"device":6},{"id":910,"title":668,"body":911,"description":2680,"device":6,"extension":2681,"links":6,"meta":2682,"navigation":1166,"path":2683,"seo":2684,"stem":670,"type":24,"__hash__":2685},"docs\u002F06.liquid-handling-and-robots\u002F41.hamilton-star\u002F66.complex-mixing.md",{"type":912,"value":913,"toc":2668},"minimark",[914,923,929,948,952,955,1034,1049,1052,1057,1060,1088,1092,1095,1100,1103,1336,1343,1351,1355,1361,1516,1519,1545,1549,1552,1734,1738,1744,1787,1790,1926,1929,1979,1982,2158,2164,2253,2257,2263,2267,2270,2283,2286,2511,2514,2534,2658,2664],[915,916,917,918,922],"p",{},"This section explains the ",[919,920,921],"code",{},"complex_mix"," methods for the CO-RE 96 and Channels modules.",[915,924,925],{},[926,927,928],"strong",{},"Prerequisites",[915,930,931,932,937,938,942,943,947],{},"A thorough understanding of advanced pipetting operations is required, as this guide builds upon the concepts introduced in the ",[933,934,936],"a",{"href":622,"target":935},"_blank","advanced pipetting"," guide. The prerequisites are the same as for that guide, and the basic setup will be the same (sections ",[933,939,941],{"href":940,"target":935},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting#connect-to-the-device","Power on the System"," and ",[933,944,946],{"href":945,"target":935},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting#arrange-the-deck","Arrange the Deck",").",[949,950,368],"h2",{"id":951},"parameter-sets",[915,953,954],{},"Complex mixing requires the use of parameter sets. There are three parameter sets of note:",[956,957,958,981,999],"ol",{},[959,960,961,964],"li",{},[919,962,963],{},"CoRe96ComplexMixParameterSet",[965,966,967],"ul",{},[959,968,969,970,973,974,942,977,980],{},"Contains a single field: ",[919,971,972],{},"steps",". This is a list of ",[919,975,976],{},"CoRe96AspirateParameterSet",[919,978,979],{},"CoRe96DispenseParameterSet"," objects in the order they are to be performed by the CO-RE96 head.",[959,982,983,986],{},[919,984,985],{},"ChannelComplexMixParameterSet",[965,987,988],{},[959,989,969,990,973,992,942,995,998],{},[919,991,972],{},[919,993,994],{},"ChannelAspirateParameterSet",[919,996,997],{},"ChannelDispenseParameterSet"," objects in the order they are to be performed by the channel.",[959,1000,1001,1004],{},[919,1002,1003],{},"ChannelsComplexMixParameterSet",[965,1005,1006,1031],{},[959,1007,1008,1009,1013,1014],{},"Contains ",[1010,1011,1012],"em",{},"two"," fields:\n",[965,1015,1016,1025],{},[959,1017,1018,1021,1022,1024],{},[919,1019,1020],{},"parameters",": This is a list of ",[919,1023,985],{}," objects.",[959,1026,1027,1030],{},[919,1028,1029],{},"channels",": This is a list of channel indices to be used for the mixing operation.",[959,1032,1033],{},"Parameters and channels must be the same length, since each parameter set corresponds to a channel (in order).",[915,1035,1036,1037,1039,1040,1043,1044,1039,1046,947],{},"Note the difference between ",[919,1038,985],{}," (",[1010,1041,1042],{},"singular Channel",") and ",[919,1045,1003],{},[1010,1047,1048],{},"plural Channels",[915,1050,1051],{},"The user has complete freedom to construct their aspiration and dispense parameter sets as they would for an ordinary aspiration or dispense. However, complex mixing parameter sets do enforce some additional constraints, not on the individual parameter sets, but on the list as a whole.",[1053,1054,1056],"h3",{"id":1055},"constraints","Constraints",[915,1058,1059],{},"The following constraints apply to complex mixing parameter sets:",[965,1061,1062,1067],{},[959,1063,1064,1066],{},[919,1065,972],{}," must be non-empty and of even length.",[959,1068,1069,1071,1072],{},[919,1070,972],{}," must alternate between the appropriate aspiration and dispense parameter sets.\n",[965,1073,1074],{},[959,1075,1076,1077,1080,1081,1083,1084,1087],{},"In each pair, the ",[919,1078,1079],{},"volume"," field of the aspiration and dispense parameter sets must be equal. However, the ",[919,1082,1079],{}," can vary ",[1010,1085,1086],{},"across"," pairs in the list.",[1053,1089,1091],{"id":1090},"features","Features",[915,1093,1094],{},"Here we describe the key features of complex mixing parameter sets.",[1096,1097,1099],"h4",{"id":1098},"validation","Validation",[915,1101,1102],{},"As with other parameter sets, complex mixing parameter sets can be validated against various liquid handler states (\"contexts\") before being passed into a pipetting method, greatly reducing the risk of errors. Uniquely, since complex mixing parameter sets contain multiple independent operations, all of them are validated, allowing the user to evaluate the entire operation before execution:",[1104,1105,1110],"pre",{"className":1106,"code":1107,"language":1108,"meta":1109,"style":1109},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","from unitelabs.liquid_handling.hamilton import (\n    CoRe96ComplexMixParameterSet,\n    CoRe96AspirateParameterSet,\n    CoRe96DispenseParameterSet,\n    CoRe96Context,\n)\n\n# Construct a complex mixing parameter set with 3 cycles of 10uL aspiration and dispensing\naspirate = CoRe96AspirateParameterSet(volume=10.0, liquid_offset=5.0, end_z_offset=0)\ndispense = CoRe96DispenseParameterSet(volume=10.0, end_z_offset=0)\nsteps = [aspirate, dispense] * 3\ncomplex_mix = CoRe96ComplexMixParameterSet(steps=steps)\n\n# Construct context for validation\ncontext = CoRe96Context(module=lhs.core96, target=some_labware)\n\n# Validate the complex mix\ncomplex_mix.validate(context)\n","python","",[919,1111,1112,1131,1137,1143,1149,1155,1161,1168,1175,1219,1246,1263,1281,1286,1292,1319,1324,1330],{"__ignoreMap":1109},[1113,1114,1117,1121,1125,1128],"span",{"class":1115,"line":1116},"line",1,[1113,1118,1120],{"class":1119},"sxkbv","from",[1113,1122,1124],{"class":1123},"sc-9e"," unitelabs.liquid_handling.hamilton ",[1113,1126,1127],{"class":1119},"import",[1113,1129,1130],{"class":1123}," (\n",[1113,1132,1134],{"class":1115,"line":1133},2,[1113,1135,1136],{"class":1123},"    CoRe96ComplexMixParameterSet,\n",[1113,1138,1140],{"class":1115,"line":1139},3,[1113,1141,1142],{"class":1123},"    CoRe96AspirateParameterSet,\n",[1113,1144,1146],{"class":1115,"line":1145},4,[1113,1147,1148],{"class":1123},"    CoRe96DispenseParameterSet,\n",[1113,1150,1152],{"class":1115,"line":1151},5,[1113,1153,1154],{"class":1123},"    CoRe96Context,\n",[1113,1156,1158],{"class":1115,"line":1157},6,[1113,1159,1160],{"class":1123},")\n",[1113,1162,1164],{"class":1115,"line":1163},7,[1113,1165,1167],{"emptyLinePlaceholder":1166},true,"\n",[1113,1169,1171],{"class":1115,"line":1170},8,[1113,1172,1174],{"class":1173},"sIsDC","# Construct a complex mixing parameter set with 3 cycles of 10uL aspiration and dispensing\n",[1113,1176,1178,1181,1184,1187,1190,1192,1196,1199,1202,1204,1207,1209,1212,1214,1217],{"class":1115,"line":1177},9,[1113,1179,1180],{"class":1123},"aspirate ",[1113,1182,1183],{"class":1119},"=",[1113,1185,1186],{"class":1123}," CoRe96AspirateParameterSet(",[1113,1188,1079],{"class":1189},"sNqAu",[1113,1191,1183],{"class":1119},[1113,1193,1195],{"class":1194},"sOiAX","10.0",[1113,1197,1198],{"class":1123},", ",[1113,1200,1201],{"class":1189},"liquid_offset",[1113,1203,1183],{"class":1119},[1113,1205,1206],{"class":1194},"5.0",[1113,1208,1198],{"class":1123},[1113,1210,1211],{"class":1189},"end_z_offset",[1113,1213,1183],{"class":1119},[1113,1215,1216],{"class":1194},"0",[1113,1218,1160],{"class":1123},[1113,1220,1222,1225,1227,1230,1232,1234,1236,1238,1240,1242,1244],{"class":1115,"line":1221},10,[1113,1223,1224],{"class":1123},"dispense ",[1113,1226,1183],{"class":1119},[1113,1228,1229],{"class":1123}," CoRe96DispenseParameterSet(",[1113,1231,1079],{"class":1189},[1113,1233,1183],{"class":1119},[1113,1235,1195],{"class":1194},[1113,1237,1198],{"class":1123},[1113,1239,1211],{"class":1189},[1113,1241,1183],{"class":1119},[1113,1243,1216],{"class":1194},[1113,1245,1160],{"class":1123},[1113,1247,1249,1252,1254,1257,1260],{"class":1115,"line":1248},11,[1113,1250,1251],{"class":1123},"steps ",[1113,1253,1183],{"class":1119},[1113,1255,1256],{"class":1123}," [aspirate, dispense] ",[1113,1258,1259],{"class":1119},"*",[1113,1261,1262],{"class":1194}," 3\n",[1113,1264,1266,1269,1271,1274,1276,1278],{"class":1115,"line":1265},12,[1113,1267,1268],{"class":1123},"complex_mix ",[1113,1270,1183],{"class":1119},[1113,1272,1273],{"class":1123}," CoRe96ComplexMixParameterSet(",[1113,1275,972],{"class":1189},[1113,1277,1183],{"class":1119},[1113,1279,1280],{"class":1123},"steps)\n",[1113,1282,1284],{"class":1115,"line":1283},13,[1113,1285,1167],{"emptyLinePlaceholder":1166},[1113,1287,1289],{"class":1115,"line":1288},14,[1113,1290,1291],{"class":1173},"# Construct context for validation\n",[1113,1293,1295,1298,1300,1303,1306,1308,1311,1314,1316],{"class":1115,"line":1294},15,[1113,1296,1297],{"class":1123},"context ",[1113,1299,1183],{"class":1119},[1113,1301,1302],{"class":1123}," CoRe96Context(",[1113,1304,1305],{"class":1189},"module",[1113,1307,1183],{"class":1119},[1113,1309,1310],{"class":1123},"lhs.core96, ",[1113,1312,1313],{"class":1189},"target",[1113,1315,1183],{"class":1119},[1113,1317,1318],{"class":1123},"some_labware)\n",[1113,1320,1322],{"class":1115,"line":1321},16,[1113,1323,1167],{"emptyLinePlaceholder":1166},[1113,1325,1327],{"class":1115,"line":1326},17,[1113,1328,1329],{"class":1173},"# Validate the complex mix\n",[1113,1331,1333],{"class":1115,"line":1332},18,[1113,1334,1335],{"class":1123},"complex_mix.validate(context)\n",[915,1337,1338,1339,1342],{},"The validation will either succeed (return ",[919,1340,1341],{},"True",") or raise an exception with a descriptive error message, including which steps failed validation and why, for example:",[1104,1344,1349],{"className":1345,"code":1347,"language":1348},[1346],"language-text","ValueError: Parameter set CoRe96ComplexMixParameterSet failed validation due to the following warnings:\n[STEP 2 (DISPENSE)]: Parameter set CoRe96DispenseParameterSet failed validation due to the following warnings:\n - Liquid offset must be a positive number for LLD mode OFF, received -8.\n[STEP 4 (DISPENSE)]: Parameter set CoRe96DispenseParameterSet failed validation due to the following warnings:\n - Liquid offset must be a positive number for LLD mode OFF, received -8.\n","text",[919,1350,1347],{"__ignoreMap":1109},[1096,1352,1354],{"id":1353},"factory-methods","Factory Methods",[915,1356,1357,1358,1360],{},"Complex mix parameter sets each provide factory methods to help users create common complex mixing parameter sets more easily. Each of them creates a single aspirate, dispense pair of the corresponding type with the specified parameters. Those pairs can then be combined into the ",[919,1359,972],{}," list of a complex mix parameter set.",[1104,1362,1364],{"className":1106,"code":1363,"language":1108,"meta":1109,"style":1109},"from unitelabs.liquid_handling.hamilton import ChannelComplexMixParameterSet\n\n# Create `ChannelAspirateParameterSet` and `ChannelDispenseParameterSet` objects\naspirate_1, dispense_1 = ChannelComplexMixParameterSet.surface_to_bottom(\n  volume=100,\n  aspirate_surface_offset=5,\n  dispense_bottom_offset=9,\n)\naspirate_2, dispense_2 = ChannelComplexMixParameterSet.bottom_to_surface(\n  volume=100,\n  aspirate_bottom_offset=9,\n  dispense_surface_offset=5,\n)\n\n# Combine the steps into a `ChannelComplexMixParameterSet`\nsteps = [aspirate_1, dispense_1, aspirate_2, dispense_2]\ncomplex_mix = ChannelComplexMixParameterSet(steps=steps)\n",[919,1365,1366,1377,1381,1386,1396,1409,1421,1433,1437,1447,1457,1468,1479,1483,1487,1492,1501],{"__ignoreMap":1109},[1113,1367,1368,1370,1372,1374],{"class":1115,"line":1116},[1113,1369,1120],{"class":1119},[1113,1371,1124],{"class":1123},[1113,1373,1127],{"class":1119},[1113,1375,1376],{"class":1123}," ChannelComplexMixParameterSet\n",[1113,1378,1379],{"class":1115,"line":1133},[1113,1380,1167],{"emptyLinePlaceholder":1166},[1113,1382,1383],{"class":1115,"line":1139},[1113,1384,1385],{"class":1173},"# Create `ChannelAspirateParameterSet` and `ChannelDispenseParameterSet` objects\n",[1113,1387,1388,1391,1393],{"class":1115,"line":1145},[1113,1389,1390],{"class":1123},"aspirate_1, dispense_1 ",[1113,1392,1183],{"class":1119},[1113,1394,1395],{"class":1123}," ChannelComplexMixParameterSet.surface_to_bottom(\n",[1113,1397,1398,1401,1403,1406],{"class":1115,"line":1151},[1113,1399,1400],{"class":1189},"  volume",[1113,1402,1183],{"class":1119},[1113,1404,1405],{"class":1194},"100",[1113,1407,1408],{"class":1123},",\n",[1113,1410,1411,1414,1416,1419],{"class":1115,"line":1157},[1113,1412,1413],{"class":1189},"  aspirate_surface_offset",[1113,1415,1183],{"class":1119},[1113,1417,1418],{"class":1194},"5",[1113,1420,1408],{"class":1123},[1113,1422,1423,1426,1428,1431],{"class":1115,"line":1163},[1113,1424,1425],{"class":1189},"  dispense_bottom_offset",[1113,1427,1183],{"class":1119},[1113,1429,1430],{"class":1194},"9",[1113,1432,1408],{"class":1123},[1113,1434,1435],{"class":1115,"line":1170},[1113,1436,1160],{"class":1123},[1113,1438,1439,1442,1444],{"class":1115,"line":1177},[1113,1440,1441],{"class":1123},"aspirate_2, dispense_2 ",[1113,1443,1183],{"class":1119},[1113,1445,1446],{"class":1123}," ChannelComplexMixParameterSet.bottom_to_surface(\n",[1113,1448,1449,1451,1453,1455],{"class":1115,"line":1221},[1113,1450,1400],{"class":1189},[1113,1452,1183],{"class":1119},[1113,1454,1405],{"class":1194},[1113,1456,1408],{"class":1123},[1113,1458,1459,1462,1464,1466],{"class":1115,"line":1248},[1113,1460,1461],{"class":1189},"  aspirate_bottom_offset",[1113,1463,1183],{"class":1119},[1113,1465,1430],{"class":1194},[1113,1467,1408],{"class":1123},[1113,1469,1470,1473,1475,1477],{"class":1115,"line":1265},[1113,1471,1472],{"class":1189},"  dispense_surface_offset",[1113,1474,1183],{"class":1119},[1113,1476,1418],{"class":1194},[1113,1478,1408],{"class":1123},[1113,1480,1481],{"class":1115,"line":1283},[1113,1482,1160],{"class":1123},[1113,1484,1485],{"class":1115,"line":1288},[1113,1486,1167],{"emptyLinePlaceholder":1166},[1113,1488,1489],{"class":1115,"line":1294},[1113,1490,1491],{"class":1173},"# Combine the steps into a `ChannelComplexMixParameterSet`\n",[1113,1493,1494,1496,1498],{"class":1115,"line":1321},[1113,1495,1251],{"class":1123},[1113,1497,1183],{"class":1119},[1113,1499,1500],{"class":1123}," [aspirate_1, dispense_1, aspirate_2, dispense_2]\n",[1113,1502,1503,1505,1507,1510,1512,1514],{"class":1115,"line":1326},[1113,1504,1268],{"class":1123},[1113,1506,1183],{"class":1119},[1113,1508,1509],{"class":1123}," ChannelComplexMixParameterSet(",[1113,1511,972],{"class":1189},[1113,1513,1183],{"class":1119},[1113,1515,1280],{"class":1123},[915,1517,1518],{},"Available factory methods are:",[965,1520,1521,1527,1533,1539],{},[959,1522,1523,1526],{},[919,1524,1525],{},"surface_to_bottom",": Creates a surface mode aspiration and bottom mode dispense.",[959,1528,1529,1532],{},[919,1530,1531],{},"bottom_to_surface",": Creates a bottom mode aspiration and surface mode dispense.",[959,1534,1535,1538],{},[919,1536,1537],{},"surface_to_surface",": Creates a surface mode aspiration and surface mode dispense.",[959,1540,1541,1544],{},[919,1542,1543],{},"bottom_to_bottom",": Creates a bottom mode aspiration and bottom mode dispense.",[949,1546,1548],{"id":1547},"with-the-co-re-96","With the CO-RE 96",[915,1550,1551],{},"Here is a simple example of how to use the complex mixing method with the CO-RE 96:",[1104,1553,1555],{"className":1106,"code":1554,"language":1108,"meta":1109,"style":1109},"from unitelabs.liquid_handling.hamilton import (\n    CoRe96ComplexMixParameterSet,\n    CoRe96AspirateParameterSet,\n    CoRe96DispenseParameterSet,\n    CoRe96Context,\n)\nfrom unitelabs.labware import Vector\n\n# Construct a complex mixing parameter set with 3 cycles of 10uL aspiration and dispensing\naspirate = CoRe96AspirateParameterSet(volume=10.0, liquid_offset=5.0, end_z_offset=0)\ndispense = CoRe96DispenseParameterSet(volume=10.0, offset=Vector(1, 1, 3))\nsteps = [aspirate, dispense] * 3\ncomplex_mix = CoRe96ComplexMixParameterSet(steps=steps)\n\n# Perform the complex mix\nawait lhs.core96.complex_mix(parameters=complex_mix, target=some_labware)\n",[919,1556,1557,1567,1571,1575,1579,1583,1587,1599,1603,1607,1639,1678,1690,1704,1708,1713],{"__ignoreMap":1109},[1113,1558,1559,1561,1563,1565],{"class":1115,"line":1116},[1113,1560,1120],{"class":1119},[1113,1562,1124],{"class":1123},[1113,1564,1127],{"class":1119},[1113,1566,1130],{"class":1123},[1113,1568,1569],{"class":1115,"line":1133},[1113,1570,1136],{"class":1123},[1113,1572,1573],{"class":1115,"line":1139},[1113,1574,1142],{"class":1123},[1113,1576,1577],{"class":1115,"line":1145},[1113,1578,1148],{"class":1123},[1113,1580,1581],{"class":1115,"line":1151},[1113,1582,1154],{"class":1123},[1113,1584,1585],{"class":1115,"line":1157},[1113,1586,1160],{"class":1123},[1113,1588,1589,1591,1594,1596],{"class":1115,"line":1163},[1113,1590,1120],{"class":1119},[1113,1592,1593],{"class":1123}," unitelabs.labware ",[1113,1595,1127],{"class":1119},[1113,1597,1598],{"class":1123}," Vector\n",[1113,1600,1601],{"class":1115,"line":1170},[1113,1602,1167],{"emptyLinePlaceholder":1166},[1113,1604,1605],{"class":1115,"line":1177},[1113,1606,1174],{"class":1173},[1113,1608,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637],{"class":1115,"line":1221},[1113,1610,1180],{"class":1123},[1113,1612,1183],{"class":1119},[1113,1614,1186],{"class":1123},[1113,1616,1079],{"class":1189},[1113,1618,1183],{"class":1119},[1113,1620,1195],{"class":1194},[1113,1622,1198],{"class":1123},[1113,1624,1201],{"class":1189},[1113,1626,1183],{"class":1119},[1113,1628,1206],{"class":1194},[1113,1630,1198],{"class":1123},[1113,1632,1211],{"class":1189},[1113,1634,1183],{"class":1119},[1113,1636,1216],{"class":1194},[1113,1638,1160],{"class":1123},[1113,1640,1641,1643,1645,1647,1649,1651,1653,1655,1658,1660,1663,1666,1668,1670,1672,1675],{"class":1115,"line":1248},[1113,1642,1224],{"class":1123},[1113,1644,1183],{"class":1119},[1113,1646,1229],{"class":1123},[1113,1648,1079],{"class":1189},[1113,1650,1183],{"class":1119},[1113,1652,1195],{"class":1194},[1113,1654,1198],{"class":1123},[1113,1656,1657],{"class":1189},"offset",[1113,1659,1183],{"class":1119},[1113,1661,1662],{"class":1123},"Vector(",[1113,1664,1665],{"class":1194},"1",[1113,1667,1198],{"class":1123},[1113,1669,1665],{"class":1194},[1113,1671,1198],{"class":1123},[1113,1673,1674],{"class":1194},"3",[1113,1676,1677],{"class":1123},"))\n",[1113,1679,1680,1682,1684,1686,1688],{"class":1115,"line":1265},[1113,1681,1251],{"class":1123},[1113,1683,1183],{"class":1119},[1113,1685,1256],{"class":1123},[1113,1687,1259],{"class":1119},[1113,1689,1262],{"class":1194},[1113,1691,1692,1694,1696,1698,1700,1702],{"class":1115,"line":1283},[1113,1693,1268],{"class":1123},[1113,1695,1183],{"class":1119},[1113,1697,1273],{"class":1123},[1113,1699,972],{"class":1189},[1113,1701,1183],{"class":1119},[1113,1703,1280],{"class":1123},[1113,1705,1706],{"class":1115,"line":1288},[1113,1707,1167],{"emptyLinePlaceholder":1166},[1113,1709,1710],{"class":1115,"line":1294},[1113,1711,1712],{"class":1173},"# Perform the complex mix\n",[1113,1714,1715,1718,1721,1723,1725,1728,1730,1732],{"class":1115,"line":1321},[1113,1716,1717],{"class":1119},"await",[1113,1719,1720],{"class":1123}," lhs.core96.complex_mix(",[1113,1722,1020],{"class":1189},[1113,1724,1183],{"class":1119},[1113,1726,1727],{"class":1123},"complex_mix, ",[1113,1729,1313],{"class":1189},[1113,1731,1183],{"class":1119},[1113,1733,1318],{"class":1123},[949,1735,1737],{"id":1736},"with-the-channels","With the Channels",[915,1739,1740,1741,1743],{},"Users have two options when using the ",[919,1742,921],{}," method with the Channels module:",[965,1745,1746,1772],{},[959,1747,1748,1749,1751,1752,1754,1755,1757,1758],{},"Pass a single or list of ",[919,1750,985],{}," objects to ",[919,1753,1020],{},", and corresponding channel indices to the ",[919,1756,1029],{}," parameter.\n",[965,1759,1760],{},[959,1761,1762,1763,1765,1766,1768,1769,1771],{},"If a single value is received in ",[919,1764,1020],{},", it will be broadcast to each channel in ",[919,1767,1029],{},". If a list is passed, it must match the length of ",[919,1770,1029],{}," exactly, and each parameter set will be applied to the corresponding channel.",[959,1773,1774,1775,1777,1778,1780,1781,1783,1784,1786],{},"Pass a complete ",[919,1776,1003],{}," to ",[919,1779,1020],{},". This object contains the ",[919,1782,1029],{}," information, so it is not necessary to pass the ",[919,1785,1029],{}," parameter separately and will be ignored if this is done.",[915,1788,1789],{},"Here is an example of how to use the complex mixing method with the Channels:",[1104,1791,1792],{"className":1106,"code":1363,"language":1108,"meta":1109,"style":1109},[919,1793,1794,1804,1808,1812,1820,1830,1840,1850,1854,1862,1872,1882,1892,1896,1900,1904,1912],{"__ignoreMap":1109},[1113,1795,1796,1798,1800,1802],{"class":1115,"line":1116},[1113,1797,1120],{"class":1119},[1113,1799,1124],{"class":1123},[1113,1801,1127],{"class":1119},[1113,1803,1376],{"class":1123},[1113,1805,1806],{"class":1115,"line":1133},[1113,1807,1167],{"emptyLinePlaceholder":1166},[1113,1809,1810],{"class":1115,"line":1139},[1113,1811,1385],{"class":1173},[1113,1813,1814,1816,1818],{"class":1115,"line":1145},[1113,1815,1390],{"class":1123},[1113,1817,1183],{"class":1119},[1113,1819,1395],{"class":1123},[1113,1821,1822,1824,1826,1828],{"class":1115,"line":1151},[1113,1823,1400],{"class":1189},[1113,1825,1183],{"class":1119},[1113,1827,1405],{"class":1194},[1113,1829,1408],{"class":1123},[1113,1831,1832,1834,1836,1838],{"class":1115,"line":1157},[1113,1833,1413],{"class":1189},[1113,1835,1183],{"class":1119},[1113,1837,1418],{"class":1194},[1113,1839,1408],{"class":1123},[1113,1841,1842,1844,1846,1848],{"class":1115,"line":1163},[1113,1843,1425],{"class":1189},[1113,1845,1183],{"class":1119},[1113,1847,1430],{"class":1194},[1113,1849,1408],{"class":1123},[1113,1851,1852],{"class":1115,"line":1170},[1113,1853,1160],{"class":1123},[1113,1855,1856,1858,1860],{"class":1115,"line":1177},[1113,1857,1441],{"class":1123},[1113,1859,1183],{"class":1119},[1113,1861,1446],{"class":1123},[1113,1863,1864,1866,1868,1870],{"class":1115,"line":1221},[1113,1865,1400],{"class":1189},[1113,1867,1183],{"class":1119},[1113,1869,1405],{"class":1194},[1113,1871,1408],{"class":1123},[1113,1873,1874,1876,1878,1880],{"class":1115,"line":1248},[1113,1875,1461],{"class":1189},[1113,1877,1183],{"class":1119},[1113,1879,1430],{"class":1194},[1113,1881,1408],{"class":1123},[1113,1883,1884,1886,1888,1890],{"class":1115,"line":1265},[1113,1885,1472],{"class":1189},[1113,1887,1183],{"class":1119},[1113,1889,1418],{"class":1194},[1113,1891,1408],{"class":1123},[1113,1893,1894],{"class":1115,"line":1283},[1113,1895,1160],{"class":1123},[1113,1897,1898],{"class":1115,"line":1288},[1113,1899,1167],{"emptyLinePlaceholder":1166},[1113,1901,1902],{"class":1115,"line":1294},[1113,1903,1491],{"class":1173},[1113,1905,1906,1908,1910],{"class":1115,"line":1321},[1113,1907,1251],{"class":1123},[1113,1909,1183],{"class":1119},[1113,1911,1500],{"class":1123},[1113,1913,1914,1916,1918,1920,1922,1924],{"class":1115,"line":1326},[1113,1915,1268],{"class":1123},[1113,1917,1183],{"class":1119},[1113,1919,1509],{"class":1123},[1113,1921,972],{"class":1189},[1113,1923,1183],{"class":1119},[1113,1925,1280],{"class":1123},[915,1927,1928],{},"At this point, one could simply use this parameter set to perform the same complex mix on each channel:",[1104,1930,1932],{"className":1106,"code":1931,"language":1108,"meta":1109,"style":1109},"await lhs.pipettes.complex_mix(target=some_labware, parameters=complex_mix, channels=[0, 1, 2, 3])\n",[919,1933,1934],{"__ignoreMap":1109},[1113,1935,1936,1938,1941,1943,1945,1948,1950,1952,1954,1956,1958,1961,1963,1965,1967,1969,1972,1974,1976],{"class":1115,"line":1116},[1113,1937,1717],{"class":1119},[1113,1939,1940],{"class":1123}," lhs.pipettes.complex_mix(",[1113,1942,1313],{"class":1189},[1113,1944,1183],{"class":1119},[1113,1946,1947],{"class":1123},"some_labware, ",[1113,1949,1020],{"class":1189},[1113,1951,1183],{"class":1119},[1113,1953,1727],{"class":1123},[1113,1955,1029],{"class":1189},[1113,1957,1183],{"class":1119},[1113,1959,1960],{"class":1123},"[",[1113,1962,1216],{"class":1194},[1113,1964,1198],{"class":1123},[1113,1966,1665],{"class":1194},[1113,1968,1198],{"class":1123},[1113,1970,1971],{"class":1194},"2",[1113,1973,1198],{"class":1123},[1113,1975,1674],{"class":1194},[1113,1977,1978],{"class":1123},"])\n",[915,1980,1981],{},"Alternatively, one could use it as a starting point for creating different complex mixes for different channels:",[1104,1983,1985],{"className":1106,"code":1984,"language":1108,"meta":1109,"style":1109},"per_channel_complex_mix = [complex_mix for _ in range(4)]\nfor i, complex_mix in enumerate(per_channel_complex_mix):\n  if i % 2 == 0:\n    # Set volume on all steps to 50 for even indices in per-channel list\n    for step in complex_mix.steps:\n      step.volume = 50\n  else:\n    # Set volume on all steps to 150 for odd indices in per-channel list\n    for step in complex_mix.steps:\n      step.volume = 150\nawait lhs.pipettes.complex_mix(target=some_labware, parameters=per_channel_complex_mix, channels=[4, 5, 6, 7])\n",[919,1986,1987,2018,2033,2056,2061,2074,2084,2091,2096,2106,2115],{"__ignoreMap":1109},[1113,1988,1989,1992,1994,1997,2000,2003,2006,2009,2012,2015],{"class":1115,"line":1116},[1113,1990,1991],{"class":1123},"per_channel_complex_mix ",[1113,1993,1183],{"class":1119},[1113,1995,1996],{"class":1123}," [complex_mix ",[1113,1998,1999],{"class":1119},"for",[1113,2001,2002],{"class":1123}," _ ",[1113,2004,2005],{"class":1119},"in",[1113,2007,2008],{"class":1194}," range",[1113,2010,2011],{"class":1123},"(",[1113,2013,2014],{"class":1194},"4",[1113,2016,2017],{"class":1123},")]\n",[1113,2019,2020,2022,2025,2027,2030],{"class":1115,"line":1133},[1113,2021,1999],{"class":1119},[1113,2023,2024],{"class":1123}," i, complex_mix ",[1113,2026,2005],{"class":1119},[1113,2028,2029],{"class":1194}," enumerate",[1113,2031,2032],{"class":1123},"(per_channel_complex_mix):\n",[1113,2034,2035,2038,2041,2044,2047,2050,2053],{"class":1115,"line":1139},[1113,2036,2037],{"class":1119},"  if",[1113,2039,2040],{"class":1123}," i ",[1113,2042,2043],{"class":1119},"%",[1113,2045,2046],{"class":1194}," 2",[1113,2048,2049],{"class":1119}," ==",[1113,2051,2052],{"class":1194}," 0",[1113,2054,2055],{"class":1123},":\n",[1113,2057,2058],{"class":1115,"line":1145},[1113,2059,2060],{"class":1173},"    # Set volume on all steps to 50 for even indices in per-channel list\n",[1113,2062,2063,2066,2069,2071],{"class":1115,"line":1151},[1113,2064,2065],{"class":1119},"    for",[1113,2067,2068],{"class":1123}," step ",[1113,2070,2005],{"class":1119},[1113,2072,2073],{"class":1123}," complex_mix.steps:\n",[1113,2075,2076,2079,2081],{"class":1115,"line":1157},[1113,2077,2078],{"class":1123},"      step.volume ",[1113,2080,1183],{"class":1119},[1113,2082,2083],{"class":1194}," 50\n",[1113,2085,2086,2089],{"class":1115,"line":1163},[1113,2087,2088],{"class":1119},"  else",[1113,2090,2055],{"class":1123},[1113,2092,2093],{"class":1115,"line":1170},[1113,2094,2095],{"class":1173},"    # Set volume on all steps to 150 for odd indices in per-channel list\n",[1113,2097,2098,2100,2102,2104],{"class":1115,"line":1177},[1113,2099,2065],{"class":1119},[1113,2101,2068],{"class":1123},[1113,2103,2005],{"class":1119},[1113,2105,2073],{"class":1123},[1113,2107,2108,2110,2112],{"class":1115,"line":1221},[1113,2109,2078],{"class":1123},[1113,2111,1183],{"class":1119},[1113,2113,2114],{"class":1194}," 150\n",[1113,2116,2117,2119,2121,2123,2125,2127,2129,2131,2134,2136,2138,2140,2142,2144,2146,2148,2151,2153,2156],{"class":1115,"line":1248},[1113,2118,1717],{"class":1119},[1113,2120,1940],{"class":1123},[1113,2122,1313],{"class":1189},[1113,2124,1183],{"class":1119},[1113,2126,1947],{"class":1123},[1113,2128,1020],{"class":1189},[1113,2130,1183],{"class":1119},[1113,2132,2133],{"class":1123},"per_channel_complex_mix, ",[1113,2135,1029],{"class":1189},[1113,2137,1183],{"class":1119},[1113,2139,1960],{"class":1123},[1113,2141,2014],{"class":1194},[1113,2143,1198],{"class":1123},[1113,2145,1418],{"class":1194},[1113,2147,1198],{"class":1123},[1113,2149,2150],{"class":1194},"6",[1113,2152,1198],{"class":1123},[1113,2154,2155],{"class":1194},"7",[1113,2157,1978],{"class":1123},[915,2159,2160,2161,2163],{},"Furthermore, one could use it as a basis for creating a ",[919,2162,1003],{},", and use that in the method:",[1104,2165,2167],{"className":1106,"code":2166,"language":1108,"meta":1109,"style":1109},"from unitelabs.liquid_handling.hamilton import ChannelsComplexMixParameterSet\n\nchannels_complex_mix = ChannelsComplexMixParameterSet(\n    channels=[0, 1, 2, 3],\n    parameters=per_channel_complex_mix,\n)\nawait lhs.pipettes.complex_mix(target=some_labware, parameters=channels_complex_mix)\n",[919,2168,2169,2180,2184,2194,2220,2230,2234],{"__ignoreMap":1109},[1113,2170,2171,2173,2175,2177],{"class":1115,"line":1116},[1113,2172,1120],{"class":1119},[1113,2174,1124],{"class":1123},[1113,2176,1127],{"class":1119},[1113,2178,2179],{"class":1123}," ChannelsComplexMixParameterSet\n",[1113,2181,2182],{"class":1115,"line":1133},[1113,2183,1167],{"emptyLinePlaceholder":1166},[1113,2185,2186,2189,2191],{"class":1115,"line":1139},[1113,2187,2188],{"class":1123},"channels_complex_mix ",[1113,2190,1183],{"class":1119},[1113,2192,2193],{"class":1123}," ChannelsComplexMixParameterSet(\n",[1113,2195,2196,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217],{"class":1115,"line":1145},[1113,2197,2198],{"class":1189},"    channels",[1113,2200,1183],{"class":1119},[1113,2202,1960],{"class":1123},[1113,2204,1216],{"class":1194},[1113,2206,1198],{"class":1123},[1113,2208,1665],{"class":1194},[1113,2210,1198],{"class":1123},[1113,2212,1971],{"class":1194},[1113,2214,1198],{"class":1123},[1113,2216,1674],{"class":1194},[1113,2218,2219],{"class":1123},"],\n",[1113,2221,2222,2225,2227],{"class":1115,"line":1151},[1113,2223,2224],{"class":1189},"    parameters",[1113,2226,1183],{"class":1119},[1113,2228,2229],{"class":1123},"per_channel_complex_mix,\n",[1113,2231,2232],{"class":1115,"line":1157},[1113,2233,1160],{"class":1123},[1113,2235,2236,2238,2240,2242,2244,2246,2248,2250],{"class":1115,"line":1163},[1113,2237,1717],{"class":1119},[1113,2239,1940],{"class":1123},[1113,2241,1313],{"class":1189},[1113,2243,1183],{"class":1119},[1113,2245,1947],{"class":1123},[1113,2247,1020],{"class":1189},[1113,2249,1183],{"class":1119},[1113,2251,2252],{"class":1123},"channels_complex_mix)\n",[949,2254,2256],{"id":2255},"tips-tricks","Tips & Tricks",[915,2258,2259,2260,2262],{},"Since the ",[919,2261,921],{}," methods offer complete control over each individual step, virtually any behavior that would be possible from individual aspirate and dispense steps is possible to execute with a complex mix. However, there are a few common patterns to be aware of.",[1053,2264,2266],{"id":2265},"maintaining-fixed-height","Maintaining Fixed Height",[915,2268,2269],{},"Over an increasing number of mixing steps, the z movement of the pipettor to and from the instrument's configured minimum traverse height takes an increasing amount of time. Therefore the most common use case is to maintain a constant z-height of the pipettor between consecutive steps. This is possible through the use of two parameters that are present on all Hamilton parameter sets:",[965,2271,2272,2278],{},[959,2273,2274,2277],{},[919,2275,2276],{},"min_traverse_height",": the minimum z-height at which the pipettor travels to the operation's target location before performing liquid handling. This defaults to the configured minimum traverse height of the module, however it can be overridden on individual commands with the use of this parameter.",[959,2279,2280,2282],{},[919,2281,1211],{},": the z-height that the pipettor moves to when the operation is complete. As an offset, this is relative to the top of the target labware.",[915,2284,2285],{},"The common pattern to use these parameters to maintain a fixed height would look like this:",[1104,2287,2289],{"className":1106,"code":2288,"language":1108,"meta":1109,"style":1109},"import decimal\n\nplate_z_top = my_plate.absolute_location.z + my_plate.dimensions.z  # Top of my_plate\nplate_z_offset = decimal.Decimal(\"-5\")\n\n# Do not override min_traverse_height on first step to allow free z movement to target\naspirate_1 = CoRe96AspirateParameterSet(\n  end_z_offset = plate_z_offset  # End operation 5mm below plate top\n)\ndispense_1 = CoRe96DispenseParameterSet(\n  min_traverse_height = plate_z_top + plate_z_offset,  # Move to operation 5mm below plate top\n  end_z_offset = plate_z_offset\n)\naspirate_2 = CoRe96AspirateParameterSet(\n  min_traverse_height = plate_z_top + plate_z_offset,\n  end_z_offset = plate_z_offset\n)\ndispense_2 = CoRe96DispenseParameterSet(\n  min_traverse_height = plate_z_top + plate_z_offset,\n  end_z_offset = 10  # End mix cycle above plate\n)\n\nmix = CoRe96ComplexMixParameterSet(steps=[aspirate_1, dispense_1, aspirate_2, dispense_2])\n",[919,2290,2291,2298,2302,2321,2337,2341,2346,2356,2370,2374,2384,2402,2411,2415,2424,2437,2445,2449,2458,2471,2484,2489,2494],{"__ignoreMap":1109},[1113,2292,2293,2295],{"class":1115,"line":1116},[1113,2294,1127],{"class":1119},[1113,2296,2297],{"class":1123}," decimal\n",[1113,2299,2300],{"class":1115,"line":1133},[1113,2301,1167],{"emptyLinePlaceholder":1166},[1113,2303,2304,2307,2309,2312,2315,2318],{"class":1115,"line":1139},[1113,2305,2306],{"class":1123},"plate_z_top ",[1113,2308,1183],{"class":1119},[1113,2310,2311],{"class":1123}," my_plate.absolute_location.z ",[1113,2313,2314],{"class":1119},"+",[1113,2316,2317],{"class":1123}," my_plate.dimensions.z  ",[1113,2319,2320],{"class":1173},"# Top of my_plate\n",[1113,2322,2323,2326,2328,2331,2335],{"class":1115,"line":1145},[1113,2324,2325],{"class":1123},"plate_z_offset ",[1113,2327,1183],{"class":1119},[1113,2329,2330],{"class":1123}," decimal.Decimal(",[1113,2332,2334],{"class":2333},"sCx38","\"-5\"",[1113,2336,1160],{"class":1123},[1113,2338,2339],{"class":1115,"line":1151},[1113,2340,1167],{"emptyLinePlaceholder":1166},[1113,2342,2343],{"class":1115,"line":1157},[1113,2344,2345],{"class":1173},"# Do not override min_traverse_height on first step to allow free z movement to target\n",[1113,2347,2348,2351,2353],{"class":1115,"line":1163},[1113,2349,2350],{"class":1123},"aspirate_1 ",[1113,2352,1183],{"class":1119},[1113,2354,2355],{"class":1123}," CoRe96AspirateParameterSet(\n",[1113,2357,2358,2361,2364,2367],{"class":1115,"line":1170},[1113,2359,2360],{"class":1189},"  end_z_offset",[1113,2362,2363],{"class":1119}," =",[1113,2365,2366],{"class":1123}," plate_z_offset  ",[1113,2368,2369],{"class":1173},"# End operation 5mm below plate top\n",[1113,2371,2372],{"class":1115,"line":1177},[1113,2373,1160],{"class":1123},[1113,2375,2376,2379,2381],{"class":1115,"line":1221},[1113,2377,2378],{"class":1123},"dispense_1 ",[1113,2380,1183],{"class":1119},[1113,2382,2383],{"class":1123}," CoRe96DispenseParameterSet(\n",[1113,2385,2386,2389,2391,2394,2396,2399],{"class":1115,"line":1248},[1113,2387,2388],{"class":1189},"  min_traverse_height",[1113,2390,2363],{"class":1119},[1113,2392,2393],{"class":1123}," plate_z_top ",[1113,2395,2314],{"class":1119},[1113,2397,2398],{"class":1123}," plate_z_offset,  ",[1113,2400,2401],{"class":1173},"# Move to operation 5mm below plate top\n",[1113,2403,2404,2406,2408],{"class":1115,"line":1265},[1113,2405,2360],{"class":1189},[1113,2407,2363],{"class":1119},[1113,2409,2410],{"class":1123}," plate_z_offset\n",[1113,2412,2413],{"class":1115,"line":1283},[1113,2414,1160],{"class":1123},[1113,2416,2417,2420,2422],{"class":1115,"line":1288},[1113,2418,2419],{"class":1123},"aspirate_2 ",[1113,2421,1183],{"class":1119},[1113,2423,2355],{"class":1123},[1113,2425,2426,2428,2430,2432,2434],{"class":1115,"line":1294},[1113,2427,2388],{"class":1189},[1113,2429,2363],{"class":1119},[1113,2431,2393],{"class":1123},[1113,2433,2314],{"class":1119},[1113,2435,2436],{"class":1123}," plate_z_offset,\n",[1113,2438,2439,2441,2443],{"class":1115,"line":1321},[1113,2440,2360],{"class":1189},[1113,2442,2363],{"class":1119},[1113,2444,2410],{"class":1123},[1113,2446,2447],{"class":1115,"line":1326},[1113,2448,1160],{"class":1123},[1113,2450,2451,2454,2456],{"class":1115,"line":1332},[1113,2452,2453],{"class":1123},"dispense_2 ",[1113,2455,1183],{"class":1119},[1113,2457,2383],{"class":1123},[1113,2459,2461,2463,2465,2467,2469],{"class":1115,"line":2460},19,[1113,2462,2388],{"class":1189},[1113,2464,2363],{"class":1119},[1113,2466,2393],{"class":1123},[1113,2468,2314],{"class":1119},[1113,2470,2436],{"class":1123},[1113,2472,2474,2476,2478,2481],{"class":1115,"line":2473},20,[1113,2475,2360],{"class":1189},[1113,2477,2363],{"class":1119},[1113,2479,2480],{"class":1194}," 10",[1113,2482,2483],{"class":1173},"  # End mix cycle above plate\n",[1113,2485,2487],{"class":1115,"line":2486},21,[1113,2488,1160],{"class":1123},[1113,2490,2492],{"class":1115,"line":2491},22,[1113,2493,1167],{"emptyLinePlaceholder":1166},[1113,2495,2497,2500,2502,2504,2506,2508],{"class":1115,"line":2496},23,[1113,2498,2499],{"class":1123},"mix ",[1113,2501,1183],{"class":1119},[1113,2503,1273],{"class":1123},[1113,2505,972],{"class":1189},[1113,2507,1183],{"class":1119},[1113,2509,2510],{"class":1123},"[aspirate_1, dispense_1, aspirate_2, dispense_2])\n",[1053,2512,380],{"id":2513},"error-handling",[915,2515,2516,2518,2519,2522,2523,2526,2527,942,2530,2533],{},[919,2517,921],{}," methods wrap all runtime exceptions in ",[919,2520,2521],{},"ComplexMixError","s to provide more context about the error. It contains the original ",[919,2524,2525],{},"message",", as well as the ",[919,2528,2529],{},"step",[919,2531,2532],{},"step_type"," fields that indicate which step failed:",[1104,2535,2537],{"className":1106,"code":2536,"language":1108,"meta":1109,"style":1109},"from unitelabs.liquid_handling import ComplexMixError\n\ntry:\n    lhs.core96.complex_mix(target=...,parameters=...)\nexcept ComplexMixError as e:\n    print(f\"Complex mixing failed: {e.message}\")\n    print(f\"Failed during step {e.step} of type {e.step_type}\")\n",[919,2538,2539,2551,2555,2562,2585,2599,2626],{"__ignoreMap":1109},[1113,2540,2541,2543,2546,2548],{"class":1115,"line":1116},[1113,2542,1120],{"class":1119},[1113,2544,2545],{"class":1123}," unitelabs.liquid_handling ",[1113,2547,1127],{"class":1119},[1113,2549,2550],{"class":1123}," ComplexMixError\n",[1113,2552,2553],{"class":1115,"line":1133},[1113,2554,1167],{"emptyLinePlaceholder":1166},[1113,2556,2557,2560],{"class":1115,"line":1139},[1113,2558,2559],{"class":1119},"try",[1113,2561,2055],{"class":1123},[1113,2563,2564,2567,2569,2571,2574,2577,2579,2581,2583],{"class":1115,"line":1145},[1113,2565,2566],{"class":1123},"    lhs.core96.complex_mix(",[1113,2568,1313],{"class":1189},[1113,2570,1183],{"class":1119},[1113,2572,2573],{"class":1194},"...",[1113,2575,2576],{"class":1123},",",[1113,2578,1020],{"class":1189},[1113,2580,1183],{"class":1119},[1113,2582,2573],{"class":1194},[1113,2584,1160],{"class":1123},[1113,2586,2587,2590,2593,2596],{"class":1115,"line":1151},[1113,2588,2589],{"class":1119},"except",[1113,2591,2592],{"class":1123}," ComplexMixError ",[1113,2594,2595],{"class":1119},"as",[1113,2597,2598],{"class":1123}," e:\n",[1113,2600,2601,2604,2606,2609,2612,2615,2618,2621,2624],{"class":1115,"line":1157},[1113,2602,2603],{"class":1194},"    print",[1113,2605,2011],{"class":1123},[1113,2607,2608],{"class":1119},"f",[1113,2610,2611],{"class":2333},"\"Complex mixing failed: ",[1113,2613,2614],{"class":1119},"{",[1113,2616,2617],{"class":1123},"e.message",[1113,2619,2620],{"class":1119},"}",[1113,2622,2623],{"class":2333},"\"",[1113,2625,1160],{"class":1123},[1113,2627,2628,2630,2632,2634,2637,2639,2642,2644,2647,2649,2652,2654,2656],{"class":1115,"line":1163},[1113,2629,2603],{"class":1194},[1113,2631,2011],{"class":1123},[1113,2633,2608],{"class":1119},[1113,2635,2636],{"class":2333},"\"Failed during step ",[1113,2638,2614],{"class":1119},[1113,2640,2641],{"class":1123},"e.step",[1113,2643,2620],{"class":1119},[1113,2645,2646],{"class":2333}," of type ",[1113,2648,2614],{"class":1119},[1113,2650,2651],{"class":1123},"e.step_type",[1113,2653,2620],{"class":1119},[1113,2655,2623],{"class":2333},[1113,2657,1160],{"class":1123},[915,2659,2660,2661,2663],{},"One can therefore recover errors more gracefully by interpreting the remaining operations in their parameter set's ",[919,2662,972],{}," field and proceeding with the remaining operations.",[2665,2666,2667],"style",{},"html pre.shiki code .sxkbv, html code.shiki .sxkbv{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .sc-9e, html code.shiki .sc-9e{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sIsDC, html code.shiki .sIsDC{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#8B949E}html pre.shiki code .sNqAu, html code.shiki .sNqAu{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFA657}html pre.shiki code .sOiAX, html code.shiki .sOiAX{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCx38, html code.shiki .sCx38{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#A5D6FF}",{"title":1109,"searchDepth":1116,"depth":1133,"links":2669},[2670,2674,2675,2676],{"id":951,"depth":1133,"text":368,"children":2671},[2672,2673],{"id":1055,"depth":1139,"text":1056},{"id":1090,"depth":1139,"text":1091},{"id":1547,"depth":1133,"text":1548},{"id":1736,"depth":1133,"text":1737},{"id":2255,"depth":1133,"text":2256,"children":2677},[2678,2679],{"id":2265,"depth":1139,"text":2266},{"id":2513,"depth":1139,"text":380},"Perform highly customized mixing operations by chaining together aspirate and dispense steps.","md",{},"\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing",{"title":668,"description":2680},"6ol6lSEQ8VHHt4aa32hpAZljk1x5VMCxm6XlwLWS_zk",[2687,2689],{"title":664,"description":2688,"path":665},"Understand and use the Hamilton waste block.",{"title":672,"description":2690,"path":673},"How to teach the gripper paddle positions and configuring the gripper module.",1791294186650]