[{"data":1,"prerenderedAt":2500},["ShallowReactive",2],{"navigation":3,"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position":750,"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position-surround":2495},[4,80,134,364,428,530,567,646],{"title":5,"path":6,"stem":7,"children":8,"page":42},"Get Started","\u002Fget-started","01.get-started",[9,13,17,43,47],{"title":10,"path":11,"stem":12},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome","01.get-started\u002F00.welcome",{"title":14,"path":15,"stem":16},"How it works","\u002Fget-started\u002Fhow-it-works","01.get-started\u002F01.how-it-works",{"title":18,"path":19,"stem":20,"children":21,"page":42},"Use Cases","\u002Fget-started\u002Fuse-cases","01.get-started\u002F02.use-cases",[22,26,30,34,38],{"title":23,"path":24,"stem":25},"Instrument Control","\u002Fget-started\u002Fuse-cases\u002Flow-level-instrument-control","01.get-started\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":27,"path":28,"stem":29},"Multi-device Control","\u002Fget-started\u002Fuse-cases\u002Fmulti-device-control","01.get-started\u002F02.use-cases\u002F20.multi-device-control",{"title":31,"path":32,"stem":33},"Workflow Orchestration","\u002Fget-started\u002Fuse-cases\u002Fworkflow-orchestration","01.get-started\u002F02.use-cases\u002F30.workflow-orchestration",{"title":35,"path":36,"stem":37},"Custom Apps and LIMS Integration","\u002Fget-started\u002Fuse-cases\u002Fcustom-apps-lims","01.get-started\u002F02.use-cases\u002F40.custom-apps-lims",{"title":39,"path":40,"stem":41},"Scale and Fleet Management","\u002Fget-started\u002Fuse-cases\u002Fscale-and-fleet","01.get-started\u002F02.use-cases\u002F50.scale-and-fleet",false,{"title":44,"path":45,"stem":46},"Lab as Code","\u002Fget-started\u002Fwhy-code","01.get-started\u002F03.why-code",{"title":48,"path":49,"stem":50,"children":51,"page":42},"Setup","\u002Fget-started\u002Fsetup","01.get-started\u002F20.setup",[52,56,60,64,68,72,76],{"title":53,"path":54,"stem":55},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol","01.get-started\u002F20.setup\u002F10.groundcontrol",{"title":57,"path":58,"stem":59},"Network requirements","\u002Fget-started\u002Fsetup\u002Fnetwork-requirements","01.get-started\u002F20.setup\u002F20.network-requirements",{"title":61,"path":62,"stem":63},"Multi-device Networking","\u002Fget-started\u002Fsetup\u002Fmultiple-devices","01.get-started\u002F20.setup\u002F30.multiple-devices",{"title":65,"path":66,"stem":67},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform","01.get-started\u002F20.setup\u002F40.connect-to-platform",{"title":69,"path":70,"stem":71},"Headless install","\u002Fget-started\u002Fsetup\u002Fheadless-install","01.get-started\u002F20.setup\u002F50.headless-install",{"title":73,"path":74,"stem":75},"Raspberry Pi","\u002Fget-started\u002Fsetup\u002Fraspberry-pi","01.get-started\u002F20.setup\u002F55.raspberry-pi",{"title":77,"path":78,"stem":79},"Installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation","01.get-started\u002F20.setup\u002F60.sdk-installation",{"title":81,"path":82,"stem":83,"children":84,"page":42},"Integrate","\u002Fintegrate","02.integrate",[85,89,93,118],{"title":86,"path":87,"stem":88},"What is a connector?","\u002Fintegrate\u002Fwhat-is-a-connector","02.integrate\u002F00.what-is-a-connector",{"title":90,"path":91,"stem":92},"Calling a Connector","\u002Fintegrate\u002Fcontrol-with-code","02.integrate\u002F05.control-with-code",{"title":94,"path":95,"stem":96,"children":97,"page":42},"Concepts","\u002Fintegrate\u002Fconcepts","02.integrate\u002F10.concepts",[98,102,106,110,114],{"title":99,"path":100,"stem":101},"Connector","\u002Fintegrate\u002Fconcepts\u002Fconnector","02.integrate\u002F10.concepts\u002F10.connector",{"title":103,"path":104,"stem":105},"Module","\u002Fintegrate\u002Fconcepts\u002Fmodule","02.integrate\u002F10.concepts\u002F20.module",{"title":107,"path":108,"stem":109},"Action","\u002Fintegrate\u002Fconcepts\u002Faction","02.integrate\u002F10.concepts\u002F30.action",{"title":111,"path":112,"stem":113},"Subscription","\u002Fintegrate\u002Fconcepts\u002Fsubscription","02.integrate\u002F10.concepts\u002F40.subscription",{"title":115,"path":116,"stem":117},"Device","\u002Fintegrate\u002Fconcepts\u002Fdevice","02.integrate\u002F10.concepts\u002F50.device",{"title":119,"path":120,"stem":121,"children":122,"page":42},"Use a connector","\u002Fintegrate\u002Fuse-a-connector","02.integrate\u002F30.use-a-connector",[123,126,130],{"title":53,"path":124,"stem":125},"\u002Fintegrate\u002Fuse-a-connector\u002Fgroundcontrol","02.integrate\u002F30.use-a-connector\u002F10.groundcontrol",{"title":127,"path":128,"stem":129},"Platform","\u002Fintegrate\u002Fuse-a-connector\u002Fplatform","02.integrate\u002F30.use-a-connector\u002F20.platform",{"title":131,"path":132,"stem":133},"UniteLabs SDK & REST API","\u002Fintegrate\u002Fuse-a-connector\u002Fpython","02.integrate\u002F30.use-a-connector\u002F30.python",{"title":135,"path":136,"stem":137,"children":138,"page":42},"Operate","\u002Foperate","03.operate",[139,142,146,186,259],{"title":135,"path":140,"stem":141},"\u002Foperate\u002Foverview","03.operate\u002F00.overview",{"title":143,"path":144,"stem":145},"Your First Protocol","\u002Foperate\u002Fyour-first-protocol","03.operate\u002F05.your-first-protocol",{"title":94,"path":147,"stem":148,"children":149,"page":42},"\u002Foperate\u002Fconcepts","03.operate\u002F10.concepts",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"Liquid Handling","\u002Foperate\u002Fconcepts\u002Fliquid-handling","03.operate\u002F10.concepts\u002F10.liquid-handling",{"title":155,"path":156,"stem":157},"Modules","\u002Foperate\u002Fconcepts\u002Fmodules","03.operate\u002F10.concepts\u002F20.modules",{"title":159,"path":160,"stem":161},"Deck","\u002Foperate\u002Fconcepts\u002Fdeck","03.operate\u002F10.concepts\u002F30.deck",{"title":163,"path":164,"stem":165},"Labware","\u002Foperate\u002Fconcepts\u002Flabware","03.operate\u002F10.concepts\u002F40.labware",{"title":167,"path":168,"stem":169},"Liquids","\u002Foperate\u002Fconcepts\u002Fliquids","03.operate\u002F10.concepts\u002F50.liquids",{"title":171,"path":172,"stem":173},"Liquid Classes","\u002Foperate\u002Fconcepts\u002Fliquid-classes","03.operate\u002F10.concepts\u002F60.liquid-classes",{"title":175,"path":176,"stem":177},"Tips and Tip Tracking","\u002Foperate\u002Fconcepts\u002Ftips","03.operate\u002F10.concepts\u002F70.tips",{"title":179,"path":180,"stem":181},"Simulation","\u002Foperate\u002Fconcepts\u002Fsimulation","03.operate\u002F10.concepts\u002F80.simulation",{"title":183,"path":184,"stem":185},"Error Handling","\u002Foperate\u002Fconcepts\u002Ferror-handling","03.operate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":188,"stem":189,"children":190,"page":42},"Guides","\u002Foperate\u002Fguides","03.operate\u002F20.guides",[191,220,232,256],{"title":163,"path":192,"stem":193,"children":194},"\u002Foperate\u002Fguides\u002Flabware","03.operate\u002F20.guides\u002F10.labware\u002Findex",[195,196,200,204,208,212,216],{"title":163,"path":192,"stem":193},{"title":197,"path":198,"stem":199},"Standard Labware","\u002Foperate\u002Fguides\u002Flabware\u002Fstandard-labware","03.operate\u002F20.guides\u002F10.labware\u002F05.standard-labware",{"title":201,"path":202,"stem":203},"Plates","\u002Foperate\u002Fguides\u002Flabware\u002Fplates","03.operate\u002F20.guides\u002F10.labware\u002F10.plates",{"title":205,"path":206,"stem":207},"Tips and Tip Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftips-and-racks","03.operate\u002F20.guides\u002F10.labware\u002F20.tips-and-racks",{"title":209,"path":210,"stem":211},"Tubes and Tube Racks","\u002Foperate\u002Fguides\u002Flabware\u002Ftubes-and-tube-racks","03.operate\u002F20.guides\u002F10.labware\u002F30.tubes-and-tube-racks",{"title":213,"path":214,"stem":215},"Troughs","\u002Foperate\u002Fguides\u002Flabware\u002Ftroughs","03.operate\u002F20.guides\u002F10.labware\u002F35.troughs",{"title":217,"path":218,"stem":219},"Carriers and Adapters","\u002Foperate\u002Fguides\u002Flabware\u002Fcarriers-and-adapters","03.operate\u002F20.guides\u002F10.labware\u002F40.carriers-and-adapters",{"title":159,"path":221,"stem":222,"children":223,"page":42},"\u002Foperate\u002Fguides\u002Fdeck","03.operate\u002F20.guides\u002F20.deck",[224,228],{"title":225,"path":226,"stem":227},"Building a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fbuilding-a-deck","03.operate\u002F20.guides\u002F20.deck\u002F10.building-a-deck",{"title":229,"path":230,"stem":231},"Save\u002FLoad a Deck","\u002Foperate\u002Fguides\u002Fdeck\u002Fsave-load-deck","03.operate\u002F20.guides\u002F20.deck\u002F20.save-load-deck",{"title":233,"path":234,"stem":235,"children":236,"page":42},"Pipetting","\u002Foperate\u002Fguides\u002Fpipetting","03.operate\u002F20.guides\u002F30.pipetting",[237,241,245,249,252],{"title":238,"path":239,"stem":240},"Basic Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fbasic-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F10.basic-pipetting",{"title":242,"path":243,"stem":244},"Advanced Pipetting","\u002Foperate\u002Fguides\u002Fpipetting\u002Fadvanced-pipetting","03.operate\u002F20.guides\u002F30.pipetting\u002F20.advanced-pipetting",{"title":246,"path":247,"stem":248},"Tip Handling","\u002Foperate\u002Fguides\u002Fpipetting\u002Ftip-handling","03.operate\u002F20.guides\u002F30.pipetting\u002F30.tip-handling",{"title":171,"path":250,"stem":251},"\u002Foperate\u002Fguides\u002Fpipetting\u002Fliquid-classes","03.operate\u002F20.guides\u002F30.pipetting\u002F40.liquid-classes",{"title":253,"path":254,"stem":255},"Labware Transport","\u002Foperate\u002Fguides\u002Fpipetting\u002Flabware-transport","03.operate\u002F20.guides\u002F30.pipetting\u002F50.labware-transport",{"title":179,"path":257,"stem":258},"\u002Foperate\u002Fguides\u002Fsimulation","03.operate\u002F20.guides\u002F40.simulation",{"title":260,"path":261,"stem":262,"children":263,"page":42},"Liquid Handler Guides","\u002Foperate\u002Fdevices","03.operate\u002F30.devices",[264,305,330,347],{"title":265,"path":266,"stem":267,"children":268,"page":42},"Hamilton STAR","\u002Foperate\u002Fdevices\u002Fhamilton-star","03.operate\u002F30.devices\u002F10.hamilton-star",[269,273,277,281,285,289,293,297,301],{"title":270,"path":271,"stem":272},"Positioning & Movement","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fpositioning","03.operate\u002F30.devices\u002F10.hamilton-star\u002F10.positioning",{"title":274,"path":275,"stem":276},"Gripper Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcore-gripper","03.operate\u002F30.devices\u002F10.hamilton-star\u002F20.core-gripper",{"title":278,"path":279,"stem":280},"iSWAP Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fiswap","03.operate\u002F30.devices\u002F10.hamilton-star\u002F30.iswap",{"title":282,"path":283,"stem":284},"Using TADM","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Ftadm","03.operate\u002F30.devices\u002F10.hamilton-star\u002F40.tadm",{"title":286,"path":287,"stem":288},"Autoload Module","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fautoload","03.operate\u002F30.devices\u002F10.hamilton-star\u002F50.autoload",{"title":290,"path":291,"stem":292},"Waste Block","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fwaste-block","03.operate\u002F30.devices\u002F10.hamilton-star\u002F60.waste-block",{"title":294,"path":295,"stem":296},"Complex Mixing","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcomplex-mixing","03.operate\u002F30.devices\u002F10.hamilton-star\u002F66.complex-mixing",{"title":298,"path":299,"stem":300},"Teaching Gripper Paddle Positions","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fgripper-positions","03.operate\u002F30.devices\u002F10.hamilton-star\u002F70.gripper-positions",{"title":302,"path":303,"stem":304},"Training a Custom Deck Position With the iSWAP","\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position","03.operate\u002F30.devices\u002F10.hamilton-star\u002F75.custom-deck-position",{"title":306,"path":307,"stem":308,"children":309,"page":42},"Hamilton Vantage","\u002Foperate\u002Fdevices\u002Fhamilton-vantage","03.operate\u002F30.devices\u002F20.hamilton-vantage",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"Waste Configuration","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fwaste-configuration","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F05.waste-configuration",{"title":315,"path":316,"stem":317},"Covers and Lights","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fcovers-and-lights","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F10.covers-and-lights",{"title":319,"path":320,"stem":321},"IDL Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fidl","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F20.idl",{"title":323,"path":324,"stem":325},"IPG Module","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fipg","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F30.ipg",{"title":327,"path":328,"stem":329},"XL Pipettes","\u002Foperate\u002Fdevices\u002Fhamilton-vantage\u002Fxl-channels","03.operate\u002F30.devices\u002F20.hamilton-vantage\u002F40.xl-channels",{"title":331,"path":332,"stem":333,"children":334,"page":42},"Agilent Bravo","\u002Foperate\u002Fdevices\u002Fagilent-bravo","03.operate\u002F30.devices\u002F30.agilent-bravo",[335,338,341,344],{"title":246,"path":336,"stem":337},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Ftip-handling","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F10.tip-handling",{"title":238,"path":339,"stem":340},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fbasic-pipetting","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F20.basic-pipetting",{"title":171,"path":342,"stem":343},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fliquid-classes","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F25.liquid-classes",{"title":274,"path":345,"stem":346},"\u002Foperate\u002Fdevices\u002Fagilent-bravo\u002Fusing-the-gripper","03.operate\u002F30.devices\u002F30.agilent-bravo\u002F30.using-the-gripper",{"title":348,"path":349,"stem":350,"children":351,"page":42},"Tecan FluentControl","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol",[352,356,360],{"title":353,"path":354,"stem":355},"Connect & Run a Method","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fconnect-and-run","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F10.connect-and-run",{"title":357,"path":358,"stem":359},"Sending XML Commands","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Fsending-xml-commands","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":361,"path":362,"stem":363},"Full Workflow Example","\u002Foperate\u002Fdevices\u002Ftecan-fluentcontrol\u002Ffull-workflow-example","03.operate\u002F30.devices\u002F40.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":365,"path":366,"stem":367,"children":368,"page":42},"Device Guides","\u002Fdevice-guides","06.device-guides",[369,372,385,402,415],{"title":365,"path":370,"stem":371},"\u002Fdevice-guides\u002Foverview","06.device-guides\u002F00.overview",{"title":373,"path":374,"stem":375,"children":376,"page":42},"Incubation","\u002Fdevice-guides\u002Fincubation","06.device-guides\u002F20.incubation",[377,381],{"title":378,"path":379,"stem":380},"Inheco ODTC","\u002Fdevice-guides\u002Fincubation\u002Finheco-odtc","06.device-guides\u002F20.incubation\u002F10.inheco-odtc",{"title":382,"path":383,"stem":384},"Inheco SCILA","\u002Fdevice-guides\u002Fincubation\u002Finheco-scila","06.device-guides\u002F20.incubation\u002F20.inheco-scila",{"title":386,"path":387,"stem":388,"children":389,"page":42},"Heater-Shakers","\u002Fdevice-guides\u002Fheater-shakers","06.device-guides\u002F30.heater-shakers",[390,394,398],{"title":391,"path":392,"stem":393},"Inheco Thermoshake","\u002Fdevice-guides\u002Fheater-shakers\u002Finheco-thermoshake","06.device-guides\u002F30.heater-shakers\u002F10.inheco-thermoshake",{"title":395,"path":396,"stem":397},"QInstruments Bioshake","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-bioshake","06.device-guides\u002F30.heater-shakers\u002F20.qinstruments-bioshake",{"title":399,"path":400,"stem":401},"QInstruments ColdPlate","\u002Fdevice-guides\u002Fheater-shakers\u002Fqinstruments-coldplate","06.device-guides\u002F30.heater-shakers\u002F30.qinstruments-coldplate",{"title":403,"path":404,"stem":405,"children":406,"page":42},"Readers","\u002Fdevice-guides\u002Freaders","06.device-guides\u002F40.readers",[407,411],{"title":408,"path":409,"stem":410},"Biotek Gen5","\u002Fdevice-guides\u002Freaders\u002Fbiotek-gen5","06.device-guides\u002F40.readers\u002F10.biotek-gen5",{"title":412,"path":413,"stem":414},"Biotek Synergy H1","\u002Fdevice-guides\u002Freaders\u002Fbiotek-synergy-h1","06.device-guides\u002F40.readers\u002F20.biotek-synergy-H1",{"title":416,"path":417,"stem":418,"children":419,"page":42},"Tilt & Turn","\u002Fdevice-guides\u002Ftilt-and-turn","06.device-guides\u002F50.tilt-and-turn",[420,424],{"title":421,"path":422,"stem":423},"TurnStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-turnstation","06.device-guides\u002F50.tilt-and-turn\u002F10.qinstruments-turnstation",{"title":425,"path":426,"stem":427},"TiltStation","\u002Fdevice-guides\u002Ftilt-and-turn\u002Fqinstruments-tiltstation","06.device-guides\u002F50.tilt-and-turn\u002F20.qinstruments-tiltstation",{"title":429,"path":430,"stem":431,"children":432,"page":42},"Automate","\u002Fautomate","07.automate",[433,437,441,445,494],{"title":434,"path":435,"stem":436},"What is a workflow?","\u002Fautomate\u002Fwhat-is-a-workflow","07.automate\u002F00.what-is-a-workflow",{"title":438,"path":439,"stem":440},"Workflow template","\u002Fautomate\u002Fworkflow-template","07.automate\u002F05.workflow-template",{"title":442,"path":443,"stem":444},"Your First Workflow","\u002Fautomate\u002Fyour-first-workflow","07.automate\u002F08.your-first-workflow",{"title":94,"pages":446,"path":456,"stem":457,"children":458,"page":42},[447,448,449,450,451,452,453,454,455],"workflow","phase","step","runs","input","artifacts","logs","human-in-the-loop","error-handling","\u002Fautomate\u002Fconcepts","07.automate\u002F10.concepts",[459,463,467,471,475,479,483,487,491],{"title":460,"path":461,"stem":462},"Workflow","\u002Fautomate\u002Fconcepts\u002Fworkflow","07.automate\u002F10.concepts\u002F10.workflow",{"title":464,"path":465,"stem":466},"Phase","\u002Fautomate\u002Fconcepts\u002Fphase","07.automate\u002F10.concepts\u002F20.phase",{"title":468,"path":469,"stem":470},"Step","\u002Fautomate\u002Fconcepts\u002Fstep","07.automate\u002F10.concepts\u002F30.step",{"title":472,"path":473,"stem":474},"Runs","\u002Fautomate\u002Fconcepts\u002Fruns","07.automate\u002F10.concepts\u002F40.runs",{"title":476,"path":477,"stem":478},"Input","\u002Fautomate\u002Fconcepts\u002Finput","07.automate\u002F10.concepts\u002F50.input",{"title":480,"path":481,"stem":482},"Artifacts","\u002Fautomate\u002Fconcepts\u002Fartifacts","07.automate\u002F10.concepts\u002F60.artifacts",{"title":484,"path":485,"stem":486},"Logs","\u002Fautomate\u002Fconcepts\u002Flogs","07.automate\u002F10.concepts\u002F70.logs",{"title":488,"path":489,"stem":490},"Human in the Loop","\u002Fautomate\u002Fconcepts\u002Fhuman-in-the-loop","07.automate\u002F10.concepts\u002F80.human-in-the-loop",{"title":183,"path":492,"stem":493},"\u002Fautomate\u002Fconcepts\u002Ferror-handling","07.automate\u002F10.concepts\u002F90.error-handling",{"title":187,"path":495,"stem":496,"children":497,"page":42},"\u002Fautomate\u002Fguides","07.automate\u002F25.guides",[498,502,506,510,514,518,522,526],{"title":499,"path":500,"stem":501},"Deploy a workflow","\u002Fautomate\u002Fguides\u002Fdeploy-a-workflow","07.automate\u002F25.guides\u002F30.deploy-a-workflow",{"title":503,"path":504,"stem":505},"Run a workflow","\u002Fautomate\u002Fguides\u002Frun-a-workflow","07.automate\u002F25.guides\u002F35.run-a-workflow",{"title":507,"path":508,"stem":509},"CI\u002FCD for workflows","\u002Fautomate\u002Fguides\u002Fcicd-for-workflows","07.automate\u002F25.guides\u002F40.cicd-for-workflows",{"title":511,"path":512,"stem":513},"HITL basics","\u002Fautomate\u002Fguides\u002Fbasic-hitl","07.automate\u002F25.guides\u002F50.basic-hitl",{"title":515,"path":516,"stem":517},"Typed operator inputs","\u002Fautomate\u002Fguides\u002Ftyped-operator-inputs","07.automate\u002F25.guides\u002F55.typed-operator-inputs",{"title":519,"path":520,"stem":521},"Error recovery","\u002Fautomate\u002Fguides\u002Fbasic-error-handling","07.automate\u002F25.guides\u002F60.basic-error-handling",{"title":523,"path":524,"stem":525},"Advanced error handling","\u002Fautomate\u002Fguides\u002Fadvanced-error-handling","07.automate\u002F25.guides\u002F70.advanced-error-handling",{"title":527,"path":528,"stem":529},"Workflows REST API","\u002Fautomate\u002Fguides\u002Fworkflows-api","07.automate\u002F25.guides\u002F80.workflows-api",{"title":531,"path":532,"stem":533,"children":534,"page":42},"Observe","\u002Fobserve","08.observe",[535,539,555],{"title":536,"path":537,"stem":538},"Overview","\u002Fobserve\u002Foverview","08.observe\u002F10.overview",{"title":94,"path":540,"stem":541,"children":542,"page":42},"\u002Fobserve\u002Fconcepts","08.observe\u002F20.concepts",[543,547,551],{"title":544,"path":545,"stem":546},"Object Storage","\u002Fobserve\u002Fconcepts\u002Fstorage","08.observe\u002F20.concepts\u002F10.storage",{"title":548,"path":549,"stem":550},"Secrets","\u002Fobserve\u002Fconcepts\u002Fsecrets","08.observe\u002F20.concepts\u002F20.secrets",{"title":552,"path":553,"stem":554},"Data sources","\u002Fobserve\u002Fconcepts\u002Fdata-sources","08.observe\u002F20.concepts\u002F30.data-sources",{"title":187,"path":556,"stem":557,"children":558,"page":42},"\u002Fobserve\u002Fguides","08.observe\u002F30.guides",[559,563],{"title":560,"path":561,"stem":562},"File System Connector","\u002Fobserve\u002Fguides\u002Ffilesystem-connector","08.observe\u002F30.guides\u002F10.filesystem-connector",{"title":564,"path":565,"stem":566},"Building an ETL","\u002Fobserve\u002Fguides\u002Fbuilding-an-etl","08.observe\u002F30.guides\u002F20.building-an-etl",{"title":568,"path":569,"stem":570,"children":571,"page":42},"Technical Reference","\u002Ftechnical-reference","10.technical-reference",[572,576,580,592,603,614,624,635],{"title":573,"path":574,"stem":575},"Introduction","\u002Ftechnical-reference\u002Fplatform-blueprint","10.technical-reference\u002F00.platform-blueprint",{"title":577,"path":578,"stem":579},"REST API","\u002Ftechnical-reference\u002Frest-api","10.technical-reference\u002F01.rest-api",{"title":53,"path":581,"stem":582,"children":583,"page":42},"\u002Ftechnical-reference\u002Fgroundcontrol","10.technical-reference\u002F10.groundcontrol",[584,588],{"title":585,"path":586,"stem":587},"Install & Setup","\u002Ftechnical-reference\u002Fgroundcontrol\u002Finstall","10.technical-reference\u002F10.groundcontrol\u002F10.install",{"title":589,"path":590,"stem":591},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog","10.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":593,"path":594,"stem":595,"children":596,"page":42},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk","10.technical-reference\u002F20.python-sdk",[597,600],{"title":585,"path":598,"stem":599},"\u002Ftechnical-reference\u002Fpython-sdk\u002Finstall","10.technical-reference\u002F20.python-sdk\u002F10.install",{"title":589,"path":601,"stem":602},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog","10.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":604,"path":605,"stem":606,"children":607,"page":42},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk","10.technical-reference\u002F30.python-liquid-handling-sdk",[608,611],{"title":585,"path":609,"stem":610},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Finstall","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F10.install",{"title":589,"path":612,"stem":613},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog","10.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":163,"path":615,"stem":616,"children":617,"page":42},"\u002Ftechnical-reference\u002Flabware","10.technical-reference\u002F40.labware",[618,621],{"title":585,"path":619,"stem":620},"\u002Ftechnical-reference\u002Flabware\u002Finstall","10.technical-reference\u002F40.labware\u002F10.install",{"title":589,"path":622,"stem":623},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog","10.technical-reference\u002F40.labware\u002F20.changelog",{"title":625,"path":626,"stem":627,"children":628,"page":42},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus","10.technical-reference\u002F50.python-omnibus",[629,632],{"title":585,"path":630,"stem":631},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Finstall","10.technical-reference\u002F50.python-omnibus\u002F10.install",{"title":589,"path":633,"stem":634},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog","10.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":636,"path":637,"stem":638,"children":639,"page":42},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk","10.technical-reference\u002F60.python-cdk",[640,643],{"title":585,"path":641,"stem":642},"\u002Ftechnical-reference\u002Fpython-cdk\u002Finstall","10.technical-reference\u002F60.python-cdk\u002F10.install",{"title":589,"path":644,"stem":645},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog","10.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":647,"path":648,"stem":649,"children":650},"Connector Development (CDK)","\u002Fconnector-development","20.connector-development",[651,653,672,705,713,744],{"title":647,"path":648,"stem":652},"20.connector-development\u002Findex",{"title":654,"path":655,"stem":656,"children":657,"page":42},"Getting Started","\u002Fconnector-development\u002Fgetting-started","20.connector-development\u002F10.getting-started",[658,661,665,668],{"title":536,"path":659,"stem":660},"\u002Fconnector-development\u002Fgetting-started\u002Foverview","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":662,"path":663,"stem":664},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":77,"path":666,"stem":667},"\u002Fconnector-development\u002Fgetting-started\u002Finstallation","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":669,"path":670,"stem":671},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":673,"path":674,"stem":675,"children":676,"page":42},"Tutorial","\u002Fconnector-development\u002Ftutorial","20.connector-development\u002F20.tutorial",[677,681,685,689,693,697,701],{"title":678,"path":679,"stem":680},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":682,"path":683,"stem":684},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":686,"path":687,"stem":688},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":690,"path":691,"stem":692},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":694,"path":695,"stem":696},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":698,"path":699,"stem":700},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":702,"path":703,"stem":704},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":94,"path":706,"stem":707,"children":708,"page":42},"\u002Fconnector-development\u002Fconcepts","20.connector-development\u002F30.concepts",[709],{"title":710,"path":711,"stem":712},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila","20.connector-development\u002F30.concepts\u002Fsila",{"title":187,"path":714,"stem":715,"children":716,"page":42},"\u002Fconnector-development\u002Fguides","20.connector-development\u002F40.guides",[717,721,725,729,733,736,740],{"title":718,"path":719,"stem":720},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration","20.connector-development\u002F40.guides\u002F20.configuration",{"title":722,"path":723,"stem":724},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment","20.connector-development\u002F40.guides\u002F30.deployment",{"title":726,"path":727,"stem":728},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity","20.connector-development\u002F40.guides\u002F40.security",{"title":730,"path":731,"stem":732},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":183,"path":734,"stem":735},"\u002Fconnector-development\u002Fguides\u002Ferror-handling","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":737,"path":738,"stem":739},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":741,"path":742,"stem":743},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting","20.connector-development\u002F40.guides\u002F80.testing",{"title":745,"path":746,"stem":747,"children":748},"References","\u002Fconnector-development\u002Freference","20.connector-development\u002F50.reference\u002Findex",[749],{"title":745,"path":746,"stem":747},{"id":751,"title":302,"body":752,"description":2489,"extension":2490,"links":2491,"meta":2492,"navigation":877,"path":303,"seo":2493,"stem":304,"__hash__":2494},"docs\u002F03.operate\u002F30.devices\u002F10.hamilton-star\u002F75.custom-deck-position.md",{"type":753,"value":754,"toc":2472},"minimark",[755,759,762,774,779,815,820,823,828,831,938,942,945,1080,1084,1099,1216,1219,1271,1275,1286,1290,1301,1308,1422,1428,1446,1559,1563,1572,1575,1586,1721,1725,1751,1755,1758,1764,2119,2122,2126,2154,2166,2347,2351,2354,2461,2465,2468],[756,757,758],"p",{},"When configuring a liquid handler, one may need to define custom deck positions for specific experimental or operational setups. This can include positions that are not part of a standard deck configuration, for example, a custom 3D printed plate carrier, or an off-deck integrated plate reader position.",[756,760,761],{},"This guide will explain the process of creating and validating custom deck positions. In this example, we use a custom plate reader position that will be physically validated with the iSWAP and then added to the deck for use in future workflows. While it is also possible to perform with the CO-RE grippers, the iSWAP is more common for reaching beyond the standard deck range.",[763,764,767],"callout",{"color":765,"icon":766},"amber","i-heroicons-exclamation-triangle",[756,768,769,773],{},[770,771,772],"strong",{},"Teaching with teaching needles is not supported."," Use a plate held by the iSWAP (as described in this guide) to physically validate custom positions.",[756,775,776],{},[770,777,778],{},"Prerequisites",[780,781,782,786,789,792,801,808],"ul",{},[783,784,785],"li",{},"A switched on Microlab STAR device",[783,787,788],{},"A plate carrier, a plate, and a plate reader or other custom position to validate",[783,790,791],{},"A running Microlab STAR connector",[783,793,794,795,800],{},"Basic understanding of the liquid handler class (See the ",[796,797,799],"a",{"href":798},"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fcustom-deck-position\u002F","liquid handler tutorial",")",[783,802,803,804,800],{},"Basic understanding of the iSWAP module (See ",[796,805,807],{"href":806},"\u002Foperate\u002Fdevices\u002Fhamilton-star\u002Fiswap\u002F","Using the iSWAP",[783,809,810,811,800],{},"Basic understanding of how custom labware is created (See the ",[796,812,814],{"href":813},"\u002Foperate\u002Fguides\u002Flabware\u002F","creating custom labware tutorial",[816,817,819],"h2",{"id":818},"basic-setup","Basic Setup",[756,821,822],{},"Before beginning the training, we need to ensure that the system is properly configured and the necessary components are initialized. This includes powering on the device, verifying the connector is running and connected, arranging the deck with the required labware, and picking up the labware with the iSWAP.",[824,825,827],"h3",{"id":826},"power-on-the-system","Power On the System",[756,829,830],{},"Ensure that the Microlab STAR is powered on and ready for operation. Verify that the connector is running and connected to the UniteLabs platform.",[832,833,838],"pre",{"className":834,"code":835,"language":836,"meta":837,"style":837},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from unitelabs.liquid_handling.hamilton import MicrolabSTAR\n\n# Initialize the Hamilton Microlab STAR\nhamilton = MicrolabSTAR(name=\"Microlab STAR\")  # Or your connector's name on the UniteLabs platform\nawait hamilton.initialize()\n","python","",[839,840,841,872,879,886,921],"code",{"__ignoreMap":837},[842,843,846,850,854,858,861,863,866,869],"span",{"class":844,"line":845},"line",1,[842,847,849],{"class":848},"s7zQu","from",[842,851,853],{"class":852},"sTEyZ"," unitelabs",[842,855,857],{"class":856},"sMK4o",".",[842,859,860],{"class":852},"liquid_handling",[842,862,857],{"class":856},[842,864,865],{"class":852},"hamilton ",[842,867,868],{"class":848},"import",[842,870,871],{"class":852}," MicrolabSTAR\n",[842,873,875],{"class":844,"line":874},2,[842,876,878],{"emptyLinePlaceholder":877},true,"\n",[842,880,882],{"class":844,"line":881},3,[842,883,885],{"class":884},"sHwdD","# Initialize the Hamilton Microlab STAR\n",[842,887,889,891,894,898,901,905,907,910,914,916,918],{"class":844,"line":888},4,[842,890,865],{"class":852},[842,892,893],{"class":856},"=",[842,895,897],{"class":896},"s2Zo4"," MicrolabSTAR",[842,899,900],{"class":856},"(",[842,902,904],{"class":903},"sHdIc","name",[842,906,893],{"class":856},[842,908,909],{"class":856},"\"",[842,911,913],{"class":912},"sfazB","Microlab STAR",[842,915,909],{"class":856},[842,917,800],{"class":856},[842,919,920],{"class":884},"  # Or your connector's name on the UniteLabs platform\n",[842,922,924,927,930,932,935],{"class":844,"line":923},5,[842,925,926],{"class":848},"await",[842,928,929],{"class":852}," hamilton",[842,931,857],{"class":856},[842,933,934],{"class":896},"initialize",[842,936,937],{"class":856},"()\n",[824,939,941],{"id":940},"arrange-the-deck","Arrange the Deck",[756,943,944],{},"Arrange the deck layout using the components from the labware library. This guide uses a plate carrier with one standard 96 well microtiter plate that we move from one carrier site to the custom position.",[832,946,948],{"className":834,"code":947,"language":836,"meta":837,"style":837},"from unitelabs.labware import Standard96Plate, Vector\nfrom unitelabs.labware.hamilton import PLT_CAR_L5MD_A00\n\nplate_carrier = PLT_CAR_L5MD_A00()\nplate = Standard96Plate()\n\nplate_carrier[0] = plate\nhamilton.deck.add(plate_carrier, track=1)\n",[839,949,950,972,992,996,1008,1019,1024,1046],{"__ignoreMap":837},[842,951,952,954,956,958,961,963,966,969],{"class":844,"line":845},[842,953,849],{"class":848},[842,955,853],{"class":852},[842,957,857],{"class":856},[842,959,960],{"class":852},"labware ",[842,962,868],{"class":848},[842,964,965],{"class":852}," Standard96Plate",[842,967,968],{"class":856},",",[842,970,971],{"class":852}," Vector\n",[842,973,974,976,978,980,983,985,987,989],{"class":844,"line":874},[842,975,849],{"class":848},[842,977,853],{"class":852},[842,979,857],{"class":856},[842,981,982],{"class":852},"labware",[842,984,857],{"class":856},[842,986,865],{"class":852},[842,988,868],{"class":848},[842,990,991],{"class":852}," PLT_CAR_L5MD_A00\n",[842,993,994],{"class":844,"line":881},[842,995,878],{"emptyLinePlaceholder":877},[842,997,998,1001,1003,1006],{"class":844,"line":888},[842,999,1000],{"class":852},"plate_carrier ",[842,1002,893],{"class":856},[842,1004,1005],{"class":896}," PLT_CAR_L5MD_A00",[842,1007,937],{"class":856},[842,1009,1010,1013,1015,1017],{"class":844,"line":923},[842,1011,1012],{"class":852},"plate ",[842,1014,893],{"class":856},[842,1016,965],{"class":896},[842,1018,937],{"class":856},[842,1020,1022],{"class":844,"line":1021},6,[842,1023,878],{"emptyLinePlaceholder":877},[842,1025,1027,1030,1033,1037,1040,1043],{"class":844,"line":1026},7,[842,1028,1029],{"class":852},"plate_carrier",[842,1031,1032],{"class":856},"[",[842,1034,1036],{"class":1035},"sbssI","0",[842,1038,1039],{"class":856},"]",[842,1041,1042],{"class":856}," =",[842,1044,1045],{"class":852}," plate\n",[842,1047,1049,1052,1054,1058,1060,1063,1065,1067,1069,1072,1074,1077],{"class":844,"line":1048},8,[842,1050,1051],{"class":852},"hamilton",[842,1053,857],{"class":856},[842,1055,1057],{"class":1056},"swJcz","deck",[842,1059,857],{"class":856},[842,1061,1062],{"class":896},"add",[842,1064,900],{"class":856},[842,1066,1029],{"class":896},[842,1068,968],{"class":856},[842,1070,1071],{"class":903}," track",[842,1073,893],{"class":856},[842,1075,1076],{"class":1035},"1",[842,1078,1079],{"class":856},")\n",[824,1081,1083],{"id":1082},"pick-up-labware","Pick up Labware",[756,1085,1086,1087,1090,1091,1094,1095,1098],{},"Training locations should be done with labware in the iSWAP to ensure accuracy. This ensures that the positioning is valid for the specific labware to be transferred. Make sure that the plate is placed on the site and pass it to the iSWAP's ",[839,1088,1089],{},"pick_up_from"," method. The iSWAP moves on a safe traverse height to the site and picks up the plate. The method automatically transfers the plate from the carrier site to the iSWAP module. When the ",[839,1092,1093],{},"pick_up_direction"," argument is omitted, the iSWAP will approach from whichever orientation it is currently in. Here the ",[839,1096,1097],{},"strength"," parameter is set to the default value, which is used if not specified.",[832,1100,1102],{"className":834,"code":1101,"language":836,"meta":837,"style":837},"from unitelabs.liquid_handling.hamilton.modules.iswap.interfaces import Direction\n\nawait hamilton.iswap.pick_up_from(\n    plate_carrier[0],\n    # The direction from which the iSWAP arm approaches the labware to pick up.\n    pick_up_direction=Direction.LEFT,\n    # The pressure to apply on the plate ranging from 0 (low) to 99 (high).\n    strength=30,\n)\n",[839,1103,1104,1138,1142,1159,1171,1176,1194,1199,1211],{"__ignoreMap":837},[842,1105,1106,1108,1110,1112,1114,1116,1118,1120,1123,1125,1128,1130,1133,1135],{"class":844,"line":845},[842,1107,849],{"class":848},[842,1109,853],{"class":852},[842,1111,857],{"class":856},[842,1113,860],{"class":852},[842,1115,857],{"class":856},[842,1117,1051],{"class":852},[842,1119,857],{"class":856},[842,1121,1122],{"class":852},"modules",[842,1124,857],{"class":856},[842,1126,1127],{"class":852},"iswap",[842,1129,857],{"class":856},[842,1131,1132],{"class":852},"interfaces ",[842,1134,868],{"class":848},[842,1136,1137],{"class":852}," Direction\n",[842,1139,1140],{"class":844,"line":874},[842,1141,878],{"emptyLinePlaceholder":877},[842,1143,1144,1146,1148,1150,1152,1154,1156],{"class":844,"line":881},[842,1145,926],{"class":848},[842,1147,929],{"class":852},[842,1149,857],{"class":856},[842,1151,1127],{"class":1056},[842,1153,857],{"class":856},[842,1155,1089],{"class":896},[842,1157,1158],{"class":856},"(\n",[842,1160,1161,1164,1166,1168],{"class":844,"line":888},[842,1162,1163],{"class":896},"    plate_carrier",[842,1165,1032],{"class":856},[842,1167,1036],{"class":1035},[842,1169,1170],{"class":856},"],\n",[842,1172,1173],{"class":844,"line":923},[842,1174,1175],{"class":884},"    # The direction from which the iSWAP arm approaches the labware to pick up.\n",[842,1177,1178,1181,1183,1186,1188,1191],{"class":844,"line":1021},[842,1179,1180],{"class":903},"    pick_up_direction",[842,1182,893],{"class":856},[842,1184,1185],{"class":896},"Direction",[842,1187,857],{"class":856},[842,1189,1190],{"class":1056},"LEFT",[842,1192,1193],{"class":856},",\n",[842,1195,1196],{"class":844,"line":1026},[842,1197,1198],{"class":884},"    # The pressure to apply on the plate ranging from 0 (low) to 99 (high).\n",[842,1200,1201,1204,1206,1209],{"class":844,"line":1048},[842,1202,1203],{"class":903},"    strength",[842,1205,893],{"class":856},[842,1207,1208],{"class":1035},"30",[842,1210,1193],{"class":856},[842,1212,1214],{"class":844,"line":1213},9,[842,1215,1079],{"class":856},[756,1217,1218],{},"The plate is now accessible on the iSWAP and the carrier site should be empty.",[832,1220,1222],{"className":834,"code":1221,"language":836,"meta":837,"style":837},"assert plate_carrier[0].get() == None\nassert hamilton.iswap.get() == plate\n",[839,1223,1224,1251],{"__ignoreMap":837},[842,1225,1226,1229,1232,1234,1236,1239,1242,1245,1248],{"class":844,"line":845},[842,1227,1228],{"class":848},"assert",[842,1230,1231],{"class":852}," plate_carrier",[842,1233,1032],{"class":856},[842,1235,1036],{"class":1035},[842,1237,1238],{"class":856},"].",[842,1240,1241],{"class":896},"get",[842,1243,1244],{"class":856},"()",[842,1246,1247],{"class":856}," ==",[842,1249,1250],{"class":856}," None\n",[842,1252,1253,1255,1257,1259,1261,1263,1265,1267,1269],{"class":844,"line":874},[842,1254,1228],{"class":848},[842,1256,929],{"class":852},[842,1258,857],{"class":856},[842,1260,1127],{"class":1056},[842,1262,857],{"class":856},[842,1264,1241],{"class":896},[842,1266,1244],{"class":856},[842,1268,1247],{"class":856},[842,1270,1045],{"class":852},[816,1272,1274],{"id":1273},"get-validate-coordinates","Get & Validate Coordinates",[756,1276,1277,1278,1281,1282,1285],{},"To find the absolute coordinates of the target deck position, we will use the iSWAP's ",[839,1279,1280],{},"move_to"," and ",[839,1283,1284],{},"move_by"," methods while checking the physical position after each movement until we reach the desired location. This iterative approach ensures safe and precise positioning.",[824,1287,1289],{"id":1288},"move-to-starting-point","Move to Starting Point",[756,1291,1292,1293,1295,1296,1300],{},"Now that the plate is picked up, it can be moved to the target training position with the iSWAP's ",[839,1294,1280],{}," method. The plate's ",[1297,1298,1299],"em",{},"center"," will be placed at the provided location (this will become an important distinction in later steps).",[756,1302,1303,1304,1307],{},"Here we demonstrate use of a ",[839,1305,1306],{},"Vector"," to specify the target deck coordinates. This represents a \"best estimate\" of the desired position that will need to be fine-tuned in subsequent steps. The z-height should be set to a safe distance above the deck to avoid collisions.",[832,1309,1311],{"className":834,"code":1310,"language":836,"meta":837,"style":837},"from unitelabs.labware import Vector\n\n# Location at specific deck coordinates (in mm)\ntarget_location = Vector(x=200.0, y=100.0, z=250.0)\n\nawait hamilton.iswap.move_to(location=target_location, direction=Direction.RIGHT)\n",[839,1312,1313,1327,1331,1336,1378,1382],{"__ignoreMap":837},[842,1314,1315,1317,1319,1321,1323,1325],{"class":844,"line":845},[842,1316,849],{"class":848},[842,1318,853],{"class":852},[842,1320,857],{"class":856},[842,1322,960],{"class":852},[842,1324,868],{"class":848},[842,1326,971],{"class":852},[842,1328,1329],{"class":844,"line":874},[842,1330,878],{"emptyLinePlaceholder":877},[842,1332,1333],{"class":844,"line":881},[842,1334,1335],{"class":884},"# Location at specific deck coordinates (in mm)\n",[842,1337,1338,1341,1343,1346,1348,1351,1353,1356,1358,1361,1363,1366,1368,1371,1373,1376],{"class":844,"line":888},[842,1339,1340],{"class":852},"target_location ",[842,1342,893],{"class":856},[842,1344,1345],{"class":896}," Vector",[842,1347,900],{"class":856},[842,1349,1350],{"class":903},"x",[842,1352,893],{"class":856},[842,1354,1355],{"class":1035},"200.0",[842,1357,968],{"class":856},[842,1359,1360],{"class":903}," y",[842,1362,893],{"class":856},[842,1364,1365],{"class":1035},"100.0",[842,1367,968],{"class":856},[842,1369,1370],{"class":903}," z",[842,1372,893],{"class":856},[842,1374,1375],{"class":1035},"250.0",[842,1377,1079],{"class":856},[842,1379,1380],{"class":844,"line":923},[842,1381,878],{"emptyLinePlaceholder":877},[842,1383,1384,1386,1388,1390,1392,1394,1396,1398,1401,1403,1406,1408,1411,1413,1415,1417,1420],{"class":844,"line":1021},[842,1385,926],{"class":848},[842,1387,929],{"class":852},[842,1389,857],{"class":856},[842,1391,1127],{"class":1056},[842,1393,857],{"class":856},[842,1395,1280],{"class":896},[842,1397,900],{"class":856},[842,1399,1400],{"class":903},"location",[842,1402,893],{"class":856},[842,1404,1405],{"class":896},"target_location",[842,1407,968],{"class":856},[842,1409,1410],{"class":903}," direction",[842,1412,893],{"class":856},[842,1414,1185],{"class":896},[842,1416,857],{"class":856},[842,1418,1419],{"class":1056},"RIGHT",[842,1421,1079],{"class":856},[756,1423,1424,1425,1427],{},"It may also be desirable to estimate the target location relative to existing deck positions or labware. In this case it is useful to get and update the existing location before using it in the ",[839,1426,1280],{}," command.",[756,1429,1430,1433,1434,1437,1438,1441,1442,1445],{},[770,1431,1432],{},"Important",": When using relative positioning, keep in mind that ",[839,1435,1436],{},".location"," properties are relative to the labware or resource's ",[1297,1439,1440],{},"origin"," (the bottom-left corner), so we need to adjust the coordinates to properly center the plate relative to the iSWAP's center reference point. Conveniently, plates have a ",[839,1443,1444],{},".center"," property that returns the center offset as a Vector.",[832,1447,1449],{"className":834,"code":1448,"language":836,"meta":837,"style":837},"# Estimated target location is 100mm to the right of the carrier position, with a safe z-height\ntarget_location = plate_carrier[4].location.update(z=250.0)\n# Location is relative to the CarrierSite's origin, so add the plate's center to center the iSWAP properly\ntarget_location = target_location + plate.center\n\n# Use the estimated target for the move\nawait hamilton.iswap.move_to(location=target_location, direction=Direction.RIGHT)\n",[839,1450,1451,1456,1489,1494,1514,1518,1523],{"__ignoreMap":837},[842,1452,1453],{"class":844,"line":845},[842,1454,1455],{"class":884},"# Estimated target location is 100mm to the right of the carrier position, with a safe z-height\n",[842,1457,1458,1460,1462,1464,1466,1469,1471,1473,1475,1478,1480,1483,1485,1487],{"class":844,"line":874},[842,1459,1340],{"class":852},[842,1461,893],{"class":856},[842,1463,1231],{"class":852},[842,1465,1032],{"class":856},[842,1467,1468],{"class":1035},"4",[842,1470,1238],{"class":856},[842,1472,1400],{"class":1056},[842,1474,857],{"class":856},[842,1476,1477],{"class":896},"update",[842,1479,900],{"class":856},[842,1481,1482],{"class":903},"z",[842,1484,893],{"class":856},[842,1486,1375],{"class":1035},[842,1488,1079],{"class":856},[842,1490,1491],{"class":844,"line":881},[842,1492,1493],{"class":884},"# Location is relative to the CarrierSite's origin, so add the plate's center to center the iSWAP properly\n",[842,1495,1496,1498,1500,1503,1506,1509,1511],{"class":844,"line":888},[842,1497,1340],{"class":852},[842,1499,893],{"class":856},[842,1501,1502],{"class":852}," target_location ",[842,1504,1505],{"class":856},"+",[842,1507,1508],{"class":852}," plate",[842,1510,857],{"class":856},[842,1512,1513],{"class":1056},"center\n",[842,1515,1516],{"class":844,"line":923},[842,1517,878],{"emptyLinePlaceholder":877},[842,1519,1520],{"class":844,"line":1021},[842,1521,1522],{"class":884},"# Use the estimated target for the move\n",[842,1524,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557],{"class":844,"line":1026},[842,1526,926],{"class":848},[842,1528,929],{"class":852},[842,1530,857],{"class":856},[842,1532,1127],{"class":1056},[842,1534,857],{"class":856},[842,1536,1280],{"class":896},[842,1538,900],{"class":856},[842,1540,1400],{"class":903},[842,1542,893],{"class":856},[842,1544,1405],{"class":896},[842,1546,968],{"class":856},[842,1548,1410],{"class":903},[842,1550,893],{"class":856},[842,1552,1185],{"class":896},[842,1554,857],{"class":856},[842,1556,1419],{"class":1056},[842,1558,1079],{"class":856},[824,1560,1562],{"id":1561},"fine-tuning","Fine-tuning",[756,1564,1565,1566,1568,1569,857],{},"After moving to the estimated position, we will need to make small adjustments to achieve precise alignment with the actual physical position. This can be done by making small incremental movements using the ",[839,1567,1284],{}," method with provided offset vectors. These offset vectors are relative to the ",[1297,1570,1571],{},"current position of the iSWAP",[756,1573,1574],{},"It will likely be necessary to repeat this step a few times. Generally speaking, each adjustment should be small (typically 1-5mm) and the process should be repeated until the position is visually confirmed to be correct (that is, until the plate held by the iSWAP is physically seated in the desired location). The z height should gradually be reduced until the plate is properly seated in the target position.",[756,1576,1577,1579,1580,1583,1584,857],{},[770,1578,1432],{},": The ",[839,1581,1582],{},"current_location"," method returns the current position of the iSWAP's ",[1297,1585,1299],{},[832,1587,1589],{"className":834,"code":1588,"language":836,"meta":837,"style":837},"from unitelabs.labware import Vector\n\n# For example: move 3mm right, 2mm forward, and 5mm down\nawait hamilton.iswap.move_by(offset=Vector(x=3.0, y=2.0, z=-5.0))\n\nvalidated_position = await hamilton.iswap.current_location()\nprint(f\"Validated position: {validated_position}\")\n",[839,1590,1591,1605,1609,1614,1668,1672,1694],{"__ignoreMap":837},[842,1592,1593,1595,1597,1599,1601,1603],{"class":844,"line":845},[842,1594,849],{"class":848},[842,1596,853],{"class":852},[842,1598,857],{"class":856},[842,1600,960],{"class":852},[842,1602,868],{"class":848},[842,1604,971],{"class":852},[842,1606,1607],{"class":844,"line":874},[842,1608,878],{"emptyLinePlaceholder":877},[842,1610,1611],{"class":844,"line":881},[842,1612,1613],{"class":884},"# For example: move 3mm right, 2mm forward, and 5mm down\n",[842,1615,1616,1618,1620,1622,1624,1626,1628,1630,1633,1635,1637,1639,1641,1643,1646,1648,1650,1652,1655,1657,1659,1662,1665],{"class":844,"line":888},[842,1617,926],{"class":848},[842,1619,929],{"class":852},[842,1621,857],{"class":856},[842,1623,1127],{"class":1056},[842,1625,857],{"class":856},[842,1627,1284],{"class":896},[842,1629,900],{"class":856},[842,1631,1632],{"class":903},"offset",[842,1634,893],{"class":856},[842,1636,1306],{"class":896},[842,1638,900],{"class":856},[842,1640,1350],{"class":903},[842,1642,893],{"class":856},[842,1644,1645],{"class":1035},"3.0",[842,1647,968],{"class":856},[842,1649,1360],{"class":903},[842,1651,893],{"class":856},[842,1653,1654],{"class":1035},"2.0",[842,1656,968],{"class":856},[842,1658,1370],{"class":903},[842,1660,1661],{"class":856},"=-",[842,1663,1664],{"class":1035},"5.0",[842,1666,1667],{"class":856},"))\n",[842,1669,1670],{"class":844,"line":923},[842,1671,878],{"emptyLinePlaceholder":877},[842,1673,1674,1677,1679,1682,1684,1686,1688,1690,1692],{"class":844,"line":1021},[842,1675,1676],{"class":852},"validated_position ",[842,1678,893],{"class":856},[842,1680,1681],{"class":848}," await",[842,1683,929],{"class":852},[842,1685,857],{"class":856},[842,1687,1127],{"class":1056},[842,1689,857],{"class":856},[842,1691,1582],{"class":896},[842,1693,937],{"class":856},[842,1695,1696,1699,1701,1705,1708,1711,1714,1717,1719],{"class":844,"line":1026},[842,1697,1698],{"class":896},"print",[842,1700,900],{"class":856},[842,1702,1704],{"class":1703},"spNyl","f",[842,1706,1707],{"class":912},"\"Validated position: ",[842,1709,1710],{"class":1035},"{",[842,1712,1713],{"class":896},"validated_position",[842,1715,1716],{"class":1035},"}",[842,1718,909],{"class":912},[842,1720,1079],{"class":856},[816,1722,1724],{"id":1723},"save-the-coordinates","Save the Coordinates",[756,1726,1727,1728,1731,1732,1734,1735,1738,1739,1281,1741,1744,1745,1747,1748,1750],{},"After fine-tuning the plate to the desired position and obtaining that position's precise coordinates, we need to integrate this validated position into a deck configuration for future use. We will do this by creating a custom ",[839,1729,1730],{},"HamiltonCarrier"," and adding it to the deck at the ",[839,1733,1713],{},". This step ensures that the position is available for methods that interact with a ",[839,1736,1737],{},"CarrierSite",", such as ",[839,1740,1089],{},[839,1742,1743],{},"put_down"," gripper commands; furthermore, it is much safer to save the position in the deck configuration this way than to directly reuse the ",[839,1746,1713],{}," ",[839,1749,1306],{}," in future workflows.",[824,1752,1754],{"id":1753},"create-a-custom-carrier","Create a Custom Carrier",[756,1756,1757],{},"To add a single position to the deck, we will create a custom carrier with one carrier site. The carrier site will not be offset from the carrier, and will have the exact dimensions of the plate we are training.",[756,1759,1760,1761,1763],{},"It is strongly recommended to review the ",[796,1762,814],{"href":813}," for more information on creating custom labware.",[832,1765,1767],{"className":834,"code":1766,"language":836,"meta":837,"style":837},"import collections.abc\nimport dataclasses\n\nfrom unitelabs.labware import CarrierSite, Orientation, StandardMicroplateDimensions, Vector\nfrom unitelabs.labware.hamilton import HamiltonCarrier, LabwareType\n\n\n@dataclasses.dataclass\nclass PlateReaderCarrier(HamiltonCarrier[StandardMicroplateDimensions]):\n    rows: int = 1\n    dimensions: Vector = dataclasses.field(default_factory=lambda: Vector(x=127.0, y=86.0, z=0.0))\n    labware: LabwareType = LabwareType.PLATES\n    orientation: Orientation = Orientation.LANDSCAPE\n\n    children: collections.abc.Sequence[CarrierSite] = dataclasses.field(\n        repr=False,\n        default_factory=lambda: [\n            CarrierSite(dimensions=Vector(x=127.0, y=86.0))\n        ],\n    )\n\n",[839,1768,1769,1781,1788,1792,1821,1845,1849,1853,1866,1887,1904,1968,1989,2009,2014,2050,2059,2074,2107,2113],{"__ignoreMap":837},[842,1770,1771,1773,1776,1778],{"class":844,"line":845},[842,1772,868],{"class":848},[842,1774,1775],{"class":852}," collections",[842,1777,857],{"class":856},[842,1779,1780],{"class":1056},"abc\n",[842,1782,1783,1785],{"class":844,"line":874},[842,1784,868],{"class":848},[842,1786,1787],{"class":852}," dataclasses\n",[842,1789,1790],{"class":844,"line":881},[842,1791,878],{"emptyLinePlaceholder":877},[842,1793,1794,1796,1798,1800,1802,1804,1807,1809,1812,1814,1817,1819],{"class":844,"line":888},[842,1795,849],{"class":848},[842,1797,853],{"class":852},[842,1799,857],{"class":856},[842,1801,960],{"class":852},[842,1803,868],{"class":848},[842,1805,1806],{"class":852}," CarrierSite",[842,1808,968],{"class":856},[842,1810,1811],{"class":852}," Orientation",[842,1813,968],{"class":856},[842,1815,1816],{"class":852}," StandardMicroplateDimensions",[842,1818,968],{"class":856},[842,1820,971],{"class":852},[842,1822,1823,1825,1827,1829,1831,1833,1835,1837,1840,1842],{"class":844,"line":923},[842,1824,849],{"class":848},[842,1826,853],{"class":852},[842,1828,857],{"class":856},[842,1830,982],{"class":852},[842,1832,857],{"class":856},[842,1834,865],{"class":852},[842,1836,868],{"class":848},[842,1838,1839],{"class":852}," HamiltonCarrier",[842,1841,968],{"class":856},[842,1843,1844],{"class":852}," LabwareType\n",[842,1846,1847],{"class":844,"line":1021},[842,1848,878],{"emptyLinePlaceholder":877},[842,1850,1851],{"class":844,"line":1026},[842,1852,878],{"emptyLinePlaceholder":877},[842,1854,1855,1858,1861,1863],{"class":844,"line":1048},[842,1856,1857],{"class":856},"@",[842,1859,1860],{"class":896},"dataclasses",[842,1862,857],{"class":856},[842,1864,1865],{"class":896},"dataclass\n",[842,1867,1868,1871,1875,1877,1879,1881,1884],{"class":844,"line":1213},[842,1869,1870],{"class":1703},"class",[842,1872,1874],{"class":1873},"sBMFI"," PlateReaderCarrier",[842,1876,900],{"class":856},[842,1878,1730],{"class":852},[842,1880,1032],{"class":856},[842,1882,1883],{"class":852},"StandardMicroplateDimensions",[842,1885,1886],{"class":856},"]):\n",[842,1888,1890,1893,1896,1899,1901],{"class":844,"line":1889},10,[842,1891,1892],{"class":852},"    rows",[842,1894,1895],{"class":856},":",[842,1897,1898],{"class":1873}," int",[842,1900,1042],{"class":856},[842,1902,1903],{"class":1035}," 1\n",[842,1905,1907,1910,1912,1915,1917,1920,1922,1925,1927,1930,1932,1935,1937,1939,1941,1943,1945,1948,1950,1952,1954,1957,1959,1961,1963,1966],{"class":844,"line":1906},11,[842,1908,1909],{"class":852},"    dimensions",[842,1911,1895],{"class":856},[842,1913,1914],{"class":852}," Vector ",[842,1916,893],{"class":856},[842,1918,1919],{"class":852}," dataclasses",[842,1921,857],{"class":856},[842,1923,1924],{"class":896},"field",[842,1926,900],{"class":856},[842,1928,1929],{"class":903},"default_factory",[842,1931,893],{"class":856},[842,1933,1934],{"class":1703},"lambda",[842,1936,1895],{"class":856},[842,1938,1345],{"class":896},[842,1940,900],{"class":856},[842,1942,1350],{"class":903},[842,1944,893],{"class":856},[842,1946,1947],{"class":1035},"127.0",[842,1949,968],{"class":856},[842,1951,1360],{"class":903},[842,1953,893],{"class":856},[842,1955,1956],{"class":1035},"86.0",[842,1958,968],{"class":856},[842,1960,1370],{"class":903},[842,1962,893],{"class":856},[842,1964,1965],{"class":1035},"0.0",[842,1967,1667],{"class":856},[842,1969,1971,1974,1976,1979,1981,1984,1986],{"class":844,"line":1970},12,[842,1972,1973],{"class":852},"    labware",[842,1975,1895],{"class":856},[842,1977,1978],{"class":852}," LabwareType ",[842,1980,893],{"class":856},[842,1982,1983],{"class":852}," LabwareType",[842,1985,857],{"class":856},[842,1987,1988],{"class":1056},"PLATES\n",[842,1990,1992,1995,1997,2000,2002,2004,2006],{"class":844,"line":1991},13,[842,1993,1994],{"class":852},"    orientation",[842,1996,1895],{"class":856},[842,1998,1999],{"class":852}," Orientation ",[842,2001,893],{"class":856},[842,2003,1811],{"class":852},[842,2005,857],{"class":856},[842,2007,2008],{"class":1056},"LANDSCAPE\n",[842,2010,2012],{"class":844,"line":2011},14,[842,2013,878],{"emptyLinePlaceholder":877},[842,2015,2017,2020,2022,2024,2026,2029,2031,2034,2036,2038,2040,2042,2044,2046,2048],{"class":844,"line":2016},15,[842,2018,2019],{"class":852},"    children",[842,2021,1895],{"class":856},[842,2023,1775],{"class":852},[842,2025,857],{"class":856},[842,2027,2028],{"class":1056},"abc",[842,2030,857],{"class":856},[842,2032,2033],{"class":1056},"Sequence",[842,2035,1032],{"class":856},[842,2037,1737],{"class":1056},[842,2039,1039],{"class":856},[842,2041,1042],{"class":856},[842,2043,1919],{"class":852},[842,2045,857],{"class":856},[842,2047,1924],{"class":896},[842,2049,1158],{"class":856},[842,2051,2053,2056],{"class":844,"line":2052},16,[842,2054,2055],{"class":903},"        repr",[842,2057,2058],{"class":856},"=False,\n",[842,2060,2062,2065,2067,2069,2071],{"class":844,"line":2061},17,[842,2063,2064],{"class":903},"        default_factory",[842,2066,893],{"class":856},[842,2068,1934],{"class":1703},[842,2070,1895],{"class":856},[842,2072,2073],{"class":856}," [\n",[842,2075,2077,2080,2082,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105],{"class":844,"line":2076},18,[842,2078,2079],{"class":896},"            CarrierSite",[842,2081,900],{"class":856},[842,2083,2084],{"class":903},"dimensions",[842,2086,893],{"class":856},[842,2088,1306],{"class":896},[842,2090,900],{"class":856},[842,2092,1350],{"class":903},[842,2094,893],{"class":856},[842,2096,1947],{"class":1035},[842,2098,968],{"class":856},[842,2100,1360],{"class":903},[842,2102,893],{"class":856},[842,2104,1956],{"class":1035},[842,2106,1667],{"class":856},[842,2108,2110],{"class":844,"line":2109},19,[842,2111,2112],{"class":856},"        ],\n",[842,2114,2116],{"class":844,"line":2115},20,[842,2117,2118],{"class":856},"    )\n",[756,2120,2121],{},"This custom carrier can then be used in the deck configuration to define our custom position for the plate reader.",[824,2123,2125],{"id":2124},"use-the-carrier","Use the Carrier",[756,2127,2128,2129,2132,2133,2135,2136,2138,2139,2141,2142,2144,2145,2147,2148,2150,2151,2153],{},"After creating a custom carrier, we must add it to the deck at the validated position. ",[770,2130,2131],{},"Importantly",", the ",[839,2134,1713],{}," from ",[839,2137,1582],{}," refers to the iSWAP's ",[1297,2140,1299],{},", while the ",[839,2143,1062],{}," method refers to a carrier's ",[1297,2146,1440],{},". Thus we must offset the position we use in the ",[839,2149,1062],{}," call by half the plate's dimensions to align the carrier's center with the validated position. We will once again take advantage of the plate's ",[839,2152,1299],{}," property to get these values.",[756,2155,2156,2159,2160,2162,2163,2165],{},[770,2157,2158],{},"Note",": Here we subtract 100mm from the z-coordinate, since ",[839,2161,1062],{}," will place the carrier on the deck relative to the deck origin, which is always 100mm above the absolute origin (what is referenced in ",[839,2164,1582],{},").",[832,2167,2169],{"className":834,"code":2168,"language":836,"meta":837,"style":837},"from . import PlateReaderCarrier\n\nreader_carrier = PlateReaderCarrier(identifier=\"reader_carrier\")\n# Obtained from above process, for illustration only.\nvalidated_position = Vector(x=243.2, y=181.0, z=146.8)\n# Subtract plate center to get origin\nvalidated_position_origin = validated_position - plate.center\n# Subtract 100mm from z to account for deck origin\ncarrier_origin = validated_position_origin - Vector(z=100.0)\n\nhamilton.deck.add(\n    reader_carrier,\n    location=carrier_origin\n)\n",[839,2170,2171,2184,2188,2213,2218,2255,2260,2279,2284,2308,2312,2326,2333,2343],{"__ignoreMap":837},[842,2172,2173,2175,2178,2181],{"class":844,"line":845},[842,2174,849],{"class":848},[842,2176,2177],{"class":856}," .",[842,2179,2180],{"class":848}," import",[842,2182,2183],{"class":852}," PlateReaderCarrier\n",[842,2185,2186],{"class":844,"line":874},[842,2187,878],{"emptyLinePlaceholder":877},[842,2189,2190,2193,2195,2197,2199,2202,2204,2206,2209,2211],{"class":844,"line":881},[842,2191,2192],{"class":852},"reader_carrier ",[842,2194,893],{"class":856},[842,2196,1874],{"class":896},[842,2198,900],{"class":856},[842,2200,2201],{"class":903},"identifier",[842,2203,893],{"class":856},[842,2205,909],{"class":856},[842,2207,2208],{"class":912},"reader_carrier",[842,2210,909],{"class":856},[842,2212,1079],{"class":856},[842,2214,2215],{"class":844,"line":888},[842,2216,2217],{"class":884},"# Obtained from above process, for illustration only.\n",[842,2219,2220,2222,2224,2226,2228,2230,2232,2235,2237,2239,2241,2244,2246,2248,2250,2253],{"class":844,"line":923},[842,2221,1676],{"class":852},[842,2223,893],{"class":856},[842,2225,1345],{"class":896},[842,2227,900],{"class":856},[842,2229,1350],{"class":903},[842,2231,893],{"class":856},[842,2233,2234],{"class":1035},"243.2",[842,2236,968],{"class":856},[842,2238,1360],{"class":903},[842,2240,893],{"class":856},[842,2242,2243],{"class":1035},"181.0",[842,2245,968],{"class":856},[842,2247,1370],{"class":903},[842,2249,893],{"class":856},[842,2251,2252],{"class":1035},"146.8",[842,2254,1079],{"class":856},[842,2256,2257],{"class":844,"line":1021},[842,2258,2259],{"class":884},"# Subtract plate center to get origin\n",[842,2261,2262,2265,2267,2270,2273,2275,2277],{"class":844,"line":1026},[842,2263,2264],{"class":852},"validated_position_origin ",[842,2266,893],{"class":856},[842,2268,2269],{"class":852}," validated_position ",[842,2271,2272],{"class":856},"-",[842,2274,1508],{"class":852},[842,2276,857],{"class":856},[842,2278,1513],{"class":1056},[842,2280,2281],{"class":844,"line":1048},[842,2282,2283],{"class":884},"# Subtract 100mm from z to account for deck origin\n",[842,2285,2286,2289,2291,2294,2296,2298,2300,2302,2304,2306],{"class":844,"line":1213},[842,2287,2288],{"class":852},"carrier_origin ",[842,2290,893],{"class":856},[842,2292,2293],{"class":852}," validated_position_origin ",[842,2295,2272],{"class":856},[842,2297,1345],{"class":896},[842,2299,900],{"class":856},[842,2301,1482],{"class":903},[842,2303,893],{"class":856},[842,2305,1365],{"class":1035},[842,2307,1079],{"class":856},[842,2309,2310],{"class":844,"line":1889},[842,2311,878],{"emptyLinePlaceholder":877},[842,2313,2314,2316,2318,2320,2322,2324],{"class":844,"line":1906},[842,2315,1051],{"class":852},[842,2317,857],{"class":856},[842,2319,1057],{"class":1056},[842,2321,857],{"class":856},[842,2323,1062],{"class":896},[842,2325,1158],{"class":856},[842,2327,2328,2331],{"class":844,"line":1970},[842,2329,2330],{"class":896},"    reader_carrier",[842,2332,1193],{"class":856},[842,2334,2335,2338,2340],{"class":844,"line":1991},[842,2336,2337],{"class":903},"    location",[842,2339,893],{"class":856},[842,2341,2342],{"class":896},"carrier_origin\n",[842,2344,2345],{"class":844,"line":2011},[842,2346,1079],{"class":856},[824,2348,2350],{"id":2349},"verify-the-carrier-position","Verify the Carrier Position",[756,2352,2353],{},"Now that the carrier is added to the deck, we can verify that the carrier's position is correctly saved by simply attempting to put the plate down at that location.",[832,2355,2357],{"className":834,"code":2356,"language":836,"meta":837,"style":837},"await hamilton.iswap.pick_up_from(\n  source=plate_carrier[0],\n  pick_up_direction=Direction.LEFT\n)\n\nawait hamilton.iswap.put_down(\n  target=reader_carrier[0],\n  drop_direction=Direction.RIGHT\n)\n",[839,2358,2359,2375,2390,2404,2408,2412,2428,2443,2457],{"__ignoreMap":837},[842,2360,2361,2363,2365,2367,2369,2371,2373],{"class":844,"line":845},[842,2362,926],{"class":848},[842,2364,929],{"class":852},[842,2366,857],{"class":856},[842,2368,1127],{"class":1056},[842,2370,857],{"class":856},[842,2372,1089],{"class":896},[842,2374,1158],{"class":856},[842,2376,2377,2380,2382,2384,2386,2388],{"class":844,"line":874},[842,2378,2379],{"class":903},"  source",[842,2381,893],{"class":856},[842,2383,1029],{"class":896},[842,2385,1032],{"class":856},[842,2387,1036],{"class":1035},[842,2389,1170],{"class":856},[842,2391,2392,2395,2397,2399,2401],{"class":844,"line":881},[842,2393,2394],{"class":903},"  pick_up_direction",[842,2396,893],{"class":856},[842,2398,1185],{"class":896},[842,2400,857],{"class":856},[842,2402,2403],{"class":1056},"LEFT\n",[842,2405,2406],{"class":844,"line":888},[842,2407,1079],{"class":856},[842,2409,2410],{"class":844,"line":923},[842,2411,878],{"emptyLinePlaceholder":877},[842,2413,2414,2416,2418,2420,2422,2424,2426],{"class":844,"line":1021},[842,2415,926],{"class":848},[842,2417,929],{"class":852},[842,2419,857],{"class":856},[842,2421,1127],{"class":1056},[842,2423,857],{"class":856},[842,2425,1743],{"class":896},[842,2427,1158],{"class":856},[842,2429,2430,2433,2435,2437,2439,2441],{"class":844,"line":1026},[842,2431,2432],{"class":903},"  target",[842,2434,893],{"class":856},[842,2436,2208],{"class":896},[842,2438,1032],{"class":856},[842,2440,1036],{"class":1035},[842,2442,1170],{"class":856},[842,2444,2445,2448,2450,2452,2454],{"class":844,"line":1048},[842,2446,2447],{"class":903},"  drop_direction",[842,2449,893],{"class":856},[842,2451,1185],{"class":896},[842,2453,857],{"class":856},[842,2455,2456],{"class":1056},"RIGHT\n",[842,2458,2459],{"class":844,"line":1213},[842,2460,1079],{"class":856},[816,2462,2464],{"id":2463},"conclusion","Conclusion",[756,2466,2467],{},"You should now have a solid understanding of how to train custom deck positions using the iSWAP gripper and validate them for precise labware placement.",[2469,2470,2471],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":837,"searchDepth":845,"depth":874,"links":2473},[2474,2479,2483,2488],{"id":818,"depth":874,"text":819,"children":2475},[2476,2477,2478],{"id":826,"depth":881,"text":827},{"id":940,"depth":881,"text":941},{"id":1082,"depth":881,"text":1083},{"id":1273,"depth":874,"text":1274,"children":2480},[2481,2482],{"id":1288,"depth":881,"text":1289},{"id":1561,"depth":881,"text":1562},{"id":1723,"depth":874,"text":1724,"children":2484},[2485,2486,2487],{"id":1753,"depth":881,"text":1754},{"id":2124,"depth":881,"text":2125},{"id":2349,"depth":881,"text":2350},{"id":2463,"depth":874,"text":2464},"Define and use a custom deck position using the iSWAP module.","md",null,{},{"title":302,"description":2489},"nrbu-gvG6zpOHvVTk06HP8Mxf-asezErma4z-U2qeKA",[2496,2498],{"title":298,"path":299,"stem":300,"description":2497},"How to teach the gripper paddle positions and configuring the gripper module.",{"title":311,"path":312,"stem":313,"description":2499},"Configure and use the Hamilton Vantage waste.",1783607776686]