[{"data":1,"prerenderedAt":2957},["ShallowReactive",2],{"navigation":3,"\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck":750,"\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck-surround":2952},[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":225,"body":752,"description":2946,"extension":2947,"links":2948,"meta":2949,"navigation":825,"path":226,"seo":2950,"stem":227,"__hash__":2951},"docs\u002F03.operate\u002F20.guides\u002F20.deck\u002F10.building-a-deck.md",{"type":753,"value":754,"toc":2930},"minimark",[755,764,772,777,780,863,866,874,877,987,991,994,1146,1149,1155,1172,1187,1278,1281,1287,1290,1435,1441,1449,1453,1456,1463,1497,1500,1525,1532,1535,1707,1712,1720,1989,1992,1995,1999,2027,2029,2053,2059,2061,2223,2226,2230,2462,2466,2469,2497,2500,2504,2511,2615,2618,2632,2636,2642,2715,2718,2729,2733,2739,2838,2841,2845,2851,2926],[756,757,758,759,763],"p",{},"See ",[760,761,159],"a",{"href":762},"\u002Foperate\u002Fconcepts\u002Fdeck\u002F"," for the coordinate model and resource tree. This guide covers the procedural building blocks.",[756,765,766,767,771],{},"For device-specific origin details (where the zero point falls relative to the physical deck), see the device guides — e.g. ",[760,768,770],{"href":769},"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fpositioning\u002F","Positioning and movement",".",[773,774,776],"h2",{"id":775},"defining-a-deck","Defining a Deck",[756,778,779],{},"Decks have a dimension that is constrained by the liquid handler space. When importing the deck directly as shown below, default constraints are applied.",[781,782,787],"pre",{"className":783,"code":784,"language":785,"meta":786,"style":786},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from unitelabs.liquid_handling.hamilton import HamiltonDeck\n\ndeck = HamiltonDeck()\nprint(deck.summary())\n","python","",[788,789,790,820,827,843],"code",{"__ignoreMap":786},[791,792,795,799,803,806,809,811,814,817],"span",{"class":793,"line":794},"line",1,[791,796,798],{"class":797},"s7zQu","from",[791,800,802],{"class":801},"sTEyZ"," unitelabs",[791,804,771],{"class":805},"sMK4o",[791,807,808],{"class":801},"liquid_handling",[791,810,771],{"class":805},[791,812,813],{"class":801},"hamilton ",[791,815,816],{"class":797},"import",[791,818,819],{"class":801}," HamiltonDeck\n",[791,821,823],{"class":793,"line":822},2,[791,824,826],{"emptyLinePlaceholder":825},true,"\n",[791,828,830,833,836,840],{"class":793,"line":829},3,[791,831,832],{"class":801},"deck ",[791,834,835],{"class":805},"=",[791,837,839],{"class":838},"s2Zo4"," HamiltonDeck",[791,841,842],{"class":805},"()\n",[791,844,846,849,852,855,857,860],{"class":793,"line":845},4,[791,847,848],{"class":838},"print",[791,850,851],{"class":805},"(",[791,853,854],{"class":838},"deck",[791,856,771],{"class":805},[791,858,859],{"class":838},"summary",[791,861,862],{"class":805},"())\n",[756,864,865],{},"Which returns:",[781,867,872],{"className":868,"code":870,"language":871},[869],"language-text","  Tracks  Name               ID          Capacity     Content        X-Range   Height\n======================================================================================\n  1 - 30  ──\n","text",[788,873,870],{"__ignoreMap":786},[756,875,876],{},"However, if the deck is created automatically using the specific liquid handler class, the deck dimensions are pre-configured for that particular liquid handler model.",[781,878,880],{"className":783,"code":879,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton import MicrolabSTAR\n\n# Initialize the Hamilton Microlab STAR\nhamilton = MicrolabSTAR(name=\"Microlab STAR\")\n\nawait hamilton.initialize()\n\nprint(hamilton.deck.summary())\n",[788,881,882,901,905,911,940,945,961,966],{"__ignoreMap":786},[791,883,884,886,888,890,892,894,896,898],{"class":793,"line":794},[791,885,798],{"class":797},[791,887,802],{"class":801},[791,889,771],{"class":805},[791,891,808],{"class":801},[791,893,771],{"class":805},[791,895,813],{"class":801},[791,897,816],{"class":797},[791,899,900],{"class":801}," MicrolabSTAR\n",[791,902,903],{"class":793,"line":822},[791,904,826],{"emptyLinePlaceholder":825},[791,906,907],{"class":793,"line":829},[791,908,910],{"class":909},"sHwdD","# Initialize the Hamilton Microlab STAR\n",[791,912,913,915,917,920,922,926,928,931,935,937],{"class":793,"line":845},[791,914,813],{"class":801},[791,916,835],{"class":805},[791,918,919],{"class":838}," MicrolabSTAR",[791,921,851],{"class":805},[791,923,925],{"class":924},"sHdIc","name",[791,927,835],{"class":805},[791,929,930],{"class":805},"\"",[791,932,934],{"class":933},"sfazB","Microlab STAR",[791,936,930],{"class":805},[791,938,939],{"class":805},")\n",[791,941,943],{"class":793,"line":942},5,[791,944,826],{"emptyLinePlaceholder":825},[791,946,948,951,954,956,959],{"class":793,"line":947},6,[791,949,950],{"class":797},"await",[791,952,953],{"class":801}," hamilton",[791,955,771],{"class":805},[791,957,958],{"class":838},"initialize",[791,960,842],{"class":805},[791,962,964],{"class":793,"line":963},7,[791,965,826],{"emptyLinePlaceholder":825},[791,967,969,971,973,976,978,981,983,985],{"class":793,"line":968},8,[791,970,848],{"class":838},[791,972,851],{"class":805},[791,974,975],{"class":838},"hamilton",[791,977,771],{"class":805},[791,979,854],{"class":980},"swJcz",[791,982,771],{"class":805},[791,984,859],{"class":838},[791,986,862],{"class":805},[773,988,990],{"id":989},"adding-labware","Adding Labware",[756,992,993],{},"Now we can start and add our first carrier. We will use a landscape tip carrier with 5 slots for tips racks. The location of the carrier on the deck is provided in absolute coordinates and passed using the Vector class. We place the carrier starting on rail 16.",[781,995,997],{"className":783,"code":996,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton import HamiltonDeck\nfrom unitelabs.labware import Vector\nfrom unitelabs.labware.hamilton import TIP_CAR_480_A00\n\ndeck = HamiltonDeck()\ntip_carrier = TIP_CAR_480_A00(identifier=\"tip_carrier\")\ndeck.add(tip_carrier, track=16)\n# Alternatively the exact location can be set\n# deck.add(tip_carrier, location=Vector(x=(16 - 1) * 22.5, y=63, z=0))\nprint(deck.summary())\n",[788,998,999,1017,1033,1053,1057,1067,1093,1120,1125,1131],{"__ignoreMap":786},[791,1000,1001,1003,1005,1007,1009,1011,1013,1015],{"class":793,"line":794},[791,1002,798],{"class":797},[791,1004,802],{"class":801},[791,1006,771],{"class":805},[791,1008,808],{"class":801},[791,1010,771],{"class":805},[791,1012,813],{"class":801},[791,1014,816],{"class":797},[791,1016,819],{"class":801},[791,1018,1019,1021,1023,1025,1028,1030],{"class":793,"line":822},[791,1020,798],{"class":797},[791,1022,802],{"class":801},[791,1024,771],{"class":805},[791,1026,1027],{"class":801},"labware ",[791,1029,816],{"class":797},[791,1031,1032],{"class":801}," Vector\n",[791,1034,1035,1037,1039,1041,1044,1046,1048,1050],{"class":793,"line":829},[791,1036,798],{"class":797},[791,1038,802],{"class":801},[791,1040,771],{"class":805},[791,1042,1043],{"class":801},"labware",[791,1045,771],{"class":805},[791,1047,813],{"class":801},[791,1049,816],{"class":797},[791,1051,1052],{"class":801}," TIP_CAR_480_A00\n",[791,1054,1055],{"class":793,"line":845},[791,1056,826],{"emptyLinePlaceholder":825},[791,1058,1059,1061,1063,1065],{"class":793,"line":942},[791,1060,832],{"class":801},[791,1062,835],{"class":805},[791,1064,839],{"class":838},[791,1066,842],{"class":805},[791,1068,1069,1072,1074,1077,1079,1082,1084,1086,1089,1091],{"class":793,"line":947},[791,1070,1071],{"class":801},"tip_carrier ",[791,1073,835],{"class":805},[791,1075,1076],{"class":838}," TIP_CAR_480_A00",[791,1078,851],{"class":805},[791,1080,1081],{"class":924},"identifier",[791,1083,835],{"class":805},[791,1085,930],{"class":805},[791,1087,1088],{"class":933},"tip_carrier",[791,1090,930],{"class":805},[791,1092,939],{"class":805},[791,1094,1095,1097,1099,1102,1104,1106,1109,1112,1114,1118],{"class":793,"line":963},[791,1096,854],{"class":801},[791,1098,771],{"class":805},[791,1100,1101],{"class":838},"add",[791,1103,851],{"class":805},[791,1105,1088],{"class":838},[791,1107,1108],{"class":805},",",[791,1110,1111],{"class":924}," track",[791,1113,835],{"class":805},[791,1115,1117],{"class":1116},"sbssI","16",[791,1119,939],{"class":805},[791,1121,1122],{"class":793,"line":968},[791,1123,1124],{"class":909},"# Alternatively the exact location can be set\n",[791,1126,1128],{"class":793,"line":1127},9,[791,1129,1130],{"class":909},"# deck.add(tip_carrier, location=Vector(x=(16 - 1) * 22.5, y=63, z=0))\n",[791,1132,1134,1136,1138,1140,1142,1144],{"class":793,"line":1133},10,[791,1135,848],{"class":838},[791,1137,851],{"class":805},[791,1139,854],{"class":838},[791,1141,771],{"class":805},[791,1143,859],{"class":838},[791,1145,862],{"class":805},[756,1147,1148],{},"Now our deck looks like this:",[781,1150,1153],{"className":1151,"code":1152,"language":871,"meta":786},[869],"  Tracks  Name               ID          Capacity     Content        X-Range   Height\n======================================================================================\n  1 - 15  ┌─\n 16 - 21  ├─ TIP_CAR_480_A00 tip_carrier      0 tips      0 tips  337.5 - 472.5  130.0\n          │   ├─\n          │   ├─\n          │   ├─\n          │   ├─\n          │   └─\n 22 - 30\n",[788,1154,1152],{"__ignoreMap":786},[1156,1157,1161],"callout",{"color":1158,"icon":1159,"target":1160},"amber","i-heroicons-light-bulb","_blank",[756,1162,1163,1167,1168,1171],{},[1164,1165,1166],"strong",{},"Dynamic max deck size and deck dimension",": When using a dedicated liquid handler class, like the ",[788,1169,1170],{},"MicrolabSTAR"," class, a deck is autogenerated and dynamically configured during the initialization process.",[756,1173,1174,1175,1179,1180,1183,1184,1186],{},"We can add more labware to the carrier like a pre-defined Hamilton tip rack and Hamilton standard filter tips. In the following code we first instantiate the ",[1176,1177,1178],"em",{},"HamiltonTipRack_300",", then fill it with ",[1176,1181,1182],{},"HamiltonTip_300_Filter"," and then set the tip rack into the second slot (from behind) of the tip carrier we created earlier. The ",[1176,1185,1088],{}," object is linked to the deck.",[781,1188,1190],{"className":783,"code":1189,"language":785,"meta":786,"style":786},"from unitelabs.labware.hamilton import HamiltonTip_300_Filter, HamiltonTipRack_300\n\ntip_rack = HamiltonTipRack_300(filled_with=HamiltonTip_300_Filter)\ntip_carrier[1] = tip_rack\n\nprint(deck.summary())\n",[788,1191,1192,1216,1220,1241,1260,1264],{"__ignoreMap":786},[791,1193,1194,1196,1198,1200,1202,1204,1206,1208,1211,1213],{"class":793,"line":794},[791,1195,798],{"class":797},[791,1197,802],{"class":801},[791,1199,771],{"class":805},[791,1201,1043],{"class":801},[791,1203,771],{"class":805},[791,1205,813],{"class":801},[791,1207,816],{"class":797},[791,1209,1210],{"class":801}," HamiltonTip_300_Filter",[791,1212,1108],{"class":805},[791,1214,1215],{"class":801}," HamiltonTipRack_300\n",[791,1217,1218],{"class":793,"line":822},[791,1219,826],{"emptyLinePlaceholder":825},[791,1221,1222,1225,1227,1230,1232,1235,1237,1239],{"class":793,"line":829},[791,1223,1224],{"class":801},"tip_rack ",[791,1226,835],{"class":805},[791,1228,1229],{"class":838}," HamiltonTipRack_300",[791,1231,851],{"class":805},[791,1233,1234],{"class":924},"filled_with",[791,1236,835],{"class":805},[791,1238,1182],{"class":838},[791,1240,939],{"class":805},[791,1242,1243,1245,1248,1251,1254,1257],{"class":793,"line":845},[791,1244,1088],{"class":801},[791,1246,1247],{"class":805},"[",[791,1249,1250],{"class":1116},"1",[791,1252,1253],{"class":805},"]",[791,1255,1256],{"class":805}," =",[791,1258,1259],{"class":801}," tip_rack\n",[791,1261,1262],{"class":793,"line":942},[791,1263,826],{"emptyLinePlaceholder":825},[791,1265,1266,1268,1270,1272,1274,1276],{"class":793,"line":947},[791,1267,848],{"class":838},[791,1269,851],{"class":805},[791,1271,854],{"class":838},[791,1273,771],{"class":805},[791,1275,859],{"class":838},[791,1277,862],{"class":805},[756,1279,1280],{},"Printing the deck summary shows that the tip rack and the tips were added successfully.",[781,1282,1285],{"className":1283,"code":1284,"language":871},[869],"  Tracks  Name                   ID          Capacity     Content      X-Range Height\n======================================================================================\n  1 - 15  ┌─\n 16 - 21  ├─ TIP_CAR_480_A00     tip_carrier   96 tips   96 tips   337.5 - 472.5 135.0\n          │   ├─\n          │   ├─ HamiltonTipRack_300 e3e3a74b      96 tips   96 tips\n          │   ├─\n          │   ├─\n          │   └─\n 22 - 30  └─\n",[788,1286,1284],{"__ignoreMap":786},[756,1288,1289],{},"Adding plates can be done in the same way as adding racks. We will import a plate carrier and add a standard plate to it. We place the carrier starting on rail 10:",[781,1291,1293],{"className":783,"code":1292,"language":785,"meta":786,"style":786},"from unitelabs.labware.hamilton import TIP_CAR_480_A00, PLT_CAR_L5MD_A00\nfrom unitelabs.labware.corning_costar import Cos_96_FB\n\nplate_1 = Cos_96_FB()\nplate_carrier = PLT_CAR_L5MD_A00(identifier=\"plate_carrier\")\nplate_carrier[1] = plate_1\ndeck.add(plate_carrier, track=10)\n\nprint(deck.summary())\n",[788,1294,1295,1318,1338,1342,1354,1379,1394,1417,1421],{"__ignoreMap":786},[791,1296,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315],{"class":793,"line":794},[791,1298,798],{"class":797},[791,1300,802],{"class":801},[791,1302,771],{"class":805},[791,1304,1043],{"class":801},[791,1306,771],{"class":805},[791,1308,813],{"class":801},[791,1310,816],{"class":797},[791,1312,1076],{"class":801},[791,1314,1108],{"class":805},[791,1316,1317],{"class":801}," PLT_CAR_L5MD_A00\n",[791,1319,1320,1322,1324,1326,1328,1330,1333,1335],{"class":793,"line":822},[791,1321,798],{"class":797},[791,1323,802],{"class":801},[791,1325,771],{"class":805},[791,1327,1043],{"class":801},[791,1329,771],{"class":805},[791,1331,1332],{"class":801},"corning_costar ",[791,1334,816],{"class":797},[791,1336,1337],{"class":801}," Cos_96_FB\n",[791,1339,1340],{"class":793,"line":829},[791,1341,826],{"emptyLinePlaceholder":825},[791,1343,1344,1347,1349,1352],{"class":793,"line":845},[791,1345,1346],{"class":801},"plate_1 ",[791,1348,835],{"class":805},[791,1350,1351],{"class":838}," Cos_96_FB",[791,1353,842],{"class":805},[791,1355,1356,1359,1361,1364,1366,1368,1370,1372,1375,1377],{"class":793,"line":942},[791,1357,1358],{"class":801},"plate_carrier ",[791,1360,835],{"class":805},[791,1362,1363],{"class":838}," PLT_CAR_L5MD_A00",[791,1365,851],{"class":805},[791,1367,1081],{"class":924},[791,1369,835],{"class":805},[791,1371,930],{"class":805},[791,1373,1374],{"class":933},"plate_carrier",[791,1376,930],{"class":805},[791,1378,939],{"class":805},[791,1380,1381,1383,1385,1387,1389,1391],{"class":793,"line":947},[791,1382,1374],{"class":801},[791,1384,1247],{"class":805},[791,1386,1250],{"class":1116},[791,1388,1253],{"class":805},[791,1390,1256],{"class":805},[791,1392,1393],{"class":801}," plate_1\n",[791,1395,1396,1398,1400,1402,1404,1406,1408,1410,1412,1415],{"class":793,"line":963},[791,1397,854],{"class":801},[791,1399,771],{"class":805},[791,1401,1101],{"class":838},[791,1403,851],{"class":805},[791,1405,1374],{"class":838},[791,1407,1108],{"class":805},[791,1409,1111],{"class":924},[791,1411,835],{"class":805},[791,1413,1414],{"class":1116},"10",[791,1416,939],{"class":805},[791,1418,1419],{"class":793,"line":968},[791,1420,826],{"emptyLinePlaceholder":825},[791,1422,1423,1425,1427,1429,1431,1433],{"class":793,"line":1127},[791,1424,848],{"class":838},[791,1426,851],{"class":805},[791,1428,854],{"class":838},[791,1430,771],{"class":805},[791,1432,859],{"class":838},[791,1434,862],{"class":805},[781,1436,1439],{"className":1437,"code":1438,"language":871},[869],"  Tracks  Name                   ID          Capacity     Content      X-Range Height\n======================================================================================\n  1 -  9  ┌─\n 10 - 15  ├─ PLT_CAR_L5MD_A00    plate_carrier 5 plates 1 plates   202.5 - 337.5 130.0\n          │   ├─\n          │   ├─ Cos_96_FB       a9e7efb0      34560 µl     0 µl\n          │   ├─\n          │   ├─\n          │   └─\n 16 - 21  ├─ TIP_CAR_480_A00     tip_carrier   96 tips   96 tips   337.5 - 472.5 135.0\n          │   ├─\n          │   ├─ HamiltonTipRack_300 e3e3a74b      96 tips   96 tips\n          │   ├─\n          │   ├─\n          │   └─\n 22 - 30  └─\n",[788,1440,1438],{"__ignoreMap":786},[756,1442,1443,1444,1448],{},"It is often required to create custom labware. See the ",[760,1445,1447],{"href":1446},"\u002Foperate\u002Fguides\u002Flabware\u002F","custom labware guide"," for details.",[773,1450,1452],{"id":1451},"hamilton-deck-bounds","Hamilton Deck Bounds",[756,1454,1455],{},"By default, the deck enforces track boundaries that match the physical deck size of your liquid handler. However, some workflows require placing carriers on negative tracks or beyond the maximum track, for example, storing tips below the minimum track of a Hamilton STAR CO-RE96 access.",[756,1457,1458,1459,1462],{},"Attempting to add a carrier outside the default track bounds will raise an error. To allow out-of-bounds placement, remove the deck limitation by configuring the minimum and\u002For maximum track to ",[788,1460,1461],{},"None",":",[781,1464,1466],{"className":783,"code":1465,"language":785,"meta":786,"style":786},"await hamilton.deck.configure(min_track=None, max_track=None)\n",[788,1467,1468],{"__ignoreMap":786},[791,1469,1470,1472,1474,1476,1478,1480,1483,1485,1488,1491,1494],{"class":793,"line":794},[791,1471,950],{"class":797},[791,1473,953],{"class":801},[791,1475,771],{"class":805},[791,1477,854],{"class":980},[791,1479,771],{"class":805},[791,1481,1482],{"class":838},"configure",[791,1484,851],{"class":805},[791,1486,1487],{"class":924},"min_track",[791,1489,1490],{"class":805},"=None,",[791,1492,1493],{"class":924}," max_track",[791,1495,1496],{"class":805},"=None)\n",[756,1498,1499],{},"You can also remove only one limit. For example, to allow only negative tracks:",[781,1501,1503],{"className":783,"code":1502,"language":785,"meta":786,"style":786},"await hamilton.deck.configure(min_track=None)\n",[788,1504,1505],{"__ignoreMap":786},[791,1506,1507,1509,1511,1513,1515,1517,1519,1521,1523],{"class":793,"line":794},[791,1508,950],{"class":797},[791,1510,953],{"class":801},[791,1512,771],{"class":805},[791,1514,854],{"class":980},[791,1516,771],{"class":805},[791,1518,1482],{"class":838},[791,1520,851],{"class":805},[791,1522,1487],{"class":924},[791,1524,1496],{"class":805},[1156,1526,1529],{"color":1527,"icon":1528},"red","i-heroicons-shield-exclamation",[756,1530,1531],{},"Carriers placed outside of the standard deck bounds may define positions that are not reachable by all modules. For instance, pipetting channels may not be able to reach positions outside the track area, while the CO-RE96 can. Always verify that the intended module can physically reach the carrier positions you define.",[756,1533,1534],{},"A common use case is placing a tip carrier in the negative track area of a Hamilton STAR, where tips are accessible by the CO-RE96 but not by individual pipetting channels:",[781,1536,1538],{"className":783,"code":1537,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton import MicrolabSTAR\nfrom unitelabs.labware.hamilton import TIP_CAR_480_A00\n\nhamilton = MicrolabSTAR(name=\"Microlab STAR\")\nawait hamilton.initialize()\n\n# Remove the minimum track limit to allow negative tracks\nawait hamilton.deck.configure(min_track=None)\n\n# Place the tip carrier starting at track -3\nhamilton.deck.add(TIP_CAR_480_A00(), track=-3)\n\nprint(hamilton.deck.summary())\n",[788,1539,1540,1558,1576,1580,1602,1614,1618,1623,1643,1647,1652,1683,1688],{"__ignoreMap":786},[791,1541,1542,1544,1546,1548,1550,1552,1554,1556],{"class":793,"line":794},[791,1543,798],{"class":797},[791,1545,802],{"class":801},[791,1547,771],{"class":805},[791,1549,808],{"class":801},[791,1551,771],{"class":805},[791,1553,813],{"class":801},[791,1555,816],{"class":797},[791,1557,900],{"class":801},[791,1559,1560,1562,1564,1566,1568,1570,1572,1574],{"class":793,"line":822},[791,1561,798],{"class":797},[791,1563,802],{"class":801},[791,1565,771],{"class":805},[791,1567,1043],{"class":801},[791,1569,771],{"class":805},[791,1571,813],{"class":801},[791,1573,816],{"class":797},[791,1575,1052],{"class":801},[791,1577,1578],{"class":793,"line":829},[791,1579,826],{"emptyLinePlaceholder":825},[791,1581,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600],{"class":793,"line":845},[791,1583,813],{"class":801},[791,1585,835],{"class":805},[791,1587,919],{"class":838},[791,1589,851],{"class":805},[791,1591,925],{"class":924},[791,1593,835],{"class":805},[791,1595,930],{"class":805},[791,1597,934],{"class":933},[791,1599,930],{"class":805},[791,1601,939],{"class":805},[791,1603,1604,1606,1608,1610,1612],{"class":793,"line":942},[791,1605,950],{"class":797},[791,1607,953],{"class":801},[791,1609,771],{"class":805},[791,1611,958],{"class":838},[791,1613,842],{"class":805},[791,1615,1616],{"class":793,"line":947},[791,1617,826],{"emptyLinePlaceholder":825},[791,1619,1620],{"class":793,"line":963},[791,1621,1622],{"class":909},"# Remove the minimum track limit to allow negative tracks\n",[791,1624,1625,1627,1629,1631,1633,1635,1637,1639,1641],{"class":793,"line":968},[791,1626,950],{"class":797},[791,1628,953],{"class":801},[791,1630,771],{"class":805},[791,1632,854],{"class":980},[791,1634,771],{"class":805},[791,1636,1482],{"class":838},[791,1638,851],{"class":805},[791,1640,1487],{"class":924},[791,1642,1496],{"class":805},[791,1644,1645],{"class":793,"line":1127},[791,1646,826],{"emptyLinePlaceholder":825},[791,1648,1649],{"class":793,"line":1133},[791,1650,1651],{"class":909},"# Place the tip carrier starting at track -3\n",[791,1653,1655,1657,1659,1661,1663,1665,1667,1670,1673,1675,1678,1681],{"class":793,"line":1654},11,[791,1656,975],{"class":801},[791,1658,771],{"class":805},[791,1660,854],{"class":980},[791,1662,771],{"class":805},[791,1664,1101],{"class":838},[791,1666,851],{"class":805},[791,1668,1669],{"class":838},"TIP_CAR_480_A00",[791,1671,1672],{"class":805},"(),",[791,1674,1111],{"class":924},[791,1676,1677],{"class":805},"=-",[791,1679,1680],{"class":1116},"3",[791,1682,939],{"class":805},[791,1684,1686],{"class":793,"line":1685},12,[791,1687,826],{"emptyLinePlaceholder":825},[791,1689,1691,1693,1695,1697,1699,1701,1703,1705],{"class":793,"line":1690},13,[791,1692,848],{"class":838},[791,1694,851],{"class":805},[791,1696,975],{"class":838},[791,1698,771],{"class":805},[791,1700,854],{"class":980},[791,1702,771],{"class":805},[791,1704,859],{"class":838},[791,1706,862],{"class":805},[1708,1709,1711],"h3",{"id":1710},"custom-carrier-at-an-absolute-position","Custom Carrier at an Absolute Position",[756,1713,1714,1715,1719],{},"Another use case is placing a custom carrier at specific x, y, z coordinates that lie outside the standard deck bounds. These coordinates are typically measured or taught, for example using the iSWAP (see ",[760,1716,1718],{"href":1717},"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position\u002F","Training a Custom Deck Position","):",[781,1721,1723],{"className":783,"code":1722,"language":785,"meta":786,"style":786},"from unitelabs.labware import Vector\n\n# Remove deck track limits\nawait hamilton.deck.configure(min_track=None, max_track=None)\n\n# Carrier coordinates, measured or taught (e.g. by iSWAP)\nCARRIER_X = -53.7\nCARRIER_Y = 89.0\nCARRIER_Z = 209.3\n\ncustom_carrier = CustomCarrier(identifier=\"custom_carrier\")\n\n# Add the carrier at an absolute position, offset by the deck origin\ndeck_location = hamilton.deck.location or Vector(x=0, y=0, z=0)\nhamilton.deck.add(\n    labware=custom_carrier,\n    location=Vector(x=CARRIER_X, y=CARRIER_Y, z=CARRIER_Z) - deck_location,\n)\n",[788,1724,1725,1739,1743,1748,1772,1776,1781,1794,1804,1814,1818,1843,1847,1852,1907,1923,1936,1984],{"__ignoreMap":786},[791,1726,1727,1729,1731,1733,1735,1737],{"class":793,"line":794},[791,1728,798],{"class":797},[791,1730,802],{"class":801},[791,1732,771],{"class":805},[791,1734,1027],{"class":801},[791,1736,816],{"class":797},[791,1738,1032],{"class":801},[791,1740,1741],{"class":793,"line":822},[791,1742,826],{"emptyLinePlaceholder":825},[791,1744,1745],{"class":793,"line":829},[791,1746,1747],{"class":909},"# Remove deck track limits\n",[791,1749,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770],{"class":793,"line":845},[791,1751,950],{"class":797},[791,1753,953],{"class":801},[791,1755,771],{"class":805},[791,1757,854],{"class":980},[791,1759,771],{"class":805},[791,1761,1482],{"class":838},[791,1763,851],{"class":805},[791,1765,1487],{"class":924},[791,1767,1490],{"class":805},[791,1769,1493],{"class":924},[791,1771,1496],{"class":805},[791,1773,1774],{"class":793,"line":942},[791,1775,826],{"emptyLinePlaceholder":825},[791,1777,1778],{"class":793,"line":947},[791,1779,1780],{"class":909},"# Carrier coordinates, measured or taught (e.g. by iSWAP)\n",[791,1782,1783,1786,1788,1791],{"class":793,"line":963},[791,1784,1785],{"class":801},"CARRIER_X ",[791,1787,835],{"class":805},[791,1789,1790],{"class":805}," -",[791,1792,1793],{"class":1116},"53.7\n",[791,1795,1796,1799,1801],{"class":793,"line":968},[791,1797,1798],{"class":801},"CARRIER_Y ",[791,1800,835],{"class":805},[791,1802,1803],{"class":1116}," 89.0\n",[791,1805,1806,1809,1811],{"class":793,"line":1127},[791,1807,1808],{"class":801},"CARRIER_Z ",[791,1810,835],{"class":805},[791,1812,1813],{"class":1116}," 209.3\n",[791,1815,1816],{"class":793,"line":1133},[791,1817,826],{"emptyLinePlaceholder":825},[791,1819,1820,1823,1825,1828,1830,1832,1834,1836,1839,1841],{"class":793,"line":1654},[791,1821,1822],{"class":801},"custom_carrier ",[791,1824,835],{"class":805},[791,1826,1827],{"class":838}," CustomCarrier",[791,1829,851],{"class":805},[791,1831,1081],{"class":924},[791,1833,835],{"class":805},[791,1835,930],{"class":805},[791,1837,1838],{"class":933},"custom_carrier",[791,1840,930],{"class":805},[791,1842,939],{"class":805},[791,1844,1845],{"class":793,"line":1685},[791,1846,826],{"emptyLinePlaceholder":825},[791,1848,1849],{"class":793,"line":1690},[791,1850,1851],{"class":909},"# Add the carrier at an absolute position, offset by the deck origin\n",[791,1853,1855,1858,1860,1862,1864,1866,1868,1871,1874,1877,1879,1882,1884,1887,1889,1892,1894,1896,1898,1901,1903,1905],{"class":793,"line":1854},14,[791,1856,1857],{"class":801},"deck_location ",[791,1859,835],{"class":805},[791,1861,953],{"class":801},[791,1863,771],{"class":805},[791,1865,854],{"class":980},[791,1867,771],{"class":805},[791,1869,1870],{"class":980},"location",[791,1872,1873],{"class":805}," or",[791,1875,1876],{"class":838}," Vector",[791,1878,851],{"class":805},[791,1880,1881],{"class":924},"x",[791,1883,835],{"class":805},[791,1885,1886],{"class":1116},"0",[791,1888,1108],{"class":805},[791,1890,1891],{"class":924}," y",[791,1893,835],{"class":805},[791,1895,1886],{"class":1116},[791,1897,1108],{"class":805},[791,1899,1900],{"class":924}," z",[791,1902,835],{"class":805},[791,1904,1886],{"class":1116},[791,1906,939],{"class":805},[791,1908,1910,1912,1914,1916,1918,1920],{"class":793,"line":1909},15,[791,1911,975],{"class":801},[791,1913,771],{"class":805},[791,1915,854],{"class":980},[791,1917,771],{"class":805},[791,1919,1101],{"class":838},[791,1921,1922],{"class":805},"(\n",[791,1924,1926,1929,1931,1933],{"class":793,"line":1925},16,[791,1927,1928],{"class":924},"    labware",[791,1930,835],{"class":805},[791,1932,1838],{"class":838},[791,1934,1935],{"class":805},",\n",[791,1937,1939,1942,1944,1947,1949,1951,1953,1956,1958,1960,1962,1965,1967,1969,1971,1974,1977,1979,1982],{"class":793,"line":1938},17,[791,1940,1941],{"class":924},"    location",[791,1943,835],{"class":805},[791,1945,1946],{"class":838},"Vector",[791,1948,851],{"class":805},[791,1950,1881],{"class":924},[791,1952,835],{"class":805},[791,1954,1955],{"class":838},"CARRIER_X",[791,1957,1108],{"class":805},[791,1959,1891],{"class":924},[791,1961,835],{"class":805},[791,1963,1964],{"class":838},"CARRIER_Y",[791,1966,1108],{"class":805},[791,1968,1900],{"class":924},[791,1970,835],{"class":805},[791,1972,1973],{"class":838},"CARRIER_Z",[791,1975,1976],{"class":805},")",[791,1978,1790],{"class":805},[791,1980,1981],{"class":838}," deck_location",[791,1983,1935],{"class":805},[791,1985,1987],{"class":793,"line":1986},18,[791,1988,939],{"class":805},[773,1990,1452],{"id":1991},"hamilton-deck-bounds-1",[756,1993,1994],{},"By default, the deck enforces track boundaries that match the physical deck size of your liquid handler. However, some workflows require placing carriers on negative tracks or beyond the maximum track — for example, storing tips below the minimum track of a Hamilton STAR CO-RE96 access.",[756,1996,1458,1997,1462],{},[788,1998,1461],{},[781,2000,2001],{"className":783,"code":1465,"language":785,"meta":786,"style":786},[788,2002,2003],{"__ignoreMap":786},[791,2004,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025],{"class":793,"line":794},[791,2006,950],{"class":797},[791,2008,953],{"class":801},[791,2010,771],{"class":805},[791,2012,854],{"class":980},[791,2014,771],{"class":805},[791,2016,1482],{"class":838},[791,2018,851],{"class":805},[791,2020,1487],{"class":924},[791,2022,1490],{"class":805},[791,2024,1493],{"class":924},[791,2026,1496],{"class":805},[756,2028,1499],{},[781,2030,2031],{"className":783,"code":1502,"language":785,"meta":786,"style":786},[788,2032,2033],{"__ignoreMap":786},[791,2034,2035,2037,2039,2041,2043,2045,2047,2049,2051],{"class":793,"line":794},[791,2036,950],{"class":797},[791,2038,953],{"class":801},[791,2040,771],{"class":805},[791,2042,854],{"class":980},[791,2044,771],{"class":805},[791,2046,1482],{"class":838},[791,2048,851],{"class":805},[791,2050,1487],{"class":924},[791,2052,1496],{"class":805},[1156,2054,2056],{"color":1158,"icon":2055},"i-heroicons-exclamation-triangle",[756,2057,2058],{},"Warning: Carriers placed outside of the standard deck bounds may define positions that are not reachable by all modules. For instance, pipetting channels may not be able to reach positions outside the track area, while the CO-RE96 can. Always verify that the intended module can physically reach the carrier positions you define.",[756,2060,1534],{},[781,2062,2063],{"className":783,"code":1537,"language":785,"meta":786,"style":786},[788,2064,2065,2083,2101,2105,2127,2139,2143,2147,2167,2171,2175,2201,2205],{"__ignoreMap":786},[791,2066,2067,2069,2071,2073,2075,2077,2079,2081],{"class":793,"line":794},[791,2068,798],{"class":797},[791,2070,802],{"class":801},[791,2072,771],{"class":805},[791,2074,808],{"class":801},[791,2076,771],{"class":805},[791,2078,813],{"class":801},[791,2080,816],{"class":797},[791,2082,900],{"class":801},[791,2084,2085,2087,2089,2091,2093,2095,2097,2099],{"class":793,"line":822},[791,2086,798],{"class":797},[791,2088,802],{"class":801},[791,2090,771],{"class":805},[791,2092,1043],{"class":801},[791,2094,771],{"class":805},[791,2096,813],{"class":801},[791,2098,816],{"class":797},[791,2100,1052],{"class":801},[791,2102,2103],{"class":793,"line":829},[791,2104,826],{"emptyLinePlaceholder":825},[791,2106,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125],{"class":793,"line":845},[791,2108,813],{"class":801},[791,2110,835],{"class":805},[791,2112,919],{"class":838},[791,2114,851],{"class":805},[791,2116,925],{"class":924},[791,2118,835],{"class":805},[791,2120,930],{"class":805},[791,2122,934],{"class":933},[791,2124,930],{"class":805},[791,2126,939],{"class":805},[791,2128,2129,2131,2133,2135,2137],{"class":793,"line":942},[791,2130,950],{"class":797},[791,2132,953],{"class":801},[791,2134,771],{"class":805},[791,2136,958],{"class":838},[791,2138,842],{"class":805},[791,2140,2141],{"class":793,"line":947},[791,2142,826],{"emptyLinePlaceholder":825},[791,2144,2145],{"class":793,"line":963},[791,2146,1622],{"class":909},[791,2148,2149,2151,2153,2155,2157,2159,2161,2163,2165],{"class":793,"line":968},[791,2150,950],{"class":797},[791,2152,953],{"class":801},[791,2154,771],{"class":805},[791,2156,854],{"class":980},[791,2158,771],{"class":805},[791,2160,1482],{"class":838},[791,2162,851],{"class":805},[791,2164,1487],{"class":924},[791,2166,1496],{"class":805},[791,2168,2169],{"class":793,"line":1127},[791,2170,826],{"emptyLinePlaceholder":825},[791,2172,2173],{"class":793,"line":1133},[791,2174,1651],{"class":909},[791,2176,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195,2197,2199],{"class":793,"line":1654},[791,2178,975],{"class":801},[791,2180,771],{"class":805},[791,2182,854],{"class":980},[791,2184,771],{"class":805},[791,2186,1101],{"class":838},[791,2188,851],{"class":805},[791,2190,1669],{"class":838},[791,2192,1672],{"class":805},[791,2194,1111],{"class":924},[791,2196,1677],{"class":805},[791,2198,1680],{"class":1116},[791,2200,939],{"class":805},[791,2202,2203],{"class":793,"line":1685},[791,2204,826],{"emptyLinePlaceholder":825},[791,2206,2207,2209,2211,2213,2215,2217,2219,2221],{"class":793,"line":1690},[791,2208,848],{"class":838},[791,2210,851],{"class":805},[791,2212,975],{"class":838},[791,2214,771],{"class":805},[791,2216,854],{"class":980},[791,2218,771],{"class":805},[791,2220,859],{"class":838},[791,2222,862],{"class":805},[1708,2224,1711],{"id":2225},"custom-carrier-at-an-absolute-position-1",[756,2227,1714,2228,1719],{},[760,2229,1718],{"href":1717},[781,2231,2232],{"className":783,"code":1722,"language":785,"meta":786,"style":786},[788,2233,2234,2248,2252,2256,2280,2284,2288,2298,2306,2314,2318,2340,2344,2348,2394,2408,2418,2458],{"__ignoreMap":786},[791,2235,2236,2238,2240,2242,2244,2246],{"class":793,"line":794},[791,2237,798],{"class":797},[791,2239,802],{"class":801},[791,2241,771],{"class":805},[791,2243,1027],{"class":801},[791,2245,816],{"class":797},[791,2247,1032],{"class":801},[791,2249,2250],{"class":793,"line":822},[791,2251,826],{"emptyLinePlaceholder":825},[791,2253,2254],{"class":793,"line":829},[791,2255,1747],{"class":909},[791,2257,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278],{"class":793,"line":845},[791,2259,950],{"class":797},[791,2261,953],{"class":801},[791,2263,771],{"class":805},[791,2265,854],{"class":980},[791,2267,771],{"class":805},[791,2269,1482],{"class":838},[791,2271,851],{"class":805},[791,2273,1487],{"class":924},[791,2275,1490],{"class":805},[791,2277,1493],{"class":924},[791,2279,1496],{"class":805},[791,2281,2282],{"class":793,"line":942},[791,2283,826],{"emptyLinePlaceholder":825},[791,2285,2286],{"class":793,"line":947},[791,2287,1780],{"class":909},[791,2289,2290,2292,2294,2296],{"class":793,"line":963},[791,2291,1785],{"class":801},[791,2293,835],{"class":805},[791,2295,1790],{"class":805},[791,2297,1793],{"class":1116},[791,2299,2300,2302,2304],{"class":793,"line":968},[791,2301,1798],{"class":801},[791,2303,835],{"class":805},[791,2305,1803],{"class":1116},[791,2307,2308,2310,2312],{"class":793,"line":1127},[791,2309,1808],{"class":801},[791,2311,835],{"class":805},[791,2313,1813],{"class":1116},[791,2315,2316],{"class":793,"line":1133},[791,2317,826],{"emptyLinePlaceholder":825},[791,2319,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338],{"class":793,"line":1654},[791,2321,1822],{"class":801},[791,2323,835],{"class":805},[791,2325,1827],{"class":838},[791,2327,851],{"class":805},[791,2329,1081],{"class":924},[791,2331,835],{"class":805},[791,2333,930],{"class":805},[791,2335,1838],{"class":933},[791,2337,930],{"class":805},[791,2339,939],{"class":805},[791,2341,2342],{"class":793,"line":1685},[791,2343,826],{"emptyLinePlaceholder":825},[791,2345,2346],{"class":793,"line":1690},[791,2347,1851],{"class":909},[791,2349,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392],{"class":793,"line":1854},[791,2351,1857],{"class":801},[791,2353,835],{"class":805},[791,2355,953],{"class":801},[791,2357,771],{"class":805},[791,2359,854],{"class":980},[791,2361,771],{"class":805},[791,2363,1870],{"class":980},[791,2365,1873],{"class":805},[791,2367,1876],{"class":838},[791,2369,851],{"class":805},[791,2371,1881],{"class":924},[791,2373,835],{"class":805},[791,2375,1886],{"class":1116},[791,2377,1108],{"class":805},[791,2379,1891],{"class":924},[791,2381,835],{"class":805},[791,2383,1886],{"class":1116},[791,2385,1108],{"class":805},[791,2387,1900],{"class":924},[791,2389,835],{"class":805},[791,2391,1886],{"class":1116},[791,2393,939],{"class":805},[791,2395,2396,2398,2400,2402,2404,2406],{"class":793,"line":1909},[791,2397,975],{"class":801},[791,2399,771],{"class":805},[791,2401,854],{"class":980},[791,2403,771],{"class":805},[791,2405,1101],{"class":838},[791,2407,1922],{"class":805},[791,2409,2410,2412,2414,2416],{"class":793,"line":1925},[791,2411,1928],{"class":924},[791,2413,835],{"class":805},[791,2415,1838],{"class":838},[791,2417,1935],{"class":805},[791,2419,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456],{"class":793,"line":1938},[791,2421,1941],{"class":924},[791,2423,835],{"class":805},[791,2425,1946],{"class":838},[791,2427,851],{"class":805},[791,2429,1881],{"class":924},[791,2431,835],{"class":805},[791,2433,1955],{"class":838},[791,2435,1108],{"class":805},[791,2437,1891],{"class":924},[791,2439,835],{"class":805},[791,2441,1964],{"class":838},[791,2443,1108],{"class":805},[791,2445,1900],{"class":924},[791,2447,835],{"class":805},[791,2449,1973],{"class":838},[791,2451,1976],{"class":805},[791,2453,1790],{"class":805},[791,2455,1981],{"class":838},[791,2457,1935],{"class":805},[791,2459,2460],{"class":793,"line":1986},[791,2461,939],{"class":805},[773,2463,2465],{"id":2464},"serializing-and-deserializing-decks","Serializing and Deserializing Decks",[756,2467,2468],{},"Deck serialization allows you to save and restore deck configurations, enabling several useful workflows:",[2470,2471,2472,2479,2485,2491],"ul",{},[2473,2474,2475,2478],"li",{},[1164,2476,2477],{},"Sharing deck layouts"," across different workflows and team members",[2473,2480,2481,2484],{},[1164,2482,2483],{},"Persisting deck state"," between sessions for reproducibility",[2473,2486,2487,2490],{},[1164,2488,2489],{},"Version control"," for deck configurations using JSON files",[2473,2492,2493,2496],{},[1164,2494,2495],{},"Creating templates"," for common deck setups",[756,2498,2499],{},"The SDK provides four methods for working with deck serialization: converting decks to\u002Ffrom JSON-compatible Python dictionaries and saving\u002Floading decks to\u002Ffrom JSON files.",[1708,2501,2503],{"id":2502},"converting-deck-to-dictionary","Converting Deck to Dictionary",[756,2505,2506,2507,2510],{},"Use the ",[788,2508,2509],{},"to_json()"," method to convert a deck configuration to a JSON-compatible Python dictionary:",[781,2512,2514],{"className":783,"code":2513,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton import MicrolabSTAR\n\nhamilton = MicrolabSTAR(name=\"Microlab STAR\")\nawait hamilton.initialize()\n\n# Configure your deck with carriers and labware\n# ... (add carriers, tip racks, plates, etc.)\n\n# Convert deck to JSON-compatible dictionary\ndeck_dict = hamilton.deck.to_json()\n",[788,2515,2516,2534,2538,2560,2572,2576,2581,2586,2590,2595],{"__ignoreMap":786},[791,2517,2518,2520,2522,2524,2526,2528,2530,2532],{"class":793,"line":794},[791,2519,798],{"class":797},[791,2521,802],{"class":801},[791,2523,771],{"class":805},[791,2525,808],{"class":801},[791,2527,771],{"class":805},[791,2529,813],{"class":801},[791,2531,816],{"class":797},[791,2533,900],{"class":801},[791,2535,2536],{"class":793,"line":822},[791,2537,826],{"emptyLinePlaceholder":825},[791,2539,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558],{"class":793,"line":829},[791,2541,813],{"class":801},[791,2543,835],{"class":805},[791,2545,919],{"class":838},[791,2547,851],{"class":805},[791,2549,925],{"class":924},[791,2551,835],{"class":805},[791,2553,930],{"class":805},[791,2555,934],{"class":933},[791,2557,930],{"class":805},[791,2559,939],{"class":805},[791,2561,2562,2564,2566,2568,2570],{"class":793,"line":845},[791,2563,950],{"class":797},[791,2565,953],{"class":801},[791,2567,771],{"class":805},[791,2569,958],{"class":838},[791,2571,842],{"class":805},[791,2573,2574],{"class":793,"line":942},[791,2575,826],{"emptyLinePlaceholder":825},[791,2577,2578],{"class":793,"line":947},[791,2579,2580],{"class":909},"# Configure your deck with carriers and labware\n",[791,2582,2583],{"class":793,"line":963},[791,2584,2585],{"class":909},"# ... (add carriers, tip racks, plates, etc.)\n",[791,2587,2588],{"class":793,"line":968},[791,2589,826],{"emptyLinePlaceholder":825},[791,2591,2592],{"class":793,"line":1127},[791,2593,2594],{"class":909},"# Convert deck to JSON-compatible dictionary\n",[791,2596,2597,2600,2602,2604,2606,2608,2610,2613],{"class":793,"line":1133},[791,2598,2599],{"class":801},"deck_dict ",[791,2601,835],{"class":805},[791,2603,953],{"class":801},[791,2605,771],{"class":805},[791,2607,854],{"class":980},[791,2609,771],{"class":805},[791,2611,2612],{"class":838},"to_json",[791,2614,842],{"class":805},[756,2616,2617],{},"The returned dictionary contains all deck information including:",[2470,2619,2620,2623,2626,2629],{},[2473,2621,2622],{},"Deck dimensions and constraints",[2473,2624,2625],{},"All installed carriers and their positions",[2473,2627,2628],{},"Nested labware structures (carriers → racks → tips\u002Fplates)",[2473,2630,2631],{},"Module lifecycle stages and configuration",[1708,2633,2635],{"id":2634},"creating-deck-from-dictionary","Creating Deck from Dictionary",[756,2637,2506,2638,2641],{},[788,2639,2640],{},"from_json()"," class method to create a deck from a JSON-compatible Python dictionary:",[781,2643,2645],{"className":783,"code":2644,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton.modules import HamiltonDeck\n\n# Load deck from dictionary\nrestored_deck = HamiltonDeck.from_json(deck_dict)\nprint(restored_deck.summary())\n",[788,2646,2647,2670,2674,2679,2700],{"__ignoreMap":786},[791,2648,2649,2651,2653,2655,2657,2659,2661,2663,2666,2668],{"class":793,"line":794},[791,2650,798],{"class":797},[791,2652,802],{"class":801},[791,2654,771],{"class":805},[791,2656,808],{"class":801},[791,2658,771],{"class":805},[791,2660,975],{"class":801},[791,2662,771],{"class":805},[791,2664,2665],{"class":801},"modules ",[791,2667,816],{"class":797},[791,2669,819],{"class":801},[791,2671,2672],{"class":793,"line":822},[791,2673,826],{"emptyLinePlaceholder":825},[791,2675,2676],{"class":793,"line":829},[791,2677,2678],{"class":909},"# Load deck from dictionary\n",[791,2680,2681,2684,2686,2688,2690,2693,2695,2698],{"class":793,"line":845},[791,2682,2683],{"class":801},"restored_deck ",[791,2685,835],{"class":805},[791,2687,839],{"class":801},[791,2689,771],{"class":805},[791,2691,2692],{"class":838},"from_json",[791,2694,851],{"class":805},[791,2696,2697],{"class":838},"deck_dict",[791,2699,939],{"class":805},[791,2701,2702,2704,2706,2709,2711,2713],{"class":793,"line":942},[791,2703,848],{"class":838},[791,2705,851],{"class":805},[791,2707,2708],{"class":838},"restored_deck",[791,2710,771],{"class":805},[791,2712,859],{"class":838},[791,2714,862],{"class":805},[756,2716,2717],{},"This creates a fully configured deck instance that preserves:",[2470,2719,2720,2723,2726],{},[2473,2721,2722],{},"Track index mapping",[2473,2724,2725],{},"Module lifecycle stages (INSTALLED, CONFIGURED, INITIALIZED, ACTIVE)",[2473,2727,2728],{},"All nested labware structures with complete fidelity",[1708,2730,2732],{"id":2731},"saving-deck-to-file","Saving Deck to File",[756,2734,2506,2735,2738],{},[788,2736,2737],{},"save()"," method to persist a deck configuration to a JSON file:",[781,2740,2742],{"className":783,"code":2741,"language":785,"meta":786,"style":786},"from pathlib import Path\n\n# Save to file (accepts str or pathlib.Path)\nhamilton.deck.save(\"my_deck_layout.json\")\n\n# Or using pathlib\ndeck_path = Path(\"deck_layouts\u002Fstandard_setup.json\")\nhamilton.deck.save(deck_path)\n",[788,2743,2744,2756,2760,2765,2789,2793,2798,2819],{"__ignoreMap":786},[791,2745,2746,2748,2751,2753],{"class":793,"line":794},[791,2747,798],{"class":797},[791,2749,2750],{"class":801}," pathlib ",[791,2752,816],{"class":797},[791,2754,2755],{"class":801}," Path\n",[791,2757,2758],{"class":793,"line":822},[791,2759,826],{"emptyLinePlaceholder":825},[791,2761,2762],{"class":793,"line":829},[791,2763,2764],{"class":909},"# Save to file (accepts str or pathlib.Path)\n",[791,2766,2767,2769,2771,2773,2775,2778,2780,2782,2785,2787],{"class":793,"line":845},[791,2768,975],{"class":801},[791,2770,771],{"class":805},[791,2772,854],{"class":980},[791,2774,771],{"class":805},[791,2776,2777],{"class":838},"save",[791,2779,851],{"class":805},[791,2781,930],{"class":805},[791,2783,2784],{"class":933},"my_deck_layout.json",[791,2786,930],{"class":805},[791,2788,939],{"class":805},[791,2790,2791],{"class":793,"line":942},[791,2792,826],{"emptyLinePlaceholder":825},[791,2794,2795],{"class":793,"line":947},[791,2796,2797],{"class":909},"# Or using pathlib\n",[791,2799,2800,2803,2805,2808,2810,2812,2815,2817],{"class":793,"line":963},[791,2801,2802],{"class":801},"deck_path ",[791,2804,835],{"class":805},[791,2806,2807],{"class":838}," Path",[791,2809,851],{"class":805},[791,2811,930],{"class":805},[791,2813,2814],{"class":933},"deck_layouts\u002Fstandard_setup.json",[791,2816,930],{"class":805},[791,2818,939],{"class":805},[791,2820,2821,2823,2825,2827,2829,2831,2833,2836],{"class":793,"line":968},[791,2822,975],{"class":801},[791,2824,771],{"class":805},[791,2826,854],{"class":980},[791,2828,771],{"class":805},[791,2830,2777],{"class":838},[791,2832,851],{"class":805},[791,2834,2835],{"class":838},"deck_path",[791,2837,939],{"class":805},[756,2839,2840],{},"The JSON file is saved with indentation for readability and can be committed to version control systems.",[1708,2842,2844],{"id":2843},"loading-deck-from-file","Loading Deck from File",[756,2846,2506,2847,2850],{},[788,2848,2849],{},"load()"," class method to restore a deck from a JSON file:",[781,2852,2854],{"className":783,"code":2853,"language":785,"meta":786,"style":786},"from unitelabs.liquid_handling.hamilton.modules import HamiltonDeck\n\n# Load deck from file\nloaded_deck = HamiltonDeck.load(\"my_deck_layout.json\")\nprint(loaded_deck.summary())\n",[788,2855,2856,2878,2882,2887,2911],{"__ignoreMap":786},[791,2857,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876],{"class":793,"line":794},[791,2859,798],{"class":797},[791,2861,802],{"class":801},[791,2863,771],{"class":805},[791,2865,808],{"class":801},[791,2867,771],{"class":805},[791,2869,975],{"class":801},[791,2871,771],{"class":805},[791,2873,2665],{"class":801},[791,2875,816],{"class":797},[791,2877,819],{"class":801},[791,2879,2880],{"class":793,"line":822},[791,2881,826],{"emptyLinePlaceholder":825},[791,2883,2884],{"class":793,"line":829},[791,2885,2886],{"class":909},"# Load deck from file\n",[791,2888,2889,2892,2894,2896,2898,2901,2903,2905,2907,2909],{"class":793,"line":845},[791,2890,2891],{"class":801},"loaded_deck ",[791,2893,835],{"class":805},[791,2895,839],{"class":801},[791,2897,771],{"class":805},[791,2899,2900],{"class":838},"load",[791,2902,851],{"class":805},[791,2904,930],{"class":805},[791,2906,2784],{"class":933},[791,2908,930],{"class":805},[791,2910,939],{"class":805},[791,2912,2913,2915,2917,2920,2922,2924],{"class":793,"line":942},[791,2914,848],{"class":838},[791,2916,851],{"class":805},[791,2918,2919],{"class":838},"loaded_deck",[791,2921,771],{"class":805},[791,2923,859],{"class":838},[791,2925,862],{"class":805},[2927,2928,2929],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":786,"searchDepth":794,"depth":822,"links":2931},[2932,2933,2934,2937,2940],{"id":775,"depth":822,"text":776},{"id":989,"depth":822,"text":990},{"id":1451,"depth":822,"text":1452,"children":2935},[2936],{"id":1710,"depth":829,"text":1711},{"id":1991,"depth":822,"text":1452,"children":2938},[2939],{"id":2225,"depth":829,"text":1711},{"id":2464,"depth":822,"text":2465,"children":2941},[2942,2943,2944,2945],{"id":2502,"depth":829,"text":2503},{"id":2634,"depth":829,"text":2635},{"id":2731,"depth":829,"text":2732},{"id":2843,"depth":829,"text":2844},"Compose a deck from carriers and labware, configure track bounds, and place carriers at specific coordinates.","md",null,{},{"title":225,"description":2946},"uk_hhMugdRyf-MAHQqOuel4J9fwoMLYdDRnmF7frq3s",[2953,2955],{"title":217,"path":218,"stem":219,"description":2954},"Define custom plate carriers, tip carriers, trough carriers, and plate adapters for the deck.",{"title":229,"path":230,"stem":231,"description":2956},"Persist deck configurations to JSON, reload them across workflow runs, and bundle them alongside your workflow code.",1783607767834]