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