[{"data":1,"prerenderedAt":2267},["ShallowReactive",2],{"navigation":3,"\u002Flabware\u002Fhamilton\u002Fmfx-carriers":960,"\u002Flabware\u002Fhamilton\u002Fmfx-carriers-surround":2264},[4,59,188,271,449,613,802,842],{"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,387,426],{"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,383],{"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":384,"path":385,"stem":386,"type":285,"device":6},"Robot Arms","\u002Fconcepts\u002Foperate\u002Frobot-arms\u002F","04.concepts\u002F03.operate\u002F95.robot-arms",{"title":119,"type":6,"device":6,"path":388,"stem":389,"children":390,"page":41},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[391,395,399,403,407,411,415,419,423],{"title":392,"path":393,"stem":394,"type":285,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":396,"path":397,"stem":398,"type":285,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":400,"path":401,"stem":402,"type":285,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":404,"path":405,"stem":406,"type":285,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":408,"path":409,"stem":410,"type":285,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":412,"path":413,"stem":414,"type":285,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":416,"path":417,"stem":418,"type":285,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":420,"path":421,"stem":422,"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":424,"stem":425,"type":285,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":164,"type":6,"device":6,"path":427,"stem":428,"children":429,"page":41},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[430,433,437,441,445],{"title":194,"path":431,"stem":432,"type":14,"device":6},"\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":434,"path":435,"stem":436,"type":285,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":438,"path":439,"stem":440,"type":285,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":442,"path":443,"stem":444,"type":285,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":446,"path":447,"stem":448,"type":285,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":450,"type":6,"device":6,"path":451,"stem":452,"children":453,"page":41},"Devices","\u002Fdevices\u002F","05.devices",[454,457,505,518,534,571,595],{"title":194,"path":455,"stem":456,"type":14,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":458,"path":459,"page":41,"children":460},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[461,482,492],{"title":462,"path":463,"stem":464,"type":200,"device":465},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":466,"vendor":467,"category":468,"connector":466,"package":469,"models":470,"communication":477,"vendor_software":6,"os":478},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[471,472,473,474,475,476],"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)",[479,480,481],"windows","linux","macos",{"title":483,"path":484,"stem":485,"type":200,"device":486},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":487,"vendor":467,"category":468,"connector":466,"package":469,"models":488,"communication":477,"vendor_software":6,"os":491},"qinstruments-coldplate",[489,490],"ColdPlate","ColdPlate slim",[479,480,481],{"title":493,"path":494,"stem":495,"type":200,"device":496},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":497,"vendor":498,"category":468,"connector":499,"models":500},"inheco-thermoshake","Inheco","inheco-tec-controller",[501,502,503,504],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":506,"path":507,"page":41,"children":508},"Incubation","\u002Fdevices\u002Fincubation\u002F",[509],{"title":510,"path":511,"stem":512,"type":200,"device":513},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":514,"vendor":498,"category":506,"connector":514,"models":515},"inheco-scila",[516,517],"SCILA","SCILA MIX 2-gas mixing device",{"title":519,"path":520,"page":41,"children":521},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[522],{"title":523,"path":524,"stem":525,"type":200,"device":526},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":527,"vendor":498,"category":528,"connector":527,"models":529},"inheco-odtc","Thermal Cycler",[530,531,532,533],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":535,"path":536,"page":41,"children":537},"Readers","\u002Fdevices\u002Freaders\u002F",[538,547,556],{"title":539,"path":540,"stem":541,"type":200,"device":542},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":543,"vendor":544,"category":545,"connector":546},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":548,"path":549,"stem":550,"type":200,"device":551},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":552,"vendor":544,"category":545,"connector":553,"models":554},"biotek-synergy-h1","agilent-synergy-h1",[555],"BioTek Synergy H1",{"title":557,"path":558,"stem":559,"type":200,"device":560},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":561,"vendor":562,"category":545,"connector":561,"package":563,"models":564,"communication":568,"vendor_software":569,"os":570},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[565,566,567],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[479,480,481],{"title":572,"path":573,"page":41,"children":574},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[575,585],{"title":576,"path":577,"stem":578,"type":200,"device":579},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":580,"vendor":467,"category":581,"connector":466,"package":469,"models":582,"communication":477,"vendor_software":6,"os":584},"qinstruments-tiltstation","Plate Tilting",[583],"TiltStation",[479,480,481],{"title":586,"path":587,"stem":588,"type":200,"device":589},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":590,"vendor":467,"category":591,"connector":466,"package":469,"models":592,"communication":477,"vendor_software":6,"os":594},"qinstruments-turnstation","Plate Rotating",[593],"TurnStation",[479,480,481],{"title":596,"path":597,"page":41,"children":598},"Robots","\u002Fdevices\u002Frobots\u002F",[599],{"title":600,"path":601,"stem":602,"type":200,"device":603},"Brooks PreciseFlex 400","\u002Fdevices\u002Fbrooks-preciseflex-400\u002F","05.devices\u002F95.brooks-preciseflex-400",{"slug":604,"vendor":605,"category":596,"connector":604,"package":606,"models":607,"communication":611,"vendor_software":6,"os":612},"brooks-preciseflex-400","Brooks Automation","unitelabs-brooks-preciseflex-400",[608,609,610],"PreciseFlex 400, standard reach, 400 \u002F 750 \u002F 1160 mm Z","PreciseFlex 400, extended reach (XR), 400 \u002F 750 \u002F 1160 mm Z","Either on a PreciseFlex linear rail (1.0, 1.5 or 2.0 m)","Ethernet (TCP)",[479,480,481],{"title":614,"type":6,"device":6,"path":615,"stem":616,"children":617,"page":41},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[618,621,633,657,660,705,730,747,764,786],{"title":194,"path":619,"stem":620,"type":14,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":353,"type":6,"device":6,"path":622,"stem":623,"children":624,"page":41},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[625,629],{"title":626,"path":627,"stem":628,"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":630,"path":631,"stem":632,"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":634,"type":6,"device":6,"path":635,"stem":636,"children":637,"page":41},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[638,642,646,650,653],{"title":639,"path":640,"stem":641,"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":643,"path":644,"stem":645,"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":647,"path":648,"stem":649,"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":651,"stem":652,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":654,"path":655,"stem":656,"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":658,"stem":659,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":661,"type":6,"device":6,"path":662,"stem":663,"children":664,"page":41},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[665,669,673,677,681,685,689,693,697,701],{"title":666,"path":667,"stem":668,"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":670,"path":671,"stem":672,"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":674,"path":675,"stem":676,"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":678,"path":679,"stem":680,"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":682,"path":683,"stem":684,"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":686,"path":687,"stem":688,"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":690,"path":691,"stem":692,"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":694,"path":695,"stem":696,"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":698,"path":699,"stem":700,"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":702,"path":703,"stem":704,"type":200,"device":6},"Observable Commands","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fobservable-commands\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F80.observable-commands",{"title":706,"type":6,"device":6,"path":707,"stem":708,"children":709,"page":41},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[710,714,718,722,726],{"title":711,"path":712,"stem":713,"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":715,"path":716,"stem":717,"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":719,"path":720,"stem":721,"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":723,"path":724,"stem":725,"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":727,"path":728,"stem":729,"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":731,"type":6,"device":6,"path":732,"stem":733,"children":734,"page":41},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[735,738,741,744],{"title":647,"path":736,"stem":737,"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":639,"path":739,"stem":740,"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":742,"stem":743,"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":670,"path":745,"stem":746,"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":748,"type":6,"device":6,"path":749,"stem":750,"children":751,"page":41},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[752,756,760],{"title":753,"path":754,"stem":755,"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":757,"path":758,"stem":759,"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":761,"path":762,"stem":763,"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":765,"type":6,"device":6,"path":766,"stem":767,"children":768,"page":41},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[769,773,776,779,783],{"title":770,"path":771,"stem":772,"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":647,"path":774,"stem":775,"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":639,"path":777,"stem":778,"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":780,"path":781,"stem":782,"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":784,"stem":785,"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":600,"type":6,"device":6,"path":787,"stem":788,"children":789,"page":41},"\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400",[790,794,798],{"title":791,"path":792,"stem":793,"type":24,"device":6},"Teach Positions","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Fteach-positions\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F10.teach-positions",{"title":795,"path":796,"stem":797,"type":24,"device":6},"Move a Plate","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Fmove-a-plate\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F20.move-a-plate",{"title":799,"path":800,"stem":801,"type":24,"device":6},"Recover from a Stop","\u002Fliquid-handling-and-robots\u002Fbrooks-preciseflex-400\u002Frecover-from-a-stop\u002F","06.liquid-handling-and-robots\u002F46.brooks-preciseflex-400\u002F30.recover-from-a-stop",{"title":245,"type":6,"device":6,"path":803,"stem":804,"children":805,"page":41},"\u002Flabware\u002F","07.labware",[806,809,813,817,821,825,829,833],{"title":194,"path":807,"stem":808,"type":14,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":810,"path":811,"stem":812,"type":200,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":814,"path":815,"stem":816,"type":200,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":818,"path":819,"stem":820,"type":200,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":822,"path":823,"stem":824,"type":200,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":826,"path":827,"stem":828,"type":200,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":830,"path":831,"stem":832,"type":200,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":834,"type":6,"device":6,"path":835,"stem":836,"children":837,"page":41},"Hamilton","\u002Flabware\u002Fhamilton\u002F","07.labware\u002F70.hamilton",[838],{"title":839,"path":840,"stem":841,"type":24,"device":6},"Hamilton MFX Carriers","\u002Flabware\u002Fhamilton\u002Fmfx-carriers\u002F","07.labware\u002F70.hamilton\u002F10.mfx-carriers",{"title":843,"type":6,"device":6,"path":844,"stem":845,"children":846},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[847,849,873,906,914,954],{"title":194,"path":844,"stem":848,"type":14,"device":6},"20.connector-development\u002Findex",{"title":850,"path":851,"stem":852,"children":853,"page":41},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[854,857,861,865,869],{"title":194,"path":855,"stem":856,"type":285,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":858,"path":859,"stem":860,"type":24,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":862,"path":863,"stem":864,"type":24,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":866,"path":867,"stem":868,"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":870,"path":871,"stem":872,"type":24,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":874,"path":875,"stem":876,"children":877,"page":41},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[878,882,886,890,894,898,902],{"title":879,"path":880,"stem":881,"type":46,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":883,"path":884,"stem":885,"type":46,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":887,"path":888,"stem":889,"type":46,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":891,"path":892,"stem":893,"type":46,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":895,"path":896,"stem":897,"type":46,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":899,"path":900,"stem":901,"type":46,"device":6},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure\u002F","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":903,"path":904,"stem":905,"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":907,"stem":908,"children":909,"page":41},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[910],{"title":911,"path":912,"stem":913,"type":285,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002Fsila",{"title":915,"path":916,"stem":917,"children":918,"page":41},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[919,923,927,931,935,939,943,946,950],{"title":920,"path":921,"stem":922,"type":24,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":924,"path":925,"stem":926,"type":24,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":928,"path":929,"stem":930,"type":24,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":932,"path":933,"stem":934,"type":24,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":936,"path":937,"stem":938,"type":24,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":940,"path":941,"stem":942,"type":24,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":380,"path":944,"stem":945,"type":24,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":947,"path":948,"stem":949,"type":24,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":951,"path":952,"stem":953,"type":24,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":955,"path":956,"stem":957,"children":958,"type":6,"device":6},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[959],{"title":955,"path":956,"stem":957,"type":200,"device":6},{"id":961,"title":839,"body":962,"description":2258,"device":6,"extension":2259,"links":6,"meta":2260,"navigation":1259,"path":2261,"seo":2262,"stem":841,"type":24,"__hash__":2263},"docs\u002F07.labware\u002F70.hamilton\u002F10.mfx-carriers.md",{"type":963,"value":964,"toc":2249},"minimark",[965,969,976,982,1002,1006,1069,1072,1179,1187,1216,1296,1303,1307,1318,1526,1529,1537,1540,1592,1597,1604,1714,1718,1729,1881,1884,1922,1926,1933,1939,1945,1949,1956,2219,2222,2228,2234,2245],[966,967,968],"p",{},"The MFX carrier system is specific to Hamilton liquid handlers, including Microlab STAR and Vantage. MFX carrier hardware is assembled from a base plate and individual MFX modules, so one base plate can hold modules with different functions and geometries. The labware library models this system: you select a base plate, the MFX modules, and their positions, and the library computes the sites, their heights, and the overall carrier geometry.",[966,970,971,972,975],{},"Use an MFX carrier when your hardware is a Hamilton base plate with MFX modules. For fixed carriers such as the 5-position plate or tip carrier, see ",[973,974,830],"a",{"href":831},".",[966,977,978],{},[979,980,981],"strong",{},"Prerequisites",[983,984,985,993,996],"ul",{},[986,987,988,992],"li",{},[989,990,991],"code",{},"unitelabs-labware"," 0.15.0 or later installed",[986,994,995],{},"The base plate and module part numbers of your physical carrier",[986,997,998,999],{},"Understanding of ",[973,1000,1001],{"href":357},"labware concept",[1003,1004,272],"h2",{"id":1005},"concepts",[1007,1008,1009,1022],"table",{},[1010,1011,1012],"thead",{},[1013,1014,1015,1019],"tr",{},[1016,1017,1018],"th",{},"Term",[1016,1020,1021],{},"Meaning",[1023,1024,1025,1036,1045,1055],"tbody",{},[1013,1026,1027,1033],{},[1028,1029,1030],"td",{},[979,1031,1032],{},"Base plate",[1028,1034,1035],{},"The flat base of an MFX carrier. Defines the carrier's number of positions, width in tracks, and orientation (landscape or portrait).",[1013,1037,1038,1042],{},[1028,1039,1040],{},[979,1041,328],{},[1028,1043,1044],{},"An MFX module mounted on a base plate position. It sets the site height and type (tip, plate, etc.).",[1013,1046,1047,1052],{},[1028,1048,1049],{},[979,1050,1051],{},"Position",[1028,1053,1054],{},"A slot on the base plate, counted from 1 at the top of the carrier (the side with the highest y-value).",[1013,1056,1057,1062],{},[1028,1058,1059],{},[979,1060,1061],{},"Site",[1028,1063,1064,1065,1068],{},"The ",[989,1066,1067],{},"CarrierSite"," the library creates for each position that has a module. Empty positions do not get a site.",[966,1070,1071],{},"The UniteLabs labware library defines the following base plates:",[1007,1073,1074,1096],{},[1010,1075,1076],{},[1013,1077,1078,1081,1084,1087,1090,1093],{},[1016,1079,1080],{},"Class",[1016,1082,1083],{},"Positions",[1016,1085,1086],{},"Tracks",[1016,1088,1089],{},"Width (mm)",[1016,1091,1092],{},"Orientation",[1016,1094,1095],{},"Product number",[1023,1097,1098,1120,1138,1158],{},[1013,1099,1100,1105,1108,1111,1114,1117],{},[1028,1101,1102],{},[989,1103,1104],{},"MFX_Baseplate_6T_5Pos",[1028,1106,1107],{},"5",[1028,1109,1110],{},"6",[1028,1112,1113],{},"135.0",[1028,1115,1116],{},"Landscape",[1028,1118,1119],{},"188039",[1013,1121,1122,1127,1130,1132,1134,1136],{},[1028,1123,1124],{},[989,1125,1126],{},"MFX_Baseplate_6T_4Pos",[1028,1128,1129],{},"4",[1028,1131,1110],{},[1028,1133,1113],{},[1028,1135,1116],{},[1028,1137,1119],{},[1013,1139,1140,1145,1147,1150,1153,1155],{},[1028,1141,1142],{},[989,1143,1144],{},"MFX_Baseplate_Shaker_7T_4Pos",[1028,1146,1129],{},[1028,1148,1149],{},"7",[1028,1151,1152],{},"157.5",[1028,1154,1116],{},[1028,1156,1157],{},"187001",[1013,1159,1160,1165,1168,1170,1173,1176],{},[1028,1161,1162],{},[989,1163,1164],{},"MFX_Baseplate_Portrait_5T_3Pos",[1028,1166,1167],{},"3",[1028,1169,1107],{},[1028,1171,1172],{},"112.5",[1028,1174,1175],{},"Portrait",[1028,1177,1178],{},"188053",[966,1180,1181,1183,1184,1186],{},[989,1182,1126],{}," and ",[989,1185,1104],{}," are the same physical plate (188039) with two site layouts. The 4-position layout shifts the sites down by half a position (48 mm), so the pipetting channels of a 16-channel robot can reach them with random access. Choose the layout that matches how the modules are mounted on your instrument.",[966,1188,1189,1190,1193,1194,1197,1198,1197,1201,1197,1204,1207,1208,1211,1212,1215],{},"MFX modules live in ",[989,1191,1192],{},"unitelabs.labware.hamilton.carriers"," and are named after the Hamilton part, for example ",[989,1195,1196],{},"MFX_Mod_Tip_Module",", ",[989,1199,1200],{},"MFX_Mod_PCR_96",[989,1202,1203],{},"MFX_Mod_MIDI_HP_Flat",[989,1205,1206],{},"MFX_Mod_HHC",", and ",[989,1209,1210],{},"MFX_Mod_HHS_2mm_Flat_DWP",". The Hamilton product number of a module is stored in its ",[989,1213,1214],{},"model"," attribute. Base plates carry theirs in the same attribute. Use it to match a class to the part on your carrier:",[1217,1218,1223],"pre",{"className":1219,"code":1220,"language":1221,"meta":1222,"style":1222},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","from unitelabs.labware.hamilton.carriers import MFX_Mod_HHC, MFX_Mod_PCR_96, MFX_Mod_Tip_Module\n\nprint(MFX_Mod_Tip_Module().model)  # 188040\nprint(MFX_Mod_PCR_96().model)  # 188049\nprint(MFX_Mod_HHC().model)  # 6601900-01\n","python","",[989,1224,1225,1254,1261,1274,1285],{"__ignoreMap":1222},[1226,1227,1230,1234,1238,1241,1245,1247,1249,1251],"span",{"class":1228,"line":1229},"line",1,[1226,1231,1233],{"class":1232},"sxkbv","from",[1226,1235,1237],{"class":1236},"sc-9e"," unitelabs.labware.hamilton.carriers ",[1226,1239,1240],{"class":1232},"import",[1226,1242,1244],{"class":1243},"sOiAX"," MFX_Mod_HHC",[1226,1246,1197],{"class":1236},[1226,1248,1200],{"class":1243},[1226,1250,1197],{"class":1236},[1226,1252,1253],{"class":1243},"MFX_Mod_Tip_Module\n",[1226,1255,1257],{"class":1228,"line":1256},2,[1226,1258,1260],{"emptyLinePlaceholder":1259},true,"\n",[1226,1262,1264,1267,1270],{"class":1228,"line":1263},3,[1226,1265,1266],{"class":1243},"print",[1226,1268,1269],{"class":1236},"(MFX_Mod_Tip_Module().model)  ",[1226,1271,1273],{"class":1272},"sIsDC","# 188040\n",[1226,1275,1277,1279,1282],{"class":1228,"line":1276},4,[1226,1278,1266],{"class":1243},[1226,1280,1281],{"class":1236},"(MFX_Mod_PCR_96().model)  ",[1226,1283,1284],{"class":1272},"# 188049\n",[1226,1286,1288,1290,1293],{"class":1228,"line":1287},5,[1226,1289,1266],{"class":1243},[1226,1291,1292],{"class":1236},"(MFX_Mod_HHC().model)  ",[1226,1294,1295],{"class":1272},"# 6601900-01\n",[966,1297,1298,1299,1302],{},"MFX modules have variants ending in ",[989,1300,1301],{},"_Brackets"," which represent the same module mounted on the MFX Module Bracket PN 188133 (brackets are needed to mount 6T modules onto the 7T base plates) and raise the site by 10 mm. Use the variant that represents your actual hardware setup.",[1003,1304,1306],{"id":1305},"assemble-a-custom-mfx-carrier","Assemble a Custom MFX Carrier",[966,1308,1309,1310,1313,1314,1317],{},"To define an MFX carrier, use the ",[989,1311,1312],{},"make_mfx_carrier"," function. It takes a list of ",[989,1315,1316],{},"(position, module)"," tuples and returns a carrier class. Positions are 1-based and must be unique.",[1217,1319,1321],{"className":1219,"code":1320,"language":1221,"meta":1222,"style":1222},"from unitelabs.labware.hamilton import MFX_Baseplate_6T_5Pos, make_mfx_carrier\nfrom unitelabs.labware.hamilton.carriers import MFX_Mod_MIDI_HP_Flat, MFX_Mod_Tip_Module\n\nMyCarrier = make_mfx_carrier(\n    [\n        (1, MFX_Mod_Tip_Module()),\n        (2, MFX_Mod_Tip_Module()),\n        (3, MFX_Mod_Tip_Module()),\n        (4, MFX_Mod_MIDI_HP_Flat()),\n        (5, MFX_Mod_MIDI_HP_Flat()),\n    ],\n    base=MFX_Baseplate_6T_5Pos,\n)\n\ncarrier = MyCarrier(identifier=\"mfx_carrier\")\n\nprint(MyCarrier.__name__)\nprint(carrier.dimensions)\nfor site in carrier.children:\n    print(site.location)\n",[989,1322,1323,1338,1353,1357,1368,1373,1385,1395,1404,1414,1423,1429,1443,1449,1454,1476,1481,1494,1502,1517],{"__ignoreMap":1222},[1226,1324,1325,1327,1330,1332,1335],{"class":1228,"line":1229},[1226,1326,1233],{"class":1232},[1226,1328,1329],{"class":1236}," unitelabs.labware.hamilton ",[1226,1331,1240],{"class":1232},[1226,1333,1334],{"class":1243}," MFX_Baseplate_6T_5Pos",[1226,1336,1337],{"class":1236},", make_mfx_carrier\n",[1226,1339,1340,1342,1344,1346,1349,1351],{"class":1228,"line":1256},[1226,1341,1233],{"class":1232},[1226,1343,1237],{"class":1236},[1226,1345,1240],{"class":1232},[1226,1347,1348],{"class":1243}," MFX_Mod_MIDI_HP_Flat",[1226,1350,1197],{"class":1236},[1226,1352,1253],{"class":1243},[1226,1354,1355],{"class":1228,"line":1263},[1226,1356,1260],{"emptyLinePlaceholder":1259},[1226,1358,1359,1362,1365],{"class":1228,"line":1276},[1226,1360,1361],{"class":1236},"MyCarrier ",[1226,1363,1364],{"class":1232},"=",[1226,1366,1367],{"class":1236}," make_mfx_carrier(\n",[1226,1369,1370],{"class":1228,"line":1287},[1226,1371,1372],{"class":1236},"    [\n",[1226,1374,1376,1379,1382],{"class":1228,"line":1375},6,[1226,1377,1378],{"class":1236},"        (",[1226,1380,1381],{"class":1243},"1",[1226,1383,1384],{"class":1236},", MFX_Mod_Tip_Module()),\n",[1226,1386,1388,1390,1393],{"class":1228,"line":1387},7,[1226,1389,1378],{"class":1236},[1226,1391,1392],{"class":1243},"2",[1226,1394,1384],{"class":1236},[1226,1396,1398,1400,1402],{"class":1228,"line":1397},8,[1226,1399,1378],{"class":1236},[1226,1401,1167],{"class":1243},[1226,1403,1384],{"class":1236},[1226,1405,1407,1409,1411],{"class":1228,"line":1406},9,[1226,1408,1378],{"class":1236},[1226,1410,1129],{"class":1243},[1226,1412,1413],{"class":1236},", MFX_Mod_MIDI_HP_Flat()),\n",[1226,1415,1417,1419,1421],{"class":1228,"line":1416},10,[1226,1418,1378],{"class":1236},[1226,1420,1107],{"class":1243},[1226,1422,1413],{"class":1236},[1226,1424,1426],{"class":1228,"line":1425},11,[1226,1427,1428],{"class":1236},"    ],\n",[1226,1430,1432,1436,1438,1440],{"class":1228,"line":1431},12,[1226,1433,1435],{"class":1434},"sNqAu","    base",[1226,1437,1364],{"class":1232},[1226,1439,1104],{"class":1243},[1226,1441,1442],{"class":1236},",\n",[1226,1444,1446],{"class":1228,"line":1445},13,[1226,1447,1448],{"class":1236},")\n",[1226,1450,1452],{"class":1228,"line":1451},14,[1226,1453,1260],{"emptyLinePlaceholder":1259},[1226,1455,1457,1460,1462,1465,1468,1470,1474],{"class":1228,"line":1456},15,[1226,1458,1459],{"class":1236},"carrier ",[1226,1461,1364],{"class":1232},[1226,1463,1464],{"class":1236}," MyCarrier(",[1226,1466,1467],{"class":1434},"identifier",[1226,1469,1364],{"class":1232},[1226,1471,1473],{"class":1472},"sCx38","\"mfx_carrier\"",[1226,1475,1448],{"class":1236},[1226,1477,1479],{"class":1228,"line":1478},16,[1226,1480,1260],{"emptyLinePlaceholder":1259},[1226,1482,1484,1486,1489,1492],{"class":1228,"line":1483},17,[1226,1485,1266],{"class":1243},[1226,1487,1488],{"class":1236},"(MyCarrier.",[1226,1490,1491],{"class":1243},"__name__",[1226,1493,1448],{"class":1236},[1226,1495,1497,1499],{"class":1228,"line":1496},18,[1226,1498,1266],{"class":1243},[1226,1500,1501],{"class":1236},"(carrier.dimensions)\n",[1226,1503,1505,1508,1511,1514],{"class":1228,"line":1504},19,[1226,1506,1507],{"class":1232},"for",[1226,1509,1510],{"class":1236}," site ",[1226,1512,1513],{"class":1232},"in",[1226,1515,1516],{"class":1236}," carrier.children:\n",[1226,1518,1520,1523],{"class":1228,"line":1519},20,[1226,1521,1522],{"class":1243},"    print",[1226,1524,1525],{"class":1236},"(site.location)\n",[966,1527,1528],{},"All five positions hold a module, so the defined carrier has five sites:",[1217,1530,1535],{"className":1531,"code":1533,"language":1534,"meta":1222},[1532],"language-text","MFX_CAR_L5_3Tip_2MIDI\nVector(x=135, y=497, z=112)\nVector(x=4, y=392.5, z=112)\nVector(x=4, y=296.5, z=112)\nVector(x=4, y=200.5, z=112)\nVector(x=4, y=104.5, z=95)\nVector(x=4, y=8.5, z=95)\n","text",[989,1536,1533],{"__ignoreMap":1222},[966,1538,1539],{},"What happens in detail:",[983,1541,1542,1552,1558,1564],{},[986,1543,1544,1547,1548,1551],{},[979,1545,1546],{},"Base plate."," The example sets ",[989,1549,1550],{},"base=MFX_Baseplate_6T_5Pos"," as the carrier's base plate.",[986,1553,1554,1557],{},[979,1555,1556],{},"Site height."," Each site's z is the base plate height (18 mm) plus the module's site height. For example, the tip module site is at a combined height of 18 + 94 = 112 mm.",[986,1559,1560,1563],{},[979,1561,1562],{},"Carrier height."," The carrier's z is defined as the tallest base plate and module combination, here 112 mm.",[986,1565,1566,1569,1570,1573,1574,1577,1578,1581,1582,1585,1586,1589,1590,975],{},[979,1567,1568],{},"Name."," The class name follows the ",[989,1571,1572],{},"MFX_CAR_{L|P}{positions}_{count}{Module}_…"," convention, where ",[989,1575,1576],{},"L"," is landscape, ",[989,1579,1580],{},"P"," is portrait, and ",[989,1583,1584],{},"positions"," is the base plate's total. You can override it by passing ",[989,1587,1588],{},"name=\"...\""," to ",[989,1591,1312],{},[1593,1594,1596],"h3",{"id":1595},"portrait-carriers","Portrait Carriers",[966,1598,1599,1600,1603],{},"All modules on a carrier must share one orientation. To build a portrait carrier from landscape modules, pass ",[989,1601,1602],{},"orientation",". The library re-orients every module:",[1217,1605,1607],{"className":1219,"code":1606,"language":1221,"meta":1222,"style":1222},"from unitelabs.labware import Orientation\nfrom unitelabs.labware.hamilton import MFX_Baseplate_Portrait_5T_3Pos, make_mfx_carrier\nfrom unitelabs.labware.hamilton.carriers import MFX_Mod_Stacker_Module\n\nStackCarrier = make_mfx_carrier(\n    [(1, MFX_Mod_Stacker_Module()), (2, MFX_Mod_Stacker_Module())],\n    base=MFX_Baseplate_Portrait_5T_3Pos,\n    orientation=Orientation.PORTRAIT,\n    name=\"MyStackCarrier\",\n)\n",[989,1608,1609,1621,1634,1645,1649,1658,1673,1683,1698,1710],{"__ignoreMap":1222},[1226,1610,1611,1613,1616,1618],{"class":1228,"line":1229},[1226,1612,1233],{"class":1232},[1226,1614,1615],{"class":1236}," unitelabs.labware ",[1226,1617,1240],{"class":1232},[1226,1619,1620],{"class":1236}," Orientation\n",[1226,1622,1623,1625,1627,1629,1632],{"class":1228,"line":1256},[1226,1624,1233],{"class":1232},[1226,1626,1329],{"class":1236},[1226,1628,1240],{"class":1232},[1226,1630,1631],{"class":1243}," MFX_Baseplate_Portrait_5T_3Pos",[1226,1633,1337],{"class":1236},[1226,1635,1636,1638,1640,1642],{"class":1228,"line":1263},[1226,1637,1233],{"class":1232},[1226,1639,1237],{"class":1236},[1226,1641,1240],{"class":1232},[1226,1643,1644],{"class":1243}," MFX_Mod_Stacker_Module\n",[1226,1646,1647],{"class":1228,"line":1276},[1226,1648,1260],{"emptyLinePlaceholder":1259},[1226,1650,1651,1654,1656],{"class":1228,"line":1287},[1226,1652,1653],{"class":1236},"StackCarrier ",[1226,1655,1364],{"class":1232},[1226,1657,1367],{"class":1236},[1226,1659,1660,1663,1665,1668,1670],{"class":1228,"line":1375},[1226,1661,1662],{"class":1236},"    [(",[1226,1664,1381],{"class":1243},[1226,1666,1667],{"class":1236},", MFX_Mod_Stacker_Module()), (",[1226,1669,1392],{"class":1243},[1226,1671,1672],{"class":1236},", MFX_Mod_Stacker_Module())],\n",[1226,1674,1675,1677,1679,1681],{"class":1228,"line":1387},[1226,1676,1435],{"class":1434},[1226,1678,1364],{"class":1232},[1226,1680,1164],{"class":1243},[1226,1682,1442],{"class":1236},[1226,1684,1685,1688,1690,1693,1696],{"class":1228,"line":1397},[1226,1686,1687],{"class":1434},"    orientation",[1226,1689,1364],{"class":1232},[1226,1691,1692],{"class":1236},"Orientation.",[1226,1694,1695],{"class":1243},"PORTRAIT",[1226,1697,1442],{"class":1236},[1226,1699,1700,1703,1705,1708],{"class":1228,"line":1406},[1226,1701,1702],{"class":1434},"    name",[1226,1704,1364],{"class":1232},[1226,1706,1707],{"class":1472},"\"MyStackCarrier\"",[1226,1709,1442],{"class":1236},[1226,1711,1712],{"class":1228,"line":1416},[1226,1713,1448],{"class":1236},[1593,1715,1717],{"id":1716},"define-as-dataclasses","Define as Dataclasses",[966,1719,1720,1721,1724,1725,975],{},"To reuse an MFX carrier configuration across scripts, define it once as a dataclass. Subclass the base plate and set the ",[989,1722,1723],{},"modules",". You can also define fixed carriers without modules in the same way, as shown under ",[973,1726,1728],{"href":1727},"\u002Flabware\u002Fcarriers-and-adapters\u002F#plate-carriers","Plate Carriers",[1217,1730,1733],{"className":1219,"code":1731,"filename":1732,"language":1221,"meta":1222,"style":1222},"import collections.abc\nimport dataclasses\n\nfrom unitelabs.labware.hamilton import MFX_Baseplate_6T_5Pos\nfrom unitelabs.labware.hamilton.carriers import HamiltonMFXModule, MFX_Mod_MIDI_HP_Flat, MFX_Mod_Tip_Module\n\n\n@dataclasses.dataclass\nclass MFX_CAR_L5_3Tip_2MIDI(MFX_Baseplate_6T_5Pos):\n    \"\"\"MFX 5-position carrier: 3x Tip Module, 2x MIDI HP Flat.\"\"\"\n\n    modules: dataclasses.InitVar[collections.abc.Sequence[tuple[int, HamiltonMFXModule]]] = (\n        (1, MFX_Mod_Tip_Module()),\n        (2, MFX_Mod_Tip_Module()),\n        (3, MFX_Mod_Tip_Module()),\n        (4, MFX_Mod_MIDI_HP_Flat()),\n        (5, MFX_Mod_MIDI_HP_Flat()),\n    )\n","mfx_carriers.py",[989,1734,1735,1742,1749,1753,1764,1781,1785,1789,1795,1811,1816,1820,1836,1844,1852,1860,1868,1876],{"__ignoreMap":1222},[1226,1736,1737,1739],{"class":1228,"line":1229},[1226,1738,1240],{"class":1232},[1226,1740,1741],{"class":1236}," collections.abc\n",[1226,1743,1744,1746],{"class":1228,"line":1256},[1226,1745,1240],{"class":1232},[1226,1747,1748],{"class":1236}," dataclasses\n",[1226,1750,1751],{"class":1228,"line":1263},[1226,1752,1260],{"emptyLinePlaceholder":1259},[1226,1754,1755,1757,1759,1761],{"class":1228,"line":1276},[1226,1756,1233],{"class":1232},[1226,1758,1329],{"class":1236},[1226,1760,1240],{"class":1232},[1226,1762,1763],{"class":1243}," MFX_Baseplate_6T_5Pos\n",[1226,1765,1766,1768,1770,1772,1775,1777,1779],{"class":1228,"line":1287},[1226,1767,1233],{"class":1232},[1226,1769,1237],{"class":1236},[1226,1771,1240],{"class":1232},[1226,1773,1774],{"class":1236}," HamiltonMFXModule, ",[1226,1776,1203],{"class":1243},[1226,1778,1197],{"class":1236},[1226,1780,1253],{"class":1243},[1226,1782,1783],{"class":1228,"line":1375},[1226,1784,1260],{"emptyLinePlaceholder":1259},[1226,1786,1787],{"class":1228,"line":1387},[1226,1788,1260],{"emptyLinePlaceholder":1259},[1226,1790,1791],{"class":1228,"line":1397},[1226,1792,1794],{"class":1793},"s4qFZ","@dataclasses.dataclass\n",[1226,1796,1797,1800,1803,1806,1808],{"class":1228,"line":1406},[1226,1798,1799],{"class":1232},"class",[1226,1801,1802],{"class":1434}," MFX_CAR_L5_3Tip_2MIDI",[1226,1804,1805],{"class":1236},"(",[1226,1807,1104],{"class":1243},[1226,1809,1810],{"class":1236},"):\n",[1226,1812,1813],{"class":1228,"line":1416},[1226,1814,1815],{"class":1472},"    \"\"\"MFX 5-position carrier: 3x Tip Module, 2x MIDI HP Flat.\"\"\"\n",[1226,1817,1818],{"class":1228,"line":1425},[1226,1819,1260],{"emptyLinePlaceholder":1259},[1226,1821,1822,1825,1828,1831,1833],{"class":1228,"line":1431},[1226,1823,1824],{"class":1236},"    modules: dataclasses.InitVar[collections.abc.Sequence[tuple[",[1226,1826,1827],{"class":1243},"int",[1226,1829,1830],{"class":1236},", HamiltonMFXModule]]] ",[1226,1832,1364],{"class":1232},[1226,1834,1835],{"class":1236}," (\n",[1226,1837,1838,1840,1842],{"class":1228,"line":1445},[1226,1839,1378],{"class":1236},[1226,1841,1381],{"class":1243},[1226,1843,1384],{"class":1236},[1226,1845,1846,1848,1850],{"class":1228,"line":1451},[1226,1847,1378],{"class":1236},[1226,1849,1392],{"class":1243},[1226,1851,1384],{"class":1236},[1226,1853,1854,1856,1858],{"class":1228,"line":1456},[1226,1855,1378],{"class":1236},[1226,1857,1167],{"class":1243},[1226,1859,1384],{"class":1236},[1226,1861,1862,1864,1866],{"class":1228,"line":1478},[1226,1863,1378],{"class":1236},[1226,1865,1129],{"class":1243},[1226,1867,1413],{"class":1236},[1226,1869,1870,1872,1874],{"class":1228,"line":1483},[1226,1871,1378],{"class":1236},[1226,1873,1107],{"class":1243},[1226,1875,1413],{"class":1236},[1226,1877,1878],{"class":1228,"line":1496},[1226,1879,1880],{"class":1236},"    )\n",[966,1882,1883],{},"Import it wherever you need the carrier:",[1217,1885,1887],{"className":1219,"code":1886,"language":1221,"meta":1222,"style":1222},"from mfx_carriers import MFX_CAR_L5_3Tip_2MIDI\n\ncarrier = MFX_CAR_L5_3Tip_2MIDI(identifier=\"mfx_carrier\")\n",[989,1888,1889,1901,1905],{"__ignoreMap":1222},[1226,1890,1891,1893,1896,1898],{"class":1228,"line":1229},[1226,1892,1233],{"class":1232},[1226,1894,1895],{"class":1236}," mfx_carriers ",[1226,1897,1240],{"class":1232},[1226,1899,1900],{"class":1243}," MFX_CAR_L5_3Tip_2MIDI\n",[1226,1902,1903],{"class":1228,"line":1256},[1226,1904,1260],{"emptyLinePlaceholder":1259},[1226,1906,1907,1909,1911,1914,1916,1918,1920],{"class":1228,"line":1263},[1226,1908,1459],{"class":1236},[1226,1910,1364],{"class":1232},[1226,1912,1913],{"class":1236}," MFX_CAR_L5_3Tip_2MIDI(",[1226,1915,1467],{"class":1434},[1226,1917,1364],{"class":1232},[1226,1919,1473],{"class":1472},[1226,1921,1448],{"class":1236},[1593,1923,1925],{"id":1924},"validation-errors","Validation Errors",[966,1927,1928,1929,1932],{},"The library checks the configuration when you build it and raises a ",[989,1930,1931],{},"ValueError"," on incorrect use, for example when position 6 is specified on a 5-position plate:",[1217,1934,1937],{"className":1935,"code":1936,"language":1534,"meta":1222},[1532],"Position 6 is out of range for 'MFX_Baseplate_6T_5Pos' (valid: 1-5). No standard base plate supports 6 landscape positions.\n",[989,1938,1936],{"__ignoreMap":1222},[966,1940,1941,1942,1944],{},"It also rejects duplicate positions, mixed module orientations without an ",[989,1943,1602],{}," argument, and modules whose site is wider than the base plate.",[1003,1946,1948],{"id":1947},"place-labware-on-the-carrier","Place Labware on the Carrier",[966,1950,1951,1952,1955],{},"Labware is placed on the carrier by site index, like any other carrier. The index counts ",[979,1953,1954],{},"sites, not positions",". Empty positions are skipped. In the example above every position is filled, so the index is the position minus 1. On a carrier with only positions 1 and 5 filled, position 5 is index 1.",[1217,1957,1959],{"className":1219,"code":1958,"language":1221,"meta":1222,"style":1222},"from unitelabs.labware import Standard96Plate\nfrom unitelabs.labware.hamilton import HamiltonTip_300_Filter, HamiltonTipRack_300\nfrom unitelabs.liquid_handling.testing import MicrolabSTARMock\n\n# Instantiate the simulated Hamilton Microlab STAR\nhamilton = MicrolabSTARMock()\n\n# MFX_CAR_L5_3Tip_2MIDI is the class built in the example above\ncarrier = MFX_CAR_L5_3Tip_2MIDI(identifier=\"mfx_carrier\")\n\ncarrier[0] = HamiltonTipRack_300(identifier=\"tips_1\", filled_with=HamiltonTip_300_Filter)  # position 1\ncarrier[1] = HamiltonTipRack_300(identifier=\"tips_2\", filled_with=HamiltonTip_300_Filter)  # position 2\ncarrier[2] = HamiltonTipRack_300(identifier=\"tips_3\", filled_with=HamiltonTip_300_Filter)  # position 3\ncarrier[3] = Standard96Plate(identifier=\"plate_1\")  # position 4\ncarrier[4] = Standard96Plate(identifier=\"plate_2\")  # position 5\n\nhamilton.deck.add(carrier, track=10)\n\nprint(hamilton.deck.summary())\n",[989,1960,1961,1972,1983,1995,1999,2004,2014,2018,2023,2039,2043,2079,2109,2139,2165,2189,2193,2208,2212],{"__ignoreMap":1222},[1226,1962,1963,1965,1967,1969],{"class":1228,"line":1229},[1226,1964,1233],{"class":1232},[1226,1966,1615],{"class":1236},[1226,1968,1240],{"class":1232},[1226,1970,1971],{"class":1236}," Standard96Plate\n",[1226,1973,1974,1976,1978,1980],{"class":1228,"line":1256},[1226,1975,1233],{"class":1232},[1226,1977,1329],{"class":1236},[1226,1979,1240],{"class":1232},[1226,1981,1982],{"class":1236}," HamiltonTip_300_Filter, HamiltonTipRack_300\n",[1226,1984,1985,1987,1990,1992],{"class":1228,"line":1263},[1226,1986,1233],{"class":1232},[1226,1988,1989],{"class":1236}," unitelabs.liquid_handling.testing ",[1226,1991,1240],{"class":1232},[1226,1993,1994],{"class":1236}," MicrolabSTARMock\n",[1226,1996,1997],{"class":1228,"line":1276},[1226,1998,1260],{"emptyLinePlaceholder":1259},[1226,2000,2001],{"class":1228,"line":1287},[1226,2002,2003],{"class":1272},"# Instantiate the simulated Hamilton Microlab STAR\n",[1226,2005,2006,2009,2011],{"class":1228,"line":1375},[1226,2007,2008],{"class":1236},"hamilton ",[1226,2010,1364],{"class":1232},[1226,2012,2013],{"class":1236}," MicrolabSTARMock()\n",[1226,2015,2016],{"class":1228,"line":1387},[1226,2017,1260],{"emptyLinePlaceholder":1259},[1226,2019,2020],{"class":1228,"line":1397},[1226,2021,2022],{"class":1272},"# MFX_CAR_L5_3Tip_2MIDI is the class built in the example above\n",[1226,2024,2025,2027,2029,2031,2033,2035,2037],{"class":1228,"line":1406},[1226,2026,1459],{"class":1236},[1226,2028,1364],{"class":1232},[1226,2030,1913],{"class":1236},[1226,2032,1467],{"class":1434},[1226,2034,1364],{"class":1232},[1226,2036,1473],{"class":1472},[1226,2038,1448],{"class":1236},[1226,2040,2041],{"class":1228,"line":1416},[1226,2042,1260],{"emptyLinePlaceholder":1259},[1226,2044,2045,2048,2051,2054,2056,2059,2061,2063,2066,2068,2071,2073,2076],{"class":1228,"line":1425},[1226,2046,2047],{"class":1236},"carrier[",[1226,2049,2050],{"class":1243},"0",[1226,2052,2053],{"class":1236},"] ",[1226,2055,1364],{"class":1232},[1226,2057,2058],{"class":1236}," HamiltonTipRack_300(",[1226,2060,1467],{"class":1434},[1226,2062,1364],{"class":1232},[1226,2064,2065],{"class":1472},"\"tips_1\"",[1226,2067,1197],{"class":1236},[1226,2069,2070],{"class":1434},"filled_with",[1226,2072,1364],{"class":1232},[1226,2074,2075],{"class":1236},"HamiltonTip_300_Filter)  ",[1226,2077,2078],{"class":1272},"# position 1\n",[1226,2080,2081,2083,2085,2087,2089,2091,2093,2095,2098,2100,2102,2104,2106],{"class":1228,"line":1431},[1226,2082,2047],{"class":1236},[1226,2084,1381],{"class":1243},[1226,2086,2053],{"class":1236},[1226,2088,1364],{"class":1232},[1226,2090,2058],{"class":1236},[1226,2092,1467],{"class":1434},[1226,2094,1364],{"class":1232},[1226,2096,2097],{"class":1472},"\"tips_2\"",[1226,2099,1197],{"class":1236},[1226,2101,2070],{"class":1434},[1226,2103,1364],{"class":1232},[1226,2105,2075],{"class":1236},[1226,2107,2108],{"class":1272},"# position 2\n",[1226,2110,2111,2113,2115,2117,2119,2121,2123,2125,2128,2130,2132,2134,2136],{"class":1228,"line":1445},[1226,2112,2047],{"class":1236},[1226,2114,1392],{"class":1243},[1226,2116,2053],{"class":1236},[1226,2118,1364],{"class":1232},[1226,2120,2058],{"class":1236},[1226,2122,1467],{"class":1434},[1226,2124,1364],{"class":1232},[1226,2126,2127],{"class":1472},"\"tips_3\"",[1226,2129,1197],{"class":1236},[1226,2131,2070],{"class":1434},[1226,2133,1364],{"class":1232},[1226,2135,2075],{"class":1236},[1226,2137,2138],{"class":1272},"# position 3\n",[1226,2140,2141,2143,2145,2147,2149,2152,2154,2156,2159,2162],{"class":1228,"line":1451},[1226,2142,2047],{"class":1236},[1226,2144,1167],{"class":1243},[1226,2146,2053],{"class":1236},[1226,2148,1364],{"class":1232},[1226,2150,2151],{"class":1236}," Standard96Plate(",[1226,2153,1467],{"class":1434},[1226,2155,1364],{"class":1232},[1226,2157,2158],{"class":1472},"\"plate_1\"",[1226,2160,2161],{"class":1236},")  ",[1226,2163,2164],{"class":1272},"# position 4\n",[1226,2166,2167,2169,2171,2173,2175,2177,2179,2181,2184,2186],{"class":1228,"line":1456},[1226,2168,2047],{"class":1236},[1226,2170,1129],{"class":1243},[1226,2172,2053],{"class":1236},[1226,2174,1364],{"class":1232},[1226,2176,2151],{"class":1236},[1226,2178,1467],{"class":1434},[1226,2180,1364],{"class":1232},[1226,2182,2183],{"class":1472},"\"plate_2\"",[1226,2185,2161],{"class":1236},[1226,2187,2188],{"class":1272},"# position 5\n",[1226,2190,2191],{"class":1228,"line":1478},[1226,2192,1260],{"emptyLinePlaceholder":1259},[1226,2194,2195,2198,2201,2203,2206],{"class":1228,"line":1483},[1226,2196,2197],{"class":1236},"hamilton.deck.add(carrier, ",[1226,2199,2200],{"class":1434},"track",[1226,2202,1364],{"class":1232},[1226,2204,2205],{"class":1243},"10",[1226,2207,1448],{"class":1236},[1226,2209,2210],{"class":1228,"line":1496},[1226,2211,1260],{"emptyLinePlaceholder":1259},[1226,2213,2214,2216],{"class":1228,"line":1504},[1226,2215,1266],{"class":1243},[1226,2217,2218],{"class":1236},"(hamilton.deck.summary())\n",[966,2220,2221],{},"The carrier occupies tracks 10 to 15 and holds all five labware items:",[1217,2223,2226],{"className":2224,"code":2225,"language":1534,"meta":1222},[1532],"  Tracks  Name                             ID          Capacity     Content        X-Range   Height\n====================================================================================================\n  1 -  9  ┌─\n 10 - 15  ├─ MFX_CAR_L5_3Tip_2MIDI         mfx_carrier          5           5   302.5 - 437.5    232.0\n          │   ├─ HamiltonTipRack_300       tips_1       96 tips     96 tips\n          │   ├─ HamiltonTipRack_300       tips_2       96 tips     96 tips\n          │   ├─ HamiltonTipRack_300       tips_3       96 tips     96 tips\n          │   ├─ Standard96Plate           plate_1     28800 µl        0 µl\n          │   └─ Standard96Plate           plate_2     28800 µl        0 µl\n 16 - 30  └─\n",[989,2227,2225],{"__ignoreMap":1222},[966,2229,2230,2231,2233],{},"See ",[973,2232,626],{"href":627}," for how decks, tracks, and carriers fit together.",[2235,2236,2239],"callout",{"color":2237,"icon":2238},"error","i-heroicons-shield-exclamation",[966,2240,2241,2242,2244],{},"Match the modules to your physical carrier, including the ",[989,2243,1301],{}," variants. A wrong module results in incorrect site height, which can cause runtime errors or a crash.",[2246,2247,2248],"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 pre.shiki code .sIsDC, html code.shiki .sIsDC{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#8B949E}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 .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}html pre.shiki code .s4qFZ, html code.shiki .s4qFZ{--shiki-light:#622CBC;--shiki-default:#622CBC;--shiki-dark:#D2A8FF}",{"title":1222,"searchDepth":1229,"depth":1256,"links":2250},[2251,2252,2257],{"id":1005,"depth":1256,"text":272},{"id":1305,"depth":1256,"text":1306,"children":2253},[2254,2255,2256],{"id":1595,"depth":1263,"text":1596},{"id":1716,"depth":1263,"text":1717},{"id":1924,"depth":1263,"text":1925},{"id":1947,"depth":1256,"text":1948},"Assemble a Hamilton MFX carrier from a base plate and MFX modules.","md",{},"\u002Flabware\u002Fhamilton\u002Fmfx-carriers",{"title":839,"description":2258},"btdCZsj8PjdYw26_wX1ua8Zdyp-LrVAEiqSIl0g6nxM",[2265,6],{"title":830,"description":2266,"path":831},"Define custom plate carriers, tip carriers, trough carriers, and plate adapters for the deck.",1791879948428]