Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(protocol-designer, step-generation, shared-data): 96-channel tip adapter + well selection support #13637

Merged
merged 19 commits into from
Oct 25, 2023

Conversation

jerader
Copy link
Collaborator

@jerader jerader commented Sep 22, 2023

closes RAUT-678 RAUT-679 RAUT-697 RAUT-755

this pr is now unblocked ✨

Overview

This adds support for 2 main things for PD 96-channel:

  1. 96-channel tiprack adapter support
  2. 96-channel well selection support

Sorry this ended up doing a lot in 1 PR!

Test Plan

For tiprack adapter:

  1. turn on the 96-channel dev feature flag
  2. create a Flex protocol and add the 96-channel
  3. go to deck setup. Observe that the tiprack on the deck has an adapter underneath it (the adapter is just a white svg rectangle thing underneath the tiprack)
  4. try duplicating the tiprack, the duplicate should NOT have an adapter underneath
  5. select an empty deck slot and add another tiprack, it should NOT render the adapter underneath
  6. select an empty deck slot and add the 96-channel adapter (under the adapter section), it should render only the adapter. Check that the only compatible labware is the tiprack.
  7. add another adapter with no tiprack, try to drag and drop other labwares onto it, make sure only the tiprack is supported to drag and drop onto the adapter but that the tiprack also can be directly on the deck.
  8. add a move labware command, make sure only the tiprack can move on top of the adapter .

