I am running into something funky, I am trying to dispense to plate and am getting “Resource is too small to space channels.”. Oddly though the previous round I just pipetted to these wells. This time I just have less transfers.
First dispense well coordinates which works:
[Well(name='bar4_well_0_0', location=Coordinate(010.870, 070.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_1', location=Coordinate(010.870, 061.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_2', location=Coordinate(010.870, 052.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_3', location=Coordinate(010.870, 043.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_4', location=Coordinate(010.870, 034.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_5', location=Coordinate(010.870, 025.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_2', location=Coordinate(010.870, 052.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_2', location=Coordinate(010.870, 052.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well)]
Second dispense well coordinates that do not work:
[Well(name='bar4_well_0_2', location=Coordinate(010.870, 052.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well), Well(name='bar4_well_0_2', location=Coordinate(010.870, 052.770, 003.030), size_x=6.86, size_y=6.86, size_z=10.67, category=well)]
Error:
{
"name": "ValueError",
"message": "Resource is too small to space channels.",
"stack": "\u001b[31m---------------------------------------------------------------------------\u001b[39m\n\u001b[31mValueError\u001b[39m Traceback (most recent call last)\n\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[172]\u001b[39m\u001b[32m, line 47\u001b[39m\n\u001b[32m 45\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m lh.aspirate(resources=wells_to_asp, vols=volumes_transfer)\n\u001b[32m 46\u001b[39m \u001b[38;5;28mprint\u001b[39m(wells_to_disp)\n\u001b[32m---> \u001b[39m\u001b[32m47\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m lh.dispense(resources= wells_to_disp, vols=volumes_transfer)\n\u001b[32m 48\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m lh.discard_tips()\n\n\u001b[36mFile \u001b[39m\u001b[32mC:\\pylabrobot_hackathon\\pylabrobot\\pylabrobot\\machines\\machine.py:35\u001b[39m, in \u001b[36mneed_setup_finished.<locals>.wrapper\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 33\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m.setup_finished:\n\u001b[32m 34\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[33m\"\u001b[39m\u001b[33mThe setup has not finished. See `setup`.\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m35\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m func(*args, **kwargs)\n\n\u001b[36mFile \u001b[39m\u001b[32mC:\\pylabrobot_hackathon\\pylabrobot\\pylabrobot\\liquid_handling\\liquid_handler.py:1139\u001b[39m, in \u001b[36mLiquidHandler.dispense\u001b[39m\u001b[34m(self, resources, vols, use_channels, flow_rates, offsets, liquid_height, blow_out_air_volume, spread, **backend_kwargs)\u001b[39m\n\u001b[32m 1135\u001b[39m center_offsets = get_tight_single_resource_liquid_op_offsets(\n\u001b[32m 1136\u001b[39m resource=resource, num_channels=\u001b[38;5;28mlen\u001b[39m(use_channels)\n\u001b[32m 1137\u001b[39m )\n\u001b[32m 1138\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m spread == \u001b[33m\"\u001b[39m\u001b[33mwide\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m-> \u001b[39m\u001b[32m1139\u001b[39m center_offsets = \u001b[43mget_wide_single_resource_liquid_op_offsets\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1140\u001b[39m \u001b[43m \u001b[49m\u001b[43mresource\u001b[49m\u001b[43m=\u001b[49m\u001b[43mresource\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_channels\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43muse_channels\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1141\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1142\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m spread == \u001b[33m\"\u001b[39m\u001b[33mcustom\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m 1143\u001b[39m center_offsets = [Coordinate.zero()] * \u001b[38;5;28mlen\u001b[39m(use_channels)\n\n\u001b[36mFile \u001b[39m\u001b[32mC:\\pylabrobot_hackathon\\pylabrobot\\pylabrobot\\liquid_handling\\utils.py:28\u001b[39m, in \u001b[36mget_wide_single_resource_liquid_op_offsets\u001b[39m\u001b[34m(resource, num_channels)\u001b[39m\n\u001b[32m 21\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mget_wide_single_resource_liquid_op_offsets\u001b[39m(\n\u001b[32m 22\u001b[39m resource: Resource,\n\u001b[32m 23\u001b[39m num_channels: \u001b[38;5;28mint\u001b[39m,\n\u001b[32m 24\u001b[39m ) -> List[Coordinate]:\n\u001b[32m 25\u001b[39m resource_size = resource.get_absolute_size_y()\n\u001b[32m 26\u001b[39m centers = \u001b[38;5;28mlist\u001b[39m(\n\u001b[32m 27\u001b[39m \u001b[38;5;28mreversed\u001b[39m(\n\u001b[32m---> \u001b[39m\u001b[32m28\u001b[39m \u001b[43m_get_centers_with_margin\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 29\u001b[39m \u001b[43m \u001b[49m\u001b[43mdim_size\u001b[49m\u001b[43m=\u001b[49m\u001b[43mresource_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 30\u001b[39m \u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m=\u001b[49m\u001b[43mnum_channels\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 31\u001b[39m \u001b[43m \u001b[49m\u001b[43mmargin\u001b[49m\u001b[43m=\u001b[49m\u001b[43mMIN_SPACING_EDGE\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 32\u001b[39m \u001b[43m \u001b[49m\u001b[43mmin_spacing\u001b[49m\u001b[43m=\u001b[49m\u001b[43mMIN_SPACING_BETWEEN_CHANNELS\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 33\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 34\u001b[39m )\n\u001b[32m 35\u001b[39m ) \u001b[38;5;66;03m# reverse because channels are from back to front\u001b[39;00m\n\u001b[32m 37\u001b[39m \u001b[38;5;66;03m# offsets are relative to the center of the resource, but above we computed them wrt lfb\u001b[39;00m\n\u001b[32m 38\u001b[39m \u001b[38;5;66;03m# so we need to subtract the center of the resource\u001b[39;00m\n\u001b[32m 39\u001b[39m \u001b[38;5;66;03m# also, offsets are in absolute space, so we need to rotate the center\u001b[39;00m\n\u001b[32m 40\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[32m 41\u001b[39m Coordinate(\n\u001b[32m 42\u001b[39m x=\u001b[32m0\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 46\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m c \u001b[38;5;129;01min\u001b[39;00m centers\n\u001b[32m 47\u001b[39m ]\n\n\u001b[36mFile \u001b[39m\u001b[32mC:\\pylabrobot_hackathon\\pylabrobot\\pylabrobot\\liquid_handling\\utils.py:14\u001b[39m, in \u001b[36m_get_centers_with_margin\u001b[39m\u001b[34m(dim_size, n, margin, min_spacing)\u001b[39m\n\u001b[32m 12\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Get the centers of the channels with a minimum margin on the edges.\"\"\"\u001b[39;00m\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m dim_size < margin * \u001b[32m2\u001b[39m + (n - \u001b[32m1\u001b[39m) * min_spacing:\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[33m\"\u001b[39m\u001b[33mResource is too small to space channels.\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 15\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m dim_size - (n - \u001b[32m1\u001b[39m) * min_spacing <= min_spacing * \u001b[32m2\u001b[39m:\n\u001b[32m 16\u001b[39m remaining_space = dim_size - (n - \u001b[32m1\u001b[39m) * min_spacing - margin * \u001b[32m2\u001b[39m\n\n\u001b[31mValueError\u001b[39m: Resource is too small to space channels."
}
This is a standard 9mm raster plate, so I am not sure why I am getting a spacing issue.