diff --git a/api/tests/opentrons/config/test_pipette_config.py b/api/tests/opentrons/config/test_pipette_config.py index 29a9140a03d..6428b156b17 100644 --- a/api/tests/opentrons/config/test_pipette_config.py +++ b/api/tests/opentrons/config/test_pipette_config.py @@ -13,7 +13,7 @@ from opentrons_shared_data import load_shared_data from opentrons_shared_data.pipette.dev_types import PipetteModel -defs = json.loads(load_shared_data("pipette/definitions/pipetteModelSpecs.json")) +defs = json.loads(load_shared_data("pipette/definitions/1/pipetteModelSpecs.json")) def check_sequences_close( diff --git a/shared-data/js/__tests__/pipetteSchemaV2.test.ts b/shared-data/js/__tests__/pipetteSchemaV2.test.ts new file mode 100644 index 00000000000..25332eb7104 --- /dev/null +++ b/shared-data/js/__tests__/pipetteSchemaV2.test.ts @@ -0,0 +1,113 @@ +import Ajv from 'ajv' +import glob from 'glob' +import path from 'path' + +import liquidSpecsSchema from '../../pipette/schemas/2/pipetteLiquidPropertiesSchema.json' +import geometrySpecsSchema from '../../pipette/schemas/2/pipetteGeometrySchema.json' +import generalSpecsSchema from '../../pipette/schemas/2/pipettePropertiesSchema.json' + +const allGeometryDefinitions = path.join( + __dirname, + '../../pipette/definitions/2/geometry/**/**/*.json' +) + +const allGeneralDefinitions = path.join( + __dirname, + '../../labware/definitions/2/general/**/**/*.json' +) + +const allLiquidDefinitions = path.join( + __dirname, + '../../labware/definitions/2/liquid/**/**/*.json' +) + +const ajv = new Ajv({ allErrors: true, jsonPointers: true }) + +const validateLiquidSpecs = ajv.compile(liquidSpecsSchema) +const validateGeometrySpecs = ajv.compile(geometrySpecsSchema) +const validateGeneralSpecs = ajv.compile(generalSpecsSchema) + +describe('test schema against all liquid specs definitions', () => { + const liquidPaths = glob.sync(allLiquidDefinitions) + + beforeAll(() => { + // Make sure definitions path didn't break, which would give you false positives + expect(liquidPaths.length).toBeGreaterThan(0) + }) + + liquidPaths.forEach(liquidPath => { + const liquidDef = require(liquidPath) + + it(`${liquidPath} validates against schema`, () => { + const valid = validateLiquidSpecs(liquidDef) + const validationErrors = validateLiquidSpecs.errors + expect(validationErrors).toBe(null) + expect(valid).toBe(true) + }) + + it(`parent dir matches pipette model: ${liquidPath}`, () => { + expect(['p50', 'p1000']).toContain( + path.basename(path.dirname(liquidPath)) + ) + }) + }) +}) + +describe('test schema against all geometry specs definitions', () => { + const geometryPaths = glob.sync(allGeometryDefinitions) + + beforeAll(() => { + // Make sure definitions path didn't break, which would give you false positives + expect(geometryPaths.length).toBeGreaterThan(0) + }) + + geometryPaths.forEach(geometryPath => { + const geometryDef = require(geometryPath) + const geometryParentDir = path.dirname(geometryPath) + + it(`${geometryPath} validates against schema`, () => { + const valid = validateGeometrySpecs(geometryDef) + const validationErrors = validateGeometrySpecs.errors + expect(validationErrors).toBe(null) + expect(valid).toBe(true) + }) + + it(`parent dir matches pipette model: ${geometryPath}`, () => { + expect(['p50', 'p1000']).toContain( + path.basename(path.dirname(geometryPath)) + ) + }) + + it(`parent directory contains a gltf file: ${geometryPath}`, () => { + const gltf_file = glob.sync(path.join(geometryParentDir, '*.gltf')) + expect(gltf_file.length).toBeGreaterThan(0) + expect(gltf_file).toBeDefined() + }) + }) +}) + +describe('test schema against all general specs definitions', () => { + const generalPaths = glob.sync(allGeneralDefinitions) + + beforeAll(() => { + // Make sure definitions path didn't break, which would give you false positives + expect(generalPaths.length).toBeGreaterThan(0) + }) + + generalPaths.forEach(generalPath => { + const generalDef = require(generalPath) + + it(`${generalPath} validates against schema`, () => { + const valid = validateGeneralSpecs(generalDef) + const validationErrors = validateGeneralSpecs.errors + expect(validationErrors).toBe(null) + expect(valid).toBe(true) + }) + + it(`parent dir matches pipette model: ${generalPath}`, () => { + expect(['p50', 'p1000']).toContain( + path.basename(path.dirname(generalPath)) + ) + }) + }) +}) diff --git a/shared-data/js/__tests__/pipetteSpecSchemas.test.ts b/shared-data/js/__tests__/pipetteSpecSchemas.test.ts index df096876252..9368088c7ab 100644 --- a/shared-data/js/__tests__/pipetteSpecSchemas.test.ts +++ b/shared-data/js/__tests__/pipetteSpecSchemas.test.ts @@ -1,8 +1,8 @@ import Ajv from 'ajv' -import nameSpecsSchema from '../../pipette/schemas/pipetteNameSpecsSchema.json' -import modelSpecsSchema from '../../pipette/schemas/pipetteModelSpecsSchema.json' -import pipetteNameSpecs from '../../pipette/definitions/pipetteNameSpecs.json' -import pipetteModelSpecs from '../../pipette/definitions/pipetteModelSpecs.json' +import nameSpecsSchema from '../../pipette/schemas/1/pipetteNameSpecsSchema.json' +import modelSpecsSchema from '../../pipette/schemas/1/pipetteModelSpecsSchema.json' +import pipetteNameSpecs from '../../pipette/definitions/1/pipetteNameSpecs.json' +import pipetteModelSpecs from '../../pipette/definitions/1/pipetteModelSpecs.json' const ajv = new Ajv({ allErrors: true, jsonPointers: true }) diff --git a/shared-data/js/pipettes.ts b/shared-data/js/pipettes.ts index b6551782ac6..c237bd26c47 100644 --- a/shared-data/js/pipettes.ts +++ b/shared-data/js/pipettes.ts @@ -1,5 +1,5 @@ -import pipetteNameSpecs from '../pipette/definitions/pipetteNameSpecs.json' -import pipetteModelSpecs from '../pipette/definitions/pipetteModelSpecs.json' +import pipetteNameSpecs from '../pipette/definitions/1/pipetteNameSpecs.json' +import pipetteModelSpecs from '../pipette/definitions/1/pipetteModelSpecs.json' import { OT3_PIPETTES } from './constants' import type { PipetteNameSpecs, PipetteModelSpecs } from './types' diff --git a/shared-data/pipette/README.md b/shared-data/pipette/README.md index 9fc94d3fcc4..d6b198e3224 100644 --- a/shared-data/pipette/README.md +++ b/shared-data/pipette/README.md @@ -1,8 +1,37 @@ -# Pipette Spec Data +# Pipette Configurations + +## Schema Version 2 + +Information about our pipettes is now split into 3 different categories of data. Each data file is organized into `///`. + +- `configuration_type` is the top level category of data (i.e. `geometry` or `liquid`) +- `pipette_type` is the type of pipette generally referred to by the channel size (i.e. `single_channel` or `eight_channel`) +- `pipette_model` is the max volume of the pipette (i.e. `p50` or `p1000`) +- `pipette_version` is the version number flashed to the pipette (i.e. `v1` or `v1.2`) + +This organization is subject to change based on the model name changes that product might make. + +### Geometry Configurations: `shared-data/pipette/schemas/2/pipetteGeometrySchema.json` + +Pipette geometry configurations includes physical properties that map the pipette end effector in space. In this section of data, we would also like to store 3D model descriptor files that are compatible with typescript and other 3D modeling visualization software for future applications. + +We are planning to use [gltf](https://www.khronos.org/gltf/) formatted files as you can choose your 3D model anchors inside solidworks and export the file. + +### Liquid Configurations: `shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json` + +Pipette liquid configurations include all pipette properties that may affect liquid handling. This includes pipetting function and default flow rates based on tip size. + +We have now added in the ability to categorize liquid handling properties by tip type (which can also vary by brand). Eventually, we may need this to be more complex than just a look up dictionary of `tip_type` : `brand+liquid` but we can decide to make that change at a different time. + +### General Properties Configurations: `shared-data/pipette/schemas/2/pipettePropertiesSchema.json` + +Pipette general properties should be similar to schema version 1 name specs that are shared across pipette type + model. + +## Schema Version 1 Information about our pipettes is split into 2 different files. -## Name Level: `shared-data/pipette/definitions/pipetteNameSpecs.json` +### Name Level: `shared-data/pipette/schemas/1/pipetteNameSpecs.json` A pipette name is what is communicated with customers, what is listed in the store, etc. Name-level information does not vary across pipettes with the same "name", it includes: min and max volume, display name, number of channels, and default aspirate/dispense flow rates. @@ -10,12 +39,12 @@ The "name" is all that is communicated to the average user about a pipette. Both `"p10_single"` is an example of a name. -## Model Level: `shared-data/pipette/definitions/pipetteModelSpecs.json` +### Model Level: `shared-data/pipette/schemas/1/pipetteModelSpecs.json` A "model" is synonymous with a part number. Our models / part numbers look like `"p10_single_v1.3"`. Although the name is a substring of the model string, it isn't a good idea to infer name by parsing it out of the model. The model level contains information specific to particular pipette models. The model can be read off of a pipette's EEPROM at runtime. This information is required for protocol execution on the robot, but is not used directly in the code of JSON or Python protocols. -# JSON Schemas +## JSON Schemas In `shared-data/pipette/schemas/` there are JSON schemas for these files, which ensure data integrity. Further descriptions about the individual fields are written into the schemas. diff --git a/shared-data/pipette/definitions/pipetteModelSpecs.json b/shared-data/pipette/definitions/1/pipetteModelSpecs.json similarity index 100% rename from shared-data/pipette/definitions/pipetteModelSpecs.json rename to shared-data/pipette/definitions/1/pipetteModelSpecs.json diff --git a/shared-data/pipette/definitions/pipetteNameSpecs.json b/shared-data/pipette/definitions/1/pipetteNameSpecs.json similarity index 100% rename from shared-data/pipette/definitions/pipetteNameSpecs.json rename to shared-data/pipette/definitions/1/pipetteNameSpecs.json diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/1.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1.json new file mode 100644 index 00000000000..332f958f8bd --- /dev/null +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1.json @@ -0,0 +1,38 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", + "displayName": "P1000 Eight Channel GEN3", + "model": "eightChannel", + "displayCategory": "GEN3", + "pickUpTipConfigurations": { + "current": 0.5, + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0 + }, + "dropTipConfigurations": { + "current": 1.0, + "speed": 10 + }, + "plungerMotorConfigurations": { + "idle": 0.3, + "run": 1.0 + }, + "plungerPositionsConfigurations": { + "top": 0.5, + "bottom": 71.5, + "blowout": 76.5, + "drop": 92.5 + }, + "availableSensors": { + "sensors": ["pressure", "capacitive", "environment"], + "pressure": { "count": 2 }, + "capacitive": { "count": 2 }, + "environment": { "count": 1 } + }, + "partialTipConfigurations": { + "partialTipSupported": true, + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + }, + "channels": 8 +} diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1.json new file mode 100644 index 00000000000..908afabf307 --- /dev/null +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1.json @@ -0,0 +1,38 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", + "displayName": "P50 Eight Channel GEN3", + "model": "eightChannel", + "displayCategory": "GEN3", + "pickUpTipConfigurations": { + "current": 0.5, + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0 + }, + "dropTipConfigurations": { + "current": 1.0, + "speed": 10 + }, + "plungerMotorConfigurations": { + "idle": 0.3, + "run": 1.0 + }, + "plungerPositionsConfigurations": { + "top": 0.5, + "bottom": 71.5, + "blowout": 76.5, + "drop": 92.5 + }, + "availableSensors": { + "sensors": ["pressure", "capacitive", "environment"], + "pressure": { "count": 2 }, + "capacitive": { "count": 2 }, + "environment": { "count": 1 } + }, + "partialTipConfigurations": { + "partialTipSupported": true, + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] + }, + "channels": 8 +} diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1.json new file mode 100644 index 00000000000..7a85eb62291 --- /dev/null +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1.json @@ -0,0 +1,38 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", + "displayName": "P1000 96 Channel GEN3", + "model": "ninetySixChannel", + "displayCategory": "GEN3", + "pickUpTipConfigurations": { + "current": 0.4, + "presses": 1, + "speed": 10, + "increment": 0.5, + "distance": 1.0 + }, + "dropTipConfigurations": { + "current": 1.0, + "speed": 10 + }, + "plungerMotorConfigurations": { + "idle": 0.3, + "run": 1.0 + }, + "plungerPositionsConfigurations": { + "top": 0, + "bottom": 66, + "blowout": 71, + "drop": 80 + }, + "availableSensors": { + "sensors": ["pressure", "capacitive", "environment"], + "pressure": { "count": 2 }, + "capacitive": { "count": 2 }, + "environment": { "count": 1 } + }, + "partialTipConfigurations": { + "partialTipSupported": true, + "availableConfigurations": [1, 8, 12, 96] + }, + "channels": 96 +} diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1.json new file mode 100644 index 00000000000..f3cf7fd5294 --- /dev/null +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1.json @@ -0,0 +1,37 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", + "displayName": "P1000 One Channel GEN3", + "model": "oneChannel", + "displayCategory": "GEN3", + "pickUpTipConfigurations": { + "current": 0.15, + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0 + }, + "dropTipConfigurations": { + "current": 1.0, + "speed": 10 + }, + "plungerMotorConfigurations": { + "idle": 0.3, + "run": 1.0 + }, + "plungerPositionsConfigurations": { + "top": 0.5, + "bottom": 71.5, + "blowout": 76.5, + "drop": 90.5 + }, + "availableSensors": { + "sensors": ["pressure", "capacitive", "environment"], + "pressure": { "count": 1 }, + "capacitive": { "count": 1 }, + "environment": { "count": 1 } + }, + "partialTipConfigurations": { + "partialTipSupported": false + }, + "channels": 1 +} diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1.json new file mode 100644 index 00000000000..c36215977cb --- /dev/null +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1.json @@ -0,0 +1,37 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipettePropertiesSchema.json", + "displayName": "P50 One Channel GEN3", + "model": "oneChannel", + "displayCategory": "GEN3", + "pickUpTipConfigurations": { + "current": 0.15, + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0 + }, + "dropTipConfigurations": { + "current": 1.0, + "speed": 10 + }, + "plungerMotorConfigurations": { + "idle": 0.3, + "run": 1.0 + }, + "plungerPositionsConfigurations": { + "top": 0.5, + "bottom": 71.5, + "blowout": 76.5, + "drop": 90.5 + }, + "availableSensors": { + "sensors": ["pressure", "capacitive", "environment"], + "pressure": { "count": 1 }, + "capacitive": { "count": 1 }, + "environment": { "count": 1 } + }, + "partialTipConfigurations": { + "partialTipSupported": false + }, + "channels": 1 +} diff --git a/shared-data/pipette/definitions/2/geometry/eight_channel/p1000/1.json b/shared-data/pipette/definitions/2/geometry/eight_channel/p1000/1.json new file mode 100644 index 00000000000..d6a34318344 --- /dev/null +++ b/shared-data/pipette/definitions/2/geometry/eight_channel/p1000/1.json @@ -0,0 +1,5 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteGeometrySchema.json", + "pathTo3D": "pipette/definitions/2/eight_channel/p50/placeholder.gltf", + "nozzleOffset": [-0.5, -16.0, -259.15] +} diff --git a/shared-data/pipette/definitions/2/geometry/eight_channel/p1000/placeholder.gltf b/shared-data/pipette/definitions/2/geometry/eight_channel/p1000/placeholder.gltf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared-data/pipette/definitions/2/geometry/eight_channel/p50/1.json b/shared-data/pipette/definitions/2/geometry/eight_channel/p50/1.json new file mode 100644 index 00000000000..8769a00ffc2 --- /dev/null +++ b/shared-data/pipette/definitions/2/geometry/eight_channel/p50/1.json @@ -0,0 +1,5 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteGeometrySchema.json", + "pathTo3D": "pipette/definitions/2/eight_channel/p1000/placeholder.gltf", + "nozzleOffset": [-8.0, -16.0, -259.15] +} diff --git a/shared-data/pipette/definitions/2/geometry/eight_channel/p50/placeholder.gltf b/shared-data/pipette/definitions/2/geometry/eight_channel/p50/placeholder.gltf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared-data/pipette/definitions/2/geometry/ninety_six_channel/p1000/1.json b/shared-data/pipette/definitions/2/geometry/ninety_six_channel/p1000/1.json new file mode 100644 index 00000000000..090c7a22699 --- /dev/null +++ b/shared-data/pipette/definitions/2/geometry/ninety_six_channel/p1000/1.json @@ -0,0 +1,5 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteGeometrySchema.json", + "pathTo3D": "pipette/definitions/2/ninety_six_channel/p1000/placeholder.gltf", + "nozzleOffset": [-36.0, -25.5, -259.15] +} diff --git a/shared-data/pipette/definitions/2/geometry/ninety_six_channel/p1000/placeholder.gltf b/shared-data/pipette/definitions/2/geometry/ninety_six_channel/p1000/placeholder.gltf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared-data/pipette/definitions/2/geometry/single_channel/p1000/1.json b/shared-data/pipette/definitions/2/geometry/single_channel/p1000/1.json new file mode 100644 index 00000000000..3598874a13e --- /dev/null +++ b/shared-data/pipette/definitions/2/geometry/single_channel/p1000/1.json @@ -0,0 +1,5 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteGeometrySchema.json", + "pathTo3D": "pipette/definitions/2/single_channel/p1000/placeholder.gltf", + "nozzleOffset": [-8.0, -22.0, -259.15] +} diff --git a/shared-data/pipette/definitions/2/geometry/single_channel/p1000/placeholder.gltf b/shared-data/pipette/definitions/2/geometry/single_channel/p1000/placeholder.gltf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared-data/pipette/definitions/2/geometry/single_channel/p50/1.json b/shared-data/pipette/definitions/2/geometry/single_channel/p50/1.json new file mode 100644 index 00000000000..c723f77f5bc --- /dev/null +++ b/shared-data/pipette/definitions/2/geometry/single_channel/p50/1.json @@ -0,0 +1,5 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteGeometrySchema.json", + "pathTo3D": "pipette/definitions/2/single_channel/p50/placeholder.gltf", + "nozzleOffset": [-8.0, -22.0, -259.15] +} diff --git a/shared-data/pipette/definitions/2/geometry/single_channel/p50/placeholder.gltf b/shared-data/pipette/definitions/2/geometry/single_channel/p50/placeholder.gltf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/1.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/1.json new file mode 100644 index 00000000000..0d2c9ca70e7 --- /dev/null +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/1.json @@ -0,0 +1,299 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", + "supportedTips": { + "t50": { + "defaultAspirateFlowRate": 6, + "defaultDispenseFlowRate": 6, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + }, + "dispense": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + } + }, + "t200": { + "defaultAspirateFlowRate": 80, + "defaultDispenseFlowRate": 80, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + }, + "dispense": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + } + }, + "t1000": { + "defaultAspirateFlowRate": 160, + "defaultDispenseFlowRate": 160, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + }, + "dispense": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + } + } + }, + "maxVolume": 1000, + "minVolume": 5, + "defaultTipracks": [ + "opentrons/opentrons_ot3_96_tiprack_1000ul/1", + "opentrons/opentrons_ot3_96_tiprack_200ul/1", + "opentrons/opentrons_ot3_96_tiprack_50ul/1" + ] +} diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/1.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/1.json new file mode 100644 index 00000000000..feabc2edd77 --- /dev/null +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/1.json @@ -0,0 +1,77 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", + "supportedTips": { + "t50": { + "defaultAspirateFlowRate": 8, + "defaultDispenseFlowRate": 8, + "defaultBlowOutFlowRate": 4, + "aspirate": { + "default": [ + [0.6464, 0.4817, 0.0427], + [1.0889, 0.2539, 0.1591], + [1.5136, 0.1624, 0.2587], + [1.9108, 0.1042, 0.3467], + [2.2941, 0.0719, 0.4085], + [2.9978, 0.037, 0.4886], + [3.7731, 0.0378, 0.4863], + [4.7575, 0.0516, 0.4342], + [5.5024, 0.011, 0.6275], + [6.2686, 0.0114, 0.6253], + [7.005, 0.0054, 0.6625], + [8.5207, 0.0063, 0.6563], + [10.0034, 0.003, 0.6844], + [11.5075, 0.0031, 0.6833], + [13.0327, 0.0032, 0.6829], + [14.5356, 0.0018, 0.7003], + [17.5447, 0.0014, 0.7063], + [20.5576, 0.0011, 0.7126], + [23.5624, 0.0007, 0.7197], + [26.5785, 0.0007, 0.721], + [29.593, 0.0005, 0.7248], + [32.6109, 0.0004, 0.7268], + [35.6384, 0.0004, 0.727], + [38.6439, 0.0002, 0.7343], + [41.6815, 0.0004, 0.7284], + [44.6895, 0.0002, 0.7372], + [47.6926, 0.0001, 0.7393], + [51.4567, 0.0001, 0.7382] + ] + }, + "dispense": { + "default": [ + [0.6464, 0.4817, 0.0427], + [1.0889, 0.2539, 0.1591], + [1.5136, 0.1624, 0.2587], + [1.9108, 0.1042, 0.3467], + [2.2941, 0.0719, 0.4085], + [2.9978, 0.037, 0.4886], + [3.7731, 0.0378, 0.4863], + [4.7575, 0.0516, 0.4342], + [5.5024, 0.011, 0.6275], + [6.2686, 0.0114, 0.6253], + [7.005, 0.0054, 0.6625], + [8.5207, 0.0063, 0.6563], + [10.0034, 0.003, 0.6844], + [11.5075, 0.0031, 0.6833], + [13.0327, 0.0032, 0.6829], + [14.5356, 0.0018, 0.7003], + [17.5447, 0.0014, 0.7063], + [20.5576, 0.0011, 0.7126], + [23.5624, 0.0007, 0.7197], + [26.5785, 0.0007, 0.721], + [29.593, 0.0005, 0.7248], + [32.6109, 0.0004, 0.7268], + [35.6384, 0.0004, 0.727], + [38.6439, 0.0002, 0.7343], + [41.6815, 0.0004, 0.7284], + [44.6895, 0.0002, 0.7372], + [47.6926, 0.0001, 0.7393], + [51.4567, 0.0001, 0.7382] + ] + } + } + }, + "maxVolume": 50, + "minVolume": 0.5, + "defaultTipracks": ["opentrons/opentrons_ot3_96_tiprack_50ul/1"] +} diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/1.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/1.json new file mode 100644 index 00000000000..e50b028d141 --- /dev/null +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/1.json @@ -0,0 +1,299 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", + "supportedTips": { + "t50": { + "defaultAspirateFlowRate": 6, + "defaultDispenseFlowRate": 6, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + }, + "dispense": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + } + }, + "t200": { + "defaultAspirateFlowRate": 80, + "defaultDispenseFlowRate": 80, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + }, + "dispense": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + } + }, + "t1000": { + "defaultAspirateFlowRate": 160, + "defaultDispenseFlowRate": 160, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + }, + "dispense": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + } + } + }, + "maxVolume": 1000, + "minVolume": 1, + "defaultTipracks": [ + "opentrons/opentrons_ot3_96_tiprack_1000ul/1", + "opentrons/opentrons_ot3_96_tiprack_200ul/1", + "opentrons/opentrons_ot3_96_tiprack_50ul/1" + ] +} diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/1.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/1.json new file mode 100644 index 00000000000..d34a89e1f7e --- /dev/null +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/1.json @@ -0,0 +1,299 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", + "supportedTips": { + "t50": { + "defaultAspirateFlowRate": 6, + "defaultDispenseFlowRate": 6, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + }, + "dispense": { + "default": [ + [0.4148, -1705.1015, 20.5455], + [0.4476, -80.633, 47.2788], + [0.5512, -1.5936, 11.9026], + [0.6027, -18.9998, 21.4972], + [0.6503, -15.8781, 19.6156], + [0.7733, 3.0612, 7.2993], + [0.8391, -5.2227, 13.7056], + [0.9736, 3.0706, 6.7467], + [1.16, -0.374, 10.1005], + [1.3964, 1.3004, 8.1582], + [1.5815, -0.4837, 10.6494], + [1.8306, 1.1464, 8.0714], + [2.0345, 0.0132, 10.1459], + [2.6221, 0.5374, 9.0794], + [2.9655, -1.7582, 15.0986], + [3.5124, 0.2754, 9.0681], + [4.6591, 1.406, 5.097], + [5.367, 0.394, 9.8123], + [6.0839, 0.3365, 10.1205], + [6.8312, 0.3379, 10.1121], + [7.5676, 0.2611, 10.637], + [8.2397, 0.095, 11.8939], + [8.9776, 0.2015, 11.0165], + [10.413, 0.1332, 11.6294], + [11.8539, 0.1074, 11.8979], + [13.3655, 0.1286, 11.6464], + [14.8236, 0.0758, 12.3519], + [16.3203, 0.083, 12.2457], + [17.7915, 0.0581, 12.6515], + [19.2145, 0.0273, 13.1995], + [20.6718, 0.0388, 12.9792], + [22.1333, 0.0357, 13.044], + [25.0761, 0.0332, 13.0977], + [28.0339, 0.029, 13.2035], + [30.967, 0.0201, 13.4538], + [33.8727, 0.013, 13.6737], + [36.8273, 0.0172, 13.5324], + [39.7594, 0.0121, 13.7191], + [42.6721, 0.0083, 13.8687], + [45.5964, 0.0085, 13.8618], + [48.5297, 0.0084, 13.8668], + [51.4512, 0.0064, 13.9651] + ] + } + }, + "t200": { + "defaultAspirateFlowRate": 80, + "defaultDispenseFlowRate": 80, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + }, + "dispense": { + "default": [ + [0.8314, -2.9322, 24.0741], + [0.8853, -30.0996, 48.7784], + [0.9778, -4.3627, 25.9941], + [0.975, 802.2301, -762.6744], + [1.1272, -4.6837, 24.0666], + [1.2747, -3.91, 23.1945], + [1.5656, -2.8032, 21.7836], + [1.6667, -7.2039, 28.6731], + [2.4403, -0.5147, 17.5244], + [3.0564, -1.6013, 20.1761], + [3.6444, -1.1974, 18.9418], + [4.1189, -1.7877, 21.0928], + [4.6467, -0.8591, 17.2684], + [5.2597, -0.207, 14.2379], + [5.8581, -0.2196, 14.3044], + [6.4772, -0.1025, 13.6183], + [7.8158, 0.0537, 12.6063], + [9.1664, 0.0507, 12.6302], + [10.5064, 0.0285, 12.8339], + [14.8361, 0.0818, 12.273], + [19.3933, 0.0801, 12.2991], + [23.9242, 0.0487, 12.9079], + [28.4922, 0.0379, 13.1666], + [36.145, 0.0277, 13.4572], + [43.7972, 0.0184, 13.7916], + [51.5125, 0.0154, 13.9248], + [59.2467, 0.0121, 14.0931], + [66.9428, 0.0084, 14.3151], + [74.6853, 0.0079, 14.3498], + [82.3722, 0.0052, 14.5512], + [90.1106, 0.0054, 14.5333], + [97.8369, 0.0043, 14.6288], + [105.6153, 0.0046, 14.5983], + [113.3686, 0.0036, 14.7076], + [121.1108, 0.003, 14.7785], + [136.61, 0.0026, 14.826], + [152.0708, 0.0018, 14.9298], + [167.6433, 0.0021, 14.8827], + [183.1011, 0.0012, 15.0438], + [198.5845, 0.0011, 15.0538], + [214.0264, 0.0008, 15.123] + ] + } + }, + "t1000": { + "defaultAspirateFlowRate": 160, + "defaultDispenseFlowRate": 160, + "defaultBlowOutFlowRate": 80, + "aspirate": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + }, + "dispense": { + "default": [ + [0.7511, 3.9556, 6.455], + [1.3075, 2.1664, 5.8839], + [1.8737, 1.1513, 7.2111], + [3.177, 0.9374, 7.612], + [4.5368, 0.5531, 8.8328], + [7.3103, 0.3035, 9.9651], + [10.0825, 0.1513, 11.0781], + [12.9776, 0.1293, 11.2991], + [15.9173, 0.0976, 11.7115], + [18.8243, 0.0624, 12.2706], + [21.8529, 0.07, 12.1275], + [24.8068, 0.0418, 12.7442], + [27.7744, 0.0356, 12.8984], + [35.2873, 0.0303, 13.0454], + [42.7989, 0.0202, 13.4038], + [50.4562, 0.0196, 13.4293], + [58.1081, 0.0145, 13.6843], + [65.7267, 0.0104, 13.9252], + [73.2857, 0.0068, 14.1606], + [81.0016, 0.0091, 13.9883], + [88.6617, 0.0064, 14.2052], + [103.9829, 0.0051, 14.3271], + [119.4408, 0.0049, 14.3475], + [134.889, 0.0037, 14.485], + [150.273, 0.0026, 14.6402], + [181.2798, 0.0026, 14.6427], + [212.4724, 0.0022, 14.7002], + [243.577, 0.0015, 14.8558], + [274.7216, 0.0012, 14.9205], + [305.8132, 0.0009, 15.0118], + [368.0697, 0.0007, 15.0668], + [430.2513, 0.0005, 15.1594], + [492.3487, 0.0003, 15.2291], + [554.5713, 0.0003, 15.2367], + [616.6825, 0.0002, 15.2949], + [694.4168, 0.0002, 15.3027], + [772.0327, 0.0001, 15.3494], + [849.617, 0.0001, 15.3717], + [927.2556, 0.0001, 15.3745], + [1004.87, 0.0001, 15.3912], + [1051.4648, 0.0001, 15.391] + ] + } + } + }, + "maxVolume": 1, + "minVolume": 1000, + "defaultTipracks": [ + "opentrons/opentrons_ot3_96_tiprack_1000ul/1", + "opentrons/opentrons_ot3_96_tiprack_200ul/1", + "opentrons/opentrons_ot3_96_tiprack_50ul/1" + ] +} diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/1.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/1.json new file mode 100644 index 00000000000..feabc2edd77 --- /dev/null +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/1.json @@ -0,0 +1,77 @@ +{ + "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", + "supportedTips": { + "t50": { + "defaultAspirateFlowRate": 8, + "defaultDispenseFlowRate": 8, + "defaultBlowOutFlowRate": 4, + "aspirate": { + "default": [ + [0.6464, 0.4817, 0.0427], + [1.0889, 0.2539, 0.1591], + [1.5136, 0.1624, 0.2587], + [1.9108, 0.1042, 0.3467], + [2.2941, 0.0719, 0.4085], + [2.9978, 0.037, 0.4886], + [3.7731, 0.0378, 0.4863], + [4.7575, 0.0516, 0.4342], + [5.5024, 0.011, 0.6275], + [6.2686, 0.0114, 0.6253], + [7.005, 0.0054, 0.6625], + [8.5207, 0.0063, 0.6563], + [10.0034, 0.003, 0.6844], + [11.5075, 0.0031, 0.6833], + [13.0327, 0.0032, 0.6829], + [14.5356, 0.0018, 0.7003], + [17.5447, 0.0014, 0.7063], + [20.5576, 0.0011, 0.7126], + [23.5624, 0.0007, 0.7197], + [26.5785, 0.0007, 0.721], + [29.593, 0.0005, 0.7248], + [32.6109, 0.0004, 0.7268], + [35.6384, 0.0004, 0.727], + [38.6439, 0.0002, 0.7343], + [41.6815, 0.0004, 0.7284], + [44.6895, 0.0002, 0.7372], + [47.6926, 0.0001, 0.7393], + [51.4567, 0.0001, 0.7382] + ] + }, + "dispense": { + "default": [ + [0.6464, 0.4817, 0.0427], + [1.0889, 0.2539, 0.1591], + [1.5136, 0.1624, 0.2587], + [1.9108, 0.1042, 0.3467], + [2.2941, 0.0719, 0.4085], + [2.9978, 0.037, 0.4886], + [3.7731, 0.0378, 0.4863], + [4.7575, 0.0516, 0.4342], + [5.5024, 0.011, 0.6275], + [6.2686, 0.0114, 0.6253], + [7.005, 0.0054, 0.6625], + [8.5207, 0.0063, 0.6563], + [10.0034, 0.003, 0.6844], + [11.5075, 0.0031, 0.6833], + [13.0327, 0.0032, 0.6829], + [14.5356, 0.0018, 0.7003], + [17.5447, 0.0014, 0.7063], + [20.5576, 0.0011, 0.7126], + [23.5624, 0.0007, 0.7197], + [26.5785, 0.0007, 0.721], + [29.593, 0.0005, 0.7248], + [32.6109, 0.0004, 0.7268], + [35.6384, 0.0004, 0.727], + [38.6439, 0.0002, 0.7343], + [41.6815, 0.0004, 0.7284], + [44.6895, 0.0002, 0.7372], + [47.6926, 0.0001, 0.7393], + [51.4567, 0.0001, 0.7382] + ] + } + } + }, + "maxVolume": 50, + "minVolume": 0.5, + "defaultTipracks": ["opentrons/opentrons_ot3_96_tiprack_50ul/1"] +} diff --git a/shared-data/pipette/schemas/pipetteModelSpecsSchema.json b/shared-data/pipette/schemas/1/pipetteModelSpecsSchema.json similarity index 100% rename from shared-data/pipette/schemas/pipetteModelSpecsSchema.json rename to shared-data/pipette/schemas/1/pipetteModelSpecsSchema.json diff --git a/shared-data/pipette/schemas/pipetteNameSpecsSchema.json b/shared-data/pipette/schemas/1/pipetteNameSpecsSchema.json similarity index 100% rename from shared-data/pipette/schemas/pipetteNameSpecsSchema.json rename to shared-data/pipette/schemas/1/pipetteNameSpecsSchema.json diff --git a/shared-data/pipette/schemas/2/pipetteGeometrySchema.json b/shared-data/pipette/schemas/2/pipetteGeometrySchema.json new file mode 100644 index 00000000000..c65d5e37f8d --- /dev/null +++ b/shared-data/pipette/schemas/2/pipetteGeometrySchema.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "xyzArray": { + "type": "array", + "description": "Array of 3 numbers, [x, y, z]", + "items": { "type": "number" }, + "minItems": 3, + "maxItems": 3 + } + }, + "type": "object", + "required": ["$otSharedSchema", "nozzleOffset", "pathTo3D"], + "additionalProperties": false, + "properties": { + "$otSharedSchema": { + "type": "string", + "description": "The path to a valid Opentrons shared schema relative to the shared-data directory, without its extension. For instance, #/pipette/schemas/2/pipetteGeometrySchema.json is a reference to this schema." + }, + "nozzleOffset": { "$ref": "#/definitions/xyzArray" }, + "pathTo3D": { + "description": "path to the gltf file representing the 3D pipette model", + "type": "string", + "pattern": "^pipette/definitions/[2]/([a-z]*_[a-z]*)+/p[0-9]{2,4}/[a-z]*[.]gltf" + } + } +} diff --git a/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json new file mode 100644 index 00000000000..dbd81794bdc --- /dev/null +++ b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json @@ -0,0 +1,100 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "positiveNumber": { + "type": "number", + "minimum": 0 + }, + "xyzArray": { + "type": "array", + "description": "Array of 3 numbers, [x, y, z]", + "items": { "type": "number" }, + "minItems": 3, + "maxItems": 3 + }, + "liquidHandlingSpecs": { + "description": "Object containing linear equations for translating between uL of liquid and mm of plunger travel. There is one linear equation for aspiration and one for dispense", + "type": "object", + "required": ["aspirate", "dispense"], + "additionalProperties": false, + "properties": { + "aspirate": { "$ref": "#/definitions/xyzArray" }, + "dispense": { "$ref": "#/definitions/xyzArray" } + } + }, + "flowRate": { + "type": "object", + "required": ["value", "min", "max"], + "properties": { + "value": { + "$ref": "#/definitions/positiveNumber", + "$comment": "This key is deprecated in favor of valuesByApiLevel" + }, + "min": { "$ref": "#/definitions/positiveNumber" }, + "max": { "$ref": "#/definitions/positiveNumber" } + } + } + }, + "type": "object", + "required": [ + "$otSharedSchema", + "maxVolume", + "minVolume", + "defaultTipracks", + "supportedTips" + ], + "additionalProperties": false, + "properties": { + "$otSharedSchema": { + "type": "string", + "description": "The path to a valid Opentrons shared schema relative to the shared-data directory, without its extension. For instance, #/pipette/schemas/2/pipetteLiquidPropertiesSchema.json is a reference to this schema." + }, + "supportedTips": { + "type": "object", + "description": "A container of supported tip types", + "properties": { + "patternProperties": { + "description": "Tip specific liquid handling properties for a given pipette. Using the active tip on a pipette, we will look up the pipetting configurations associated with that tip+pipette combo.", + "type": "object", + "$comment": "Example key: 't50'", + "^t[0-9]{2,4}": { + "required": [ + "defaultAspirateFlowRate", + "defaultDispenseFlowRate", + "defaultBlowOutFlowRate", + "aspirate", + "dispense" + ], + "properties": { + "defaultAspirateFlowRate": { + "$ref": "#/definitions/flowRate" + }, + "defaultDispenseFlowRate": { + "$ref": "#/definitions/flowRate" + }, + "defaultBlowOutFlowRate": { + "$ref": "#/definitions/flowRate" + }, + "aspirate": { + "type": "array", + "items": { "$ref": "#/definitions/liquidHandlingSpecs" } + }, + "dispense": { + "type": "array", + "items": { "$ref": "#/definitions/liquidHandlingSpecs" } + } + } + } + } + } + }, + "maxVolume": { "$ref": "#/definitions/positiveNumber" }, + "minVolume": { "$ref": "#/definitions/positiveNumber" }, + "defaultTipracks": { + "type": "array", + "items": { + "type": "string" + } + } + } +} diff --git a/shared-data/pipette/schemas/2/pipettePropertiesSchema.json b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json new file mode 100644 index 00000000000..2cb2cb4cd89 --- /dev/null +++ b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json @@ -0,0 +1,178 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "opentronsPipetteGeometrySchemaV2", + "definitions": { + "channels": { + "enum": [1, 8, 96, 384] + }, + "displayCategory": { + "type": "string", + "enum": ["GEN1"] + }, + "positiveNumber": { + "type": "number", + "minimum": 0 + }, + "currentRange": { + "type": "number", + "minimum": 0.01, + "maximum": 2.5 + }, + "xyzArray": { + "type": "array", + "description": "Array of 3 numbers, [x, y, z]", + "items": { "type": "number" }, + "minItems": 3, + "maxItems": 3 + }, + "linearEquations": { + "description": "Array containing any number of 3-arrays. Each inner 3-array describes a line segment: [boundary, slope, intercept]. So [1, 2, 3] would mean 'where (next_boundary > x >= 1), y = 2x + 3'", + "type": "array", + "items": { + "type": "array", + "items": { "type": "number" }, + "minItems": 3, + "maxItems": 3 + } + }, + "liquidHandlingSpecs": { + "description": "Object containing linear equations for translating between uL of liquid and mm of plunger travel. There is one linear equation for aspiration and one for dispense", + "type": "object", + "required": ["aspirate", "dispense"], + "additionalProperties": false, + "properties": { + "aspirate": { "$ref": "#/definitions/linearEquations" }, + "dispense": { "$ref": "#/definitions/linearEquations" } + } + }, + "editConfigurations": { + "type": "object", + "description": "Object allowing you to modify a config", + "required": ["value"], + "properties": { + "value": { "type": ["number", "array"] }, + "min": { "type": "number" }, + "max": { "type": "number" }, + "units": { "type": "string" }, + "type": { "type": "string" }, + "displayName": { "type": "string" } + } + }, + "tipConfigurations": { + "type": "object", + "description": "Object containing configurations specific to tip handling", + "required": ["current", "speed"], + "properties": { + "current": { "$ref": "#/definitions/currentRange" }, + "presses": {}, + "speed": { "$ref": "#/definitions/editConfigurations" }, + "increment": {}, + "distance": {} + } + } + }, + "description": "Version-level pipette specifications, which may vary across different versions of the same pipette", + "type": "object", + "required": [ + "$otSharedSchema", + "pickUpTipConfigurations", + "dropTipConfigurations", + "partialTipConfigurations", + "plungerPositionsConfigurations", + "plungerMotorConfigurations", + "displayCategory", + "channels", + "model", + "displayName" + ], + "properties": { + "additionalProperties": false, + "$otSharedSchema": { + "type": "string", + "description": "The path to a valid Opentrons shared schema relative to the shared-data directory, without its extension. For instance, #/pipette/schemas/2/pipettePropertiesSchema.json is a reference to this schema." + }, + "channels": { "$ref": "#/definitions/channels" }, + "partialTipConfigurations": { + "type": "object", + "description": "Object containing information on partial tip configurations", + "required": ["partialTipSupported"], + "properties": { + "partialTipSupported": { "type": "boolean" }, + "availableConfigurations": { + "type": "array", + "description": "Array of available configurations", + "items": { + "type": "number", + "enum": [1, 2, 3, 4, 5, 6, 7, 8, 12, 96, 384] + } + } + } + }, + "availableSensors": { + "type": "object", + "description": "object with keyed by sensor and number available", + "required": ["sensors"], + "properties": { + "sensors": { + "type": "array", + "description": "Array of available sensor types", + "items": { + "type": "string" + } + }, + "patternProperties": { + "description": "The count of each sensor type available on a given pipette model.", + "type": "object", + ".*": { + "required": ["count"], + "count": { "type": "integer" } + } + } + } + }, + "plungerPositionsConfigurations": { + "type": "object", + "description": "Object containing configurations specific to tip handling", + "required": ["top", "bottom", "blowout", "drop"], + "properties": { + "top": { "$ref": "#/definitions/currentRange" }, + "bottom": {}, + "blowout": { "$ref": "#/definitions/editConfigurations" }, + "drop": {} + } + }, + "plungerMotorConfigurations": { + "type": "object", + "description": "Object containing configurations specific to the plunger motor", + "required": ["idle", "run"], + "properties": { + "idle": { "$ref": "#/definitions/currentRange" }, + "run": { "$ref": "#/definitions/currentRange" } + } + }, + "gearMotorConfigurations": { + "type": "object", + "description": "Object containing configurations specific to the clamp motors, if applicable", + "required": ["idle", "run"], + "properties": { + "idle": { "$ref": "#/definitions/currentRange" }, + "run": { "$ref": "#/definitions/currentRange" } + } + }, + "pickUpTipConfigurations": { + "$ref": "#/definitions/tipConfigurations" + }, + "dropTipConfigurations": { + "$ref": "#/definitions/tipConfigurations" + }, + "displayName": { + "type": "string", + "description": "Display name of the pipette include model and generation number in readable format." + }, + "model": { + "type": "string", + "description": "the model of the pipette, for example an eightChannel pipette" + }, + "displayCategory": { "$ref": "#/definitions/displayCategory" } + } +} diff --git a/shared-data/python/opentrons_shared_data/pipette/__init__.py b/shared-data/python/opentrons_shared_data/pipette/__init__.py index 685f479d86f..86ff39a57b9 100644 --- a/shared-data/python/opentrons_shared_data/pipette/__init__.py +++ b/shared-data/python/opentrons_shared_data/pipette/__init__.py @@ -28,7 +28,7 @@ def model_config() -> PipetteModelSpecs: @lru_cache(maxsize=None) def _model_config() -> PipetteModelSpecs: return json.loads( - load_shared_data("pipette/definitions/pipetteModelSpecs.json") or "{}" + load_shared_data("pipette/definitions/1/pipetteModelSpecs.json") or "{}" ) @@ -40,7 +40,7 @@ def name_config() -> PipetteNameSpecs: @lru_cache(maxsize=None) def _name_config() -> PipetteNameSpecs: return json.loads( - load_shared_data("pipette/definitions/pipetteNameSpecs.json") or "{}" + load_shared_data("pipette/definitions/1/pipetteNameSpecs.json") or "{}" )