PyLabRobot channel indexing

Currently, PyLabRobot indexes pipetting channels from 0 to n-1 where n is the total number of channels, and 0 is the frontmost channel.

STAR uses channel indexing where 1 is the frontmost. For Vantage, the firmware indexes them in the opposite direction. Tecan uses 0 indexing like PyLabRobot currently does.

It would be good to definitively agree on a format for PyLabRobot user-land. Do we keep the 0-indexed channels or make them 1-indexed? 0-indexed could be more programmer friendly and is what’s currently being used, but 1-indexing could be more scientist-friendly in the future. Backends are of course responsible for translating PLR user-land to specific-robot-land.

The programmatic option makes sense to sustain consistency.

1 Like



Hi @rickwierenga, can you please elaborate on what you mean by “frontmost”?

I have not observed that channel 0 is the one closest to the users/front.

In VENUS channels and carrier positions are numbered back to front:

This means that any firmware command is executed the same way:

module="P1" will use the most backwards channel.

If we continue with 0-based channel indexing (which I am also in favour of) even though the firmware command it translates to uses 1-based indexing, I think it is important to make sure PLR is consistent:

  • PLR_channel_idx_0 == VENUS_channel_idx_1 == fw_command_channel_idx_1
  • PLR_channel_idx_1 == VENUS_channel_idx_2 == fw_command_channel_idx_2

Are others observing different behaviour?
i.e. has anyone observed…

  • PLR_channel_idx_7 == VENUS_channel_idx_1 == fw_command_channel_idx_1

This looks odd to me.

To showcase my meaning: I receive the following output on my STARlets:

If PLR_channel_idx_0 was the frontmost channel (in relation to the machine coordinate system) then this output would not be possible.

Yes correct, I wrote that wrong, currently 0 is backmost on the Vantage at least (~“PLR_channel_idx_7 == VENUS_channel_idx_1 == fw_command_channel_idx_1”~ “PLR_channel_idx_0 == VENUS_channel_idx_1 == fw_command_channel_idx_1”). I don’t think it’s good to change this.

Just to ensure I understand this correctly:

On the Vantage:

  • PLR_channel_idx_7 == VENUS_channel_idx_1 == fw_command_channel_idx_1
    → backmost channel

But on STAR machines it is :

  • PLR_channel_idx_0 == VENUS_channel_idx_1 == fw_command_channel_idx_1
    → backmost channel (as evidenced by my screenshot above)


So Vantage and STAR have reversed channel ordering in PLR?

meant to say “PLR_channel_idx_0 == VENUS_channel_idx_1 == fw_command_channel_idx_1”. It’s all as expected: backmost is 1 on venus, 0 in plr, on both star and vantage.

1 Like