[{"data":1,"prerenderedAt":2226},["ShallowReactive",2],{"navigation":3,"\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck":909,"\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck-surround":2221},[4,59,188,271,445,591,760,791],{"title":5,"type":6,"device":6,"path":7,"stem":8,"children":9,"page":41},"Get Started",null,"\u002Fget-started\u002F","01.get-started",[10,15,42,47,51,55],{"title":11,"path":12,"stem":13,"type":14,"device":6},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome\u002F","01.get-started\u002F00.welcome","landing",{"title":16,"type":6,"device":6,"path":17,"stem":18,"children":19,"page":41},"Setup","\u002Fget-started\u002Fsetup\u002F","01.get-started\u002F01.setup",[20,25,29,33,37],{"title":21,"path":22,"stem":23,"type":24,"device":6},"Get access","\u002Fget-started\u002Fsetup\u002Fget-access\u002F","01.get-started\u002F01.setup\u002F00.get-access","howto",{"title":26,"path":27,"stem":28,"type":24,"device":6},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F","01.get-started\u002F01.setup\u002F10.groundcontrol",{"title":30,"path":31,"stem":32,"type":24,"device":6},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform\u002F","01.get-started\u002F01.setup\u002F20.connect-to-platform",{"title":34,"path":35,"stem":36,"type":24,"device":6},"Set up your development machine","\u002Fget-started\u002Fsetup\u002Fdeveloper-machine\u002F","01.get-started\u002F01.setup\u002F30.developer-machine",{"title":38,"path":39,"stem":40,"type":24,"device":6},"SDK installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F","01.get-started\u002F01.setup\u002F40.sdk-installation",false,{"title":43,"path":44,"stem":45,"type":46,"device":6},"Control a device","\u002Fget-started\u002Fcontrol-a-device\u002F","01.get-started\u002F02.control-a-device","tutorial",{"title":48,"path":49,"stem":50,"type":46,"device":6},"Liquid handling as code","\u002Fget-started\u002Fliquid-handling-as-code\u002F","01.get-started\u002F03.liquid-handling-as-code",{"title":52,"path":53,"stem":54,"type":46,"device":6},"Automate your workflows","\u002Fget-started\u002Fautomate-your-workflows\u002F","01.get-started\u002F04.automate-your-workflows",{"title":56,"path":57,"stem":58,"type":6,"device":6},"Self-Paced Setup Guide","\u002Fget-started\u002Fself-onboarding\u002F","01.get-started\u002F90.self-onboarding",{"title":60,"type":6,"device":6,"path":61,"stem":62,"children":63,"page":41},"How-to","\u002Fhow-to\u002F","02.how-to",[64,118,163,180],{"title":65,"type":6,"device":6,"path":66,"stem":67,"children":68,"page":41},"Connectors and devices","\u002Fhow-to\u002Fintegrate\u002F","02.how-to\u002F02.integrate",[69,102],{"title":70,"type":6,"device":6,"path":71,"stem":72,"children":73,"page":41},"Connect a device","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device",[74,78,82,86,90,94,98],{"title":75,"path":76,"stem":77,"type":24,"device":6},"Connector Configuration","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fconnector-configuration\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F10.connector-configuration",{"title":79,"path":80,"stem":81,"type":24,"device":6},"With an executable","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fwith-an-executable\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F20.with-an-executable",{"title":83,"path":84,"stem":85,"type":24,"device":6},"From source","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Ffrom-source\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F30.from-source",{"title":87,"path":88,"stem":89,"type":24,"device":6},"Build your own","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fbuild-yourself\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F40.build-yourself",{"title":91,"path":92,"stem":93,"type":24,"device":6},"Headless install","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fheadless-install\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F50.headless-install",{"title":95,"path":96,"stem":97,"type":24,"device":6},"Raspberry Pi","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fraspberry-pi\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F55.raspberry-pi",{"title":99,"path":100,"stem":101,"type":24,"device":6},"Multi-device Networking","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fmultiple-devices\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F60.multiple-devices",{"title":103,"type":6,"device":6,"path":104,"stem":105,"children":106,"page":41},"Use a device","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device",[107,110,114],{"title":26,"path":108,"stem":109,"type":24,"device":6},"\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fgroundcontrol\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F10.groundcontrol",{"title":111,"path":112,"stem":113,"type":24,"device":6},"Platform","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fplatform\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F20.platform",{"title":115,"path":116,"stem":117,"type":24,"device":6},"UniteLabs SDK & REST API","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fpython\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F30.python",{"title":119,"type":6,"device":6,"path":120,"stem":121,"children":122,"page":41},"Workflows","\u002Fhow-to\u002Fautomate\u002F","02.how-to\u002F07.automate",[123,127,131,135,139,143,147,151,155,159],{"title":124,"path":125,"stem":126,"type":24,"device":6},"Deploy a workflow","\u002Fhow-to\u002Fautomate\u002Fdeploy-a-workflow\u002F","02.how-to\u002F07.automate\u002F30.deploy-a-workflow",{"title":128,"path":129,"stem":130,"type":24,"device":6},"Run a workflow","\u002Fhow-to\u002Fautomate\u002Frun-a-workflow\u002F","02.how-to\u002F07.automate\u002F35.run-a-workflow",{"title":132,"path":133,"stem":134,"type":24,"device":6},"CI\u002FCD for workflows","\u002Fhow-to\u002Fautomate\u002Fcicd-for-workflows\u002F","02.how-to\u002F07.automate\u002F40.cicd-for-workflows",{"title":136,"path":137,"stem":138,"type":24,"device":6},"HITL basics","\u002Fhow-to\u002Fautomate\u002Fbasic-hitl\u002F","02.how-to\u002F07.automate\u002F50.basic-hitl",{"title":140,"path":141,"stem":142,"type":24,"device":6},"Slack notifications and operator confirmation","\u002Fhow-to\u002Fautomate\u002Fslack-notifications\u002F","02.how-to\u002F07.automate\u002F52.slack-notifications",{"title":144,"path":145,"stem":146,"type":24,"device":6},"Typed operator inputs","\u002Fhow-to\u002Fautomate\u002Ftyped-operator-inputs\u002F","02.how-to\u002F07.automate\u002F55.typed-operator-inputs",{"title":148,"path":149,"stem":150,"type":24,"device":6},"Pause and resume a run","\u002Fhow-to\u002Fautomate\u002Fpause-and-resume\u002F","02.how-to\u002F07.automate\u002F57.pause-and-resume",{"title":152,"path":153,"stem":154,"type":24,"device":6},"Error recovery","\u002Fhow-to\u002Fautomate\u002Fbasic-error-handling\u002F","02.how-to\u002F07.automate\u002F60.basic-error-handling",{"title":156,"path":157,"stem":158,"type":24,"device":6},"Advanced error handling","\u002Fhow-to\u002Fautomate\u002Fadvanced-error-handling\u002F","02.how-to\u002F07.automate\u002F70.advanced-error-handling",{"title":160,"path":161,"stem":162,"type":24,"device":6},"Emit lineage events","\u002Fhow-to\u002Fautomate\u002Femitting-lineage-events\u002F","02.how-to\u002F07.automate\u002F90.emitting-lineage-events",{"title":164,"type":6,"device":6,"path":165,"stem":166,"children":167,"page":41},"Data","\u002Fhow-to\u002Fobserve\u002F","02.how-to\u002F08.observe",[168,172,176],{"title":169,"path":170,"stem":171,"type":24,"device":6},"File System Connector","\u002Fhow-to\u002Fobserve\u002Ffilesystem-connector\u002F","02.how-to\u002F08.observe\u002F10.filesystem-connector",{"title":173,"path":174,"stem":175,"type":24,"device":6},"Building an ETL","\u002Fhow-to\u002Fobserve\u002Fbuilding-an-etl\u002F","02.how-to\u002F08.observe\u002F20.building-an-etl",{"title":177,"path":178,"stem":179,"type":24,"device":6},"Read lineage events","\u002Fhow-to\u002Fobserve\u002Freading-lineage-events\u002F","02.how-to\u002F08.observe\u002F30.reading-lineage-events",{"title":111,"type":6,"device":6,"path":181,"stem":182,"children":183,"page":41},"\u002Fhow-to\u002Fplatform\u002F","02.how-to\u002F09.platform",[184],{"title":185,"path":186,"stem":187,"type":24,"device":6},"UniteLabs Desktop","\u002Fhow-to\u002Fplatform\u002Funitelabs-desktop\u002F","02.how-to\u002F09.platform\u002F10.unitelabs-desktop",{"title":189,"type":6,"device":6,"path":190,"stem":191,"children":192},"Technical Reference","\u002Ftechnical-reference\u002F","03.technical-reference",[193,196,201,213,226,235,244,253,262],{"title":194,"path":190,"stem":195,"type":14,"device":6},"Overview","03.technical-reference\u002Findex",{"title":197,"path":198,"stem":199,"type":200,"device":6},"REST API","\u002Ftechnical-reference\u002Frest-api\u002F","03.technical-reference\u002F01.rest-api","reference",{"title":119,"type":6,"device":6,"path":202,"stem":203,"children":204,"page":41},"\u002Ftechnical-reference\u002Fautomate\u002F","03.technical-reference\u002F07.automate",[205,209],{"title":206,"path":207,"stem":208,"type":200,"device":6},"Workflow template","\u002Ftechnical-reference\u002Fautomate\u002Fworkflow-template\u002F","03.technical-reference\u002F07.automate\u002F05.workflow-template",{"title":210,"path":211,"stem":212,"type":200,"device":6},"Workflows REST API","\u002Ftechnical-reference\u002Fautomate\u002Fworkflows-api\u002F","03.technical-reference\u002F07.automate\u002F80.workflows-api",{"title":26,"type":6,"device":6,"path":214,"stem":215,"children":216},"\u002Ftechnical-reference\u002Fgroundcontrol\u002F","03.technical-reference\u002F10.groundcontrol\u002Findex",[217,218,222],{"title":194,"path":214,"stem":215,"type":14,"device":6},{"title":219,"path":220,"stem":221,"type":200,"device":6},"Network requirements","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fnetwork-requirements\u002F","03.technical-reference\u002F10.groundcontrol\u002F10.network-requirements",{"title":223,"path":224,"stem":225,"type":200,"device":6},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog\u002F","03.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":227,"type":6,"device":6,"path":228,"stem":229,"children":230},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk\u002F","03.technical-reference\u002F20.python-sdk\u002Findex",[231,232],{"title":194,"path":228,"stem":229,"type":14,"device":6},{"title":223,"path":233,"stem":234,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog\u002F","03.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":236,"type":6,"device":6,"path":237,"stem":238,"children":239},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002Findex",[240,241],{"title":194,"path":237,"stem":238,"type":14,"device":6},{"title":223,"path":242,"stem":243,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":245,"type":6,"device":6,"path":246,"stem":247,"children":248},"Labware","\u002Ftechnical-reference\u002Flabware\u002F","03.technical-reference\u002F40.labware\u002Findex",[249,250],{"title":194,"path":246,"stem":247,"type":14,"device":6},{"title":223,"path":251,"stem":252,"type":200,"device":6},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog\u002F","03.technical-reference\u002F40.labware\u002F20.changelog",{"title":254,"type":6,"device":6,"path":255,"stem":256,"children":257},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus\u002F","03.technical-reference\u002F50.python-omnibus\u002Findex",[258,259],{"title":194,"path":255,"stem":256,"type":14,"device":6},{"title":223,"path":260,"stem":261,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog\u002F","03.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":263,"type":6,"device":6,"path":264,"stem":265,"children":266},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk\u002F","03.technical-reference\u002F60.python-cdk\u002Findex",[267,268],{"title":194,"path":264,"stem":265,"type":14,"device":6},{"title":223,"path":269,"stem":270,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog\u002F","03.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":272,"type":6,"device":6,"path":273,"stem":274,"children":275,"page":41},"Concepts","\u002Fconcepts\u002F","04.concepts",[276,315,339,383,422],{"title":277,"type":6,"device":6,"path":278,"stem":279,"children":280,"page":41},"Labs as code","\u002Fconcepts\u002Flabs-as-code\u002F","04.concepts\u002F01.labs-as-code",[281,286,290],{"title":282,"path":283,"stem":284,"type":285,"device":6},"Lab as Code","\u002Fconcepts\u002Flabs-as-code\u002Fwhy-code\u002F","04.concepts\u002F01.labs-as-code\u002F00.why-code","explanation",{"title":287,"path":288,"stem":289,"type":285,"device":6},"How it works","\u002Fconcepts\u002Flabs-as-code\u002Fhow-it-works\u002F","04.concepts\u002F01.labs-as-code\u002F01.how-it-works",{"title":291,"type":6,"device":6,"path":292,"stem":293,"children":294,"page":41},"Use Cases","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases",[295,299,303,307,311],{"title":296,"path":297,"stem":298,"type":285,"device":6},"Instrument Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Flow-level-instrument-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":300,"path":301,"stem":302,"type":285,"device":6},"Multi-device Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fmulti-device-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F20.multi-device-control",{"title":304,"path":305,"stem":306,"type":285,"device":6},"Workflow Orchestration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fworkflow-orchestration\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F30.workflow-orchestration",{"title":308,"path":309,"stem":310,"type":285,"device":6},"Custom Apps and LIMS Integration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fcustom-apps-lims\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F40.custom-apps-lims",{"title":312,"path":313,"stem":314,"type":285,"device":6},"Scale and Fleet Management","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fscale-and-fleet\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F50.scale-and-fleet",{"title":65,"type":6,"device":6,"path":316,"stem":317,"children":318,"page":41},"\u002Fconcepts\u002Fintegrate\u002F","04.concepts\u002F02.integrate",[319,323,327,331,335],{"title":320,"path":321,"stem":322,"type":285,"device":6},"Device","\u002Fconcepts\u002Fintegrate\u002Fdevice\u002F","04.concepts\u002F02.integrate\u002F05.device",{"title":324,"path":325,"stem":326,"type":285,"device":6},"Connector","\u002Fconcepts\u002Fintegrate\u002Fconnector\u002F","04.concepts\u002F02.integrate\u002F10.connector",{"title":328,"path":329,"stem":330,"type":285,"device":6},"Module","\u002Fconcepts\u002Fintegrate\u002Fmodule\u002F","04.concepts\u002F02.integrate\u002F20.module",{"title":332,"path":333,"stem":334,"type":285,"device":6},"Action","\u002Fconcepts\u002Fintegrate\u002Faction\u002F","04.concepts\u002F02.integrate\u002F30.action",{"title":336,"path":337,"stem":338,"type":285,"device":6},"Subscription","\u002Fconcepts\u002Fintegrate\u002Fsubscription\u002F","04.concepts\u002F02.integrate\u002F40.subscription",{"title":340,"type":6,"device":6,"path":341,"stem":342,"children":343,"page":41},"Liquid handling and robots","\u002Fconcepts\u002Foperate\u002F","04.concepts\u002F03.operate",[344,348,352,356,359,363,367,371,375,379],{"title":345,"path":346,"stem":347,"type":285,"device":6},"Liquid Handling","\u002Fconcepts\u002Foperate\u002Fliquid-handling\u002F","04.concepts\u002F03.operate\u002F10.liquid-handling",{"title":349,"path":350,"stem":351,"type":285,"device":6},"Modules","\u002Fconcepts\u002Foperate\u002Fmodules\u002F","04.concepts\u002F03.operate\u002F20.modules",{"title":353,"path":354,"stem":355,"type":285,"device":6},"Deck","\u002Fconcepts\u002Foperate\u002Fdeck\u002F","04.concepts\u002F03.operate\u002F30.deck",{"title":245,"path":357,"stem":358,"type":285,"device":6},"\u002Fconcepts\u002Foperate\u002Flabware\u002F","04.concepts\u002F03.operate\u002F40.labware",{"title":360,"path":361,"stem":362,"type":285,"device":6},"Liquids","\u002Fconcepts\u002Foperate\u002Fliquids\u002F","04.concepts\u002F03.operate\u002F50.liquids",{"title":364,"path":365,"stem":366,"type":285,"device":6},"Liquid Classes","\u002Fconcepts\u002Foperate\u002Fliquid-classes\u002F","04.concepts\u002F03.operate\u002F60.liquid-classes",{"title":368,"path":369,"stem":370,"type":285,"device":6},"Parameter Sets","\u002Fconcepts\u002Foperate\u002Fparameter-sets\u002F","04.concepts\u002F03.operate\u002F65.parameter-sets",{"title":372,"path":373,"stem":374,"type":285,"device":6},"Tips and Tip Tracking","\u002Fconcepts\u002Foperate\u002Ftips\u002F","04.concepts\u002F03.operate\u002F70.tips",{"title":376,"path":377,"stem":378,"type":285,"device":6},"Simulation","\u002Fconcepts\u002Foperate\u002Fsimulation\u002F","04.concepts\u002F03.operate\u002F80.simulation",{"title":380,"path":381,"stem":382,"type":285,"device":6},"Error Handling","\u002Fconcepts\u002Foperate\u002Ferror-handling\u002F","04.concepts\u002F03.operate\u002F90.error-handling",{"title":119,"type":6,"device":6,"path":384,"stem":385,"children":386,"page":41},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[387,391,395,399,403,407,411,415,419],{"title":388,"path":389,"stem":390,"type":285,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":392,"path":393,"stem":394,"type":285,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":396,"path":397,"stem":398,"type":285,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":400,"path":401,"stem":402,"type":285,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":404,"path":405,"stem":406,"type":285,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":408,"path":409,"stem":410,"type":285,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":412,"path":413,"stem":414,"type":285,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":416,"path":417,"stem":418,"type":285,"device":6},"Human in the Loop","\u002Fconcepts\u002Fautomate\u002Fhuman-in-the-loop\u002F","04.concepts\u002F07.automate\u002F80.human-in-the-loop",{"title":380,"path":420,"stem":421,"type":285,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":164,"type":6,"device":6,"path":423,"stem":424,"children":425,"page":41},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[426,429,433,437,441],{"title":194,"path":427,"stem":428,"type":14,"device":6},"\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":430,"path":431,"stem":432,"type":285,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":434,"path":435,"stem":436,"type":285,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":438,"path":439,"stem":440,"type":285,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":442,"path":443,"stem":444,"type":285,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":446,"type":6,"device":6,"path":447,"stem":448,"children":449,"page":41},"Devices","\u002Fdevices\u002F","05.devices",[450,453,501,514,530,567],{"title":194,"path":451,"stem":452,"type":14,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":454,"path":455,"page":41,"children":456},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[457,478,488],{"title":458,"path":459,"stem":460,"type":200,"device":461},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":462,"vendor":463,"category":464,"connector":462,"package":465,"models":466,"communication":473,"vendor_software":6,"os":474},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[467,468,469,470,471,472],"BioShake 3000 \u002F 3000 elm \u002F 3000 elm DWP","BioShake 3000-T \u002F 3000-T elm","BioShake 5000 elm","BioShake D30 \u002F D30 elm \u002F D30-T \u002F D30-T elm","BioShake Q1 \u002F Q1 (1.2 mm) \u002F Q1 (3.0 mm) \u002F Q2","HeatPlate","serial (RS-232 over USB)",[475,476,477],"windows","linux","macos",{"title":479,"path":480,"stem":481,"type":200,"device":482},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":483,"vendor":463,"category":464,"connector":462,"package":465,"models":484,"communication":473,"vendor_software":6,"os":487},"qinstruments-coldplate",[485,486],"ColdPlate","ColdPlate slim",[475,476,477],{"title":489,"path":490,"stem":491,"type":200,"device":492},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":493,"vendor":494,"category":464,"connector":495,"models":496},"inheco-thermoshake","Inheco","inheco-tec-controller",[497,498,499,500],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":502,"path":503,"page":41,"children":504},"Incubation","\u002Fdevices\u002Fincubation\u002F",[505],{"title":506,"path":507,"stem":508,"type":200,"device":509},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":510,"vendor":494,"category":502,"connector":510,"models":511},"inheco-scila",[512,513],"SCILA","SCILA MIX 2-gas mixing device",{"title":515,"path":516,"page":41,"children":517},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[518],{"title":519,"path":520,"stem":521,"type":200,"device":522},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":523,"vendor":494,"category":524,"connector":523,"models":525},"inheco-odtc","Thermal Cycler",[526,527,528,529],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":531,"path":532,"page":41,"children":533},"Readers","\u002Fdevices\u002Freaders\u002F",[534,543,552],{"title":535,"path":536,"stem":537,"type":200,"device":538},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":539,"vendor":540,"category":541,"connector":542},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":544,"path":545,"stem":546,"type":200,"device":547},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":548,"vendor":540,"category":541,"connector":549,"models":550},"biotek-synergy-h1","agilent-synergy-h1",[551],"BioTek Synergy H1",{"title":553,"path":554,"stem":555,"type":200,"device":556},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":557,"vendor":558,"category":541,"connector":557,"package":559,"models":560,"communication":564,"vendor_software":565,"os":566},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[561,562,563],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[475,476,477],{"title":568,"path":569,"page":41,"children":570},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[571,581],{"title":572,"path":573,"stem":574,"type":200,"device":575},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":576,"vendor":463,"category":577,"connector":462,"package":465,"models":578,"communication":473,"vendor_software":6,"os":580},"qinstruments-tiltstation","Plate Tilting",[579],"TiltStation",[475,476,477],{"title":582,"path":583,"stem":584,"type":200,"device":585},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":586,"vendor":463,"category":587,"connector":462,"package":465,"models":588,"communication":473,"vendor_software":6,"os":590},"qinstruments-turnstation","Plate Rotating",[589],"TurnStation",[475,476,477],{"title":592,"type":6,"device":6,"path":593,"stem":594,"children":595,"page":41},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[596,599,611,635,638,679,704,721,738],{"title":194,"path":597,"stem":598,"type":14,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":353,"type":6,"device":6,"path":600,"stem":601,"children":602,"page":41},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[603,607],{"title":604,"path":605,"stem":606,"type":24,"device":6},"Building a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F10.building-a-deck",{"title":608,"path":609,"stem":610,"type":24,"device":6},"Save\u002FLoad a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fsave-load-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F20.save-load-deck",{"title":612,"type":6,"device":6,"path":613,"stem":614,"children":615,"page":41},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[616,620,624,628,631],{"title":617,"path":618,"stem":619,"type":24,"device":6},"Basic Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F10.basic-pipetting",{"title":621,"path":622,"stem":623,"type":24,"device":6},"Advanced Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fadvanced-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F20.advanced-pipetting",{"title":625,"path":626,"stem":627,"type":24,"device":6},"Tip Handling","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F30.tip-handling",{"title":364,"path":629,"stem":630,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":632,"path":633,"stem":634,"type":24,"device":6},"Labware Transport","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Flabware-transport\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F50.labware-transport",{"title":376,"path":636,"stem":637,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":639,"type":6,"device":6,"path":640,"stem":641,"children":642,"page":41},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[643,647,651,655,659,663,667,671,675],{"title":644,"path":645,"stem":646,"type":24,"device":6},"Positioning & Movement","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fpositioning\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F10.positioning",{"title":648,"path":649,"stem":650,"type":24,"device":6},"Gripper Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcore-gripper\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F20.core-gripper",{"title":652,"path":653,"stem":654,"type":24,"device":6},"iSWAP Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fiswap\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F30.iswap",{"title":656,"path":657,"stem":658,"type":24,"device":6},"Using TADM","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Ftadm\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F40.tadm",{"title":660,"path":661,"stem":662,"type":24,"device":6},"Autoload Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fautoload\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F50.autoload",{"title":664,"path":665,"stem":666,"type":24,"device":6},"Waste Block","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fwaste-block\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F60.waste-block",{"title":668,"path":669,"stem":670,"type":24,"device":6},"Complex Mixing","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F66.complex-mixing",{"title":672,"path":673,"stem":674,"type":24,"device":6},"Teaching Gripper Paddle Positions","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fgripper-positions\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F70.gripper-positions",{"title":676,"path":677,"stem":678,"type":24,"device":6},"Training a Custom Deck Position With the iSWAP","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcustom-deck-position\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F75.custom-deck-position",{"title":680,"type":6,"device":6,"path":681,"stem":682,"children":683,"page":41},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[684,688,692,696,700],{"title":685,"path":686,"stem":687,"type":24,"device":6},"Waste Configuration","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fwaste-configuration\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F05.waste-configuration",{"title":689,"path":690,"stem":691,"type":24,"device":6},"Covers and Lights","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fcovers-and-lights\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F10.covers-and-lights",{"title":693,"path":694,"stem":695,"type":24,"device":6},"IDL Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fidl\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F20.idl",{"title":697,"path":698,"stem":699,"type":24,"device":6},"IPG Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fipg\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F30.ipg",{"title":701,"path":702,"stem":703,"type":24,"device":6},"XL Pipettes","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fxl-channels\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F40.xl-channels",{"title":705,"type":6,"device":6,"path":706,"stem":707,"children":708,"page":41},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[709,712,715,718],{"title":625,"path":710,"stem":711,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F10.tip-handling",{"title":617,"path":713,"stem":714,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F20.basic-pipetting",{"title":364,"path":716,"stem":717,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F25.liquid-classes",{"title":648,"path":719,"stem":720,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F30.using-the-gripper",{"title":722,"type":6,"device":6,"path":723,"stem":724,"children":725,"page":41},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[726,730,734],{"title":727,"path":728,"stem":729,"type":24,"device":6},"Connect & Run a Method","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fconnect-and-run\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F10.connect-and-run",{"title":731,"path":732,"stem":733,"type":24,"device":6},"Sending XML Commands","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fsending-xml-commands\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":735,"path":736,"stem":737,"type":24,"device":6},"Full Workflow Example","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Ffull-workflow-example\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":739,"type":6,"device":6,"path":740,"stem":741,"children":742,"page":41},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[743,747,750,753,757],{"title":744,"path":745,"stem":746,"type":24,"device":6},"Deck & Carriers","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fdeck-and-carriers\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F10.deck-and-carriers",{"title":625,"path":748,"stem":749,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F20.tip-handling",{"title":617,"path":751,"stem":752,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F30.basic-pipetting",{"title":754,"path":755,"stem":756,"type":24,"device":6},"Using the Gripper (RoMa)","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F40.using-the-gripper",{"title":364,"path":758,"stem":759,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F50.liquid-classes",{"title":245,"type":6,"device":6,"path":761,"stem":762,"children":763,"page":41},"\u002Flabware\u002F","07.labware",[764,767,771,775,779,783,787],{"title":194,"path":765,"stem":766,"type":14,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":768,"path":769,"stem":770,"type":200,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":772,"path":773,"stem":774,"type":200,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":776,"path":777,"stem":778,"type":200,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":780,"path":781,"stem":782,"type":200,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":784,"path":785,"stem":786,"type":200,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":788,"path":789,"stem":790,"type":200,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":792,"type":6,"device":6,"path":793,"stem":794,"children":795},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[796,798,822,855,863,903],{"title":194,"path":793,"stem":797,"type":14,"device":6},"20.connector-development\u002Findex",{"title":799,"path":800,"stem":801,"children":802,"page":41},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[803,806,810,814,818],{"title":194,"path":804,"stem":805,"type":285,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":807,"path":808,"stem":809,"type":24,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":811,"path":812,"stem":813,"type":24,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":815,"path":816,"stem":817,"type":24,"device":6},"Python Environment and Project Management","\u002Fconnector-development\u002Fgetting-started\u002Fpython-environments\u002F","20.connector-development\u002F10.getting-started\u002F35.python-environments",{"title":819,"path":820,"stem":821,"type":24,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":823,"path":824,"stem":825,"children":826,"page":41},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[827,831,835,839,843,847,851],{"title":828,"path":829,"stem":830,"type":46,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":832,"path":833,"stem":834,"type":46,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":836,"path":837,"stem":838,"type":46,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":840,"path":841,"stem":842,"type":46,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":844,"path":845,"stem":846,"type":46,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":848,"path":849,"stem":850,"type":46,"device":6},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure\u002F","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":852,"path":853,"stem":854,"type":46,"device":6},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication\u002F","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":272,"type":6,"device":6,"path":856,"stem":857,"children":858,"page":41},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[859],{"title":860,"path":861,"stem":862,"type":285,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002Fsila",{"title":864,"path":865,"stem":866,"children":867,"page":41},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[868,872,876,880,884,888,892,895,899],{"title":869,"path":870,"stem":871,"type":24,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":873,"path":874,"stem":875,"type":24,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":877,"path":878,"stem":879,"type":24,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":881,"path":882,"stem":883,"type":24,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":885,"path":886,"stem":887,"type":24,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":889,"path":890,"stem":891,"type":24,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":380,"path":893,"stem":894,"type":24,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":896,"path":897,"stem":898,"type":24,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":900,"path":901,"stem":902,"type":24,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":904,"path":905,"stem":906,"children":907,"type":6,"device":6},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[908],{"title":904,"path":905,"stem":906,"type":200,"device":6},{"id":910,"title":604,"body":911,"description":2215,"device":6,"extension":2216,"links":6,"meta":2217,"navigation":971,"path":2218,"seo":2219,"stem":606,"type":24,"__hash__":2220},"docs\u002F06.liquid-handling-and-robots\u002F10.deck\u002F10.building-a-deck.md",{"type":912,"value":913,"toc":2202},"minimark",[914,922,929,934,937,995,998,1006,1009,1085,1089,1092,1196,1199,1205,1221,1237,1301,1304,1310,1313,1418,1424,1431,1435,1438,1445,1475,1478,1497,1504,1507,1618,1623,1630,1860,1864,1867,1895,1898,1902,1909,1983,1986,2000,2004,2010,2051,2054,2065,2069,2075,2140,2143,2147,2153,2198],[915,916,917,918,921],"p",{},"See ",[919,920,353],"a",{"href":354}," for the coordinate model and resource tree. This guide covers the procedural building blocks.",[915,923,924,925,928],{},"For device-specific origin details (where the zero point falls relative to the physical deck), see the device guides — e.g. ",[919,926,927],{"href":645},"Positioning and movement",".",[930,931,933],"h2",{"id":932},"defining-a-deck","Defining a Deck",[915,935,936],{},"Decks have a dimension that is constrained by the liquid handler space. When importing the deck directly as shown below, default constraints are applied.",[938,939,944],"pre",{"className":940,"code":941,"language":942,"meta":943,"style":943},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","from unitelabs.liquid_handling.hamilton import HamiltonDeck\n\ndeck = HamiltonDeck()\nprint(deck.summary())\n","python","",[945,946,947,966,973,985],"code",{"__ignoreMap":943},[948,949,952,956,960,963],"span",{"class":950,"line":951},"line",1,[948,953,955],{"class":954},"sxkbv","from",[948,957,959],{"class":958},"sc-9e"," unitelabs.liquid_handling.hamilton ",[948,961,962],{"class":954},"import",[948,964,965],{"class":958}," HamiltonDeck\n",[948,967,969],{"class":950,"line":968},2,[948,970,972],{"emptyLinePlaceholder":971},true,"\n",[948,974,976,979,982],{"class":950,"line":975},3,[948,977,978],{"class":958},"deck ",[948,980,981],{"class":954},"=",[948,983,984],{"class":958}," HamiltonDeck()\n",[948,986,988,992],{"class":950,"line":987},4,[948,989,991],{"class":990},"sOiAX","print",[948,993,994],{"class":958},"(deck.summary())\n",[915,996,997],{},"Which returns:",[938,999,1004],{"className":1000,"code":1002,"language":1003},[1001],"language-text","  Tracks  Name               ID          Capacity     Content        X-Range   Height\n======================================================================================\n  1 - 30  ──\n","text",[945,1005,1002],{"__ignoreMap":943},[915,1007,1008],{},"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.",[938,1010,1012],{"className":940,"code":1011,"language":942,"meta":943,"style":943},"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",[945,1013,1014,1025,1029,1035,1058,1063,1072,1077],{"__ignoreMap":943},[948,1015,1016,1018,1020,1022],{"class":950,"line":951},[948,1017,955],{"class":954},[948,1019,959],{"class":958},[948,1021,962],{"class":954},[948,1023,1024],{"class":958}," MicrolabSTAR\n",[948,1026,1027],{"class":950,"line":968},[948,1028,972],{"emptyLinePlaceholder":971},[948,1030,1031],{"class":950,"line":975},[948,1032,1034],{"class":1033},"sIsDC","# Initialize the Hamilton Microlab STAR\n",[948,1036,1037,1040,1042,1045,1049,1051,1055],{"class":950,"line":987},[948,1038,1039],{"class":958},"hamilton ",[948,1041,981],{"class":954},[948,1043,1044],{"class":958}," MicrolabSTAR(",[948,1046,1048],{"class":1047},"sNqAu","name",[948,1050,981],{"class":954},[948,1052,1054],{"class":1053},"sCx38","\"Microlab STAR\"",[948,1056,1057],{"class":958},")\n",[948,1059,1061],{"class":950,"line":1060},5,[948,1062,972],{"emptyLinePlaceholder":971},[948,1064,1066,1069],{"class":950,"line":1065},6,[948,1067,1068],{"class":954},"await",[948,1070,1071],{"class":958}," hamilton.initialize()\n",[948,1073,1075],{"class":950,"line":1074},7,[948,1076,972],{"emptyLinePlaceholder":971},[948,1078,1080,1082],{"class":950,"line":1079},8,[948,1081,991],{"class":990},[948,1083,1084],{"class":958},"(hamilton.deck.summary())\n",[930,1086,1088],{"id":1087},"adding-labware","Adding Labware",[915,1090,1091],{},"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.",[938,1093,1095],{"className":940,"code":1094,"language":942,"meta":943,"style":943},"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",[945,1096,1097,1107,1119,1131,1135,1143,1163,1178,1183,1189],{"__ignoreMap":943},[948,1098,1099,1101,1103,1105],{"class":950,"line":951},[948,1100,955],{"class":954},[948,1102,959],{"class":958},[948,1104,962],{"class":954},[948,1106,965],{"class":958},[948,1108,1109,1111,1114,1116],{"class":950,"line":968},[948,1110,955],{"class":954},[948,1112,1113],{"class":958}," unitelabs.labware ",[948,1115,962],{"class":954},[948,1117,1118],{"class":958}," Vector\n",[948,1120,1121,1123,1126,1128],{"class":950,"line":975},[948,1122,955],{"class":954},[948,1124,1125],{"class":958}," unitelabs.labware.hamilton ",[948,1127,962],{"class":954},[948,1129,1130],{"class":990}," TIP_CAR_480_A00\n",[948,1132,1133],{"class":950,"line":987},[948,1134,972],{"emptyLinePlaceholder":971},[948,1136,1137,1139,1141],{"class":950,"line":1060},[948,1138,978],{"class":958},[948,1140,981],{"class":954},[948,1142,984],{"class":958},[948,1144,1145,1148,1150,1153,1156,1158,1161],{"class":950,"line":1065},[948,1146,1147],{"class":958},"tip_carrier ",[948,1149,981],{"class":954},[948,1151,1152],{"class":958}," TIP_CAR_480_A00(",[948,1154,1155],{"class":1047},"identifier",[948,1157,981],{"class":954},[948,1159,1160],{"class":1053},"\"tip_carrier\"",[948,1162,1057],{"class":958},[948,1164,1165,1168,1171,1173,1176],{"class":950,"line":1074},[948,1166,1167],{"class":958},"deck.add(tip_carrier, ",[948,1169,1170],{"class":1047},"track",[948,1172,981],{"class":954},[948,1174,1175],{"class":990},"16",[948,1177,1057],{"class":958},[948,1179,1180],{"class":950,"line":1079},[948,1181,1182],{"class":1033},"# Alternatively the exact location can be set\n",[948,1184,1186],{"class":950,"line":1185},9,[948,1187,1188],{"class":1033},"# deck.add(tip_carrier, location=Vector(x=(16 - 1) * 22.5, y=63, z=0))\n",[948,1190,1192,1194],{"class":950,"line":1191},10,[948,1193,991],{"class":990},[948,1195,994],{"class":958},[915,1197,1198],{},"Now our deck looks like this:",[938,1200,1203],{"className":1201,"code":1202,"language":1003,"meta":943},[1001],"  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",[945,1204,1202],{"__ignoreMap":943},[1206,1207,1210],"callout",{"color":1208,"icon":1209},"info","i-heroicons-information-circle",[915,1211,1212,1216,1217,1220],{},[1213,1214,1215],"strong",{},"Dynamic max deck size and deck dimension",": When using a dedicated liquid handler class, like the ",[945,1218,1219],{},"MicrolabSTAR"," class, a deck is autogenerated and dynamically configured during the initialization process.",[915,1222,1223,1224,1228,1229,1232,1233,1236],{},"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 ",[1225,1226,1227],"em",{},"HamiltonTipRack_300",", then fill it with ",[1225,1230,1231],{},"HamiltonTip_300_Filter"," and then set the tip rack into the second slot (from behind) of the tip carrier we created earlier. The ",[1225,1234,1235],{},"tip_carrier"," object is linked to the deck.",[938,1238,1240],{"className":940,"code":1239,"language":942,"meta":943,"style":943},"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",[945,1241,1242,1253,1257,1275,1291,1295],{"__ignoreMap":943},[948,1243,1244,1246,1248,1250],{"class":950,"line":951},[948,1245,955],{"class":954},[948,1247,1125],{"class":958},[948,1249,962],{"class":954},[948,1251,1252],{"class":958}," HamiltonTip_300_Filter, HamiltonTipRack_300\n",[948,1254,1255],{"class":950,"line":968},[948,1256,972],{"emptyLinePlaceholder":971},[948,1258,1259,1262,1264,1267,1270,1272],{"class":950,"line":975},[948,1260,1261],{"class":958},"tip_rack ",[948,1263,981],{"class":954},[948,1265,1266],{"class":958}," HamiltonTipRack_300(",[948,1268,1269],{"class":1047},"filled_with",[948,1271,981],{"class":954},[948,1273,1274],{"class":958},"HamiltonTip_300_Filter)\n",[948,1276,1277,1280,1283,1286,1288],{"class":950,"line":987},[948,1278,1279],{"class":958},"tip_carrier[",[948,1281,1282],{"class":990},"1",[948,1284,1285],{"class":958},"] ",[948,1287,981],{"class":954},[948,1289,1290],{"class":958}," tip_rack\n",[948,1292,1293],{"class":950,"line":1060},[948,1294,972],{"emptyLinePlaceholder":971},[948,1296,1297,1299],{"class":950,"line":1065},[948,1298,991],{"class":990},[948,1300,994],{"class":958},[915,1302,1303],{},"Printing the deck summary shows that the tip rack and the tips were added successfully.",[938,1305,1308],{"className":1306,"code":1307,"language":1003},[1001],"  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",[945,1309,1307],{"__ignoreMap":943},[915,1311,1312],{},"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:",[938,1314,1316],{"className":940,"code":1315,"language":942,"meta":943,"style":943},"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",[945,1317,1318,1335,1347,1351,1361,1380,1394,1408,1412],{"__ignoreMap":943},[948,1319,1320,1322,1324,1326,1329,1332],{"class":950,"line":951},[948,1321,955],{"class":954},[948,1323,1125],{"class":958},[948,1325,962],{"class":954},[948,1327,1328],{"class":990}," TIP_CAR_480_A00",[948,1330,1331],{"class":958},", ",[948,1333,1334],{"class":990},"PLT_CAR_L5MD_A00\n",[948,1336,1337,1339,1342,1344],{"class":950,"line":968},[948,1338,955],{"class":954},[948,1340,1341],{"class":958}," unitelabs.labware.corning_costar ",[948,1343,962],{"class":954},[948,1345,1346],{"class":958}," Cos_96_FB\n",[948,1348,1349],{"class":950,"line":975},[948,1350,972],{"emptyLinePlaceholder":971},[948,1352,1353,1356,1358],{"class":950,"line":987},[948,1354,1355],{"class":958},"plate_1 ",[948,1357,981],{"class":954},[948,1359,1360],{"class":958}," Cos_96_FB()\n",[948,1362,1363,1366,1368,1371,1373,1375,1378],{"class":950,"line":1060},[948,1364,1365],{"class":958},"plate_carrier ",[948,1367,981],{"class":954},[948,1369,1370],{"class":958}," PLT_CAR_L5MD_A00(",[948,1372,1155],{"class":1047},[948,1374,981],{"class":954},[948,1376,1377],{"class":1053},"\"plate_carrier\"",[948,1379,1057],{"class":958},[948,1381,1382,1385,1387,1389,1391],{"class":950,"line":1065},[948,1383,1384],{"class":958},"plate_carrier[",[948,1386,1282],{"class":990},[948,1388,1285],{"class":958},[948,1390,981],{"class":954},[948,1392,1393],{"class":958}," plate_1\n",[948,1395,1396,1399,1401,1403,1406],{"class":950,"line":1074},[948,1397,1398],{"class":958},"deck.add(plate_carrier, ",[948,1400,1170],{"class":1047},[948,1402,981],{"class":954},[948,1404,1405],{"class":990},"10",[948,1407,1057],{"class":958},[948,1409,1410],{"class":950,"line":1079},[948,1411,972],{"emptyLinePlaceholder":971},[948,1413,1414,1416],{"class":950,"line":1185},[948,1415,991],{"class":990},[948,1417,994],{"class":958},[938,1419,1422],{"className":1420,"code":1421,"language":1003},[1001],"  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",[945,1423,1421],{"__ignoreMap":943},[915,1425,1426,1427,1430],{},"It is often required to create custom labware. See the ",[919,1428,1429],{"href":765},"custom labware guide"," for details.",[930,1432,1434],{"id":1433},"hamilton-deck-bounds","Hamilton Deck Bounds",[915,1436,1437],{},"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-RE 96 access.",[915,1439,1440,1441,1444],{},"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 ",[945,1442,1443],{},"None",":",[938,1446,1448],{"className":940,"code":1447,"language":942,"meta":943,"style":943},"await hamilton.deck.configure(min_track=None, max_track=None)\n",[945,1449,1450],{"__ignoreMap":943},[948,1451,1452,1454,1457,1460,1462,1464,1466,1469,1471,1473],{"class":950,"line":951},[948,1453,1068],{"class":954},[948,1455,1456],{"class":958}," hamilton.deck.configure(",[948,1458,1459],{"class":1047},"min_track",[948,1461,981],{"class":954},[948,1463,1443],{"class":990},[948,1465,1331],{"class":958},[948,1467,1468],{"class":1047},"max_track",[948,1470,981],{"class":954},[948,1472,1443],{"class":990},[948,1474,1057],{"class":958},[915,1476,1477],{},"You can also remove only one limit. For example, to allow only negative tracks:",[938,1479,1481],{"className":940,"code":1480,"language":942,"meta":943,"style":943},"await hamilton.deck.configure(min_track=None)\n",[945,1482,1483],{"__ignoreMap":943},[948,1484,1485,1487,1489,1491,1493,1495],{"class":950,"line":951},[948,1486,1068],{"class":954},[948,1488,1456],{"class":958},[948,1490,1459],{"class":1047},[948,1492,981],{"class":954},[948,1494,1443],{"class":990},[948,1496,1057],{"class":958},[1206,1498,1501],{"color":1499,"icon":1500},"error","i-heroicons-shield-exclamation",[915,1502,1503],{},"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-RE 96 can. Always verify that the intended module can physically reach the carrier positions you define.",[915,1505,1506],{},"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-RE 96 but not by individual pipetting channels:",[938,1508,1510],{"className":940,"code":1509,"language":942,"meta":943,"style":943},"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",[945,1511,1512,1522,1532,1536,1552,1558,1562,1567,1581,1585,1590,1606,1611],{"__ignoreMap":943},[948,1513,1514,1516,1518,1520],{"class":950,"line":951},[948,1515,955],{"class":954},[948,1517,959],{"class":958},[948,1519,962],{"class":954},[948,1521,1024],{"class":958},[948,1523,1524,1526,1528,1530],{"class":950,"line":968},[948,1525,955],{"class":954},[948,1527,1125],{"class":958},[948,1529,962],{"class":954},[948,1531,1130],{"class":990},[948,1533,1534],{"class":950,"line":975},[948,1535,972],{"emptyLinePlaceholder":971},[948,1537,1538,1540,1542,1544,1546,1548,1550],{"class":950,"line":987},[948,1539,1039],{"class":958},[948,1541,981],{"class":954},[948,1543,1044],{"class":958},[948,1545,1048],{"class":1047},[948,1547,981],{"class":954},[948,1549,1054],{"class":1053},[948,1551,1057],{"class":958},[948,1553,1554,1556],{"class":950,"line":1060},[948,1555,1068],{"class":954},[948,1557,1071],{"class":958},[948,1559,1560],{"class":950,"line":1065},[948,1561,972],{"emptyLinePlaceholder":971},[948,1563,1564],{"class":950,"line":1074},[948,1565,1566],{"class":1033},"# Remove the minimum track limit to allow negative tracks\n",[948,1568,1569,1571,1573,1575,1577,1579],{"class":950,"line":1079},[948,1570,1068],{"class":954},[948,1572,1456],{"class":958},[948,1574,1459],{"class":1047},[948,1576,981],{"class":954},[948,1578,1443],{"class":990},[948,1580,1057],{"class":958},[948,1582,1583],{"class":950,"line":1185},[948,1584,972],{"emptyLinePlaceholder":971},[948,1586,1587],{"class":950,"line":1191},[948,1588,1589],{"class":1033},"# Place the tip carrier starting at track -3\n",[948,1591,1593,1596,1598,1601,1604],{"class":950,"line":1592},11,[948,1594,1595],{"class":958},"hamilton.deck.add(TIP_CAR_480_A00(), ",[948,1597,1170],{"class":1047},[948,1599,1600],{"class":954},"=-",[948,1602,1603],{"class":990},"3",[948,1605,1057],{"class":958},[948,1607,1609],{"class":950,"line":1608},12,[948,1610,972],{"emptyLinePlaceholder":971},[948,1612,1614,1616],{"class":950,"line":1613},13,[948,1615,991],{"class":990},[948,1617,1084],{"class":958},[1619,1620,1622],"h3",{"id":1621},"custom-carrier-at-an-absolute-position","Custom Carrier at an Absolute Position",[915,1624,1625,1626,1629],{},"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 ",[919,1627,1628],{"href":677},"Training a Custom Deck Position","):",[938,1631,1633],{"className":940,"code":1632,"language":942,"meta":943,"style":943},"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",[945,1634,1635,1645,1649,1654,1676,1680,1685,1699,1709,1719,1723,1742,1746,1751,1796,1802,1813,1855],{"__ignoreMap":943},[948,1636,1637,1639,1641,1643],{"class":950,"line":951},[948,1638,955],{"class":954},[948,1640,1113],{"class":958},[948,1642,962],{"class":954},[948,1644,1118],{"class":958},[948,1646,1647],{"class":950,"line":968},[948,1648,972],{"emptyLinePlaceholder":971},[948,1650,1651],{"class":950,"line":975},[948,1652,1653],{"class":1033},"# Remove deck track limits\n",[948,1655,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674],{"class":950,"line":987},[948,1657,1068],{"class":954},[948,1659,1456],{"class":958},[948,1661,1459],{"class":1047},[948,1663,981],{"class":954},[948,1665,1443],{"class":990},[948,1667,1331],{"class":958},[948,1669,1468],{"class":1047},[948,1671,981],{"class":954},[948,1673,1443],{"class":990},[948,1675,1057],{"class":958},[948,1677,1678],{"class":950,"line":1060},[948,1679,972],{"emptyLinePlaceholder":971},[948,1681,1682],{"class":950,"line":1065},[948,1683,1684],{"class":1033},"# Carrier coordinates, measured or taught (e.g. by iSWAP)\n",[948,1686,1687,1690,1693,1696],{"class":950,"line":1074},[948,1688,1689],{"class":990},"CARRIER_X",[948,1691,1692],{"class":954}," =",[948,1694,1695],{"class":954}," -",[948,1697,1698],{"class":990},"53.7\n",[948,1700,1701,1704,1706],{"class":950,"line":1079},[948,1702,1703],{"class":990},"CARRIER_Y",[948,1705,1692],{"class":954},[948,1707,1708],{"class":990}," 89.0\n",[948,1710,1711,1714,1716],{"class":950,"line":1185},[948,1712,1713],{"class":990},"CARRIER_Z",[948,1715,1692],{"class":954},[948,1717,1718],{"class":990}," 209.3\n",[948,1720,1721],{"class":950,"line":1191},[948,1722,972],{"emptyLinePlaceholder":971},[948,1724,1725,1728,1730,1733,1735,1737,1740],{"class":950,"line":1592},[948,1726,1727],{"class":958},"custom_carrier ",[948,1729,981],{"class":954},[948,1731,1732],{"class":958}," CustomCarrier(",[948,1734,1155],{"class":1047},[948,1736,981],{"class":954},[948,1738,1739],{"class":1053},"\"custom_carrier\"",[948,1741,1057],{"class":958},[948,1743,1744],{"class":950,"line":1608},[948,1745,972],{"emptyLinePlaceholder":971},[948,1747,1748],{"class":950,"line":1613},[948,1749,1750],{"class":1033},"# Add the carrier at an absolute position, offset by the deck origin\n",[948,1752,1754,1757,1759,1762,1765,1768,1771,1773,1776,1778,1781,1783,1785,1787,1790,1792,1794],{"class":950,"line":1753},14,[948,1755,1756],{"class":958},"deck_location ",[948,1758,981],{"class":954},[948,1760,1761],{"class":958}," hamilton.deck.location ",[948,1763,1764],{"class":954},"or",[948,1766,1767],{"class":958}," Vector(",[948,1769,1770],{"class":1047},"x",[948,1772,981],{"class":954},[948,1774,1775],{"class":990},"0",[948,1777,1331],{"class":958},[948,1779,1780],{"class":1047},"y",[948,1782,981],{"class":954},[948,1784,1775],{"class":990},[948,1786,1331],{"class":958},[948,1788,1789],{"class":1047},"z",[948,1791,981],{"class":954},[948,1793,1775],{"class":990},[948,1795,1057],{"class":958},[948,1797,1799],{"class":950,"line":1798},15,[948,1800,1801],{"class":958},"hamilton.deck.add(\n",[948,1803,1805,1808,1810],{"class":950,"line":1804},16,[948,1806,1807],{"class":1047},"    labware",[948,1809,981],{"class":954},[948,1811,1812],{"class":958},"custom_carrier,\n",[948,1814,1816,1819,1821,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1849,1852],{"class":950,"line":1815},17,[948,1817,1818],{"class":1047},"    location",[948,1820,981],{"class":954},[948,1822,1823],{"class":958},"Vector(",[948,1825,1770],{"class":1047},[948,1827,981],{"class":954},[948,1829,1689],{"class":990},[948,1831,1331],{"class":958},[948,1833,1780],{"class":1047},[948,1835,981],{"class":954},[948,1837,1703],{"class":990},[948,1839,1331],{"class":958},[948,1841,1789],{"class":1047},[948,1843,981],{"class":954},[948,1845,1713],{"class":990},[948,1847,1848],{"class":958},") ",[948,1850,1851],{"class":954},"-",[948,1853,1854],{"class":958}," deck_location,\n",[948,1856,1858],{"class":950,"line":1857},18,[948,1859,1057],{"class":958},[930,1861,1863],{"id":1862},"serializing-and-deserializing-decks","Serializing and Deserializing Decks",[915,1865,1866],{},"Deck serialization allows you to save and restore deck configurations, enabling several useful workflows:",[1868,1869,1870,1877,1883,1889],"ul",{},[1871,1872,1873,1876],"li",{},[1213,1874,1875],{},"Sharing deck layouts"," across different workflows and team members",[1871,1878,1879,1882],{},[1213,1880,1881],{},"Persisting deck state"," between sessions for reproducibility",[1871,1884,1885,1888],{},[1213,1886,1887],{},"Version control"," for deck configurations using JSON files",[1871,1890,1891,1894],{},[1213,1892,1893],{},"Creating templates"," for common deck setups",[915,1896,1897],{},"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.",[1619,1899,1901],{"id":1900},"converting-deck-to-dictionary","Converting Deck to Dictionary",[915,1903,1904,1905,1908],{},"Use the ",[945,1906,1907],{},"to_json()"," method to convert a deck configuration to a JSON-compatible Python dictionary:",[938,1910,1912],{"className":940,"code":1911,"language":942,"meta":943,"style":943},"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",[945,1913,1914,1924,1928,1944,1950,1954,1959,1964,1968,1973],{"__ignoreMap":943},[948,1915,1916,1918,1920,1922],{"class":950,"line":951},[948,1917,955],{"class":954},[948,1919,959],{"class":958},[948,1921,962],{"class":954},[948,1923,1024],{"class":958},[948,1925,1926],{"class":950,"line":968},[948,1927,972],{"emptyLinePlaceholder":971},[948,1929,1930,1932,1934,1936,1938,1940,1942],{"class":950,"line":975},[948,1931,1039],{"class":958},[948,1933,981],{"class":954},[948,1935,1044],{"class":958},[948,1937,1048],{"class":1047},[948,1939,981],{"class":954},[948,1941,1054],{"class":1053},[948,1943,1057],{"class":958},[948,1945,1946,1948],{"class":950,"line":987},[948,1947,1068],{"class":954},[948,1949,1071],{"class":958},[948,1951,1952],{"class":950,"line":1060},[948,1953,972],{"emptyLinePlaceholder":971},[948,1955,1956],{"class":950,"line":1065},[948,1957,1958],{"class":1033},"# Configure your deck with carriers and labware\n",[948,1960,1961],{"class":950,"line":1074},[948,1962,1963],{"class":1033},"# ... (add carriers, tip racks, plates, etc.)\n",[948,1965,1966],{"class":950,"line":1079},[948,1967,972],{"emptyLinePlaceholder":971},[948,1969,1970],{"class":950,"line":1185},[948,1971,1972],{"class":1033},"# Convert deck to JSON-compatible dictionary\n",[948,1974,1975,1978,1980],{"class":950,"line":1191},[948,1976,1977],{"class":958},"deck_dict ",[948,1979,981],{"class":954},[948,1981,1982],{"class":958}," hamilton.deck.to_json()\n",[915,1984,1985],{},"The returned dictionary contains all deck information including:",[1868,1987,1988,1991,1994,1997],{},[1871,1989,1990],{},"Deck dimensions and constraints",[1871,1992,1993],{},"All installed carriers and their positions",[1871,1995,1996],{},"Nested labware structures (carriers → racks → tips\u002Fplates)",[1871,1998,1999],{},"Module lifecycle stages and configuration",[1619,2001,2003],{"id":2002},"creating-deck-from-dictionary","Creating Deck from Dictionary",[915,2005,1904,2006,2009],{},[945,2007,2008],{},"from_json()"," class method to create a deck from a JSON-compatible Python dictionary:",[938,2011,2013],{"className":940,"code":2012,"language":942,"meta":943,"style":943},"from unitelabs.liquid_handling.hamilton import HamiltonDeck\n\n# Load deck from dictionary\nrestored_deck = HamiltonDeck.from_json(deck_dict)\nprint(restored_deck.summary())\n",[945,2014,2015,2025,2029,2034,2044],{"__ignoreMap":943},[948,2016,2017,2019,2021,2023],{"class":950,"line":951},[948,2018,955],{"class":954},[948,2020,959],{"class":958},[948,2022,962],{"class":954},[948,2024,965],{"class":958},[948,2026,2027],{"class":950,"line":968},[948,2028,972],{"emptyLinePlaceholder":971},[948,2030,2031],{"class":950,"line":975},[948,2032,2033],{"class":1033},"# Load deck from dictionary\n",[948,2035,2036,2039,2041],{"class":950,"line":987},[948,2037,2038],{"class":958},"restored_deck ",[948,2040,981],{"class":954},[948,2042,2043],{"class":958}," HamiltonDeck.from_json(deck_dict)\n",[948,2045,2046,2048],{"class":950,"line":1060},[948,2047,991],{"class":990},[948,2049,2050],{"class":958},"(restored_deck.summary())\n",[915,2052,2053],{},"This creates a fully configured deck instance that preserves:",[1868,2055,2056,2059,2062],{},[1871,2057,2058],{},"Track index mapping",[1871,2060,2061],{},"Module lifecycle stages (INSTALLED, CONFIGURED, INITIALIZED, ACTIVE)",[1871,2063,2064],{},"All nested labware structures with complete fidelity",[1619,2066,2068],{"id":2067},"saving-deck-to-file","Saving Deck to File",[915,2070,1904,2071,2074],{},[945,2072,2073],{},"save()"," method to persist a deck configuration to a JSON file:",[938,2076,2078],{"className":940,"code":2077,"language":942,"meta":943,"style":943},"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",[945,2079,2080,2092,2096,2101,2111,2115,2120,2135],{"__ignoreMap":943},[948,2081,2082,2084,2087,2089],{"class":950,"line":951},[948,2083,955],{"class":954},[948,2085,2086],{"class":958}," pathlib ",[948,2088,962],{"class":954},[948,2090,2091],{"class":958}," Path\n",[948,2093,2094],{"class":950,"line":968},[948,2095,972],{"emptyLinePlaceholder":971},[948,2097,2098],{"class":950,"line":975},[948,2099,2100],{"class":1033},"# Save to file (accepts str or pathlib.Path)\n",[948,2102,2103,2106,2109],{"class":950,"line":987},[948,2104,2105],{"class":958},"hamilton.deck.save(",[948,2107,2108],{"class":1053},"\"my_deck_layout.json\"",[948,2110,1057],{"class":958},[948,2112,2113],{"class":950,"line":1060},[948,2114,972],{"emptyLinePlaceholder":971},[948,2116,2117],{"class":950,"line":1065},[948,2118,2119],{"class":1033},"# Or using pathlib\n",[948,2121,2122,2125,2127,2130,2133],{"class":950,"line":1074},[948,2123,2124],{"class":958},"deck_path ",[948,2126,981],{"class":954},[948,2128,2129],{"class":958}," Path(",[948,2131,2132],{"class":1053},"\"deck_layouts\u002Fstandard_setup.json\"",[948,2134,1057],{"class":958},[948,2136,2137],{"class":950,"line":1079},[948,2138,2139],{"class":958},"hamilton.deck.save(deck_path)\n",[915,2141,2142],{},"The JSON file is saved with indentation for readability and can be committed to version control systems.",[1619,2144,2146],{"id":2145},"loading-deck-from-file","Loading Deck from File",[915,2148,1904,2149,2152],{},[945,2150,2151],{},"load()"," class method to restore a deck from a JSON file:",[938,2154,2156],{"className":940,"code":2155,"language":942,"meta":943,"style":943},"from unitelabs.liquid_handling.hamilton import HamiltonDeck\n\n# Load deck from file\nloaded_deck = HamiltonDeck.load(\"my_deck_layout.json\")\nprint(loaded_deck.summary())\n",[945,2157,2158,2168,2172,2177,2191],{"__ignoreMap":943},[948,2159,2160,2162,2164,2166],{"class":950,"line":951},[948,2161,955],{"class":954},[948,2163,959],{"class":958},[948,2165,962],{"class":954},[948,2167,965],{"class":958},[948,2169,2170],{"class":950,"line":968},[948,2171,972],{"emptyLinePlaceholder":971},[948,2173,2174],{"class":950,"line":975},[948,2175,2176],{"class":1033},"# Load deck from file\n",[948,2178,2179,2182,2184,2187,2189],{"class":950,"line":987},[948,2180,2181],{"class":958},"loaded_deck ",[948,2183,981],{"class":954},[948,2185,2186],{"class":958}," HamiltonDeck.load(",[948,2188,2108],{"class":1053},[948,2190,1057],{"class":958},[948,2192,2193,2195],{"class":950,"line":1060},[948,2194,991],{"class":990},[948,2196,2197],{"class":958},"(loaded_deck.summary())\n",[2199,2200,2201],"style",{},"html pre.shiki code .sxkbv, html code.shiki .sxkbv{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .sc-9e, html code.shiki .sc-9e{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sOiAX, html code.shiki .sOiAX{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sIsDC, html code.shiki .sIsDC{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#8B949E}html pre.shiki code .sNqAu, html code.shiki .sNqAu{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFA657}html pre.shiki code .sCx38, html code.shiki .sCx38{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#A5D6FF}",{"title":943,"searchDepth":951,"depth":968,"links":2203},[2204,2205,2206,2209],{"id":932,"depth":968,"text":933},{"id":1087,"depth":968,"text":1088},{"id":1433,"depth":968,"text":1434,"children":2207},[2208],{"id":1621,"depth":975,"text":1622},{"id":1862,"depth":968,"text":1863,"children":2210},[2211,2212,2213,2214],{"id":1900,"depth":975,"text":1901},{"id":2002,"depth":975,"text":2003},{"id":2067,"depth":975,"text":2068},{"id":2145,"depth":975,"text":2146},"Compose a deck from carriers and labware, configure track bounds, and place carriers at specific coordinates.","md",{},"\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck",{"title":604,"description":2215},"ym0EoW9gTNhYZXvLcN7MMGyCdDYPLVnk5lyimops5ac",[2222,2224],{"title":592,"description":2223,"path":597},"Drive your liquid handler or robot from Python. Build the deck, pipette, rehearse in simulation, and use what's specific to your device.",{"title":608,"description":2225,"path":609},"Persist deck configurations to JSON, reload them across workflow runs, and bundle them alongside your workflow code.",1791294183785]