STAR Channel Tools Sequence Sorting Across Plates

I am trying to optimize two sequences (source wells and destination wells for pipetting) along with an array of relevant sample IDs for each well, and am using the CHAN_ACCESS_Sort2Sequences1Array of STAR Channel Tools to do this. It is generally working, but my intention is that across two source 24-well plates, if, for example, well A1, B1, C1 of the first plate and A1, B1, C1, D1 of the second plate are within the source sequence, the sorting will group these 7 together, as they are all in the same x-coordinate, and it will spit out a channel pattern of “11111110” representing only the 7 wells within that x-coordinate to pipette to.

Instead, I’m seeing it maxing out the number of channels, so even though there are only 7 within that x-coordinate, it will pick up 8 tips, and use the remaining 1 on the next column of sequence positions (e.g. 24-WP #1 well A2). I’ll be using STAR Pipetting Tools for PIP_AspirateFromFixedHeight, so x-coordinates must be shared within a single pipetting step.

Does anything look off in how this is set up for this intention?

From the trace (tracing seqSourceCurrentBatch) before sorting:

After sorting:

Pipetting to that sequence:

Hi @VantageHandler ,

You are trying to do something that STAR Tools doesn’t do on its own. It focuses on sorting for fastest speed while also maintaining channel access restrictions. So, it won’t inherently stop if the next sorted position is on a different X. It’s goal (if you use a 0 for the max channel number) is to get the maximum number of positions to transfer next.

This being said, you can still get the result you are looking for, but it does require a few extra steps.

  1. The sequences need to be pre-sorted by X ascending Y descending up front. This can’t be done with STAR Tools as it handles sorting differently. There are numerous other libraries that perform this action.
  2. You need to use the function PIP_BuildChannelPatternFromSequence in the Pipetting Tools library. This will look at the sequence and return the channel pattern for the next set of positions that are within the same X. This pattern can be from 1-N of channels.
  3. Get the total number of active channels from this function.
  4. Feed the total number of active channels as the max channel param in CHAN_ACCESS_Sort2Sequences1Array.

Since you are pre-sorting the sequence, I would recommend marking the Sort by XY and Labware to 0 so that it just grabs the next positions available.

2 Likes

Thank you!!

I’ve previously (for other applications) used PIP_BuildChannelPatternFromSequence for this exact function after sorting a batch sequence with a SortTwoSeqOneVol from SequenceTools_V3, and definitely assumed a bit too much about CHAN_ACCESS_Sort2Sequences1Array based on that! Thank you for the fix, which makes sense!

Hm I guess my other issue is that unless I sort for channels (like shown from the SequenceTools_V4 library in your screengrab) before using BuildChannelPatternFromSequence from STAR Pipetting Tools, it will only ever build a max channel pattern for one 24-well plate (max channel pattern of “11110000”) because all wells in that first 24-well plate are read from the input file and written to the sequence before the wells in the second plate are. The BuildChannelPattern - only looks until it finds a different x-coordinate, which it will find in the at the max 5th sequence position (e.g. 24-well plate #1 when wells A1, B1, C1, D1 (all same x-coord) are within the sequence. The next position in the sequence will have a higher x (ex. A2), so the channel pattern building stops there.

My issue is there is no sorting function for two sequences and one array. I tried using the TwoSeqOneVol, but that is specifically looking for an array of floats, whereas I have an array of strings I need to sort alongside the volumes. This is the functionality I was hoping to gain with the Sort2Seq1Array of STAR Channel Tools.

Hi @VantageHandler ,

What are the strings you are trying to keep up with? Perhaps you could store them in the labware in some way to be pulled post transfer?

They’ll be specific clone IDs that the user will include in the worklist file (they’ll specify source name/well, destination name/well, and clone ID). E.g. Clone A29 is in 24-well plate #1, well A1.

Thinking about it more, I suppose I don’t even need to sort them with the volumes, since the user has already specified where they will go and so the information is already tracked irrespective of any optimized pipetting order :sweat_smile:

Though I could also see the argument of being able to write it to a pipetting log output file that would be updated after each pipetting loop if I did sort it with everything.

Hi @VantageHandler ,

Well, the easy answer would be to have sample tracking do the work for you. You have the source labware ID and Well, so you could add the clone ID as a Barcode using Set Labware Barcode from the Data Handling Steps. Even if the plate is moved around, you can pull the barcode back out. This will also show up in a mapping file if you make one after the transfer.

Alternatively, you could use VectorDatabaseHelper to store any custom key of any type to labware / well that can be pulled back out in the same fashion. This, however, won’t show up on a mapping file.

For both solutions, the data could be added to the labware / well, then sorted and the data could be pulled back out now sorted as the specific data point is attached to the well itself.

2 Likes