From de6adb52ded6bf83f5f79a1c6aca286370acb120 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Wed, 8 Nov 2023 17:11:27 -0500 Subject: [PATCH] chore(shared-data): pipette: refactor pickup, drop These configs had a couple things to change: - pickup and drop actually represent configuration for two different actions: the press fit / plunger eject sequence that the low throughput pipettes do, and the cam action sequence that the high throughput pipettes do when handling a full rack. information was actually overloaded and lost: there was only room for one speed for both separate actions. By separating the configs for each action, we get that information back - fold in the per tip current information into the pickup config so it looks a bit more natural and also can be distributed between the action kinds --- .../js/__tests__/pipetteSchemaV2.test.ts | 3 +- .../2/general/eight_channel/p10/1_0.json | 41 ++--- .../2/general/eight_channel/p10/1_3.json | 41 ++--- .../2/general/eight_channel/p10/1_4.json | 41 ++--- .../2/general/eight_channel/p10/1_5.json | 41 ++--- .../2/general/eight_channel/p10/1_6.json | 41 ++--- .../2/general/eight_channel/p1000/1_0.json | 38 +++-- .../2/general/eight_channel/p1000/3_0.json | 38 +++-- .../2/general/eight_channel/p1000/3_3.json | 38 +++-- .../2/general/eight_channel/p1000/3_4.json | 38 +++-- .../2/general/eight_channel/p1000/3_5.json | 38 +++-- .../2/general/eight_channel/p20/2_0.json | 41 ++--- .../2/general/eight_channel/p20/2_1.json | 41 ++--- .../2/general/eight_channel/p300/1_0.json | 41 ++--- .../2/general/eight_channel/p300/1_3.json | 41 ++--- .../2/general/eight_channel/p300/1_4.json | 41 ++--- .../2/general/eight_channel/p300/1_5.json | 41 ++--- .../2/general/eight_channel/p300/2_0.json | 41 ++--- .../2/general/eight_channel/p300/2_1.json | 41 ++--- .../2/general/eight_channel/p50/1_0.json | 41 ++--- .../2/general/eight_channel/p50/1_3.json | 41 ++--- .../2/general/eight_channel/p50/1_4.json | 41 ++--- .../2/general/eight_channel/p50/1_5.json | 41 ++--- .../2/general/eight_channel/p50/3_0.json | 38 +++-- .../2/general/eight_channel/p50/3_3.json | 38 +++-- .../2/general/eight_channel/p50/3_4.json | 38 +++-- .../2/general/eight_channel/p50/3_5.json | 38 +++-- .../general/ninety_six_channel/p1000/1_0.json | 70 ++++---- .../general/ninety_six_channel/p1000/3_0.json | 69 ++++---- .../general/ninety_six_channel/p1000/3_3.json | 70 ++++---- .../general/ninety_six_channel/p1000/3_4.json | 72 +++++---- .../general/ninety_six_channel/p1000/3_5.json | 70 ++++---- .../2/general/single_channel/p10/1_0.json | 27 ++-- .../2/general/single_channel/p10/1_3.json | 27 ++-- .../2/general/single_channel/p10/1_4.json | 27 ++-- .../2/general/single_channel/p10/1_5.json | 27 ++-- .../2/general/single_channel/p1000/1_0.json | 27 ++-- .../2/general/single_channel/p1000/1_3.json | 27 ++-- .../2/general/single_channel/p1000/1_4.json | 27 ++-- .../2/general/single_channel/p1000/1_5.json | 27 ++-- .../2/general/single_channel/p1000/2_0.json | 27 ++-- .../2/general/single_channel/p1000/2_1.json | 27 ++-- .../2/general/single_channel/p1000/2_2.json | 27 ++-- .../2/general/single_channel/p1000/3_0.json | 23 +-- .../2/general/single_channel/p1000/3_3.json | 23 +-- .../2/general/single_channel/p1000/3_4.json | 23 +-- .../2/general/single_channel/p1000/3_5.json | 23 +-- .../2/general/single_channel/p20/2_0.json | 27 ++-- .../2/general/single_channel/p20/2_1.json | 27 ++-- .../2/general/single_channel/p20/2_2.json | 27 ++-- .../2/general/single_channel/p300/1_0.json | 27 ++-- .../2/general/single_channel/p300/1_3.json | 27 ++-- .../2/general/single_channel/p300/1_4.json | 27 ++-- .../2/general/single_channel/p300/1_5.json | 27 ++-- .../2/general/single_channel/p300/2_0.json | 27 ++-- .../2/general/single_channel/p300/2_1.json | 27 ++-- .../2/general/single_channel/p50/1_0.json | 27 ++-- .../2/general/single_channel/p50/1_3.json | 27 ++-- .../2/general/single_channel/p50/1_4.json | 27 ++-- .../2/general/single_channel/p50/1_5.json | 27 ++-- .../2/general/single_channel/p50/3_0.json | 23 +-- .../2/general/single_channel/p50/3_3.json | 23 +-- .../2/general/single_channel/p50/3_4.json | 23 +-- .../2/general/single_channel/p50/3_5.json | 23 +-- .../schemas/2/pipettePropertiesSchema.json | 151 +++++++++++++----- .../pipette/load_data.py | 75 +++++---- .../pipette/model_constants.py | 76 +++------ .../pipette/mutable_configurations.py | 107 ++++++++----- .../pipette/pipette_definition.py | 91 ++++++++--- .../pipette/scripts/build_json_script.py | 60 ++++--- .../python/tests/pipette/test_load_data.py | 1 + .../pipette/test_mutable_configurations.py | 2 +- 72 files changed, 1564 insertions(+), 1224 deletions(-) diff --git a/shared-data/js/__tests__/pipetteSchemaV2.test.ts b/shared-data/js/__tests__/pipetteSchemaV2.test.ts index 66845b9cab64..1dce5ef754bd 100644 --- a/shared-data/js/__tests__/pipetteSchemaV2.test.ts +++ b/shared-data/js/__tests__/pipetteSchemaV2.test.ts @@ -90,9 +90,8 @@ describe('test schema against all general specs definitions', () => { expect(generalPaths.length).toBeGreaterThan(0) generalPaths.forEach(generalPath => { - const generalDef = require(generalPath) - it(`${generalPath} validates against schema`, () => { + const generalDef = require(generalPath) const valid = validateGeneralSpecs(generalDef) const validationErrors = validateGeneralSpecs.errors expect(validationErrors).toBe(null) diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json index a3a7a9a8fc44..65cf936d4d9c 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_0.json @@ -4,17 +4,28 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json index 3f6700dc816c..1743c38cf7a1 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_3.json @@ -4,17 +4,28 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json index f183e7aab87a..9116964e96c1 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_4.json @@ -4,17 +4,28 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.1, + "3": 0.15, + "4": 0.2, + "5": 0.25, + "6": 0.3, + "7": 0.35, + "8": 0.4 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.1, - "3": 0.15, - "4": 0.2, - "5": 0.25, - "6": 0.3, - "7": 0.35, - "8": 0.4 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json index ef35a1587c8d..6b2aeb1ae97c 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_5.json @@ -4,17 +4,28 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 3.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 3.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json index ef35a1587c8d..6b2aeb1ae97c 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p10/1_6.json @@ -4,17 +4,28 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 3.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 3.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json index 1d17191c93f4..7e70e0fe55c1 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/1_0.json @@ -4,14 +4,28 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,17 +53,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json index 8bd59075ccc2..1e5c91cf4ea3 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_0.json @@ -4,14 +4,28 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,17 +53,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json index 8bd59075ccc2..1e5c91cf4ea3 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_3.json @@ -4,14 +4,28 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,17 +53,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json index 862266f22fe7..22e92b2778e9 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_4.json @@ -4,14 +4,28 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,17 +53,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.2, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json index 862266f22fe7..22e92b2778e9 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p1000/3_5.json @@ -4,14 +4,28 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2, + "2": 0.14, + "3": 0.21, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,17 +53,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.2, - "2": 0.14, - "3": 0.21, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json index 9530ac8428cd..0ce6fc94b5d4 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_0.json @@ -4,17 +4,28 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 11.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 11.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.28, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 15.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 15.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.28, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json index 9530ac8428cd..0ce6fc94b5d4 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p20/2_1.json @@ -4,17 +4,28 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 11.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 11.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.28, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 15.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 15.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.28, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json index 0d1ed8808ccc..3aa262d8183e 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_0.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json index 602bf5df703f..d3e33f21240d 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_3.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json index 602bf5df703f..d3e33f21240d 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_4.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json index 972cc766d78f..d446f36a3da6 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/1_5.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 3.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 3.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.23, + "3": 0.34, + "4": 0.45, + "5": 0.56, + "6": 0.68, + "7": 0.79, + "8": 0.9 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.23, - "3": 0.34, - "4": 0.45, - "5": 0.56, - "6": 0.68, - "7": 0.79, - "8": 0.9 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json index 412f0b9c90d6..d472992ee207 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_0.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 11.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 11.0, + "currentByTipCount": { + "1": 0.13, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.5, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.5 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.13, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json index 412f0b9c90d6..d472992ee207 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p300/2_1.json @@ -4,17 +4,28 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 11.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 11.0, + "currentByTipCount": { + "1": 0.13, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.5, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.5 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.13, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json index 489a8a971915..8c1e7f075184 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_0.json @@ -4,17 +4,28 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json index 2931fbd03517..5e51c1d028ef 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_3.json @@ -4,17 +4,28 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json index d05487517e8f..13113a38d786 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_4.json @@ -4,17 +4,28 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.15, + "3": 0.23, + "4": 0.3, + "5": 0.38, + "6": 0.45, + "7": 0.53, + "8": 0.6 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.15, - "3": 0.23, - "4": 0.3, - "5": 0.38, - "6": 0.45, - "7": 0.53, - "8": 0.6 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json index 6204217a21fb..4f3c49b88cd9 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/1_5.json @@ -4,17 +4,28 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 3.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 3.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1, + "2": 0.2, + "3": 0.3, + "4": 0.4, + "5": 0.5, + "6": 0.6, + "7": 0.7, + "8": 0.8 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,17 +44,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.1, - "2": 0.2, - "3": 0.3, - "4": 0.4, - "5": 0.5, - "6": 0.6, - "7": 0.7, - "8": 0.8 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "channels": 8, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json index 4ea113546b38..d8c8ee6907bb 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_0.json @@ -4,14 +4,28 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,17 +59,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json index 4ea113546b38..d8c8ee6907bb 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_3.json @@ -4,14 +4,28 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15, + "2": 0.13, + "3": 0.19, + "4": 0.25, + "5": 0.31, + "6": 0.38, + "7": 0.44, + "8": 0.5 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,17 +59,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.15, - "2": 0.13, - "3": 0.19, - "4": 0.25, - "5": 0.31, - "6": 0.38, - "7": 0.44, - "8": 0.5 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json index cffcc3d65e9b..d105ce792183 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_4.json @@ -4,14 +4,28 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2, + "2": 0.14, + "3": 0.2, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,17 +59,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.2, - "2": 0.14, - "3": 0.2, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json index cffcc3d65e9b..d105ce792183 100644 --- a/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json +++ b/shared-data/pipette/definitions/2/general/eight_channel/p50/3_5.json @@ -4,14 +4,28 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2, + "2": 0.14, + "3": 0.2, + "4": 0.28, + "5": 0.34, + "6": 0.41, + "7": 0.48, + "8": 0.55 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,17 +59,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8], - "perTipPickupCurrent": { - "1": 0.2, - "2": 0.14, - "3": 0.2, - "4": 0.28, - "5": 0.34, - "6": 0.41, - "7": 0.48, - "8": 0.55 - } + "availableConfigurations": [1, 2, 3, 4, 5, 6, 7, 8] }, "backCompatNames": [], "channels": 8, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json index 2fa4e3e803ac..6efc652d21c4 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json @@ -4,19 +4,50 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 0.0, - "speed": 5.5, - "increment": 0.0, - "distance": 10.0, - "prep_move_distance": 9.0, - "prep_move_speed": 10.0 + "pressFit": { + "presses": 0.0, + + "increment": 0.0, + "speed": 5.5, + "distance": 10.0, + "currentByTipCount": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75 + } + }, + "camAction": { + "prep_move_distance": 9.0, + "prep_move_speed": 10.0, + "speed": 5.5, + "distance": 10.0, + "currentByTipCount": { + "96": 1.5 + } + } }, "dropTipConfigurations": { - "current": 1.5, - "speed": 5.5, - "distance": 26.5, - "prep_move_distance": 16.0, - "prep_move_speed": 10.5 + "plungerEject": { + "current": 1.5, + "speed": 5.5, + "distance": 26.5 + }, + "camAction": { + "current": 1.5, + "speed": 5.5, + "distance": 26.5, + "prep_move_distance": 16.0, + "prep_move_speed": 10.5 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -44,22 +75,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96], - "perTipPickupCurrent": { - "1": 0.02, - "2": 0.03, - "3": 0.05, - "4": 0.06, - "5": 0.08, - "6": 0.09, - "7": 0.11, - "8": 0.13, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75, - "96": 1.5 - } + "availableConfigurations": [1, 8, 12, 96] }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json index bef06d53c031..20dcf4c75402 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json @@ -4,19 +4,49 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 0.0, - "speed": 5.5, - "increment": 0.0, - "distance": 10.0, - "prep_move_distance": 9.0, - "prep_move_speed": 10.0 + "pressFit": { + "presses": 0.0, + "increment": 0.0, + "speed": 5.5, + "distance": 10.0, + "currentByTipCount": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75 + } + }, + "camAction": { + "speed": 5.5, + "distance": 10.0, + "prep_move_distance": 9.0, + "prep_move_speed": 10.0, + "currentByTipCount": { + "96": 1.5 + } + } }, "dropTipConfigurations": { - "current": 1.5, - "speed": 5.5, - "distance": 10.5, - "prep_move_distance": 16.0, - "prep_move_speed": 10.0 + "plungerEject": { + "current": 1.5, + "speed": 5.5, + "distance": 10.5 + }, + "camAction": { + "current": 1.5, + "speed": 5.5, + "distance": 10.5, + "prep_move_distance": 16.0, + "prep_move_speed": 10.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -44,22 +74,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96], - "perTipPickupCurrent": { - "1": 0.02, - "2": 0.03, - "3": 0.05, - "4": 0.06, - "5": 0.08, - "6": 0.09, - "7": 0.11, - "8": 0.13, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75, - "96": 1.5 - } + "availableConfigurations": [1, 8, 12, 96] }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json index bef06d53c031..929ae1d1afdf 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json @@ -4,19 +4,50 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 0.0, - "speed": 5.5, - "increment": 0.0, - "distance": 10.0, - "prep_move_distance": 9.0, - "prep_move_speed": 10.0 + "pressFit": { + "presses": 0.0, + "increment": 0.0, + + "speed": 5.5, + "distance": 10.0, + "currentByTipCount": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75 + } + }, + "camAction": { + "speed": 5.5, + "distance": 10.0, + "prep_move_distance": 9.0, + "prep_move_speed": 10.0, + "currentByTipCount": { + "96": 1.5 + } + } }, "dropTipConfigurations": { - "current": 1.5, - "speed": 5.5, - "distance": 10.5, - "prep_move_distance": 16.0, - "prep_move_speed": 10.0 + "plungerEject": { + "current": 1.5, + "speed": 5.5, + "distance": 10.5 + }, + "camAction": { + "current": 1.5, + "speed": 5.5, + "distance": 10.5, + "prep_move_distance": 16.0, + "prep_move_speed": 10.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -44,22 +75,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96], - "perTipPickupCurrent": { - "1": 0.02, - "2": 0.03, - "3": 0.05, - "4": 0.06, - "5": 0.08, - "6": 0.09, - "7": 0.11, - "8": 0.13, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75, - "96": 1.5 - } + "availableConfigurations": [1, 8, 12, 96] }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json index 4d7eaff5487d..d251c3bdba83 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json @@ -4,19 +4,52 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 0.0, - "speed": 5.5, - "increment": 0.0, - "distance": 10.0, - "prep_move_distance": 9.0, - "prep_move_speed": 10.0 + "pressFit": { + "presses": 0.0, + "increment": 0.0, + + "speed": 5.5, + "distance": 10.0, + "prep_move_distance": 9.0, + "prep_move_speed": 10.0, + "currentByTipCount": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75 + } + }, + "camAction": { + "speed": 5.5, + "distance": 10.0, + "prep_move_distance": 9.0, + "prep_move_speed": 10.0, + "currentByTipCount": { + "96": 1.5 + } + } }, "dropTipConfigurations": { - "current": 1.5, - "speed": 5.5, - "distance": 10.8, - "prep_move_distance": 19.0, - "prep_move_speed": 10.0 + "plungerEject": { + "current": 1.5, + "speed": 5.5, + "distance": 10.8 + }, + "camAction": { + "current": 1.5, + "speed": 5.5, + "distance": 10.8, + "prep_move_distance": 19.0, + "prep_move_speed": 10.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -44,22 +77,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 96], - "perTipPickupCurrent": { - "1": 0.02, - "2": 0.03, - "3": 0.05, - "4": 0.06, - "5": 0.08, - "6": 0.09, - "7": 0.11, - "8": 0.13, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75, - "96": 1.5 - } + "availableConfigurations": [1, 8, 12, 96] }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json index 2494dfecccaf..d0a634f7943f 100644 --- a/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json @@ -4,19 +4,50 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 0.0, - "speed": 5.5, - "increment": 0.0, - "distance": 10.0, - "prep_move_distance": 8.25, - "prep_move_speed": 10.0 + "pressFit": { + "presses": 0.0, + "increment": 0.0, + + "speed": 5.5, + "distance": 10.0, + "currentByTipCount": { + "1": 0.02, + "2": 0.03, + "3": 0.05, + "4": 0.06, + "5": 0.08, + "6": 0.09, + "7": 0.11, + "8": 0.13, + "12": 0.19, + "16": 0.25, + "24": 0.38, + "48": 0.75 + } + }, + "camAction": { + "speed": 5.5, + "distance": 10.0, + "prep_move_distance": 8.25, + "prep_move_speed": 10.0, + "currentByTipCount": { + "96": 1.5 + } + } }, "dropTipConfigurations": { - "current": 1.5, - "speed": 5.5, - "distance": 10.8, - "prep_move_distance": 19.0, - "prep_move_speed": 10.0 + "plungerEject": { + "current": 1.5, + "speed": 5.5, + "distance": 10.8 + }, + "camAction": { + "current": 1.5, + "speed": 5.5, + "distance": 10.8, + "prep_move_distance": 19.0, + "prep_move_speed": 10.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -44,22 +75,7 @@ }, "partialTipConfigurations": { "partialTipSupported": true, - "availableConfigurations": [1, 8, 12, 16, 24, 48, 96], - "perTipPickupCurrent": { - "1": 0.02, - "2": 0.03, - "3": 0.05, - "4": 0.06, - "5": 0.08, - "6": 0.09, - "7": 0.11, - "8": 0.13, - "12": 0.19, - "16": 0.25, - "24": 0.38, - "48": 0.75, - "96": 1.5 - } + "availableConfigurations": [1, 8, 12, 16, 24, 48, 96] }, "backCompatNames": [], "channels": 96, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json index 1d66d202d5fb..1986fdf7851d 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_0.json @@ -4,17 +4,21 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json index 93bc4d1e0a23..7dd810981398 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_3.json @@ -4,17 +4,21 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json index 44fba8ac9817..99a24ada243a 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_4.json @@ -4,17 +4,21 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json index 44fba8ac9817..99a24ada243a 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p10/1_5.json @@ -4,17 +4,21 @@ "model": "p10", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json index e2145b886968..f784b5ce8a4f 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_0.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 15.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 15.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json index 2cfca4bd6847..0bc376c06fdf 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_3.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 15.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 15.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.7, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.7, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json index 2cfca4bd6847..0bc376c06fdf 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_4.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 15.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 15.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.7, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.7, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json index 4199255baf53..6daf7c7cccbf 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/1_5.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 15.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 15.0, + "currentByTipCount": { + "1": 0.15 + } + } }, "dropTipConfigurations": { - "current": 0.7, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.7, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.15 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 9.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json index 90dca46ec79c..7d13d3559c89 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_0.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 17.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 17.0, + "currentByTipCount": { + "1": 0.17 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.17 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json index 9ecf3e0909bb..5e997d6b999e 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_1.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 17.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 17.0, + "currentByTipCount": { + "1": 0.17 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.17 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json index 9ecf3e0909bb..5e997d6b999e 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/2_2.json @@ -4,17 +4,21 @@ "model": "p1000", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 17.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 17.0, + "currentByTipCount": { + "1": 0.17 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.17 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 6.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json index 3475cb66bd42..95e7e26dc3f4 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_0.json @@ -4,14 +4,21 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 5, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 5, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,9 +46,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.15 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json index 3475cb66bd42..95e7e26dc3f4 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_3.json @@ -4,14 +4,21 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 5, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 5, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,9 +46,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.15 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json index 1298625e578f..f44356b4da35 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_4.json @@ -4,14 +4,21 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15 + "plungerEject": { + "current": 1.0, + "speed": 15 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,9 +46,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.2 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json index 1298625e578f..f44356b4da35 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p1000/3_5.json @@ -4,14 +4,21 @@ "model": "p1000", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15 + "plungerEject": { + "current": 1.0, + "speed": 15 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -39,9 +46,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.2 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json index 1b5a8b392aef..77c6c0c77a66 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_0.json @@ -4,17 +4,21 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 14.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 14.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.0, + "speed": 15.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json index fd041576730b..473935eb2c77 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_1.json @@ -4,17 +4,21 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 14.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 14.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.0, + "speed": 15.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json b/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json index fd041576730b..473935eb2c77 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p20/2_2.json @@ -4,17 +4,21 @@ "model": "p20", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 14.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 14.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.0, + "speed": 15.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 1.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json index ebd868f0a03f..a198b6c06413 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_0.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json index 426e391d0122..2b89d812b1be 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_3.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json index 6d469c910bac..94661a42759d 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_4.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json index 6d469c910bac..94661a42759d 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/1_5.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 5.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json b/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json index d5aea0fa6cf4..0963f5fcf03e 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/2_0.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 17.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 17.0, + "currentByTipCount": { + "1": 0.125 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.125 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json b/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json index d8c366346556..08e422c9b352 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p300/2_1.json @@ -4,17 +4,21 @@ "model": "p300", "displayCategory": "GEN2", "pickUpTipConfigurations": { - "speed": 10.0, - "presses": 1, - "increment": 0.0, - "distance": 17.0 + "pressFit": { + "speed": 10.0, + "presses": 1, + "increment": 0.0, + "distance": 17.0, + "currentByTipCount": { + "1": 0.125 + } + } }, "dropTipConfigurations": { - "current": 1.25, - "speed": 7.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 1.25, + "speed": 7.0 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.125 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 3.5, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json index f07934753bb8..288c11839c79 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_0.json @@ -4,17 +4,21 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json index 01bce6c8c908..ed184ac944fc 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_3.json @@ -4,17 +4,21 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json index a205e79cbc86..450ce1789591 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_4.json @@ -4,17 +4,21 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json b/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json index a205e79cbc86..450ce1789591 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/1_5.json @@ -4,17 +4,21 @@ "model": "p50", "displayCategory": "GEN1", "pickUpTipConfigurations": { - "speed": 30.0, - "presses": 3, - "increment": 1.0, - "distance": 10.0 + "pressFit": { + "speed": 30.0, + "presses": 3, + "increment": 1.0, + "distance": 10.0, + "currentByTipCount": { + "1": 0.1 + } + } }, "dropTipConfigurations": { - "current": 0.5, - "speed": 5.0, - "presses": 0, - "increment": 0.0, - "distance": 0.0 + "plungerEject": { + "current": 0.5, + "speed": 5.0 + } }, "plungerMotorConfigurations": { "idle": 0.05, @@ -33,10 +37,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "availableConfigurations": null, - "perTipPickupCurrent": { - "1": 0.1 - } + "availableConfigurations": null }, "channels": 1, "shaftDiameter": 2.0, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json index 04aaedc093ab..6b7630b256e5 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_0.json @@ -4,14 +4,21 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 5, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 5, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,9 +52,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.15 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json index 04aaedc093ab..6b7630b256e5 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_3.json @@ -4,14 +4,21 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 5, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 5, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.15 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 10 + "plungerEject": { + "current": 1.0, + "speed": 10 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,9 +52,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.15 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json index b46c3773f3c3..c4bfd9b06eec 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_4.json @@ -4,14 +4,21 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15 + "plungerEject": { + "current": 1.0, + "speed": 15 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,9 +52,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.2 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json b/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json index b46c3773f3c3..c4bfd9b06eec 100644 --- a/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json +++ b/shared-data/pipette/definitions/2/general/single_channel/p50/3_5.json @@ -4,14 +4,21 @@ "model": "p50", "displayCategory": "FLEX", "pickUpTipConfigurations": { - "presses": 1, - "speed": 10, - "increment": 0.0, - "distance": 13.0 + "pressFit": { + "presses": 1, + "speed": 10, + "increment": 0.0, + "distance": 13.0, + "currentByTipCount": { + "1": 0.2 + } + } }, "dropTipConfigurations": { - "current": 1.0, - "speed": 15 + "plungerEject": { + "current": 1.0, + "speed": 15 + } }, "plungerMotorConfigurations": { "idle": 0.3, @@ -45,9 +52,7 @@ }, "partialTipConfigurations": { "partialTipSupported": false, - "perTipPickupCurrent": { - "1": 0.2 - } + "availableConfigurations": null }, "backCompatNames": [], "channels": 1, diff --git a/shared-data/pipette/schemas/2/pipettePropertiesSchema.json b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json index d2b2a7c78fa5..0c37218453ad 100644 --- a/shared-data/pipette/schemas/2/pipettePropertiesSchema.json +++ b/shared-data/pipette/schemas/2/pipettePropertiesSchema.json @@ -30,6 +30,16 @@ "type": { "type": "string" }, "displayName": { "type": "string" } } + }, + "partialTipCount": { + "type": "number", + "enum": [1, 2, 3, 4, 5, 6, 7, 8, 12, 96, 384] + }, + "currentByTipCount": { + "type": "object", + "patternProperties": { + "\\d+": { "$ref": "#/definitions/currentRange" } + } } }, "description": "Version-level pipette specifications, which may vary across different versions of the same pipette", @@ -66,38 +76,24 @@ "channels": { "$ref": "#/definitions/channels" }, "partialTipConfigurations": { "description": "Object containing information on partial tip configurations", - "$oneof": [ + "oneof": [ { "type": "object", "required": ["partialTipSupported"], "properties": { - "partialTipSupported": { "type": "boolean", "value": true } + "partialTipSupported": { "const": false }, + "availableConfigurations": null } }, { "type": "object", - "required": [ - "partialTipSupported", - "availableConfigurations", - "perTipPickupCurrent" - ], + "required": ["partialTipSupported", "availableConfigurations"], "properties": { - "partialTipSupported": { "type": "boolean", "value": false }, + "partialTipSupported": { "const": true }, "availableConfigurations": { "type": "array", "description": "Array of available configurations", - "items": { - "type": "number", - "enum": [1, 2, 3, 4, 5, 6, 7, 8, 12, 96, 384] - }, - "perTipPickupCurrent": { - "type": "object", - "patternProperties": { - "\\d+": { - "$ref": "#/definitions/positiveNumber" - } - } - } + "items": { "$ref": "#/definitions/partialTipCount" } } } } @@ -162,27 +158,110 @@ } }, "pickUpTipConfigurations": { - "type": "object", "description": "Object containing configurations for picking up tips common to all partial configurations", - "required": ["speed"], - "properties": { - "presses": { "$ref": "#/definitions/positiveNumber" }, - "speed": { "$ref": "#/definitions/positiveNumber" }, - "increment": { "$ref": "#/definitions/positiveNumber" }, - "distance": { "$ref": "#/definitions/positiveNumber" } - } + "anyOf": [ + { + "type": "object", + "required": ["pressFit"], + "properties": { + "pressFit": { + "type": "object", + "required": [ + "presses", + "speed", + "increment", + "distance", + "currentByTipCount" + ], + "additionalProperties": false, + "properties": { + "presses": { "$ref": "#/definitions/positiveNumber" }, + "speed": { "$ref": "#/definitions/positiveNumber" }, + "increment": { "$ref": "#/definitions/positiveNumber" }, + "distance": { "$ref": "#/definitions/positiveNumber" }, + "currentByTipCount": { + "$ref": "#/definitions/currentByTipCount" + } + } + } + } + }, + { + "type": "object", + "required": ["camAction"], + "properties": { + "camAction": { + "type": "object", + "required": [ + "prep_move_distance", + "prep_move_speed", + "speed", + "distance", + "currentByTipCount" + ], + "additionalProperties": false, + "properties": { + "prep_move_distance": { + "$ref": "#/definitions/positiveNumber" + }, + "prep_move_speed": { "$ref": "#/definitions/positiveNumber" }, + "speed": { "$ref": "#/definitions/positiveNumber" }, + "distance": { "$ref": "#/definitions/positiveNumber" }, + "currentByTipCount": { + "$ref": "#/definitions/currentByTipCount" + } + } + } + } + } + ] }, "dropTipConfigurations": { "type": "object", "description": "Object containing configurations specific to dropping tips", - "required": ["current", "speed"], - "properties": { - "current": { "$ref": "#/definitions/currentRange" }, - "presses": {}, - "speed": { "$ref": "#/definitions/positiveNumber" }, - "increment": {}, - "distance": {} - } + "anyOf": [ + { + "type": "object", + "required": ["plungerEject"], + "properties": { + "plungerEject": { + "type": "object", + "required": ["current", "speed"], + "additionalProperties": false, + "properties": { + "current": { "$ref": "#/definitions/currentRange" }, + "speed": { "$ref": "#/definitions/positiveNumber" } + } + } + } + }, + { + "type": "object", + "required": ["camAction"], + "properties": { + "camAction": { + "type": "object", + "required": [ + "current", + "prep_move_distance", + "prep_move_speed", + "distance", + "speed" + ], + "additionalProperties": false, + "properties": { + "current": { "$ref": "#/definitions/currentRange" }, + "prep_move_distance": { + "$ref": "#/definitions/positiveNumber" + }, + "prep_move_speed": { "$ref": "#/definitions/positiveNumber" }, + "distance": { "$ref": "#/definitions/positiveNumber" }, + "speed": { "$ref": "#/definitions/positiveNumber" } + } + } + } + } + ] }, "displayName": { "type": "string", diff --git a/shared-data/python/opentrons_shared_data/pipette/load_data.py b/shared-data/python/opentrons_shared_data/pipette/load_data.py index abf5fa1c2b0c..4dc6b200574d 100644 --- a/shared-data/python/opentrons_shared_data/pipette/load_data.py +++ b/shared-data/python/opentrons_shared_data/pipette/load_data.py @@ -1,7 +1,7 @@ import json import os -from typing import Dict, Any, Union, Optional +from typing import Dict, Any, Union, Optional, List from typing_extensions import Literal from functools import lru_cache @@ -152,7 +152,41 @@ def _change_to_camel_case(c: str) -> str: return f"{config_name[0]}" + "".join(s.capitalize() for s in config_name[1::]) -def update_pipette_configuration( # noqa: C901 +def _edit_non_quirk_with_lc_override( + mutable_config_key: str, + new_mutable_value: Any, + base_dict: Dict[str, Any], + liquid_class: Optional[LiquidClasses], +) -> None: + def _do_edit_non_quirk( + new_value: Any, existing: Dict[Any, Any], keypath: List[Any] + ) -> None: + thiskey: Any = keypath[0] + if thiskey in [lc.name for lc in LiquidClasses]: + if liquid_class: + thiskey = liquid_class + else: + thiskey = LiquidClasses[thiskey] + if len(keypath) > 1: + restkeys = keypath[1:] + if thiskey == "##EACHTIP##": + for key in existing.keys(): + _do_edit_non_quirk(new_value, existing[key], restkeys) + else: + _do_edit_non_quirk(new_value, existing[thiskey], restkeys) + else: + # This was the last key + if thiskey == "##EACHTIP##": + for key in existing.keys(): + existing[key] = new_value + else: + existing[thiskey] = new_value + + new_names = _MAP_KEY_TO_V2[mutable_config_key] + _do_edit_non_quirk(new_mutable_value, base_dict, new_names) + + +def update_pipette_configuration( base_configurations: PipetteConfigurations, v1_configuration_changes: Dict[str, Any], liquid_class: Optional[LiquidClasses] = None, @@ -169,40 +203,11 @@ def update_pipette_configuration( # noqa: C901 lookup_key = _change_to_camel_case(c) if c == "quirks" and isinstance(v, dict): quirks_list.extend([b.name for b in v.values() if b.value]) - elif liquid_class: - if lookup_key == "tipLength": - new_names = _MAP_KEY_TO_V2[lookup_key] - top_name = new_names["top_level_name"] - nested_name = new_names["nested_name"] - # This is only a concern for OT-2 configs and I think we can - # be less smart about handling multiple tip types by updating - # all tips. - for k in dict_of_base_model["liquid_properties"][liquid_class][ - new_names["top_level_name"] - ].keys(): - dict_of_base_model["liquid_properties"][liquid_class][top_name][k][ - nested_name - ] = v - else: - dict_of_base_model["liquid_properties"][liquid_class].pop(lookup_key) - dict_of_base_model["liquid_properties"][liquid_class][lookup_key] = v else: - try: - dict_of_base_model.pop(lookup_key) - dict_of_base_model[lookup_key] = v - except KeyError: - # The name is not the same format as previous so - # we need to look it up from the V2 key map - new_names = _MAP_KEY_TO_V2[lookup_key] - top_name = new_names["top_level_name"] - nested_name = new_names["nested_name"] - if new_names.get("liquid_class"): - # isinstances are needed for type checking. - liquid_class = LiquidClasses[new_names["liquid_class"]] - dict_of_base_model[top_name][liquid_class][nested_name] = v - else: - # isinstances are needed for type checking. - dict_of_base_model[top_name][nested_name] = v + _edit_non_quirk_with_lc_override( + lookup_key, v, dict_of_base_model, liquid_class + ) + dict_of_base_model["quirks"] = list( set(dict_of_base_model["quirks"]) - set(quirks_list) ) diff --git a/shared-data/python/opentrons_shared_data/pipette/model_constants.py b/shared-data/python/opentrons_shared_data/pipette/model_constants.py index 00c577823d2b..ea79ecd1154a 100644 --- a/shared-data/python/opentrons_shared_data/pipette/model_constants.py +++ b/shared-data/python/opentrons_shared_data/pipette/model_constants.py @@ -1,4 +1,4 @@ -from typing import Dict, Union +from typing import Dict, Union, List from .types import ( Quirks, @@ -54,57 +54,29 @@ RESTRICTED_MUTABLE_CONFIG_KEYS = [*VALID_QUIRKS, "model"] -_MAP_KEY_TO_V2: Dict[str, Dict[str, str]] = { - "top": { - "top_level_name": "plungerPositionsConfigurations", - "nested_name": "top", - "liquid_class": "default", - }, - "bottom": { - "top_level_name": "plungerPositionsConfigurations", - "nested_name": "bottom", - "liquid_class": "default", - }, - "blowout": { - "top_level_name": "plungerPositionsConfigurations", - "nested_name": "blowout", - "liquid_class": "default", - }, - "dropTip": { - "top_level_name": "plungerPositionsConfigurations", - "nested_name": "drop", - "liquid_class": "default", - }, - "pickUpCurrent": { - "top_level_name": "partialTipConfigurations", - "nested_name": "perTipPickupCurrent", - }, - "pickUpDistance": { - "top_level_name": "pickUpTipConfigurations", - "nested_name": "distance", - }, - "pickUpIncrement": { - "top_level_name": "pickUpTipConfigurations", - "nested_name": "increment", - }, - "pickUpPresses": { - "top_level_name": "pickUpTipConfigurations", - "nested_name": "presses", - }, - "pickUpSpeed": { - "top_level_name": "pickUpTipConfigurations", - "nested_name": "speed", - }, - "plungerCurrent": { - "top_level_name": "plungerMotorConfigurations", - "nested_name": "run", - }, - "dropTipCurrent": { - "top_level_name": "dropTipConfigurations", - "nested_name": "current", - }, - "dropTipSpeed": {"top_level_name": "dropTipConfigurations", "nested_name": "speed"}, - "tipLength": {"top_level_name": "supportedTips", "nested_name": "defaultTipLength"}, + +_MAP_KEY_TO_V2: Dict[str, List[str]] = { + "top": ["plungerPositionsConfigurations", "default", "top"], + "bottom": ["plungerPositionsConfigurations", "default", "bottom"], + "blowout": ["plungerPositionsConfigurations", "default", "blowout"], + "dropTip": ["plungerPositionsConfigurations", "default", "drop"], + "pickUpCurrent": ["pickUpTipConfigurations", "pressFit", "currentByTipCount"], + "pickUpDistance": ["pickUpTipConfigurations", "pressFit", "distance"], + "pickUpIncrement": ["pickUpTipConfigurations", "pressFit", "increment"], + "pickUpPresses": ["pickUpTipConfigurations", "pressFit", "presses"], + "pickUpSpeed": ["pickUpTipConfigurations", "pressFit", "speed"], + "plungerCurrent": ["plungerMotorConfigurations", "run"], + "dropTipCurrent": ["dropTipConfigurations", "plungerEject", "current"], + "dropTipSpeed": ["dropTipConfigurations", "plungerEject", "speed"], + "maxVolume": ["liquid_properties", "default", "maxVolume"], + "minVolume": ["liquid_properties", "default", "minVolume"], + "tipLength": [ + "liquid_properties", + "default", + "supportedTips", + "##EACHTIP##", + "defaultTipLength", + ], } diff --git a/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py b/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py index 2475353e12b2..93d4b4c7d538 100644 --- a/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py +++ b/shared-data/python/opentrons_shared_data/pipette/mutable_configurations.py @@ -40,6 +40,34 @@ LIQUID_CLASS = LiquidClasses.default +def _edit_non_quirk( + mutable_config_key: str, new_mutable_value: MutableConfig, base_dict: Dict[str, Any] +) -> None: + def _do_edit_non_quirk( + new_value: MutableConfig, existing: Dict[Any, Any], keypath: List[Any] + ) -> None: + thiskey: Any = keypath[0] + if thiskey in [lc.name for lc in LiquidClasses]: + thiskey = LiquidClasses[thiskey] + if len(keypath) > 1: + restkeys = keypath[1:] + if thiskey == "##EACHTIP##": + for key in existing.keys(): + _do_edit_non_quirk(new_value, existing[key], restkeys) + else: + _do_edit_non_quirk(new_value, existing[thiskey], restkeys) + else: + # This was the last key + if thiskey == "##EACHTIP##": + for key in existing.keys(): + existing[key] = new_value.value + else: + existing[thiskey] = new_value.value + + new_names = _MAP_KEY_TO_V2[mutable_config_key] + _do_edit_non_quirk(new_mutable_value, base_dict, new_names) + + def _migrate_to_v2_configurations( base_configurations: PipetteConfigurations, v1_mutable_configs: OverrideType, @@ -59,26 +87,9 @@ def _migrate_to_v2_configurations( continue if c == "quirks" and isinstance(v, dict): quirks_list.extend([b.name for b in v.values() if b.value]) - else: - new_names = _MAP_KEY_TO_V2[c] - top_name = new_names["top_level_name"] - nested_name = new_names["nested_name"] - if c == "tipLength" and isinstance(v, MutableConfig): - # This is only a concern for OT-2 configs and I think we can - # be less smart about handling multiple tip types by updating - # all tips. - for k in dict_of_base_model["liquid_properties"][LIQUID_CLASS][ - new_names["top_level_name"] - ].keys(): - dict_of_base_model["liquid_properties"][LIQUID_CLASS][top_name][k][ - nested_name - ] = v - elif new_names.get("liquid_class") and isinstance(v, MutableConfig): - _class = LiquidClasses[new_names["liquid_class"]] - dict_of_base_model[top_name][_class][nested_name] = v.value - elif isinstance(v, MutableConfig): - # isinstances are needed for type checking. - dict_of_base_model[top_name][nested_name] = v.value + elif isinstance(v, MutableConfig): + _edit_non_quirk(c, v, dict_of_base_model) + dict_of_base_model["quirks"] = list( set(dict_of_base_model["quirks"]).union(set(quirks_list)) ) @@ -143,10 +154,40 @@ def _list_all_mutable_configs( return default_configurations +def _get_default_value_for(config: Dict[str, Any], keypath: List[str]) -> Any: + def _do_get_default_value_for( + remaining_config: Dict[Any, Any], keypath: List[str] + ) -> Any: + first: Any = keypath[0] + if first in [lc.name for lc in LiquidClasses]: + first = LiquidClasses[first] + if len(keypath) > 1: + rest = keypath[1:] + if first == "##EACHTIP##": + tip_list = list(remaining_config.keys()) + tip_list.sort(key=lambda o: o.value) + return _do_get_default_value_for(remaining_config[tip_list[-1]], rest) + else: + return _do_get_default_value_for(remaining_config[first], rest) + else: + if first == "###EACHTIP##": + tip_list = list(remaining_config.keys()) + tip_list.sort(key=lambda o: o.value) + return remaining_config[tip_list[-1]] + elif first == "currentByTipCount": + # return the value for the most tips at a time + cbt = remaining_config[first] + return cbt[next(reversed(sorted(cbt.keys())))] + else: + return remaining_config[first] + + return _do_get_default_value_for(config, keypath) + + def _find_default(name: str, configs: Dict[str, Any]) -> MutableConfig: """Find the default value from the configs and return it as a mutable config.""" - lookup_dict = _MAP_KEY_TO_V2[name] - nested_name = lookup_dict["nested_name"] + keypath = _MAP_KEY_TO_V2[name] + nested_name = keypath[-1] if name == "pickUpCurrent": min_max_dict = _MIN_MAX_LOOKUP["current"] @@ -156,27 +197,7 @@ def _find_default(name: str, configs: Dict[str, Any]) -> MutableConfig: min_max_dict = _MIN_MAX_LOOKUP[nested_name] type_lookup = _TYPE_LOOKUP[nested_name] units_lookup = _UNITS_LOOKUP[nested_name] - if name == "tipLength": - # This is only a concern for OT-2 configs and I think we can - # be less smart about handling multiple tip types. Instead, just - # get the max tip type. - tip_list = list( - configs["liquid_properties"][LIQUID_CLASS][ - lookup_dict["top_level_name"] - ].keys() - ) - tip_list.sort(key=lambda o: o.value) - default_value = configs["liquid_properties"][LIQUID_CLASS][ - lookup_dict["top_level_name"] - ][tip_list[-1]][nested_name] - elif name == "pickUpCurrent": - default_value_dict = configs[lookup_dict["top_level_name"]][nested_name] - default_value = default_value_dict[configs["channels"].value] - elif lookup_dict.get("liquid_class"): - _class = LiquidClasses[lookup_dict["liquid_class"]] - default_value = configs[lookup_dict["top_level_name"]][_class][nested_name] - else: - default_value = configs[lookup_dict["top_level_name"]][nested_name] + default_value = _get_default_value_for(configs, keypath) return MutableConfig( value=default_value, default=default_value, diff --git a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py index 7a58e1b61b25..704174b60c74 100644 --- a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py +++ b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py @@ -1,5 +1,5 @@ import re -from typing import List, Dict, Tuple +from typing import List, Dict, Tuple, Optional from pydantic import BaseModel, Field, validator from typing_extensions import Literal from dataclasses import dataclass @@ -150,31 +150,85 @@ class PlungerHomingConfigurations(BaseModel): ) -class TipHandlingConfigurations(BaseModel): +class PressFitPickUpTipConfiguration(BaseModel): presses: int = Field( - default=0.0, description="The number of tries required to force pick up a tip." + ..., + description="The number of times to press (incrementally more each time by increment)", + ) + increment: float = Field( + ..., description="The incremental amount to press more by each press" ) + distance: float = Field( + ..., description="The distance to press on the first stroke" + ) + speed: float = Field(..., description="How fast to press each stroke") + current_by_tip_count: Dict[int, float] = Field( + ..., + description="A current dictionary look-up by partial tip configuration.", + alias="currentByTipCount", + ) + + +class CamActionPickUpTipConfiguration(BaseModel): + distance: float = Field(..., description="How far to move the cams once engaged") + speed: float = Field(..., description="How fast to move the cams when engaged") + prep_move_distance: float = Field( + ..., description="How far to move the cams to engage the rack" + ) + prep_move_speed: float = Field( + ..., description="How fast to move the cams when engaging the rack" + ) + current_by_tip_count: Dict[int, float] = Field( + ..., + description="A current dictionary look-up by partial tip configuration.", + alias="currentByTipCount", + ) + + +class PlungerEjectDropTipConfiguration(BaseModel): current: float = Field( - default=0.0, - description="The current to use for tip drop-off.", + ..., description="The current to use on the plunger motor when dropping a tip" ) speed: float = Field( - ..., - description="The speed to move the z or plunger axis for tip pickup or drop off.", + ..., description="How fast to move the plunger motor when dropping a tip" ) - increment: float = Field( - default=0.0, - description="The increment to move the pipette down for force tip pickup retries.", + + +class CamActionDropTipConfiguration(BaseModel): + current: float = Field( + ..., description="The current to use on the cam motors when dropping tips" ) distance: float = Field( - default=0.0, description="The distance to begin a pick up tip from." + ..., description="The distance to move the cams when dropping tips" + ) + speed: float = Field( + ..., description="How fast to move the cams when dropping tips" ) prep_move_distance: float = Field( - default=0.0, - description="The distance to move downward before tip pickup or drop-off.", + ..., description="How far to move the cams after disengaging" ) prep_move_speed: float = Field( - default=0.0, description="The speed for the optional preparatory move." + ..., description="How fast to move the cams after disengaging" + ) + + +class DropTipConfigurations(BaseModel): + plunger_eject: PlungerEjectDropTipConfiguration = Field( + description="Configuration for tip drop via plunger eject", alias="plungerEject" + ) + cam_action: Optional[CamActionDropTipConfiguration] = Field( + description="Configuration for tip drop via cam action", alias="camAction" + ) + + +class PickUpTipConfigurations(BaseModel): + press_fit: PressFitPickUpTipConfiguration = Field( + description="Configuration for tip pickup via press fit", alias="pressFit" + ) + cam_action: Optional[CamActionPickUpTipConfiguration] = Field( + default=None, + description="Configuration for tip pickup via cam action", + alias="camAction", ) @@ -195,11 +249,6 @@ class PartialTipDefinition(BaseModel): description="A list of the types of partial tip configurations supported, listed by channel ints", alias="availableConfigurations", ) - per_tip_pickup_current: Dict[int, float] = Field( - ..., - description="A current dictionary look-up by partial tip configuration.", - alias="perTipPickupCurrent", - ) class PipettePhysicalPropertiesDefinition(BaseModel): @@ -223,10 +272,10 @@ class PipettePhysicalPropertiesDefinition(BaseModel): display_category: pip_types.PipetteGenerationType = Field( ..., description="The product model of the pipette.", alias="displayCategory" ) - pick_up_tip_configurations: TipHandlingConfigurations = Field( + pick_up_tip_configurations: PickUpTipConfigurations = Field( ..., alias="pickUpTipConfigurations" ) - drop_tip_configurations: TipHandlingConfigurations = Field( + drop_tip_configurations: DropTipConfigurations = Field( ..., alias="dropTipConfigurations" ) plunger_homing_configurations: PlungerHomingConfigurations = Field( diff --git a/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py b/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py index fa0c4956e309..a7af2e309117 100644 --- a/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py +++ b/shared-data/python/opentrons_shared_data/pipette/scripts/build_json_script.py @@ -12,12 +12,15 @@ PipetteGeometryDefinition, PipetteLiquidPropertiesDefinition, PipettePhysicalPropertiesDefinition, - TipHandlingConfigurations, PlungerPositions, SupportedTipsDefinition, MotorConfigurations, PartialTipDefinition, AvailableSensorDefinition, + PickUpTipConfigurations, + PressFitPickUpTipConfiguration, + DropTipConfigurations, + PlungerEjectDropTipConfiguration, ) from ..dev_types import PipetteModelSpec @@ -33,18 +36,19 @@ GEOMETRY_SCHEMA = "#/pipette/schemas/2/pipetteGeometryPropertiesSchema.json" -def _build_tip_handling_configurations( - tip_handling_type: str, model_configurations: Optional[PipetteModelSpec] = None -) -> TipHandlingConfigurations: +def _build_pickup_tip_data( + model_configurations: Optional[PipetteModelSpec] = None, +) -> PickUpTipConfigurations: presses = 0 increment = 0 distance = 0.0 - if tip_handling_type == "pickup" and model_configurations: + if model_configurations: + current = model_configurations["pickUpCurrent"]["value"] speed = model_configurations["pickUpSpeed"]["value"] presses = model_configurations["pickUpPresses"]["value"] increment = int(model_configurations["pickUpIncrement"]["value"]) distance = model_configurations["pickUpDistance"]["value"] - elif tip_handling_type == "pickup": + else: print("Handling pick up tip configurations\n") speed = float(input("please provide the speed\n")) presses = int(input("please provide the number of presses for force pick up\n")) @@ -56,16 +60,32 @@ def _build_tip_handling_configurations( distance = float( input("please provide the starting distance for pick up tip\n") ) - elif tip_handling_type == "drop" and model_configurations: + print(f"TODO: Current {current} is not used yet") + return PickUpTipConfigurations( + pressFit=PressFitPickUpTipConfiguration( + speed=speed, + presses=presses, + increment=increment, + distance=distance, + currentByTipCount={}, + ) + ) + + +def _build_drop_tip_data( + model_configurations: Optional[PipetteModelSpec] = None, +) -> DropTipConfigurations: + if model_configurations: + current = model_configurations["dropTipCurrent"]["value"] speed = model_configurations["dropTipSpeed"]["value"] - elif tip_handling_type == "drop": + else: print("Handling drop tip configurations\n") speed = float(input("please provide the speed\n")) - return TipHandlingConfigurations( - speed=speed, - presses=presses, - increment=increment, - distance=distance, + return DropTipConfigurations( + plungerEject=PlungerEjectDropTipConfiguration( + current=current, + speed=speed, + ) ) @@ -106,18 +126,14 @@ def _build_motor_configurations( def _build_partial_tip_configurations(channels: int) -> PartialTipDefinition: if channels == 8: return PartialTipDefinition( - partialTipSupported=True, - availableConfigurations=[1, 2, 3, 4, 5, 6, 7, 8], - perTipPickupCurrent={}, + partialTipSupported=True, availableConfigurations=[1, 2, 3, 4, 5, 6, 7, 8] ) elif channels == 96: return PartialTipDefinition( - partialTipSupported=True, - availableConfigurations=[1, 8, 12, 96], - perTipPickupCurrent={}, + partialTipSupported=True, availableConfigurations=[1, 8, 12, 96] ) else: - return PartialTipDefinition(partialTipSupported=False, perTipPickupCurrent={}) + return PartialTipDefinition(partialTipSupported=False) def build_geometry_model_v2( @@ -185,8 +201,8 @@ def build_physical_model_v2( shaft_ul_per_mm = float( input(f"Please provide the uL to mm conversion for {pipette_type}\n") ) - pick_up_tip_configurations = _build_tip_handling_configurations("pickup") - drop_tip_configurations = _build_tip_handling_configurations("drop") + pick_up_tip_configurations = _build_pickup_tip_data() + drop_tip_configurations = _build_drop_tip_data() plunger_positions = _build_plunger_positions() plunger_motor_configurations = _build_motor_configurations() partial_tip_configurations = _build_partial_tip_configurations(int(channels)) diff --git a/shared-data/python/tests/pipette/test_load_data.py b/shared-data/python/tests/pipette/test_load_data.py index 84a6344ad1bb..1b9e9775c16c 100644 --- a/shared-data/python/tests/pipette/test_load_data.py +++ b/shared-data/python/tests/pipette/test_load_data.py @@ -85,6 +85,7 @@ def test_update_pipette_configuration( base_configurations = load_data.load_definition( model_name.pipette_type, model_name.pipette_channels, model_name.pipette_version ) + updated_configurations = load_data.update_pipette_configuration( base_configurations, v1_configuration_changes, liquid_class ) diff --git a/shared-data/python/tests/pipette/test_mutable_configurations.py b/shared-data/python/tests/pipette/test_mutable_configurations.py index e70520fb05f1..3aabfd404340 100644 --- a/shared-data/python/tests/pipette/test_mutable_configurations.py +++ b/shared-data/python/tests/pipette/test_mutable_configurations.py @@ -241,7 +241,7 @@ def test_load_with_overrides( if serial_number == TEST_SERIAL_NUMBER: dict_loaded_configs = loaded_base_configurations.dict(by_alias=True) - dict_loaded_configs["pickUpTipConfigurations"]["speed"] = 5.0 + dict_loaded_configs["pickUpTipConfigurations"]["pressFit"]["speed"] = 5.0 updated_configurations_dict = updated_configurations.dict(by_alias=True) assert set(dict_loaded_configs.pop("quirks")) == set( updated_configurations_dict.pop("quirks")