For 96-channel well selection:

  1. create a Flex protocol with the 96-channel and a tiprack and add the trash bin (the waste chute isn't fully wired up for dispensing/dropping tip into so a trash bin is required for now). Go the deck map and add a reservoir, a 96 well plate, an irregular plate, and the 384 well plate.
  2. try to mix/transfer from out of each plate. See that they all work except for the irregular plate. See that the correct amount of wells are highlighted (all wells except for the 384 well plate which should highlight every other well for up to 96 wells.)
  3. now create a new protocol with a single and 8-channel pipette. See that transferring/mixing works as usual and highlights either 1 or 8 wells.

Changelog

  • createContainer thunk to include an optional adapterUnderLabwareURI or adapterId in order to allow for duplicating the labware with the adapter underneath it.
  • extend the deck setup components to have knowledge of if the 96-channel is in the protocol
  • extend getWellNamePerMultiTip and affecting utils to have knowledge of if the pipette has 96-channels
  • add a few helper functions to shared-data (moved orderedWells out of step-generation and into shared-data and created a get96Channel384WellPlateWells util that grabs the arrays of wells the 96-channel can aspirate from in a 384 well plate)
  • fix tests
  • create a missingAdapter() error creator to be plugged in for a follow up PR

Review requests

see test plan

Risk assessment

low-ish, this changes a bunch of logic

@jerader jerader added the WIP label Sep 22, 2023
@jerader jerader changed the title feat(protocol-designer, step-generation): 96-channel tip adapter + well selection support feat(protocol-designer, step-generation, shared-data): 96-channel tip adapter + well selection support Sep 22, 2023
@codecov
Copy link

codecov bot commented Sep 22, 2023

Codecov Report

Merging #13637 (c737bb2) into edge (b37f9f8) will increase coverage by 0.00%.
The diff coverage is 47.52%.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             edge   #13637   +/-   ##
=======================================
  Coverage   70.76%   70.77%           
=======================================
  Files        2488     2490    +2     
  Lines       69837    69920   +83     
  Branches     8473     8498   +25     
=======================================
+ Hits        49419    49483   +64     
+ Misses      18417    18414    -3     
- Partials     2001     2023   +22     
Flag Coverage Δ
app 68.25% <ø> (ø)
labware-library 49.17% <100.00%> (ø)
protocol-designer 45.44% <25.00%> (+0.10%) ⬆️
shared-data 74.17% <86.11%> (+0.16%) ⬆️
step-generation 84.95% <ø> (-0.04%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Coverage Δ
...ware-creator/utils/determineMultiChannelSupport.ts 100.00% <100.00%> (ø)
...ents/DeckSetup/LabwareOverlays/LabwareControls.tsx 0.00% <ø> (ø)
...ponents/DeckSetup/LabwareOverlays/SlotControls.tsx 47.82% <ø> (ø)
...col-designer/src/labware-ingred/actions/actions.ts 52.00% <ø> (ø)
...r/src/steplist/formLevel/handleFormChange/utils.ts 86.53% <100.00%> (ø)
protocol-designer/src/steplist/substepTimeline.ts 51.21% <ø> (ø)
protocol-designer/src/steplist/utils/orderWells.ts 0.00% <ø> (ø)
shared-data/js/helpers/index.ts 74.60% <ø> (ø)
shared-data/js/helpers/orderWells.ts 82.14% <ø> (ø)
shared-data/js/helpers/wellSets.ts 90.90% <100.00%> (+2.44%) ⬆️
... and 26 more

... and 1 file with indirect coverage changes

@@ -16,7 +16,7 @@ export const determineMultiChannelSupport = (
// allow multichannel pipette options only if
// all 8 channels fit into the first column correctly
const multiChannelTipsFirstColumn =
def !== null ? getWellNamePerMultiTip(def, 'A1') : null
def !== null ? getWellNamePerMultiTip(def, 'A1', 8) : null
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since this is for labware creator, i defaulted to only having the 8-channel since it doesn't support creating labware for a 96-channel yet.

@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from b3e972c to 839ccb2 Compare September 25, 2023 20:51
@jerader jerader added blocked Ticket or PR is blocked by other work and removed WIP labels Sep 29, 2023
@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from fc1e4c8 to 256dc5d Compare September 29, 2023 16:04
@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from a43ae5f to d3b912f Compare October 6, 2023 20:50
@jerader jerader removed the blocked Ticket or PR is blocked by other work label Oct 9, 2023
@jerader jerader marked this pull request as ready for review October 9, 2023 12:34
@jerader jerader requested review from a team as code owners October 9, 2023 12:34
@jerader jerader requested a review from a team October 9, 2023 12:34
@jerader jerader requested a review from a team as a code owner October 9, 2023 12:34
@jerader jerader requested review from mjhuff and removed request for a team October 9, 2023 12:34
Comment on lines +15 to +21
export function missingAdapter(): CommandCreatorError {
return {
type: 'MISSING_96_CHANNEL_TIPRACK_ADAPTER',
message: 'A 96-channel cannot pick up tips fully without an adapter',
}
}

Copy link
Collaborator Author

@jerader jerader Oct 16, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NOTE: this will be wired up to replaceTip in a follow up PR. Since we need to have knowledge of the current tiprackId, I would need to grab that data from higher up and extend the replaceTip args to include it. https://opentrons.atlassian.net/browse/RAUT-798

@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from 52307e2 to 7912dcb Compare October 17, 2023 12:40
Copy link
Member

@shlokamin shlokamin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gonna keep throwing these comments in batches so you can see them roll in!

@jerader jerader requested a review from shlokamin October 18, 2023 16:41
Comment on lines +37 to +40
const wellsFor96WellPlate = [
'A1',
'B1',
'C1',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should probably have a function do this in a nested for loop or something

Copy link
Member

@shlokamin shlokamin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code reviewed together, approved pending the comments i left

@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from 07be0f5 to d4feaf8 Compare October 25, 2023 12:15
@jerader jerader force-pushed the pd_96-channel-adapter-tip-calc branch from d4feaf8 to 5a01be9 Compare October 25, 2023 12:16
@jerader jerader merged commit 98716d8 into edge Oct 25, 2023
53 of 54 checks passed
@jerader jerader deleted the pd_96-channel-adapter-tip-calc branch October 25, 2023 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants