Skip to content

Commit dc61510

Browse files
BioCamrickwierenga
andauthored
PLR Plate Quadrant Definition Standardization (#410)
Co-authored-by: Rick Wierenga <[email protected]>
1 parent 414730a commit dc61510

19 files changed

+717
-145
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ pyhamilton/LAY-BACKUP
1010
*.log
1111
build/lib
1212

13-
myenv
13+
myenv
14+
env/*

docs/conf.py

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
html_extra_path = ["resources/library/img"]
8585

8686
html_theme_options = {
87+
"show_nav_level": 4,
8788
"use_edit_page_button": True,
8889
"navbar_start": ["navbar-logo"],
8990
"navbar_center": ["navbar-nav"],

docs/resources/carrier/carrier.rst

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Carrier
2+
================
3+
4+
A **carrier** is a component of the deck layout that holds labware such as plates, tip racks, tubes, or troughs/reservoirs. Carriers serve as modular, standardized platforms that allow for flexible deck configurations, ensuring that labware is positioned accurately.
5+
6+
Each carrier type is optimized for specific resource types (like plates, tip racks, etc.), allowing for efficient sample handling and workflow customization.
7+
The :class:`~pylabrobot.resources.carrier.Carrier` class provides a base structure from which specialized carrier types inherit, ensuring modularity and flexibility in system configurations.
8+
9+
-----
10+
11+
Subclasses of `Carrier`
12+
-----------------------
13+
14+
.. toctree::
15+
:maxdepth: 4
16+
17+
plate-carrier/plate_carriers
18+
mfx-carrier/mfx_carriers
19+
20+
-----
21+
22+
Carrier Types
23+
-------------
24+
25+
- **Plate Carriers**: These carriers hold standard microplates and deep-well plates, ensuring proper alignment for automated pipetting and handling.
26+
- **MFX Carriers**: A specific type of carrier designed for flexible reconfiguration of that carrier layout by removably screwing "MFX Modules" onto the MFX Carrier of choice.
File renamed without changes.

docs/resources/index.md

+69-38
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,95 @@
11
# Resource Library
22

3-
The PLR Resource Library (PLR-RL) is the world's biggest and most accurate centralized collection of labware. If you cannot find something, please contribute what you are looking for!
3+
The PyLabRobot Resource Library (PLR-RL) is PyLabRobot's open-source, crowd-sourced collection of labware.
4+
Laboratories across the world use an almost infinite number of different resources/labware.
5+
We believe the way to most efficient capture the largest portion of this resource superset is via crowd-sourcing, and peer-reviewing new entries.
6+
If you cannot find something, please contribute what you are looking for!
7+
8+
----
49

510
```{toctree}
611
:maxdepth: 1
712
813
introduction
914
custom-resources
15+
plr-rl-naming-conventions
1016
```
1117

18+
----
19+
1220
## `Resource` subclasses
1321

1422
In PLR every physical object is a subclass of the `Resource` superclass (except for `Tip`).
1523
Each subclass adds unique methods or attributes to represent its unique physical specifications and behavior.
1624

17-
Some standard `Resource` subclasses in the inheritance tree are:
18-
19-
```
20-
Resource
21-
├── Carrier
22-
│ ├── TipCarrier
23-
│ ├── PlateCarrier
24-
│ ├── MFXCarrier
25-
│ ├── ShakerCarrier
26-
│ └── TubeCarrier
27-
├── Container
28-
│ ├── Well
29-
│ ├── PetriDish
30-
│ ├── Tube
31-
│ └── Trough
32-
├── ItemizedResource
33-
│ ├── Plate
34-
│ ├── TipRack
35-
│ └── TubeRack
36-
├── Lid
37-
└── PlateAdapter
38-
```
39-
40-
See more detailed documentatino below (WIP).
25+
PLR's `Resource` subclasses in the inheritance tree are:
26+
<style>
27+
.tree {
28+
border: 3px solid black; /* Thick border around the entire table */
29+
border-collapse: collapse; /* Ensures borders don’t double */
30+
background-color: #FAF3DD; /* Light background */
31+
margin-left: 5px; /* A bit of left margin */
32+
}
33+
34+
.tree td {
35+
font-family: "Fira Code", monospace; /* Code-like font */
36+
font-size: 15px; /* Matches code cell output */
37+
font-weight: bold; /* Make all text bold */
38+
line-height: 1.2; /* Slightly tighten vertical spacing */
39+
padding: 0 10px; /* Padding around each line */
40+
border: none; /* Remove inner borders */
41+
white-space: pre; /* Preserve spacing exactly */
42+
}
43+
</style>
44+
45+
<table class="tree">
46+
<tr><td><a href="introduction.html">Resource</a></td></tr>
47+
48+
<!-- Carrier subtree -->
49+
<tr><td>├── <a href="carrier/carrier.html">Carrier</a></td></tr>
50+
<tr><td>│ ├── <a href="carrier/plate-carrier/plate_carriers.html">PlateCarrier</a></td></tr>
51+
<tr><td>│ ├── TipCarrier</td></tr>
52+
<tr><td>│ ├── <a href="carrier/mfx-carrier/mfx_carriers.html">MFXCarrier</a></td></tr>
53+
<tr><td>│ ├── TroughCarrier</td></tr>
54+
<tr><td>│ └── TubeCarrier</td></tr>
55+
56+
<!-- Container subtree -->
57+
<tr><td>├── Container</td></tr>
58+
<tr><td>│ ├── Well</td></tr>
59+
<tr><td>│ ├── PetriDish</td></tr>
60+
<tr><td>│ ├── Tube</td></tr>
61+
<tr><td>│ └── Trough</td></tr>
62+
63+
<!-- ItemizedResource subtree -->
64+
<tr><td>├── <a href="itemized-resource/itemized-resource.html">ItemizedResource</a></td></tr>
65+
<tr><td>│ ├── <a href="itemized-resource/plate/plate.html">Plate</a></td></tr>
66+
<tr><td>│ ├── TipRack</td></tr>
67+
<tr><td>│ └── TubeRack</td></tr>
68+
69+
<!-- ResourceHolder subtree -->
70+
<tr><td>├── ResourceHolder</td></tr>
71+
<tr><td>│ └── PlateHolder</td></tr>
72+
73+
<!-- Others -->
74+
<tr><td>├── Lid</td></tr>
75+
<tr><td>├── PlateAdapter</td></tr>
76+
<tr><td>└── ResourceStack</td></tr>
77+
</table>
78+
79+
----
4180

4281
```{toctree}
43-
:caption: Resource subclasses
82+
:maxdepth: 3
83+
:caption: Resource subclass explanations
84+
:hidden:
4485
86+
carrier/carrier
4587
containers
46-
itemized_resource
47-
plates
48-
plate_carriers
49-
mfx
88+
itemized-resource/itemized-resource
5089
```
5190

5291
## Library
5392

54-
### Plate Naming Standard
55-
56-
PLR is not actively enforcing a specific plate naming standard but recommends the following:
57-
58-
![PLR_plate_naming_standards](img/PLR_plate_naming_standards.png)
59-
60-
This standard is similar to the [Opentrons API labware naming standard](https://ecatalog.corning.com/life-sciences/b2b/UK/en/Microplates/Assay-Microplates/96-Well-Microplates/Costar%C2%AE-Multiple-Well-Cell-Culture-Plates/p/3516) but 1) further sub-categorizes "wellplates" to facilitate communication with day-to-day users, and 2) adds information about the well-bottom geometry.
61-
6293
```{toctree}
6394
:caption: Library
6495
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
ItemizedResource
2+
================
3+
4+
Resources that contain items in a grid are subclasses of :class:`pylabrobot.resources.itemized_resource.ItemizedResource`. This class provides convenient methods for accessing the child-resources, such as by integer or SBS "A1" style-notation, as well as for traversing items in an ``ItemizedResource``. Examples of subclasses of ``ItemizedResource`` are :class:`pylabrobot.resources.plate.Plate` and :class:`pylabrobot.resources.tip_rack.TipRack`.
5+
6+
To instantiate an ``ItemizedResource``, it is convenient to use the ``pylabrobot.resources.utils.create_equally_spaced_2d`` method to quickly initialize a grid of child-resources in a grid. Here's an example of a simple ``ItemizedResource``:
7+
8+
.. code-block:: python
9+
10+
from pylabrobot.resources import ItemizedResource
11+
from pylabrobot.resources.utils import create_equally_spaced_2d
12+
from pylabrobot.resources.well import Well, WellBottomType
13+
14+
plate = ItemizedResource(
15+
name="plate",
16+
size_x=127,
17+
size_y=86,
18+
size_z=10,
19+
items=create_equally_spaced_2d(
20+
Well, # the class of the items
21+
num_items_x=12,
22+
num_items_y=8,
23+
dx=12, # distance between the left items and the left border in the x-axis
24+
dy=12, # distance between the bottom items and the front border in the y-axis
25+
dz=0, # distance between the items and the bottom border in the z-axis
26+
item_dx=9, # distance between the items in the x-axis
27+
item_dy=9, # distance between the items in the y-axis
28+
29+
bottom_type=WellBottomType.FLAT, # a custom keyword argument passed to the Well initializer
30+
)
31+
)
32+
33+
Subclasseses of :class:`ItemizedResource`
34+
------------------------------------------
35+
36+
.. toctree::
37+
:maxdepth: 1
38+
39+
plate/plate
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Tutorial: Plate Definition
2+
3+
work in progress
4+
5+
Aim: give a complete Notebook people can download an directly use to sequentially measure `dz` and `material_z_thickness` of a new `Plate` definition they want to generate.
6+
7+
## YouTube tutorial
8+
9+
<iframe width="720" height="405" src="https://www.youtube.com/embed/ViHgIhU476Q" title="YouTube video player" frameborder="0" allow="autoplay; encrypted-media; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)