[{"data":1,"prerenderedAt":3225},["ShallowReactive",2],{"navigation":3,"\u002Fdevices\u002Ftecan-infinite-200":909,"\u002Fdevices\u002Ftecan-infinite-200-surround":3220},[4,59,188,271,445,591,760,791],{"title":5,"type":6,"device":6,"path":7,"stem":8,"children":9,"page":41},"Get Started",null,"\u002Fget-started\u002F","01.get-started",[10,15,42,47,51,55],{"title":11,"path":12,"stem":13,"type":14,"device":6},"Welcome to UniteLabs","\u002Fget-started\u002Fwelcome\u002F","01.get-started\u002F00.welcome","landing",{"title":16,"type":6,"device":6,"path":17,"stem":18,"children":19,"page":41},"Setup","\u002Fget-started\u002Fsetup\u002F","01.get-started\u002F01.setup",[20,25,29,33,37],{"title":21,"path":22,"stem":23,"type":24,"device":6},"Get access","\u002Fget-started\u002Fsetup\u002Fget-access\u002F","01.get-started\u002F01.setup\u002F00.get-access","howto",{"title":26,"path":27,"stem":28,"type":24,"device":6},"GroundControl","\u002Fget-started\u002Fsetup\u002Fgroundcontrol\u002F","01.get-started\u002F01.setup\u002F10.groundcontrol",{"title":30,"path":31,"stem":32,"type":24,"device":6},"Connect to Platform","\u002Fget-started\u002Fsetup\u002Fconnect-to-platform\u002F","01.get-started\u002F01.setup\u002F20.connect-to-platform",{"title":34,"path":35,"stem":36,"type":24,"device":6},"Set up your development machine","\u002Fget-started\u002Fsetup\u002Fdeveloper-machine\u002F","01.get-started\u002F01.setup\u002F30.developer-machine",{"title":38,"path":39,"stem":40,"type":24,"device":6},"SDK installation","\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F","01.get-started\u002F01.setup\u002F40.sdk-installation",false,{"title":43,"path":44,"stem":45,"type":46,"device":6},"Control a device","\u002Fget-started\u002Fcontrol-a-device\u002F","01.get-started\u002F02.control-a-device","tutorial",{"title":48,"path":49,"stem":50,"type":46,"device":6},"Liquid handling as code","\u002Fget-started\u002Fliquid-handling-as-code\u002F","01.get-started\u002F03.liquid-handling-as-code",{"title":52,"path":53,"stem":54,"type":46,"device":6},"Automate your workflows","\u002Fget-started\u002Fautomate-your-workflows\u002F","01.get-started\u002F04.automate-your-workflows",{"title":56,"path":57,"stem":58,"type":6,"device":6},"Self-Paced Setup Guide","\u002Fget-started\u002Fself-onboarding\u002F","01.get-started\u002F90.self-onboarding",{"title":60,"type":6,"device":6,"path":61,"stem":62,"children":63,"page":41},"How-to","\u002Fhow-to\u002F","02.how-to",[64,118,163,180],{"title":65,"type":6,"device":6,"path":66,"stem":67,"children":68,"page":41},"Connectors and devices","\u002Fhow-to\u002Fintegrate\u002F","02.how-to\u002F02.integrate",[69,102],{"title":70,"type":6,"device":6,"path":71,"stem":72,"children":73,"page":41},"Connect a device","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device",[74,78,82,86,90,94,98],{"title":75,"path":76,"stem":77,"type":24,"device":6},"Connector Configuration","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fconnector-configuration\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F10.connector-configuration",{"title":79,"path":80,"stem":81,"type":24,"device":6},"With an executable","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fwith-an-executable\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F20.with-an-executable",{"title":83,"path":84,"stem":85,"type":24,"device":6},"From source","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Ffrom-source\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F30.from-source",{"title":87,"path":88,"stem":89,"type":24,"device":6},"Build your own","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fbuild-yourself\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F40.build-yourself",{"title":91,"path":92,"stem":93,"type":24,"device":6},"Headless install","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fheadless-install\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F50.headless-install",{"title":95,"path":96,"stem":97,"type":24,"device":6},"Raspberry Pi","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fraspberry-pi\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F55.raspberry-pi",{"title":99,"path":100,"stem":101,"type":24,"device":6},"Multi-device Networking","\u002Fhow-to\u002Fintegrate\u002Fconnect-a-device\u002Fmultiple-devices\u002F","02.how-to\u002F02.integrate\u002F20.connect-a-device\u002F60.multiple-devices",{"title":103,"type":6,"device":6,"path":104,"stem":105,"children":106,"page":41},"Use a device","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device",[107,110,114],{"title":26,"path":108,"stem":109,"type":24,"device":6},"\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fgroundcontrol\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F10.groundcontrol",{"title":111,"path":112,"stem":113,"type":24,"device":6},"Platform","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fplatform\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F20.platform",{"title":115,"path":116,"stem":117,"type":24,"device":6},"UniteLabs SDK & REST API","\u002Fhow-to\u002Fintegrate\u002Fuse-a-device\u002Fpython\u002F","02.how-to\u002F02.integrate\u002F30.use-a-device\u002F30.python",{"title":119,"type":6,"device":6,"path":120,"stem":121,"children":122,"page":41},"Workflows","\u002Fhow-to\u002Fautomate\u002F","02.how-to\u002F07.automate",[123,127,131,135,139,143,147,151,155,159],{"title":124,"path":125,"stem":126,"type":24,"device":6},"Deploy a workflow","\u002Fhow-to\u002Fautomate\u002Fdeploy-a-workflow\u002F","02.how-to\u002F07.automate\u002F30.deploy-a-workflow",{"title":128,"path":129,"stem":130,"type":24,"device":6},"Run a workflow","\u002Fhow-to\u002Fautomate\u002Frun-a-workflow\u002F","02.how-to\u002F07.automate\u002F35.run-a-workflow",{"title":132,"path":133,"stem":134,"type":24,"device":6},"CI\u002FCD for workflows","\u002Fhow-to\u002Fautomate\u002Fcicd-for-workflows\u002F","02.how-to\u002F07.automate\u002F40.cicd-for-workflows",{"title":136,"path":137,"stem":138,"type":24,"device":6},"HITL basics","\u002Fhow-to\u002Fautomate\u002Fbasic-hitl\u002F","02.how-to\u002F07.automate\u002F50.basic-hitl",{"title":140,"path":141,"stem":142,"type":24,"device":6},"Slack notifications and operator confirmation","\u002Fhow-to\u002Fautomate\u002Fslack-notifications\u002F","02.how-to\u002F07.automate\u002F52.slack-notifications",{"title":144,"path":145,"stem":146,"type":24,"device":6},"Typed operator inputs","\u002Fhow-to\u002Fautomate\u002Ftyped-operator-inputs\u002F","02.how-to\u002F07.automate\u002F55.typed-operator-inputs",{"title":148,"path":149,"stem":150,"type":24,"device":6},"Pause and resume a run","\u002Fhow-to\u002Fautomate\u002Fpause-and-resume\u002F","02.how-to\u002F07.automate\u002F57.pause-and-resume",{"title":152,"path":153,"stem":154,"type":24,"device":6},"Error recovery","\u002Fhow-to\u002Fautomate\u002Fbasic-error-handling\u002F","02.how-to\u002F07.automate\u002F60.basic-error-handling",{"title":156,"path":157,"stem":158,"type":24,"device":6},"Advanced error handling","\u002Fhow-to\u002Fautomate\u002Fadvanced-error-handling\u002F","02.how-to\u002F07.automate\u002F70.advanced-error-handling",{"title":160,"path":161,"stem":162,"type":24,"device":6},"Emit lineage events","\u002Fhow-to\u002Fautomate\u002Femitting-lineage-events\u002F","02.how-to\u002F07.automate\u002F90.emitting-lineage-events",{"title":164,"type":6,"device":6,"path":165,"stem":166,"children":167,"page":41},"Data","\u002Fhow-to\u002Fobserve\u002F","02.how-to\u002F08.observe",[168,172,176],{"title":169,"path":170,"stem":171,"type":24,"device":6},"File System Connector","\u002Fhow-to\u002Fobserve\u002Ffilesystem-connector\u002F","02.how-to\u002F08.observe\u002F10.filesystem-connector",{"title":173,"path":174,"stem":175,"type":24,"device":6},"Building an ETL","\u002Fhow-to\u002Fobserve\u002Fbuilding-an-etl\u002F","02.how-to\u002F08.observe\u002F20.building-an-etl",{"title":177,"path":178,"stem":179,"type":24,"device":6},"Read lineage events","\u002Fhow-to\u002Fobserve\u002Freading-lineage-events\u002F","02.how-to\u002F08.observe\u002F30.reading-lineage-events",{"title":111,"type":6,"device":6,"path":181,"stem":182,"children":183,"page":41},"\u002Fhow-to\u002Fplatform\u002F","02.how-to\u002F09.platform",[184],{"title":185,"path":186,"stem":187,"type":24,"device":6},"UniteLabs Desktop","\u002Fhow-to\u002Fplatform\u002Funitelabs-desktop\u002F","02.how-to\u002F09.platform\u002F10.unitelabs-desktop",{"title":189,"type":6,"device":6,"path":190,"stem":191,"children":192},"Technical Reference","\u002Ftechnical-reference\u002F","03.technical-reference",[193,196,201,213,226,235,244,253,262],{"title":194,"path":190,"stem":195,"type":14,"device":6},"Overview","03.technical-reference\u002Findex",{"title":197,"path":198,"stem":199,"type":200,"device":6},"REST API","\u002Ftechnical-reference\u002Frest-api\u002F","03.technical-reference\u002F01.rest-api","reference",{"title":119,"type":6,"device":6,"path":202,"stem":203,"children":204,"page":41},"\u002Ftechnical-reference\u002Fautomate\u002F","03.technical-reference\u002F07.automate",[205,209],{"title":206,"path":207,"stem":208,"type":200,"device":6},"Workflow template","\u002Ftechnical-reference\u002Fautomate\u002Fworkflow-template\u002F","03.technical-reference\u002F07.automate\u002F05.workflow-template",{"title":210,"path":211,"stem":212,"type":200,"device":6},"Workflows REST API","\u002Ftechnical-reference\u002Fautomate\u002Fworkflows-api\u002F","03.technical-reference\u002F07.automate\u002F80.workflows-api",{"title":26,"type":6,"device":6,"path":214,"stem":215,"children":216},"\u002Ftechnical-reference\u002Fgroundcontrol\u002F","03.technical-reference\u002F10.groundcontrol\u002Findex",[217,218,222],{"title":194,"path":214,"stem":215,"type":14,"device":6},{"title":219,"path":220,"stem":221,"type":200,"device":6},"Network requirements","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fnetwork-requirements\u002F","03.technical-reference\u002F10.groundcontrol\u002F10.network-requirements",{"title":223,"path":224,"stem":225,"type":200,"device":6},"Changelog","\u002Ftechnical-reference\u002Fgroundcontrol\u002Fchangelog\u002F","03.technical-reference\u002F10.groundcontrol\u002F20.changelog",{"title":227,"type":6,"device":6,"path":228,"stem":229,"children":230},"UniteLabs SDK","\u002Ftechnical-reference\u002Fpython-sdk\u002F","03.technical-reference\u002F20.python-sdk\u002Findex",[231,232],{"title":194,"path":228,"stem":229,"type":14,"device":6},{"title":223,"path":233,"stem":234,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-sdk\u002Fchangelog\u002F","03.technical-reference\u002F20.python-sdk\u002F20.changelog",{"title":236,"type":6,"device":6,"path":237,"stem":238,"children":239},"Liquid Handling SDK","\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002Findex",[240,241],{"title":194,"path":237,"stem":238,"type":14,"device":6},{"title":223,"path":242,"stem":243,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-liquid-handling-sdk\u002Fchangelog\u002F","03.technical-reference\u002F30.python-liquid-handling-sdk\u002F20.changelog",{"title":245,"type":6,"device":6,"path":246,"stem":247,"children":248},"Labware","\u002Ftechnical-reference\u002Flabware\u002F","03.technical-reference\u002F40.labware\u002Findex",[249,250],{"title":194,"path":246,"stem":247,"type":14,"device":6},{"title":223,"path":251,"stem":252,"type":200,"device":6},"\u002Ftechnical-reference\u002Flabware\u002Fchangelog\u002F","03.technical-reference\u002F40.labware\u002F20.changelog",{"title":254,"type":6,"device":6,"path":255,"stem":256,"children":257},"Python Omnibus","\u002Ftechnical-reference\u002Fpython-omnibus\u002F","03.technical-reference\u002F50.python-omnibus\u002Findex",[258,259],{"title":194,"path":255,"stem":256,"type":14,"device":6},{"title":223,"path":260,"stem":261,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-omnibus\u002Fchangelog\u002F","03.technical-reference\u002F50.python-omnibus\u002F20.changelog",{"title":263,"type":6,"device":6,"path":264,"stem":265,"children":266},"Python CDK","\u002Ftechnical-reference\u002Fpython-cdk\u002F","03.technical-reference\u002F60.python-cdk\u002Findex",[267,268],{"title":194,"path":264,"stem":265,"type":14,"device":6},{"title":223,"path":269,"stem":270,"type":200,"device":6},"\u002Ftechnical-reference\u002Fpython-cdk\u002Fchangelog\u002F","03.technical-reference\u002F60.python-cdk\u002F20.changelog",{"title":272,"type":6,"device":6,"path":273,"stem":274,"children":275,"page":41},"Concepts","\u002Fconcepts\u002F","04.concepts",[276,315,339,383,422],{"title":277,"type":6,"device":6,"path":278,"stem":279,"children":280,"page":41},"Labs as code","\u002Fconcepts\u002Flabs-as-code\u002F","04.concepts\u002F01.labs-as-code",[281,286,290],{"title":282,"path":283,"stem":284,"type":285,"device":6},"Lab as Code","\u002Fconcepts\u002Flabs-as-code\u002Fwhy-code\u002F","04.concepts\u002F01.labs-as-code\u002F00.why-code","explanation",{"title":287,"path":288,"stem":289,"type":285,"device":6},"How it works","\u002Fconcepts\u002Flabs-as-code\u002Fhow-it-works\u002F","04.concepts\u002F01.labs-as-code\u002F01.how-it-works",{"title":291,"type":6,"device":6,"path":292,"stem":293,"children":294,"page":41},"Use Cases","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases",[295,299,303,307,311],{"title":296,"path":297,"stem":298,"type":285,"device":6},"Instrument Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Flow-level-instrument-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F10.low-level-instrument-control",{"title":300,"path":301,"stem":302,"type":285,"device":6},"Multi-device Control","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fmulti-device-control\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F20.multi-device-control",{"title":304,"path":305,"stem":306,"type":285,"device":6},"Workflow Orchestration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fworkflow-orchestration\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F30.workflow-orchestration",{"title":308,"path":309,"stem":310,"type":285,"device":6},"Custom Apps and LIMS Integration","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fcustom-apps-lims\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F40.custom-apps-lims",{"title":312,"path":313,"stem":314,"type":285,"device":6},"Scale and Fleet Management","\u002Fconcepts\u002Flabs-as-code\u002Fuse-cases\u002Fscale-and-fleet\u002F","04.concepts\u002F01.labs-as-code\u002F02.use-cases\u002F50.scale-and-fleet",{"title":65,"type":6,"device":6,"path":316,"stem":317,"children":318,"page":41},"\u002Fconcepts\u002Fintegrate\u002F","04.concepts\u002F02.integrate",[319,323,327,331,335],{"title":320,"path":321,"stem":322,"type":285,"device":6},"Device","\u002Fconcepts\u002Fintegrate\u002Fdevice\u002F","04.concepts\u002F02.integrate\u002F05.device",{"title":324,"path":325,"stem":326,"type":285,"device":6},"Connector","\u002Fconcepts\u002Fintegrate\u002Fconnector\u002F","04.concepts\u002F02.integrate\u002F10.connector",{"title":328,"path":329,"stem":330,"type":285,"device":6},"Module","\u002Fconcepts\u002Fintegrate\u002Fmodule\u002F","04.concepts\u002F02.integrate\u002F20.module",{"title":332,"path":333,"stem":334,"type":285,"device":6},"Action","\u002Fconcepts\u002Fintegrate\u002Faction\u002F","04.concepts\u002F02.integrate\u002F30.action",{"title":336,"path":337,"stem":338,"type":285,"device":6},"Subscription","\u002Fconcepts\u002Fintegrate\u002Fsubscription\u002F","04.concepts\u002F02.integrate\u002F40.subscription",{"title":340,"type":6,"device":6,"path":341,"stem":342,"children":343,"page":41},"Liquid handling and robots","\u002Fconcepts\u002Foperate\u002F","04.concepts\u002F03.operate",[344,348,352,356,359,363,367,371,375,379],{"title":345,"path":346,"stem":347,"type":285,"device":6},"Liquid Handling","\u002Fconcepts\u002Foperate\u002Fliquid-handling\u002F","04.concepts\u002F03.operate\u002F10.liquid-handling",{"title":349,"path":350,"stem":351,"type":285,"device":6},"Modules","\u002Fconcepts\u002Foperate\u002Fmodules\u002F","04.concepts\u002F03.operate\u002F20.modules",{"title":353,"path":354,"stem":355,"type":285,"device":6},"Deck","\u002Fconcepts\u002Foperate\u002Fdeck\u002F","04.concepts\u002F03.operate\u002F30.deck",{"title":245,"path":357,"stem":358,"type":285,"device":6},"\u002Fconcepts\u002Foperate\u002Flabware\u002F","04.concepts\u002F03.operate\u002F40.labware",{"title":360,"path":361,"stem":362,"type":285,"device":6},"Liquids","\u002Fconcepts\u002Foperate\u002Fliquids\u002F","04.concepts\u002F03.operate\u002F50.liquids",{"title":364,"path":365,"stem":366,"type":285,"device":6},"Liquid Classes","\u002Fconcepts\u002Foperate\u002Fliquid-classes\u002F","04.concepts\u002F03.operate\u002F60.liquid-classes",{"title":368,"path":369,"stem":370,"type":285,"device":6},"Parameter Sets","\u002Fconcepts\u002Foperate\u002Fparameter-sets\u002F","04.concepts\u002F03.operate\u002F65.parameter-sets",{"title":372,"path":373,"stem":374,"type":285,"device":6},"Tips and Tip Tracking","\u002Fconcepts\u002Foperate\u002Ftips\u002F","04.concepts\u002F03.operate\u002F70.tips",{"title":376,"path":377,"stem":378,"type":285,"device":6},"Simulation","\u002Fconcepts\u002Foperate\u002Fsimulation\u002F","04.concepts\u002F03.operate\u002F80.simulation",{"title":380,"path":381,"stem":382,"type":285,"device":6},"Error Handling","\u002Fconcepts\u002Foperate\u002Ferror-handling\u002F","04.concepts\u002F03.operate\u002F90.error-handling",{"title":119,"type":6,"device":6,"path":384,"stem":385,"children":386,"page":41},"\u002Fconcepts\u002Fautomate\u002F","04.concepts\u002F07.automate",[387,391,395,399,403,407,411,415,419],{"title":388,"path":389,"stem":390,"type":285,"device":6},"Workflow","\u002Fconcepts\u002Fautomate\u002Fworkflow\u002F","04.concepts\u002F07.automate\u002F10.workflow",{"title":392,"path":393,"stem":394,"type":285,"device":6},"Phase","\u002Fconcepts\u002Fautomate\u002Fphase\u002F","04.concepts\u002F07.automate\u002F20.phase",{"title":396,"path":397,"stem":398,"type":285,"device":6},"Step","\u002Fconcepts\u002Fautomate\u002Fstep\u002F","04.concepts\u002F07.automate\u002F30.step",{"title":400,"path":401,"stem":402,"type":285,"device":6},"Runs","\u002Fconcepts\u002Fautomate\u002Fruns\u002F","04.concepts\u002F07.automate\u002F40.runs",{"title":404,"path":405,"stem":406,"type":285,"device":6},"Input","\u002Fconcepts\u002Fautomate\u002Finput\u002F","04.concepts\u002F07.automate\u002F50.input",{"title":408,"path":409,"stem":410,"type":285,"device":6},"Artifacts","\u002Fconcepts\u002Fautomate\u002Fartifacts\u002F","04.concepts\u002F07.automate\u002F60.artifacts",{"title":412,"path":413,"stem":414,"type":285,"device":6},"Logs","\u002Fconcepts\u002Fautomate\u002Flogs\u002F","04.concepts\u002F07.automate\u002F70.logs",{"title":416,"path":417,"stem":418,"type":285,"device":6},"Human in the Loop","\u002Fconcepts\u002Fautomate\u002Fhuman-in-the-loop\u002F","04.concepts\u002F07.automate\u002F80.human-in-the-loop",{"title":380,"path":420,"stem":421,"type":285,"device":6},"\u002Fconcepts\u002Fautomate\u002Ferror-handling\u002F","04.concepts\u002F07.automate\u002F90.error-handling",{"title":164,"type":6,"device":6,"path":423,"stem":424,"children":425,"page":41},"\u002Fconcepts\u002Fobserve\u002F","04.concepts\u002F08.observe",[426,429,433,437,441],{"title":194,"path":427,"stem":428,"type":14,"device":6},"\u002Fconcepts\u002Fobserve\u002Foverview\u002F","04.concepts\u002F08.observe\u002F10.overview",{"title":430,"path":431,"stem":432,"type":285,"device":6},"Object Storage","\u002Fconcepts\u002Fobserve\u002Fstorage\u002F","04.concepts\u002F08.observe\u002F10.storage",{"title":434,"path":435,"stem":436,"type":285,"device":6},"Secrets","\u002Fconcepts\u002Fobserve\u002Fsecrets\u002F","04.concepts\u002F08.observe\u002F20.secrets",{"title":438,"path":439,"stem":440,"type":285,"device":6},"Data sources","\u002Fconcepts\u002Fobserve\u002Fdata-sources\u002F","04.concepts\u002F08.observe\u002F30.data-sources",{"title":442,"path":443,"stem":444,"type":285,"device":6},"Data lineage","\u002Fconcepts\u002Fobserve\u002Fdata-lineage\u002F","04.concepts\u002F08.observe\u002F40.data-lineage",{"title":446,"type":6,"device":6,"path":447,"stem":448,"children":449,"page":41},"Devices","\u002Fdevices\u002F","05.devices",[450,453,501,514,530,567],{"title":194,"path":451,"stem":452,"type":14,"device":6},"\u002Fdevices\u002Foverview\u002F","05.devices\u002F00.overview",{"title":454,"path":455,"page":41,"children":456},"Heater-shakers","\u002Fdevices\u002Fheater-shakers\u002F",[457,478,488],{"title":458,"path":459,"stem":460,"type":200,"device":461},"QInstruments BioShake","\u002Fdevices\u002Fqinstruments-bioshake\u002F","05.devices\u002F10.qinstruments-bioshake",{"slug":462,"vendor":463,"category":464,"connector":462,"package":465,"models":466,"communication":473,"vendor_software":6,"os":474},"qinstruments-bioshake","QInstruments","Plate Shakers & Temperature Control","unitelabs-qinstruments-bioshake",[467,468,469,470,471,472],"BioShake 3000 \u002F 3000 elm \u002F 3000 elm DWP","BioShake 3000-T \u002F 3000-T elm","BioShake 5000 elm","BioShake D30 \u002F D30 elm \u002F D30-T \u002F D30-T elm","BioShake Q1 \u002F Q1 (1.2 mm) \u002F Q1 (3.0 mm) \u002F Q2","HeatPlate","serial (RS-232 over USB)",[475,476,477],"windows","linux","macos",{"title":479,"path":480,"stem":481,"type":200,"device":482},"QInstruments ColdPlate","\u002Fdevices\u002Fqinstruments-coldplate\u002F","05.devices\u002F20.qinstruments-coldplate",{"slug":483,"vendor":463,"category":464,"connector":462,"package":465,"models":484,"communication":473,"vendor_software":6,"os":487},"qinstruments-coldplate",[485,486],"ColdPlate","ColdPlate slim",[475,476,477],{"title":489,"path":490,"stem":491,"type":200,"device":492},"Inheco Thermoshake","\u002Fdevices\u002Finheco-thermoshake\u002F","05.devices\u002F30.inheco-thermoshake",{"slug":493,"vendor":494,"category":464,"connector":495,"models":496},"inheco-thermoshake","Inheco","inheco-tec-controller",[497,498,499,500],"Thermoshake AC","Thermoshake AC LC","Thermoshake Classic","Thermoshake RM",{"title":502,"path":503,"page":41,"children":504},"Incubation","\u002Fdevices\u002Fincubation\u002F",[505],{"title":506,"path":507,"stem":508,"type":200,"device":509},"Inheco SCILA","\u002Fdevices\u002Finheco-scila\u002F","05.devices\u002F40.inheco-scila",{"slug":510,"vendor":494,"category":502,"connector":510,"models":511},"inheco-scila",[512,513],"SCILA","SCILA MIX 2-gas mixing device",{"title":515,"path":516,"page":41,"children":517},"Thermal cyclers","\u002Fdevices\u002Fthermal-cyclers\u002F",[518],{"title":519,"path":520,"stem":521,"type":200,"device":522},"Inheco ODTC","\u002Fdevices\u002Finheco-odtc\u002F","05.devices\u002F50.inheco-odtc",{"slug":523,"vendor":494,"category":524,"connector":523,"models":525},"inheco-odtc","Thermal Cycler",[526,527,528,529],"ODTC 96","ODTC 96XL","ODTC 384","ODTC 384XL",{"title":531,"path":532,"page":41,"children":533},"Readers","\u002Fdevices\u002Freaders\u002F",[534,543,552],{"title":535,"path":536,"stem":537,"type":200,"device":538},"Agilent Biotek Gen5","\u002Fdevices\u002Fbiotek-gen5\u002F","05.devices\u002F60.biotek-gen5",{"slug":539,"vendor":540,"category":541,"connector":542},"biotek-gen5","Agilent","Readers & Imagers","gen5",{"title":544,"path":545,"stem":546,"type":200,"device":547},"Biotek Synergy H1","\u002Fdevices\u002Fbiotek-synergy-h1\u002F","05.devices\u002F70.biotek-synergy-h1",{"slug":548,"vendor":540,"category":541,"connector":549,"models":550},"biotek-synergy-h1","agilent-synergy-h1",[551],"BioTek Synergy H1",{"title":553,"path":554,"stem":555,"type":200,"device":556},"Tecan Infinite 200","\u002Fdevices\u002Ftecan-infinite-200\u002F","05.devices\u002F75.tecan-infinite-200",{"slug":557,"vendor":558,"category":541,"connector":557,"package":559,"models":560,"communication":564,"vendor_software":565,"os":566},"tecan-infinite-200","Tecan","unitelabs-tecan-infinite-200",[561,562,563],"Infinite F200","Infinite M200","Infinite M200 Pro","USB","i-control on Windows only, for its USB driver",[475,476,477],{"title":568,"path":569,"page":41,"children":570},"Tilt & turn","\u002Fdevices\u002Ftilt-and-turn\u002F",[571,581],{"title":572,"path":573,"stem":574,"type":200,"device":575},"QInstruments TiltStation","\u002Fdevices\u002Fqinstruments-tiltstation\u002F","05.devices\u002F80.qinstruments-tiltstation",{"slug":576,"vendor":463,"category":577,"connector":462,"package":465,"models":578,"communication":473,"vendor_software":6,"os":580},"qinstruments-tiltstation","Plate Tilting",[579],"TiltStation",[475,476,477],{"title":582,"path":583,"stem":584,"type":200,"device":585},"QInstruments TurnStation","\u002Fdevices\u002Fqinstruments-turnstation\u002F","05.devices\u002F90.qinstruments-turnstation",{"slug":586,"vendor":463,"category":587,"connector":462,"package":465,"models":588,"communication":473,"vendor_software":6,"os":590},"qinstruments-turnstation","Plate Rotating",[589],"TurnStation",[475,476,477],{"title":592,"type":6,"device":6,"path":593,"stem":594,"children":595,"page":41},"Liquid Handling and Robots","\u002Fliquid-handling-and-robots\u002F","06.liquid-handling-and-robots",[596,599,611,635,638,679,704,721,738],{"title":194,"path":597,"stem":598,"type":14,"device":6},"\u002Fliquid-handling-and-robots\u002Foverview\u002F","06.liquid-handling-and-robots\u002F00.overview",{"title":353,"type":6,"device":6,"path":600,"stem":601,"children":602,"page":41},"\u002Fliquid-handling-and-robots\u002Fdeck\u002F","06.liquid-handling-and-robots\u002F10.deck",[603,607],{"title":604,"path":605,"stem":606,"type":24,"device":6},"Building a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fbuilding-a-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F10.building-a-deck",{"title":608,"path":609,"stem":610,"type":24,"device":6},"Save\u002FLoad a Deck","\u002Fliquid-handling-and-robots\u002Fdeck\u002Fsave-load-deck\u002F","06.liquid-handling-and-robots\u002F10.deck\u002F20.save-load-deck",{"title":612,"type":6,"device":6,"path":613,"stem":614,"children":615,"page":41},"Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting",[616,620,624,628,631],{"title":617,"path":618,"stem":619,"type":24,"device":6},"Basic Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F10.basic-pipetting",{"title":621,"path":622,"stem":623,"type":24,"device":6},"Advanced Pipetting","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fadvanced-pipetting\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F20.advanced-pipetting",{"title":625,"path":626,"stem":627,"type":24,"device":6},"Tip Handling","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F30.tip-handling",{"title":364,"path":629,"stem":630,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fpipetting\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F40.liquid-classes",{"title":632,"path":633,"stem":634,"type":24,"device":6},"Labware Transport","\u002Fliquid-handling-and-robots\u002Fpipetting\u002Flabware-transport\u002F","06.liquid-handling-and-robots\u002F20.pipetting\u002F50.labware-transport",{"title":376,"path":636,"stem":637,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fsimulation\u002F","06.liquid-handling-and-robots\u002F30.simulation",{"title":639,"type":6,"device":6,"path":640,"stem":641,"children":642,"page":41},"Hamilton STAR","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star",[643,647,651,655,659,663,667,671,675],{"title":644,"path":645,"stem":646,"type":24,"device":6},"Positioning & Movement","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fpositioning\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F10.positioning",{"title":648,"path":649,"stem":650,"type":24,"device":6},"Gripper Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcore-gripper\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F20.core-gripper",{"title":652,"path":653,"stem":654,"type":24,"device":6},"iSWAP Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fiswap\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F30.iswap",{"title":656,"path":657,"stem":658,"type":24,"device":6},"Using TADM","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Ftadm\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F40.tadm",{"title":660,"path":661,"stem":662,"type":24,"device":6},"Autoload Module","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fautoload\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F50.autoload",{"title":664,"path":665,"stem":666,"type":24,"device":6},"Waste Block","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fwaste-block\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F60.waste-block",{"title":668,"path":669,"stem":670,"type":24,"device":6},"Complex Mixing","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcomplex-mixing\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F66.complex-mixing",{"title":672,"path":673,"stem":674,"type":24,"device":6},"Teaching Gripper Paddle Positions","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fgripper-positions\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F70.gripper-positions",{"title":676,"path":677,"stem":678,"type":24,"device":6},"Training a Custom Deck Position With the iSWAP","\u002Fliquid-handling-and-robots\u002Fhamilton-star\u002Fcustom-deck-position\u002F","06.liquid-handling-and-robots\u002F41.hamilton-star\u002F75.custom-deck-position",{"title":680,"type":6,"device":6,"path":681,"stem":682,"children":683,"page":41},"Hamilton Vantage","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage",[684,688,692,696,700],{"title":685,"path":686,"stem":687,"type":24,"device":6},"Waste Configuration","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fwaste-configuration\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F05.waste-configuration",{"title":689,"path":690,"stem":691,"type":24,"device":6},"Covers and Lights","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fcovers-and-lights\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F10.covers-and-lights",{"title":693,"path":694,"stem":695,"type":24,"device":6},"IDL Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fidl\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F20.idl",{"title":697,"path":698,"stem":699,"type":24,"device":6},"IPG Module","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fipg\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F30.ipg",{"title":701,"path":702,"stem":703,"type":24,"device":6},"XL Pipettes","\u002Fliquid-handling-and-robots\u002Fhamilton-vantage\u002Fxl-channels\u002F","06.liquid-handling-and-robots\u002F42.hamilton-vantage\u002F40.xl-channels",{"title":705,"type":6,"device":6,"path":706,"stem":707,"children":708,"page":41},"Agilent Bravo","\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo",[709,712,715,718],{"title":625,"path":710,"stem":711,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F10.tip-handling",{"title":617,"path":713,"stem":714,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F20.basic-pipetting",{"title":364,"path":716,"stem":717,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F25.liquid-classes",{"title":648,"path":719,"stem":720,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Fagilent-bravo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F43.agilent-bravo\u002F30.using-the-gripper",{"title":722,"type":6,"device":6,"path":723,"stem":724,"children":725,"page":41},"Tecan FluentControl","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol",[726,730,734],{"title":727,"path":728,"stem":729,"type":24,"device":6},"Connect & Run a Method","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fconnect-and-run\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F10.connect-and-run",{"title":731,"path":732,"stem":733,"type":24,"device":6},"Sending XML Commands","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Fsending-xml-commands\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F20.sending-xml-commands",{"title":735,"path":736,"stem":737,"type":24,"device":6},"Full Workflow Example","\u002Fliquid-handling-and-robots\u002Ftecan-fluentcontrol\u002Ffull-workflow-example\u002F","06.liquid-handling-and-robots\u002F44.tecan-fluentcontrol\u002F30.full-workflow-example",{"title":739,"type":6,"device":6,"path":740,"stem":741,"children":742,"page":41},"Tecan Freedom EVO","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo",[743,747,750,753,757],{"title":744,"path":745,"stem":746,"type":24,"device":6},"Deck & Carriers","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fdeck-and-carriers\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F10.deck-and-carriers",{"title":625,"path":748,"stem":749,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Ftip-handling\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F20.tip-handling",{"title":617,"path":751,"stem":752,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fbasic-pipetting\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F30.basic-pipetting",{"title":754,"path":755,"stem":756,"type":24,"device":6},"Using the Gripper (RoMa)","\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fusing-the-gripper\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F40.using-the-gripper",{"title":364,"path":758,"stem":759,"type":24,"device":6},"\u002Fliquid-handling-and-robots\u002Ftecan-freedom-evo\u002Fliquid-classes\u002F","06.liquid-handling-and-robots\u002F45.tecan-freedom-evo\u002F50.liquid-classes",{"title":245,"type":6,"device":6,"path":761,"stem":762,"children":763,"page":41},"\u002Flabware\u002F","07.labware",[764,767,771,775,779,783,787],{"title":194,"path":765,"stem":766,"type":14,"device":6},"\u002Flabware\u002Foverview\u002F","07.labware\u002F00.overview",{"title":768,"path":769,"stem":770,"type":200,"device":6},"Standard Labware","\u002Flabware\u002Fstandard-labware\u002F","07.labware\u002F10.standard-labware",{"title":772,"path":773,"stem":774,"type":200,"device":6},"Plates","\u002Flabware\u002Fplates\u002F","07.labware\u002F20.plates",{"title":776,"path":777,"stem":778,"type":200,"device":6},"Tips and Tip Racks","\u002Flabware\u002Ftips-and-racks\u002F","07.labware\u002F30.tips-and-racks",{"title":780,"path":781,"stem":782,"type":200,"device":6},"Tubes and Tube Racks","\u002Flabware\u002Ftubes-and-tube-racks\u002F","07.labware\u002F40.tubes-and-tube-racks",{"title":784,"path":785,"stem":786,"type":200,"device":6},"Troughs","\u002Flabware\u002Ftroughs\u002F","07.labware\u002F50.troughs",{"title":788,"path":789,"stem":790,"type":200,"device":6},"Carriers and Adapters","\u002Flabware\u002Fcarriers-and-adapters\u002F","07.labware\u002F60.carriers-and-adapters",{"title":792,"type":6,"device":6,"path":793,"stem":794,"children":795},"Connector Development (CDK)","\u002Fconnector-development\u002F","20.connector-development",[796,798,822,855,863,903],{"title":194,"path":793,"stem":797,"type":14,"device":6},"20.connector-development\u002Findex",{"title":799,"path":800,"stem":801,"children":802,"page":41},"Getting Started","\u002Fconnector-development\u002Fgetting-started\u002F","20.connector-development\u002F10.getting-started",[803,806,810,814,818],{"title":194,"path":804,"stem":805,"type":285,"device":6},"\u002Fconnector-development\u002Fgetting-started\u002Foverview\u002F","20.connector-development\u002F10.getting-started\u002F10.overview",{"title":807,"path":808,"stem":809,"type":24,"device":6},"What's new","\u002Fconnector-development\u002Fgetting-started\u002Fwhats-new\u002F","20.connector-development\u002F10.getting-started\u002F20.whats-new",{"title":811,"path":812,"stem":813,"type":24,"device":6},"Installation","\u002Fconnector-development\u002Fgetting-started\u002Finstallation\u002F","20.connector-development\u002F10.getting-started\u002F30.installation",{"title":815,"path":816,"stem":817,"type":24,"device":6},"Python Environment and Project Management","\u002Fconnector-development\u002Fgetting-started\u002Fpython-environments\u002F","20.connector-development\u002F10.getting-started\u002F35.python-environments",{"title":819,"path":820,"stem":821,"type":24,"device":6},"Contributing","\u002Fconnector-development\u002Fgetting-started\u002Fcontributing\u002F","20.connector-development\u002F10.getting-started\u002F40.contributing",{"title":823,"path":824,"stem":825,"children":826,"page":41},"Tutorial","\u002Fconnector-development\u002Ftutorial\u002F","20.connector-development\u002F20.tutorial",[827,831,835,839,843,847,851],{"title":828,"path":829,"stem":830,"type":46,"device":6},"Walkthrough","\u002Fconnector-development\u002Ftutorial\u002Fwalkthrough\u002F","20.connector-development\u002F20.tutorial\u002F00.walkthrough",{"title":832,"path":833,"stem":834,"type":46,"device":6},"SiLA Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fsila-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F10.sila-endpoints",{"title":836,"path":837,"stem":838,"type":46,"device":6},"Data Endpoints","\u002Fconnector-development\u002Ftutorial\u002Fdata-endpoints\u002F","20.connector-development\u002F20.tutorial\u002F20.data-endpoints",{"title":840,"path":841,"stem":842,"type":46,"device":6},"Controls","\u002Fconnector-development\u002Ftutorial\u002Fcontrols\u002F","20.connector-development\u002F20.tutorial\u002F30.controls",{"title":844,"path":845,"stem":846,"type":46,"device":6},"SiLA Data Types","\u002Fconnector-development\u002Ftutorial\u002Fdata-types\u002F","20.connector-development\u002F20.tutorial\u002F40.data-types",{"title":848,"path":849,"stem":850,"type":46,"device":6},"Feature","\u002Fconnector-development\u002Ftutorial\u002Fconnector-structure\u002F","20.connector-development\u002F20.tutorial\u002F70.connector-structure",{"title":852,"path":853,"stem":854,"type":46,"device":6},"Hardware Communication","\u002Fconnector-development\u002Ftutorial\u002Fhardware-communication\u002F","20.connector-development\u002F20.tutorial\u002F90.hardware-communication",{"title":272,"type":6,"device":6,"path":856,"stem":857,"children":858,"page":41},"\u002Fconnector-development\u002Fconcepts\u002F","20.connector-development\u002F30.concepts",[859],{"title":860,"path":861,"stem":862,"type":285,"device":6},"SiLA","\u002Fconnector-development\u002Fconcepts\u002Fsila\u002F","20.connector-development\u002F30.concepts\u002Fsila",{"title":864,"path":865,"stem":866,"children":867,"page":41},"Guides","\u002Fconnector-development\u002Fguides\u002F","20.connector-development\u002F40.guides",[868,872,876,880,884,888,892,895,899],{"title":869,"path":870,"stem":871,"type":24,"device":6},"Configuration","\u002Fconnector-development\u002Fguides\u002Fconfiguration\u002F","20.connector-development\u002F40.guides\u002F20.configuration",{"title":873,"path":874,"stem":875,"type":24,"device":6},"Logging","\u002Fconnector-development\u002Fguides\u002Flogging\u002F","20.connector-development\u002F40.guides\u002F21.logging",{"title":877,"path":878,"stem":879,"type":24,"device":6},"Deployment","\u002Fconnector-development\u002Fguides\u002Fdeployment\u002F","20.connector-development\u002F40.guides\u002F30.deployment",{"title":881,"path":882,"stem":883,"type":24,"device":6},"Security","\u002Fconnector-development\u002Fguides\u002Fsecurity\u002F","20.connector-development\u002F40.guides\u002F40.security",{"title":885,"path":886,"stem":887,"type":24,"device":6},"Subscriptions","\u002Fconnector-development\u002Fguides\u002Fsubscriptions\u002F","20.connector-development\u002F40.guides\u002F45.subscriptions",{"title":889,"path":890,"stem":891,"type":24,"device":6},"Execution Modes","\u002Fconnector-development\u002Fguides\u002Fexecution-modes\u002F","20.connector-development\u002F40.guides\u002F46.execution-modes",{"title":380,"path":893,"stem":894,"type":24,"device":6},"\u002Fconnector-development\u002Fguides\u002Ferror-handling\u002F","20.connector-development\u002F40.guides\u002F50.error-handling",{"title":896,"path":897,"stem":898,"type":24,"device":6},"Serial Troubleshooting","\u002Fconnector-development\u002Fguides\u002Fserial-troubleshooting\u002F","20.connector-development\u002F40.guides\u002F70.serial-troubleshooting",{"title":900,"path":901,"stem":902,"type":24,"device":6},"Testing","\u002Fconnector-development\u002Fguides\u002Ftesting\u002F","20.connector-development\u002F40.guides\u002F80.testing",{"title":904,"path":905,"stem":906,"children":907,"type":6,"device":6},"References","\u002Fconnector-development\u002Freference\u002F","20.connector-development\u002F50.reference\u002Findex",[908],{"title":904,"path":905,"stem":906,"type":200,"device":6},{"id":910,"title":553,"body":911,"description":3211,"device":3212,"extension":3215,"links":6,"meta":3216,"navigation":1373,"path":3217,"seo":3218,"stem":555,"type":200,"__hash__":3219},"docs\u002F05.devices\u002F75.tecan-infinite-200.md",{"type":912,"value":913,"toc":3200},"minimark",[914,918,923,1017,1021,1187,1206,1225,1229,1239,1258,1261,1268,1283,2710,2714,2729,2744,2874,2883,2887,3036,3047,3051,3171,3174,3178,3189,3193,3196],[915,916,917],"p",{},"The Tecan Infinite 200 connector connects the reader over USB without running Tecan's i-control software. Use GroundControl to check the available read actions, then read a plate from a notebook in the platform's IDE.",[919,920,922],"h2",{"id":921},"what-you-need","What you need",[924,925,926,939],"table",{},[927,928,929],"thead",{},[930,931,932,936],"tr",{},[933,934,935],"th",{},"Item",[933,937,938],{},"Detail",[940,941,942,951,959,973,981,993,1005],"tbody",{},[930,943,944,948],{},[945,946,947],"td",{},"Instrument",[945,949,950],{},"A Tecan Infinite 200, powered on, with room in front for the carrier and the plate you want to read.",[930,952,953,956],{},[945,954,955],{},"Cable",[945,957,958],{},"A cable connecting the reader to the GroundControl machine via USB.",[930,960,961,963],{},[945,962,324],{},[945,964,965,968,969,972],{},[966,967,553],"strong",{},", package ",[970,971,559],"code",{},".",[930,974,975,978],{},[945,976,977],{},"Vendor software",[945,979,980],{},"On Windows: the USB driver supplied with i-control. Linux and macOS need no vendor software.",[930,982,983,986],{},[945,984,985],{},"Machine",[945,987,988,989,992],{},"Windows, Linux or macOS running ",[990,991,26],"a",{"href":27},". Linux needs a udev rule for USB access.",[930,994,995,998],{},[945,996,997],{},"Access",[945,999,1000,1001,1004],{},"A ",[990,1002,1003],{"href":22},"tenant"," and a user account for the UniteLabs platform and GroundControl.",[930,1006,1007,1010],{},[945,1008,1009],{},"Notebook",[945,1011,1012,1013,1016],{},"The ",[966,1014,1015],{},"IDE"," in the UniteLabs platform, with the UniteLabs SDK installed on your tenant.",[919,1018,1020],{"id":1019},"install-and-configure-the-connector","Install and configure the connector",[1022,1023,1024,1035,1102,1170],"ol",{},[1025,1026,1027,1028,1030,1031,1034],"li",{},"In GroundControl, add a connector and search for ",[966,1029,553],{}," (",[990,1032,1033],{"href":76},"connector configuration",").",[1025,1036,1037,1038],{},"Prepare USB access for your operating system:",[1039,1040,1041,1051,1060],"ul",{},[1025,1042,1043,1046,1047,1050],{},[966,1044,1045],{},"Windows:"," Install i-control for its USB driver, then close it before starting the connector. If the reader already uses a Zadig driver, see ",[970,1048,1049],{},"usbio"," below.",[1025,1052,1053,1056,1057,1059],{},[966,1054,1055],{},"macOS:"," Connect the reader by USB and leave ",[970,1058,1049],{}," unset to use libusb.",[1025,1061,1062,1065,1066,1069,1070,1073,1074,1090,1093,1094,1097,1098,1101],{},[966,1063,1064],{},"Linux:"," Have the host administrator create ",[970,1067,1068],{},"\u002Fetc\u002Fudev\u002Frules.d\u002F99-tecan-infinite.rules"," with the line below. Run ",[970,1071,1072],{},"sudo udevadm control --reload-rules && sudo udevadm trigger",", then unplug and reconnect the reader. Run the connector as your normal user.",[1075,1076,1081],"pre",{"className":1077,"code":1078,"language":1079,"meta":1080,"style":1080},"language-udev shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"0c47\", MODE=\"0666\"\n","udev","",[970,1082,1083],{"__ignoreMap":1080},[1084,1085,1088],"span",{"class":1086,"line":1087},"line",1,[1084,1089,1078],{},[1091,1092],"br",{},"This rule grants USB access to all Tecan devices with vendor id ",[970,1095,1096],{},"0c47"," on the host. ",[970,1099,1100],{},"lsusb -d 0c47:"," lists matching devices.",[1025,1103,1104,1105],{},"Fill in the connector configuration:",[924,1106,1107,1117],{},[927,1108,1109],{},[930,1110,1111,1114],{},[933,1112,1113],{},"Field",[933,1115,1116],{},"Value",[940,1118,1119,1137,1155],{},[930,1120,1121,1126],{},[945,1122,1123],{},[970,1124,1125],{},"simulation_mode",[945,1127,1128,1129,1132,1133,1136],{},"Defaults to ",[970,1130,1131],{},"true",": measurements return synthetic data and the reader does not move. Set to ",[970,1134,1135],{},"false"," to use the reader.",[930,1138,1139,1144],{},[945,1140,1141],{},[970,1142,1143],{},"device",[945,1145,1146,1147,1150,1151,1154],{},"Available from connector version 0.2.0. Leave unset for automatic selection, or set the reader's USB product id (",[970,1148,1149],{},"0x8001",", decimal 32769, for the F200; ",[970,1152,1153],{},"0x8007",", decimal 32775, for the M200 Pro).",[930,1156,1157,1161],{},[945,1158,1159],{},[970,1160,1049],{},[945,1162,1163,1164,1166,1167,1169],{},"Leave unset to use the vendor USB driver on Windows and libusb elsewhere. Set to ",[970,1165,1135],{}," on Windows if the reader was rebound with Zadig. Setting ",[970,1168,1131],{}," outside Windows prevents connection.",[1025,1171,1172,1173,1175,1176,1178,1179,1182,1183,1186],{},"Start the connector with ",[970,1174,1125],{}," set to ",[970,1177,1135],{}," and enable ",[990,1180,1181],{"href":31},"platform connectivity",". In GroundControl, inspect the instrument capabilities under ",[966,1184,1185],{},"Device Provider"," and note the service name for Python.",[915,1188,1189,1190,1175,1192,1194,1195,1198,1199,1202,1203,972],{},"Simulation mode registers every module regardless of what is attached. With ",[970,1191,1125],{},[970,1193,1135],{},", the connector registers only the modules the reader has: without a heater there is no ",[970,1196,1197],{},"TemperatureController","; M-series readers have no ",[970,1200,1201],{},"FilterController",". A read action appears only if the reader supports that measurement type. Readers with the same model name can differ. Check the modules in GroundControl or, once connected from Python, with ",[970,1204,1205],{},"print(reader.modules.keys())",[915,1207,1208,1209,1212,1213,1216,1217,1220,1221,1224],{},"Under ",[966,1210,1211],{},"Measurement Controller"," in GroundControl, check whether ",[966,1214,1215],{},"Read Absorbance",", ",[966,1218,1219],{},"Read Fluorescence Intensity",", or both are available. For F-series readers, also run ",[966,1222,1223],{},"Get All Filter Definitions"," to find the installed filters for that read type.",[919,1226,1228],{"id":1227},"first-successful-test","First successful test",[915,1230,1231,1232,1234,1235,1238],{},"Sign in to the UniteLabs platform in the browser and open ",[966,1233,1015],{},". Create a notebook and paste each block into its own cell. The notebook signs in with your platform account, so the blocks need no credentials. If the first line, ",[970,1236,1237],{},"from unitelabs.sdk import AsyncApiClient",", fails, the SDK is not installed on your tenant yet; ask your UniteLabs contact to install it.",[915,1240,1241,1242,1245,1246,1249,1250,1253,1254,1257],{},"Before running a script, extend the carrier and place a 96-well plate on it. In GroundControl, use ",[966,1243,1244],{},"Carrier Controller",", then ",[966,1247,1248],{},"Extend",". If you already have a connected Python variable named ",[970,1251,1252],{},"reader",", you can instead run ",[970,1255,1256],{},"await reader.carrier_controller.extend()",". The script retracts the carrier with the plate before it reads.",[915,1259,1260],{},"Select the tab for your type of reader below. Each script connects, retracts the carrier, and reads well A1. Adjust the measurement settings for your assay.",[915,1262,1263,1264,1267],{},"Replace the service name with the one shown in GroundControl. Keep all shown parameters explicit: omitting ",[970,1265,1266],{},"wells"," selects the whole plate.",[915,1269,1270,1271,1274,1275,1278,1279,1282],{},"Wavelengths and bandwidths are in nanometres. ",[970,1272,1273],{},"settle_time"," is in milliseconds; ",[970,1276,1277],{},"lag_time"," and ",[970,1280,1281],{},"integration_time"," are in microseconds.",[1284,1285,1292,1814,2328],"tabs",{"className":1286},[1287,1288,1289,1290,1291],"rounded-lg","border","border-default","px-5","pb-3",[1293,1294,1297,1304,1309,1312,1345,1616,1626,1630,1632,1651,1802],"div",{"icon":1295,"label":1296},"i-lucide-layers","F-series",[915,1298,1299,1300,1303],{},"Each script reads with the values of one installed filter. To let the script select the filter, use the ",[966,1301,1302],{},"F-series (automatic filter selection)"," tab.",[1305,1306,1308],"h3",{"id":1307},"fluorescence-intensity","Fluorescence intensity",[915,1310,1311],{},"Before you run the block:",[1022,1313,1314,1321],{},[1025,1315,1316,1317,1245,1319,972],{},"In GroundControl, run ",[966,1318,1211],{},[966,1320,1223],{},[1025,1322,1323,1324,1327,1328,1331,1332,1216,1335,1216,1338,1278,1341,1344],{},"Pick the entry with ",[970,1325,1326],{},"Usage"," ",[970,1329,1330],{},"fluorescence intensity",". Copy its ",[970,1333,1334],{},"ExcitationWavelength",[970,1336,1337],{},"ExcitationBandwidth",[970,1339,1340],{},"EmissionWavelength",[970,1342,1343],{},"EmissionBandwidth"," into the call, in place of 430, 20, 535 and 25.",[1075,1346,1350],{"className":1347,"code":1348,"language":1349,"meta":1080,"style":1080},"language-python shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-default","from unitelabs.sdk import AsyncApiClient\n\nclient = AsyncApiClient()\n# \"Tecan Infinite 200\" is the service name you set in GroundControl\nreader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\nmeasurement = reader.measurement_controller\n\nawait reader.carrier_controller.retract()\nprint(await measurement.read_fluorescence_intensity(\n    excitation_wavelength=430, excitation_bandwidth=20,  # ExcitationWavelength, ExcitationBandwidth\n    emission_wavelength=535, emission_bandwidth=25,      # EmissionWavelength, EmissionBandwidth\n    mode=\"top\", flashes=10, settle_time=0, gain_value=30, lag_time=0,\n    integration_time=20, plate_layout=\"96\", wells=[\"A1\"], z_position=0,\n))\n","python",[970,1351,1352,1368,1375,1387,1394,1421,1432,1437,1446,1461,1488,1515,1566,1610],{"__ignoreMap":1080},[1084,1353,1354,1358,1362,1365],{"class":1086,"line":1087},[1084,1355,1357],{"class":1356},"sxkbv","from",[1084,1359,1361],{"class":1360},"sc-9e"," unitelabs.sdk ",[1084,1363,1364],{"class":1356},"import",[1084,1366,1367],{"class":1360}," AsyncApiClient\n",[1084,1369,1371],{"class":1086,"line":1370},2,[1084,1372,1374],{"emptyLinePlaceholder":1373},true,"\n",[1084,1376,1378,1381,1384],{"class":1086,"line":1377},3,[1084,1379,1380],{"class":1360},"client ",[1084,1382,1383],{"class":1356},"=",[1084,1385,1386],{"class":1360}," AsyncApiClient()\n",[1084,1388,1390],{"class":1086,"line":1389},4,[1084,1391,1393],{"class":1392},"sIsDC","# \"Tecan Infinite 200\" is the service name you set in GroundControl\n",[1084,1395,1397,1400,1402,1405,1408,1412,1414,1418],{"class":1086,"line":1396},5,[1084,1398,1399],{"class":1360},"reader ",[1084,1401,1383],{"class":1356},[1084,1403,1404],{"class":1356}," await",[1084,1406,1407],{"class":1360}," client.get_service_by_name(",[1084,1409,1411],{"class":1410},"sNqAu","name",[1084,1413,1383],{"class":1356},[1084,1415,1417],{"class":1416},"sCx38","\"Tecan Infinite 200\"",[1084,1419,1420],{"class":1360},")\n",[1084,1422,1424,1427,1429],{"class":1086,"line":1423},6,[1084,1425,1426],{"class":1360},"measurement ",[1084,1428,1383],{"class":1356},[1084,1430,1431],{"class":1360}," reader.measurement_controller\n",[1084,1433,1435],{"class":1086,"line":1434},7,[1084,1436,1374],{"emptyLinePlaceholder":1373},[1084,1438,1440,1443],{"class":1086,"line":1439},8,[1084,1441,1442],{"class":1356},"await",[1084,1444,1445],{"class":1360}," reader.carrier_controller.retract()\n",[1084,1447,1449,1453,1456,1458],{"class":1086,"line":1448},9,[1084,1450,1452],{"class":1451},"sOiAX","print",[1084,1454,1455],{"class":1360},"(",[1084,1457,1442],{"class":1356},[1084,1459,1460],{"class":1360}," measurement.read_fluorescence_intensity(\n",[1084,1462,1464,1467,1469,1472,1474,1477,1479,1482,1485],{"class":1086,"line":1463},10,[1084,1465,1466],{"class":1410},"    excitation_wavelength",[1084,1468,1383],{"class":1356},[1084,1470,1471],{"class":1451},"430",[1084,1473,1216],{"class":1360},[1084,1475,1476],{"class":1410},"excitation_bandwidth",[1084,1478,1383],{"class":1356},[1084,1480,1481],{"class":1451},"20",[1084,1483,1484],{"class":1360},",  ",[1084,1486,1487],{"class":1392},"# ExcitationWavelength, ExcitationBandwidth\n",[1084,1489,1491,1494,1496,1499,1501,1504,1506,1509,1512],{"class":1086,"line":1490},11,[1084,1492,1493],{"class":1410},"    emission_wavelength",[1084,1495,1383],{"class":1356},[1084,1497,1498],{"class":1451},"535",[1084,1500,1216],{"class":1360},[1084,1502,1503],{"class":1410},"emission_bandwidth",[1084,1505,1383],{"class":1356},[1084,1507,1508],{"class":1451},"25",[1084,1510,1511],{"class":1360},",      ",[1084,1513,1514],{"class":1392},"# EmissionWavelength, EmissionBandwidth\n",[1084,1516,1518,1521,1523,1526,1528,1531,1533,1536,1538,1540,1542,1545,1547,1550,1552,1555,1557,1559,1561,1563],{"class":1086,"line":1517},12,[1084,1519,1520],{"class":1410},"    mode",[1084,1522,1383],{"class":1356},[1084,1524,1525],{"class":1416},"\"top\"",[1084,1527,1216],{"class":1360},[1084,1529,1530],{"class":1410},"flashes",[1084,1532,1383],{"class":1356},[1084,1534,1535],{"class":1451},"10",[1084,1537,1216],{"class":1360},[1084,1539,1273],{"class":1410},[1084,1541,1383],{"class":1356},[1084,1543,1544],{"class":1451},"0",[1084,1546,1216],{"class":1360},[1084,1548,1549],{"class":1410},"gain_value",[1084,1551,1383],{"class":1356},[1084,1553,1554],{"class":1451},"30",[1084,1556,1216],{"class":1360},[1084,1558,1277],{"class":1410},[1084,1560,1383],{"class":1356},[1084,1562,1544],{"class":1451},[1084,1564,1565],{"class":1360},",\n",[1084,1567,1569,1572,1574,1576,1578,1581,1583,1586,1588,1590,1592,1595,1598,1601,1604,1606,1608],{"class":1086,"line":1568},13,[1084,1570,1571],{"class":1410},"    integration_time",[1084,1573,1383],{"class":1356},[1084,1575,1481],{"class":1451},[1084,1577,1216],{"class":1360},[1084,1579,1580],{"class":1410},"plate_layout",[1084,1582,1383],{"class":1356},[1084,1584,1585],{"class":1416},"\"96\"",[1084,1587,1216],{"class":1360},[1084,1589,1266],{"class":1410},[1084,1591,1383],{"class":1356},[1084,1593,1594],{"class":1360},"[",[1084,1596,1597],{"class":1416},"\"A1\"",[1084,1599,1600],{"class":1360},"], ",[1084,1602,1603],{"class":1410},"z_position",[1084,1605,1383],{"class":1356},[1084,1607,1544],{"class":1451},[1084,1609,1565],{"class":1360},[1084,1611,1613],{"class":1086,"line":1612},14,[1084,1614,1615],{"class":1360},"))\n",[915,1617,1618,1619,1278,1622,1625],{},"Expected: the carrier retracts. The read returns ",[970,1620,1621],{},"WellIds",[970,1623,1624],{},"Intensities"," for A1. Values that match no installed filter fail with a message that lists the installed filters.",[1305,1627,1629],{"id":1628},"absorbance","Absorbance",[915,1631,1311],{},[1022,1633,1634,1640],{},[1025,1635,1316,1636,1245,1638,972],{},[966,1637,1211],{},[966,1639,1223],{},[1025,1641,1323,1642,1327,1644,1331,1646,1278,1648,1650],{},[970,1643,1326],{},[970,1645,1628],{},[970,1647,1334],{},[970,1649,1337],{}," into the call, in place of 600 and 10. Without such an entry, the slide cannot read absorbance.",[1075,1652,1654],{"className":1347,"code":1653,"language":1349,"meta":1080,"style":1080},"from unitelabs.sdk import AsyncApiClient\n\nclient = AsyncApiClient()\n# \"Tecan Infinite 200\" is the service name you set in GroundControl\nreader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\nmeasurement = reader.measurement_controller\n\nawait reader.carrier_controller.retract()\nprint(await measurement.read_absorbance(\n    wavelength=600, bandwidth=10,  # ExcitationWavelength, ExcitationBandwidth\n    reference_wavelength=0, flashes=10, settle_time=0, plate_layout=\"96\", wells=[\"A1\"],\n))\n",[970,1655,1656,1666,1670,1678,1682,1700,1708,1712,1718,1729,1752,1798],{"__ignoreMap":1080},[1084,1657,1658,1660,1662,1664],{"class":1086,"line":1087},[1084,1659,1357],{"class":1356},[1084,1661,1361],{"class":1360},[1084,1663,1364],{"class":1356},[1084,1665,1367],{"class":1360},[1084,1667,1668],{"class":1086,"line":1370},[1084,1669,1374],{"emptyLinePlaceholder":1373},[1084,1671,1672,1674,1676],{"class":1086,"line":1377},[1084,1673,1380],{"class":1360},[1084,1675,1383],{"class":1356},[1084,1677,1386],{"class":1360},[1084,1679,1680],{"class":1086,"line":1389},[1084,1681,1393],{"class":1392},[1084,1683,1684,1686,1688,1690,1692,1694,1696,1698],{"class":1086,"line":1396},[1084,1685,1399],{"class":1360},[1084,1687,1383],{"class":1356},[1084,1689,1404],{"class":1356},[1084,1691,1407],{"class":1360},[1084,1693,1411],{"class":1410},[1084,1695,1383],{"class":1356},[1084,1697,1417],{"class":1416},[1084,1699,1420],{"class":1360},[1084,1701,1702,1704,1706],{"class":1086,"line":1423},[1084,1703,1426],{"class":1360},[1084,1705,1383],{"class":1356},[1084,1707,1431],{"class":1360},[1084,1709,1710],{"class":1086,"line":1434},[1084,1711,1374],{"emptyLinePlaceholder":1373},[1084,1713,1714,1716],{"class":1086,"line":1439},[1084,1715,1442],{"class":1356},[1084,1717,1445],{"class":1360},[1084,1719,1720,1722,1724,1726],{"class":1086,"line":1448},[1084,1721,1452],{"class":1451},[1084,1723,1455],{"class":1360},[1084,1725,1442],{"class":1356},[1084,1727,1728],{"class":1360}," measurement.read_absorbance(\n",[1084,1730,1731,1734,1736,1739,1741,1744,1746,1748,1750],{"class":1086,"line":1463},[1084,1732,1733],{"class":1410},"    wavelength",[1084,1735,1383],{"class":1356},[1084,1737,1738],{"class":1451},"600",[1084,1740,1216],{"class":1360},[1084,1742,1743],{"class":1410},"bandwidth",[1084,1745,1383],{"class":1356},[1084,1747,1535],{"class":1451},[1084,1749,1484],{"class":1360},[1084,1751,1487],{"class":1392},[1084,1753,1754,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795],{"class":1086,"line":1490},[1084,1755,1756],{"class":1410},"    reference_wavelength",[1084,1758,1383],{"class":1356},[1084,1760,1544],{"class":1451},[1084,1762,1216],{"class":1360},[1084,1764,1530],{"class":1410},[1084,1766,1383],{"class":1356},[1084,1768,1535],{"class":1451},[1084,1770,1216],{"class":1360},[1084,1772,1273],{"class":1410},[1084,1774,1383],{"class":1356},[1084,1776,1544],{"class":1451},[1084,1778,1216],{"class":1360},[1084,1780,1580],{"class":1410},[1084,1782,1383],{"class":1356},[1084,1784,1585],{"class":1416},[1084,1786,1216],{"class":1360},[1084,1788,1266],{"class":1410},[1084,1790,1383],{"class":1356},[1084,1792,1594],{"class":1360},[1084,1794,1597],{"class":1416},[1084,1796,1797],{"class":1360},"],\n",[1084,1799,1800],{"class":1086,"line":1517},[1084,1801,1615],{"class":1360},[915,1803,1618,1804,1278,1806,1809,1810,1813],{},[970,1805,1621],{},[970,1807,1808],{},"Absorbances"," for A1. ",[970,1811,1812],{},"reference_wavelength=0"," disables reference correction.",[1293,1815,1816,1819,2316],{"icon":1295,"label":1302},[915,1817,1818],{},"Use this when you do not know what the slide carries. The script reads the filter list itself, takes the absorbance filter if there is one and otherwise the first fluorescence intensity filter, and reads with that filter's values.",[1075,1820,1822],{"className":1347,"code":1821,"language":1349,"meta":1080,"style":1080},"from unitelabs.sdk import AsyncApiClient\n\nclient = AsyncApiClient()\n# \"Tecan Infinite 200\" is the service name you set in GroundControl\nreader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\nmeasurement = reader.measurement_controller\n\nfilters = await measurement.get_all_filter_definitions()\nabs_filter = next((f for f in filters if f[\"Usage\"] == \"absorbance\"), None)\nfi_filter = next((f for f in filters if f[\"Usage\"] == \"fluorescence intensity\"), None)\n\nawait reader.carrier_controller.retract()\nif abs_filter:\n    print(\"Absorbance with slot\", abs_filter[\"Slot\"])\n    print(await measurement.read_absorbance(\n        wavelength=abs_filter[\"ExcitationWavelength\"],\n        bandwidth=abs_filter[\"ExcitationBandwidth\"],\n        reference_wavelength=0, flashes=10, settle_time=0, plate_layout=\"96\", wells=[\"A1\"],\n    ))\nelif fi_filter:\n    print(\"Fluorescence intensity with slot\", fi_filter[\"Slot\"])\n    print(await measurement.read_fluorescence_intensity(\n        excitation_wavelength=fi_filter[\"ExcitationWavelength\"],\n        excitation_bandwidth=fi_filter[\"ExcitationBandwidth\"],\n        emission_wavelength=fi_filter[\"EmissionWavelength\"],\n        emission_bandwidth=fi_filter[\"EmissionBandwidth\"],\n        mode=\"top\", flashes=10, settle_time=0, gain_value=30, lag_time=0,\n        integration_time=20, plate_layout=\"96\", wells=[\"A1\"], z_position=0,\n    ))\nelse:\n    print(\"No absorbance or fluorescence intensity filter on the slide:\", filters)\n",[970,1823,1824,1834,1838,1846,1850,1868,1876,1880,1892,1943,1981,1985,1991,1998,2017,2028,2044,2059,2105,2111,2120,2137,2148,2163,2177,2192,2207,2251,2289,2294,2303],{"__ignoreMap":1080},[1084,1825,1826,1828,1830,1832],{"class":1086,"line":1087},[1084,1827,1357],{"class":1356},[1084,1829,1361],{"class":1360},[1084,1831,1364],{"class":1356},[1084,1833,1367],{"class":1360},[1084,1835,1836],{"class":1086,"line":1370},[1084,1837,1374],{"emptyLinePlaceholder":1373},[1084,1839,1840,1842,1844],{"class":1086,"line":1377},[1084,1841,1380],{"class":1360},[1084,1843,1383],{"class":1356},[1084,1845,1386],{"class":1360},[1084,1847,1848],{"class":1086,"line":1389},[1084,1849,1393],{"class":1392},[1084,1851,1852,1854,1856,1858,1860,1862,1864,1866],{"class":1086,"line":1396},[1084,1853,1399],{"class":1360},[1084,1855,1383],{"class":1356},[1084,1857,1404],{"class":1356},[1084,1859,1407],{"class":1360},[1084,1861,1411],{"class":1410},[1084,1863,1383],{"class":1356},[1084,1865,1417],{"class":1416},[1084,1867,1420],{"class":1360},[1084,1869,1870,1872,1874],{"class":1086,"line":1423},[1084,1871,1426],{"class":1360},[1084,1873,1383],{"class":1356},[1084,1875,1431],{"class":1360},[1084,1877,1878],{"class":1086,"line":1434},[1084,1879,1374],{"emptyLinePlaceholder":1373},[1084,1881,1882,1885,1887,1889],{"class":1086,"line":1439},[1084,1883,1884],{"class":1360},"filters ",[1084,1886,1383],{"class":1356},[1084,1888,1404],{"class":1356},[1084,1890,1891],{"class":1360}," measurement.get_all_filter_definitions()\n",[1084,1893,1894,1897,1899,1902,1905,1908,1911,1914,1917,1920,1923,1926,1929,1932,1935,1938,1941],{"class":1086,"line":1448},[1084,1895,1896],{"class":1360},"abs_filter ",[1084,1898,1383],{"class":1356},[1084,1900,1901],{"class":1451}," next",[1084,1903,1904],{"class":1360},"((f ",[1084,1906,1907],{"class":1356},"for",[1084,1909,1910],{"class":1360}," f ",[1084,1912,1913],{"class":1356},"in",[1084,1915,1916],{"class":1360}," filters ",[1084,1918,1919],{"class":1356},"if",[1084,1921,1922],{"class":1360}," f[",[1084,1924,1925],{"class":1416},"\"Usage\"",[1084,1927,1928],{"class":1360},"] ",[1084,1930,1931],{"class":1356},"==",[1084,1933,1934],{"class":1416}," \"absorbance\"",[1084,1936,1937],{"class":1360},"), ",[1084,1939,1940],{"class":1451},"None",[1084,1942,1420],{"class":1360},[1084,1944,1945,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1975,1977,1979],{"class":1086,"line":1463},[1084,1946,1947],{"class":1360},"fi_filter ",[1084,1949,1383],{"class":1356},[1084,1951,1901],{"class":1451},[1084,1953,1904],{"class":1360},[1084,1955,1907],{"class":1356},[1084,1957,1910],{"class":1360},[1084,1959,1913],{"class":1356},[1084,1961,1916],{"class":1360},[1084,1963,1919],{"class":1356},[1084,1965,1922],{"class":1360},[1084,1967,1925],{"class":1416},[1084,1969,1928],{"class":1360},[1084,1971,1931],{"class":1356},[1084,1973,1974],{"class":1416}," \"fluorescence intensity\"",[1084,1976,1937],{"class":1360},[1084,1978,1940],{"class":1451},[1084,1980,1420],{"class":1360},[1084,1982,1983],{"class":1086,"line":1490},[1084,1984,1374],{"emptyLinePlaceholder":1373},[1084,1986,1987,1989],{"class":1086,"line":1517},[1084,1988,1442],{"class":1356},[1084,1990,1445],{"class":1360},[1084,1992,1993,1995],{"class":1086,"line":1568},[1084,1994,1919],{"class":1356},[1084,1996,1997],{"class":1360}," abs_filter:\n",[1084,1999,2000,2003,2005,2008,2011,2014],{"class":1086,"line":1612},[1084,2001,2002],{"class":1451},"    print",[1084,2004,1455],{"class":1360},[1084,2006,2007],{"class":1416},"\"Absorbance with slot\"",[1084,2009,2010],{"class":1360},", abs_filter[",[1084,2012,2013],{"class":1416},"\"Slot\"",[1084,2015,2016],{"class":1360},"])\n",[1084,2018,2020,2022,2024,2026],{"class":1086,"line":2019},15,[1084,2021,2002],{"class":1451},[1084,2023,1455],{"class":1360},[1084,2025,1442],{"class":1356},[1084,2027,1728],{"class":1360},[1084,2029,2031,2034,2036,2039,2042],{"class":1086,"line":2030},16,[1084,2032,2033],{"class":1410},"        wavelength",[1084,2035,1383],{"class":1356},[1084,2037,2038],{"class":1360},"abs_filter[",[1084,2040,2041],{"class":1416},"\"ExcitationWavelength\"",[1084,2043,1797],{"class":1360},[1084,2045,2047,2050,2052,2054,2057],{"class":1086,"line":2046},17,[1084,2048,2049],{"class":1410},"        bandwidth",[1084,2051,1383],{"class":1356},[1084,2053,2038],{"class":1360},[1084,2055,2056],{"class":1416},"\"ExcitationBandwidth\"",[1084,2058,1797],{"class":1360},[1084,2060,2062,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103],{"class":1086,"line":2061},18,[1084,2063,2064],{"class":1410},"        reference_wavelength",[1084,2066,1383],{"class":1356},[1084,2068,1544],{"class":1451},[1084,2070,1216],{"class":1360},[1084,2072,1530],{"class":1410},[1084,2074,1383],{"class":1356},[1084,2076,1535],{"class":1451},[1084,2078,1216],{"class":1360},[1084,2080,1273],{"class":1410},[1084,2082,1383],{"class":1356},[1084,2084,1544],{"class":1451},[1084,2086,1216],{"class":1360},[1084,2088,1580],{"class":1410},[1084,2090,1383],{"class":1356},[1084,2092,1585],{"class":1416},[1084,2094,1216],{"class":1360},[1084,2096,1266],{"class":1410},[1084,2098,1383],{"class":1356},[1084,2100,1594],{"class":1360},[1084,2102,1597],{"class":1416},[1084,2104,1797],{"class":1360},[1084,2106,2108],{"class":1086,"line":2107},19,[1084,2109,2110],{"class":1360},"    ))\n",[1084,2112,2114,2117],{"class":1086,"line":2113},20,[1084,2115,2116],{"class":1356},"elif",[1084,2118,2119],{"class":1360}," fi_filter:\n",[1084,2121,2123,2125,2127,2130,2133,2135],{"class":1086,"line":2122},21,[1084,2124,2002],{"class":1451},[1084,2126,1455],{"class":1360},[1084,2128,2129],{"class":1416},"\"Fluorescence intensity with slot\"",[1084,2131,2132],{"class":1360},", fi_filter[",[1084,2134,2013],{"class":1416},[1084,2136,2016],{"class":1360},[1084,2138,2140,2142,2144,2146],{"class":1086,"line":2139},22,[1084,2141,2002],{"class":1451},[1084,2143,1455],{"class":1360},[1084,2145,1442],{"class":1356},[1084,2147,1460],{"class":1360},[1084,2149,2151,2154,2156,2159,2161],{"class":1086,"line":2150},23,[1084,2152,2153],{"class":1410},"        excitation_wavelength",[1084,2155,1383],{"class":1356},[1084,2157,2158],{"class":1360},"fi_filter[",[1084,2160,2041],{"class":1416},[1084,2162,1797],{"class":1360},[1084,2164,2166,2169,2171,2173,2175],{"class":1086,"line":2165},24,[1084,2167,2168],{"class":1410},"        excitation_bandwidth",[1084,2170,1383],{"class":1356},[1084,2172,2158],{"class":1360},[1084,2174,2056],{"class":1416},[1084,2176,1797],{"class":1360},[1084,2178,2180,2183,2185,2187,2190],{"class":1086,"line":2179},25,[1084,2181,2182],{"class":1410},"        emission_wavelength",[1084,2184,1383],{"class":1356},[1084,2186,2158],{"class":1360},[1084,2188,2189],{"class":1416},"\"EmissionWavelength\"",[1084,2191,1797],{"class":1360},[1084,2193,2195,2198,2200,2202,2205],{"class":1086,"line":2194},26,[1084,2196,2197],{"class":1410},"        emission_bandwidth",[1084,2199,1383],{"class":1356},[1084,2201,2158],{"class":1360},[1084,2203,2204],{"class":1416},"\"EmissionBandwidth\"",[1084,2206,1797],{"class":1360},[1084,2208,2210,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249],{"class":1086,"line":2209},27,[1084,2211,2212],{"class":1410},"        mode",[1084,2214,1383],{"class":1356},[1084,2216,1525],{"class":1416},[1084,2218,1216],{"class":1360},[1084,2220,1530],{"class":1410},[1084,2222,1383],{"class":1356},[1084,2224,1535],{"class":1451},[1084,2226,1216],{"class":1360},[1084,2228,1273],{"class":1410},[1084,2230,1383],{"class":1356},[1084,2232,1544],{"class":1451},[1084,2234,1216],{"class":1360},[1084,2236,1549],{"class":1410},[1084,2238,1383],{"class":1356},[1084,2240,1554],{"class":1451},[1084,2242,1216],{"class":1360},[1084,2244,1277],{"class":1410},[1084,2246,1383],{"class":1356},[1084,2248,1544],{"class":1451},[1084,2250,1565],{"class":1360},[1084,2252,2254,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287],{"class":1086,"line":2253},28,[1084,2255,2256],{"class":1410},"        integration_time",[1084,2258,1383],{"class":1356},[1084,2260,1481],{"class":1451},[1084,2262,1216],{"class":1360},[1084,2264,1580],{"class":1410},[1084,2266,1383],{"class":1356},[1084,2268,1585],{"class":1416},[1084,2270,1216],{"class":1360},[1084,2272,1266],{"class":1410},[1084,2274,1383],{"class":1356},[1084,2276,1594],{"class":1360},[1084,2278,1597],{"class":1416},[1084,2280,1600],{"class":1360},[1084,2282,1603],{"class":1410},[1084,2284,1383],{"class":1356},[1084,2286,1544],{"class":1451},[1084,2288,1565],{"class":1360},[1084,2290,2292],{"class":1086,"line":2291},29,[1084,2293,2110],{"class":1360},[1084,2295,2297,2300],{"class":1086,"line":2296},30,[1084,2298,2299],{"class":1356},"else",[1084,2301,2302],{"class":1360},":\n",[1084,2304,2306,2308,2310,2313],{"class":1086,"line":2305},31,[1084,2307,2002],{"class":1451},[1084,2309,1455],{"class":1360},[1084,2311,2312],{"class":1416},"\"No absorbance or fluorescence intensity filter on the slide:\"",[1084,2314,2315],{"class":1360},", filters)\n",[915,2317,2318,2319,2321,2322,2324,2325,2327],{},"Expected: the script names the slot it picked, the carrier retracts, and the read returns ",[970,2320,1621],{}," with ",[970,2323,1808],{}," or ",[970,2326,1624],{}," for A1. A slide without either filter type ends with the filter list instead of a read.",[1293,2329,2332,2338,2341,2344,2489,2497,2500,2505,2703],{"icon":2330,"label":2331},"i-lucide-rainbow","M-series",[915,2333,2334,2335,2337],{},"M-series readers select wavelengths with a monochromator. Use the example whose read action is available under ",[966,2336,1211],{}," in GroundControl. The connector accepts 230 to 1000 nm for absorbance, 230 to 850 nm excitation and 280 to 850 nm emission for fluorescence intensity, with bandwidths from 0 to 50 nm.",[1305,2339,1629],{"id":2340},"absorbance-1",[915,2342,2343],{},"Pick a wavelength and a bandwidth within the ranges above.",[1075,2345,2347],{"className":1347,"code":2346,"language":1349,"meta":1080,"style":1080},"from unitelabs.sdk import AsyncApiClient\n\nclient = AsyncApiClient()\n# \"Tecan Infinite 200\" is the service name you set in GroundControl\nreader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\nmeasurement = reader.measurement_controller\n\nawait reader.carrier_controller.retract()\nprint(await measurement.read_absorbance(\n    wavelength=600, reference_wavelength=0, bandwidth=10,\n    flashes=10, settle_time=0, plate_layout=\"96\", wells=[\"A1\"],\n))\n",[970,2348,2349,2359,2363,2371,2375,2393,2401,2405,2411,2421,2448,2485],{"__ignoreMap":1080},[1084,2350,2351,2353,2355,2357],{"class":1086,"line":1087},[1084,2352,1357],{"class":1356},[1084,2354,1361],{"class":1360},[1084,2356,1364],{"class":1356},[1084,2358,1367],{"class":1360},[1084,2360,2361],{"class":1086,"line":1370},[1084,2362,1374],{"emptyLinePlaceholder":1373},[1084,2364,2365,2367,2369],{"class":1086,"line":1377},[1084,2366,1380],{"class":1360},[1084,2368,1383],{"class":1356},[1084,2370,1386],{"class":1360},[1084,2372,2373],{"class":1086,"line":1389},[1084,2374,1393],{"class":1392},[1084,2376,2377,2379,2381,2383,2385,2387,2389,2391],{"class":1086,"line":1396},[1084,2378,1399],{"class":1360},[1084,2380,1383],{"class":1356},[1084,2382,1404],{"class":1356},[1084,2384,1407],{"class":1360},[1084,2386,1411],{"class":1410},[1084,2388,1383],{"class":1356},[1084,2390,1417],{"class":1416},[1084,2392,1420],{"class":1360},[1084,2394,2395,2397,2399],{"class":1086,"line":1423},[1084,2396,1426],{"class":1360},[1084,2398,1383],{"class":1356},[1084,2400,1431],{"class":1360},[1084,2402,2403],{"class":1086,"line":1434},[1084,2404,1374],{"emptyLinePlaceholder":1373},[1084,2406,2407,2409],{"class":1086,"line":1439},[1084,2408,1442],{"class":1356},[1084,2410,1445],{"class":1360},[1084,2412,2413,2415,2417,2419],{"class":1086,"line":1448},[1084,2414,1452],{"class":1451},[1084,2416,1455],{"class":1360},[1084,2418,1442],{"class":1356},[1084,2420,1728],{"class":1360},[1084,2422,2423,2425,2427,2429,2431,2434,2436,2438,2440,2442,2444,2446],{"class":1086,"line":1463},[1084,2424,1733],{"class":1410},[1084,2426,1383],{"class":1356},[1084,2428,1738],{"class":1451},[1084,2430,1216],{"class":1360},[1084,2432,2433],{"class":1410},"reference_wavelength",[1084,2435,1383],{"class":1356},[1084,2437,1544],{"class":1451},[1084,2439,1216],{"class":1360},[1084,2441,1743],{"class":1410},[1084,2443,1383],{"class":1356},[1084,2445,1535],{"class":1451},[1084,2447,1565],{"class":1360},[1084,2449,2450,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483],{"class":1086,"line":1490},[1084,2451,2452],{"class":1410},"    flashes",[1084,2454,1383],{"class":1356},[1084,2456,1535],{"class":1451},[1084,2458,1216],{"class":1360},[1084,2460,1273],{"class":1410},[1084,2462,1383],{"class":1356},[1084,2464,1544],{"class":1451},[1084,2466,1216],{"class":1360},[1084,2468,1580],{"class":1410},[1084,2470,1383],{"class":1356},[1084,2472,1585],{"class":1416},[1084,2474,1216],{"class":1360},[1084,2476,1266],{"class":1410},[1084,2478,1383],{"class":1356},[1084,2480,1594],{"class":1360},[1084,2482,1597],{"class":1416},[1084,2484,1797],{"class":1360},[1084,2486,2487],{"class":1086,"line":1517},[1084,2488,1615],{"class":1360},[915,2490,1618,2491,1278,2493,1809,2495,1813],{},[970,2492,1621],{},[970,2494,1808],{},[970,2496,1812],{},[1305,2498,1308],{"id":2499},"fluorescence-intensity-1",[915,2501,2502,2504],{},[970,2503,1603],{}," is the measurement head height above the plate in micrometres; 20000 is the usual value on monochromator readers.",[1075,2506,2508],{"className":1347,"code":2507,"language":1349,"meta":1080,"style":1080},"from unitelabs.sdk import AsyncApiClient\n\nclient = AsyncApiClient()\n# \"Tecan Infinite 200\" is the service name you set in GroundControl\nreader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\nmeasurement = reader.measurement_controller\n\nawait reader.carrier_controller.retract()\nprint(await measurement.read_fluorescence_intensity(\n    excitation_wavelength=485, excitation_bandwidth=9,\n    emission_wavelength=535, emission_bandwidth=20,\n    mode=\"top\", flashes=10, settle_time=0, gain_value=30, lag_time=0,\n    integration_time=20, plate_layout=\"96\", wells=[\"A1\"], z_position=20000,\n))\n",[970,2509,2510,2520,2524,2532,2536,2554,2562,2566,2572,2582,2602,2620,2662,2699],{"__ignoreMap":1080},[1084,2511,2512,2514,2516,2518],{"class":1086,"line":1087},[1084,2513,1357],{"class":1356},[1084,2515,1361],{"class":1360},[1084,2517,1364],{"class":1356},[1084,2519,1367],{"class":1360},[1084,2521,2522],{"class":1086,"line":1370},[1084,2523,1374],{"emptyLinePlaceholder":1373},[1084,2525,2526,2528,2530],{"class":1086,"line":1377},[1084,2527,1380],{"class":1360},[1084,2529,1383],{"class":1356},[1084,2531,1386],{"class":1360},[1084,2533,2534],{"class":1086,"line":1389},[1084,2535,1393],{"class":1392},[1084,2537,2538,2540,2542,2544,2546,2548,2550,2552],{"class":1086,"line":1396},[1084,2539,1399],{"class":1360},[1084,2541,1383],{"class":1356},[1084,2543,1404],{"class":1356},[1084,2545,1407],{"class":1360},[1084,2547,1411],{"class":1410},[1084,2549,1383],{"class":1356},[1084,2551,1417],{"class":1416},[1084,2553,1420],{"class":1360},[1084,2555,2556,2558,2560],{"class":1086,"line":1423},[1084,2557,1426],{"class":1360},[1084,2559,1383],{"class":1356},[1084,2561,1431],{"class":1360},[1084,2563,2564],{"class":1086,"line":1434},[1084,2565,1374],{"emptyLinePlaceholder":1373},[1084,2567,2568,2570],{"class":1086,"line":1439},[1084,2569,1442],{"class":1356},[1084,2571,1445],{"class":1360},[1084,2573,2574,2576,2578,2580],{"class":1086,"line":1448},[1084,2575,1452],{"class":1451},[1084,2577,1455],{"class":1360},[1084,2579,1442],{"class":1356},[1084,2581,1460],{"class":1360},[1084,2583,2584,2586,2588,2591,2593,2595,2597,2600],{"class":1086,"line":1463},[1084,2585,1466],{"class":1410},[1084,2587,1383],{"class":1356},[1084,2589,2590],{"class":1451},"485",[1084,2592,1216],{"class":1360},[1084,2594,1476],{"class":1410},[1084,2596,1383],{"class":1356},[1084,2598,2599],{"class":1451},"9",[1084,2601,1565],{"class":1360},[1084,2603,2604,2606,2608,2610,2612,2614,2616,2618],{"class":1086,"line":1490},[1084,2605,1493],{"class":1410},[1084,2607,1383],{"class":1356},[1084,2609,1498],{"class":1451},[1084,2611,1216],{"class":1360},[1084,2613,1503],{"class":1410},[1084,2615,1383],{"class":1356},[1084,2617,1481],{"class":1451},[1084,2619,1565],{"class":1360},[1084,2621,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660],{"class":1086,"line":1517},[1084,2623,1520],{"class":1410},[1084,2625,1383],{"class":1356},[1084,2627,1525],{"class":1416},[1084,2629,1216],{"class":1360},[1084,2631,1530],{"class":1410},[1084,2633,1383],{"class":1356},[1084,2635,1535],{"class":1451},[1084,2637,1216],{"class":1360},[1084,2639,1273],{"class":1410},[1084,2641,1383],{"class":1356},[1084,2643,1544],{"class":1451},[1084,2645,1216],{"class":1360},[1084,2647,1549],{"class":1410},[1084,2649,1383],{"class":1356},[1084,2651,1554],{"class":1451},[1084,2653,1216],{"class":1360},[1084,2655,1277],{"class":1410},[1084,2657,1383],{"class":1356},[1084,2659,1544],{"class":1451},[1084,2661,1565],{"class":1360},[1084,2663,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2697],{"class":1086,"line":1568},[1084,2665,1571],{"class":1410},[1084,2667,1383],{"class":1356},[1084,2669,1481],{"class":1451},[1084,2671,1216],{"class":1360},[1084,2673,1580],{"class":1410},[1084,2675,1383],{"class":1356},[1084,2677,1585],{"class":1416},[1084,2679,1216],{"class":1360},[1084,2681,1266],{"class":1410},[1084,2683,1383],{"class":1356},[1084,2685,1594],{"class":1360},[1084,2687,1597],{"class":1416},[1084,2689,1600],{"class":1360},[1084,2691,1603],{"class":1410},[1084,2693,1383],{"class":1356},[1084,2695,2696],{"class":1451},"20000",[1084,2698,1565],{"class":1360},[1084,2700,2701],{"class":1086,"line":1612},[1084,2702,1615],{"class":1360},[915,2704,1618,2705,1278,2707,2709],{},[970,2706,1621],{},[970,2708,1624],{}," for A1.",[1305,2711,2713],{"id":2712},"from-your-own-ide","From your own IDE",[915,2715,2716,2717,2720,2721,2724,2725,2728],{},"You can also write the code on your own computer, for example to turn it into a workflow that runs on the platform. This needs a ",[990,2718,2719],{"href":35},"development machine"," with the ",[990,2722,2723],{"href":39},"SDK installed and authenticated",", which includes API client credentials in a ",[970,2726,2727],{},".env"," file.",[915,2730,2731,2732,2734,2735,2738,2739,2743],{},"A Python file cannot use ",[970,2733,1442],{}," at the top level. Put the lines of a block into an async function and start it with ",[970,2736,2737],{},"asyncio",", as in ",[990,2740,2742],{"href":2741},"\u002Fget-started\u002Fsetup\u002Fsdk-installation\u002F#send-your-first-request","Send your first request",":",[1075,2745,2747],{"className":1347,"code":2746,"language":1349,"meta":1080,"style":1080},"import asyncio\n\nfrom dotenv import load_dotenv\nfrom unitelabs.sdk import AsyncApiClient\n\n\nasync def main():\n    client = AsyncApiClient()\n    reader = await client.get_service_by_name(name=\"Tecan Infinite 200\")\n    ...  # the remaining lines of the block, indented\n\n\nif __name__ == \"__main__\":\n    load_dotenv()\n    asyncio.run(main())\n",[970,2748,2749,2756,2760,2772,2782,2786,2790,2805,2814,2833,2841,2845,2849,2864,2869],{"__ignoreMap":1080},[1084,2750,2751,2753],{"class":1086,"line":1087},[1084,2752,1364],{"class":1356},[1084,2754,2755],{"class":1360}," asyncio\n",[1084,2757,2758],{"class":1086,"line":1370},[1084,2759,1374],{"emptyLinePlaceholder":1373},[1084,2761,2762,2764,2767,2769],{"class":1086,"line":1377},[1084,2763,1357],{"class":1356},[1084,2765,2766],{"class":1360}," dotenv ",[1084,2768,1364],{"class":1356},[1084,2770,2771],{"class":1360}," load_dotenv\n",[1084,2773,2774,2776,2778,2780],{"class":1086,"line":1389},[1084,2775,1357],{"class":1356},[1084,2777,1361],{"class":1360},[1084,2779,1364],{"class":1356},[1084,2781,1367],{"class":1360},[1084,2783,2784],{"class":1086,"line":1396},[1084,2785,1374],{"emptyLinePlaceholder":1373},[1084,2787,2788],{"class":1086,"line":1423},[1084,2789,1374],{"emptyLinePlaceholder":1373},[1084,2791,2792,2795,2798,2802],{"class":1086,"line":1434},[1084,2793,2794],{"class":1356},"async",[1084,2796,2797],{"class":1356}," def",[1084,2799,2801],{"class":2800},"s4qFZ"," main",[1084,2803,2804],{"class":1360},"():\n",[1084,2806,2807,2810,2812],{"class":1086,"line":1439},[1084,2808,2809],{"class":1360},"    client ",[1084,2811,1383],{"class":1356},[1084,2813,1386],{"class":1360},[1084,2815,2816,2819,2821,2823,2825,2827,2829,2831],{"class":1086,"line":1448},[1084,2817,2818],{"class":1360},"    reader ",[1084,2820,1383],{"class":1356},[1084,2822,1404],{"class":1356},[1084,2824,1407],{"class":1360},[1084,2826,1411],{"class":1410},[1084,2828,1383],{"class":1356},[1084,2830,1417],{"class":1416},[1084,2832,1420],{"class":1360},[1084,2834,2835,2838],{"class":1086,"line":1463},[1084,2836,2837],{"class":1451},"    ...",[1084,2839,2840],{"class":1392},"  # the remaining lines of the block, indented\n",[1084,2842,2843],{"class":1086,"line":1490},[1084,2844,1374],{"emptyLinePlaceholder":1373},[1084,2846,2847],{"class":1086,"line":1517},[1084,2848,1374],{"emptyLinePlaceholder":1373},[1084,2850,2851,2853,2856,2859,2862],{"class":1086,"line":1568},[1084,2852,1919],{"class":1356},[1084,2854,2855],{"class":1451}," __name__",[1084,2857,2858],{"class":1356}," ==",[1084,2860,2861],{"class":1416}," \"__main__\"",[1084,2863,2302],{"class":1360},[1084,2865,2866],{"class":1086,"line":1612},[1084,2867,2868],{"class":1360},"    load_dotenv()\n",[1084,2870,2871],{"class":1086,"line":2019},[1084,2872,2873],{"class":1360},"    asyncio.run(main())\n",[915,2875,2876,2877,2879,2880,2882],{},"To run the code on the platform, package it as a workflow. ",[990,2878,52],{"href":53}," writes a workflow in one file and runs it locally, and ",[990,2881,124],{"href":125}," ships it to the platform.",[919,2884,2886],{"id":2885},"known-quirks-and-errors","Known quirks and errors",[924,2888,2889,2902],{},[927,2890,2891],{},[930,2892,2893,2896,2899],{},[933,2894,2895],{},"You see",[933,2897,2898],{},"It means",[933,2900,2901],{},"Do this",[940,2903,2904,2921,2932,2946,2969,2983,2999,3015],{},[930,2905,2906,2909,2912],{},[945,2907,2908],{},"Calls succeed, but the reader never moves",[945,2910,2911],{},"Simulation mode is on.",[945,2913,2914,2915,2917,2918,2920],{},"Set ",[970,2916,1125],{}," to ",[970,2919,1135],{}," and restart the connector.",[930,2922,2923,2926,2929],{},[945,2924,2925],{},"Permission denied on Linux",[945,2927,2928],{},"The connector lacks USB access.",[945,2930,2931],{},"Apply the udev rule above, reload the rules and reconnect the reader.",[930,2933,2934,2937,2940],{},[945,2935,2936],{},"No device found on Windows",[945,2938,2939],{},"The connector cannot find the reader through the selected USB driver.",[945,2941,2942,2943,2945],{},"Check that the reader is powered on and connected by USB. Then check the driver and ",[970,2944,1049],{}," setting above.",[930,2947,2948,2960,2963],{},[945,2949,2950,2324,2953,2956,2957],{},[970,2951,2952],{},"No Fluorescence Intensity (FI) filter defined at ...",[970,2954,2955],{},"No Absorbance (ABS) filter defined at ...",", ending in ",[970,2958,2959],{},"Installed filters: ...",[945,2961,2962],{},"F-series: no installed filter has exactly the wavelength and bandwidth you passed, or none is defined for that read type.",[945,2964,2965,2966,972],{},"Use the values the message lists, or call ",[970,2967,2968],{},"get_all_filter_definitions()",[930,2970,2971,2977,2980],{},[945,2972,2973,2976],{},[970,2974,2975],{},"Value '...' is not in the set of allowed values.",", or a value reported as outside its range",[945,2978,2979],{},"The named parameter is outside the reader's allowed values.",[945,2981,2982],{},"Check that parameter's constraints in GroundControl. For M-series wavelengths and bandwidths, use the ranges above.",[930,2984,2985,2990,2993],{},[945,2986,2987],{},[970,2988,2989],{},"Command execution not accepted: '...ReadFluorescenceIntensity' is already executing.",[945,2991,2992],{},"A read is still running. Closing the script or notebook cell does not stop it.",[945,2994,2995,2996,972],{},"Wait, or run ",[970,2997,2998],{},"await reader.measurement_controller.stop_reading()",[930,3000,3001,3006,3009],{},[945,3002,3003],{},[970,3004,3005],{},"The reader is busy with a different operation (e.g. shaking or reading), wait for it to finish.",[945,3007,3008],{},"Another operation is running.",[945,3010,3011,3012,972],{},"Wait for it to finish. To end a shake, run ",[970,3013,3014],{},"await reader.shaker_controller.stop()",[930,3016,3017,3026,3029],{},[945,3018,3019,3020,3022,3023],{},"A filter message with excitation wavelengths of ",[970,3021,1544],{},", for example ",[970,3024,3025],{},"Installed filters: 0\u002F20 nm ex, 535\u002F25 nm em, ...",[945,3027,3028],{},"F-series: this can occur when a read starts with the carrier out.",[945,3030,3031,3032,3035],{},"Run ",[970,3033,3034],{},"await reader.carrier_controller.retract()"," and read again.",[3037,3038,3040],"callout",{"icon":3039},"i-lucide-triangle-alert",[915,3041,3042,3043,3046],{},"On an F-series reader, ejecting the filter slide physically pushes it out. Someone must reinsert it by hand; no command pulls it back in. ",[970,3044,3045],{},"filter_controller.subscribe_is_inserted()"," reports whether the slide is in.",[919,3048,3050],{"id":3049},"more-snippets","More snippets",[1039,3052,3053,3061,3068,3093,3115,3138,3152,3165],{},[1025,3054,3055,1327,3058,3060],{},[966,3056,3057],{},"Unload the plate:",[970,3059,1256],{}," after a completed read.",[1025,3062,3063,1327,3066,972],{},[966,3064,3065],{},"Stop a read:",[970,3067,2998],{},[1025,3069,3070,3073,3074,3077,3078,3081,3082,3085,3086,3088,3089,2324,3091,972],{},[966,3071,3072],{},"Choose wells:"," pass ",[970,3075,3076],{},"[\"A1\"]",", a list, a range such as ",[970,3079,3080],{},"[\"A1-C7\"]",", or ",[970,3083,3084],{},"[\"ALL\"]",". Results follow plate order. Pair returned ",[970,3087,1621],{}," with returned ",[970,3090,1624],{},[970,3092,1808],{},[1025,3094,3095,1327,3098,1216,3101,3104,3105,3107,3108,1278,3111,3114],{},[966,3096,3097],{},"Watch the reader:",[970,3099,3100],{},"device_provider.subscribe_state()",[970,3102,3103],{},"carrier_controller.subscribe_is_extended()"," and, on F-series readers, ",[970,3106,3045],{}," report current state when you subscribe, then updates. Measurement streams ",[970,3109,3110],{},"subscribe_fluorescence_intensity_readings()",[970,3112,3113],{},"subscribe_absorbance_readings()"," emit values as each plate row completes.",[1025,3116,3117,3120,3121,2917,3123,1216,3125,2324,3128,3131,3132,3135,3136,972],{},[966,3118,3119],{},"Plate layouts:"," set ",[970,3122,1580],{},[970,3124,1585],{},[970,3126,3127],{},"\"384\"",[970,3129,3130],{},"\"custom\"",". Define a custom layout first with ",[970,3133,3134],{},"define_custom_plate_layout()"," under ",[966,3137,1211],{},[1025,3139,3140,3143,3144,3147,3148,3151],{},[966,3141,3142],{},"Shake:"," if ",[966,3145,3146],{},"Shaker Controller"," is available, ",[970,3149,3150],{},"await reader.shaker_controller.start(mode=\"orbital\", amplitude=2.0, duration=10)"," shakes for 10 seconds at a 2 mm amplitude and returns when finished.",[1025,3153,3154,3157,3158,1216,3161,3164],{},[966,3155,3156],{},"Heat:"," on readers with a heater, the temperature controller offers ",[970,3159,3160],{},"start",[970,3162,3163],{},"stop"," and a target temperature up to 42 °C. Its sensor reports the target, with no live temperature read-back.",[1025,3166,3167,3170],{},[966,3168,3169],{},"Timing:"," on an F200, fluorescence at 25 flashes and 20 microseconds integration takes about 15 s for three wells and 85 s for 96 wells through the platform. Timing varies with the reader and settings.",[915,3172,3173],{},"One read handles one wavelength, or one excitation and emission pair; there is no spectral-scan action. For multiple wavelengths, run separate reads at the settings you need.",[919,3175,3177],{"id":3176},"connector-reference","Connector reference",[3037,3179,3181],{"icon":3180},"i-lucide-construction",[915,3182,3183,3184,1278,3186,972],{},"Browse the connected instrument's modules and actions in GroundControl, or with ",[970,3185,1205],{},[970,3187,3188],{},"print(reader.measurement_controller.actions.keys())",[919,3190,3192],{"id":3191},"vendor-documentation","Vendor documentation",[915,3194,3195],{},"Tecan's i-control Instructions for Use covers operating the reader through the vendor software. Use the instrument's own manual for operating limits, plate handling, maintenance and safety. This page covers the UniteLabs connection and first Python read.",[3197,3198,3199],"style",{},"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 .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 .sIsDC, html code.shiki .sIsDC{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#8B949E}html pre.shiki code .sNqAu, html code.shiki .sNqAu{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFA657}html pre.shiki code .sCx38, html code.shiki .sCx38{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#A5D6FF}html pre.shiki code .sOiAX, html code.shiki .sOiAX{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .s4qFZ, html code.shiki .s4qFZ{--shiki-light:#622CBC;--shiki-default:#622CBC;--shiki-dark:#D2A8FF}",{"title":1080,"searchDepth":1087,"depth":1370,"links":3201},[3202,3203,3204,3207,3208,3209,3210],{"id":921,"depth":1370,"text":922},{"id":1019,"depth":1370,"text":1020},{"id":1227,"depth":1370,"text":1228,"children":3205},[3206],{"id":2712,"depth":1377,"text":2713},{"id":2885,"depth":1370,"text":2886},{"id":3049,"depth":1370,"text":3050},{"id":3176,"depth":1370,"text":3177},{"id":3191,"depth":1370,"text":3192},"Connect a Tecan Infinite 200 through GroundControl and read a plate from Python.",{"slug":557,"vendor":558,"category":541,"connector":557,"package":559,"models":3213,"communication":564,"vendor_software":565,"os":3214},[561,562,563],[475,476,477],"md",{},"\u002Fdevices\u002Ftecan-infinite-200",{"title":553,"description":3211},"LQO0ettvhefgYdH9NTNXkO34OnbMr5srxm54RzgTmI8",[3221,3223],{"title":544,"description":3222,"path":545},"Getting started with the Bioshake Synergy H1 (without Gen5).",{"title":572,"description":3224,"path":573},"Get a QInstruments TiltStation connected through GroundControl, initialise it and run a first tilt cycle from Python.",1791294182825]