We did say we can add a â_miscellaneousâ suffix to plates that are otherwise described the same way with the current Plate naming conventionâŠ
But why do you want to store them as separate resource definition functions?
If 2 resources have identical dimensions they are, from PLRâs current physical modelling perspective, identical.
i.e. different colours or materials would be stored as âvariantsâ (currently in the docstring) of the same resource definition function
I love how PLR has now evolved to discuss decisions on 0.005 mm z-axis dimensional accuracy
(even when I was doing cleanroom work on nano-lithography processes 5 nm was considered âextremeâ )
So letâs get into it a bit more because there is more to it then might appear on the surfaceâŠ
For people who might ask: âWhy does that matter?â:
For most liquid handlers it doesnât. The STAR systems, for example, round movement of channels or resources to 0.1 mm at the firmware level (even if the motors on the machine have a smaller step size).
But these plates are clearly designed for microscopy/imaging applications!
(?)
And PLR is not just about liquid handling
So the question is: @rickwierenga, have you encountered issues with imaging which could be solved by having two separate plate definition functions, with the only difference being a material_z_thickness difference of 5 nm?
Looking at machine capabilities constraining utility of such definition accuracy:
The PLR-integrated Cytation 5 apparently has a z-stack resolution of 0.1 mm too (Agilent white paper page 5).
This means 0.005 mm precision doesnât make a difference.
But we will integrate more precise imaging systems in the future.
So letâs take a classic Nikon microscope: it achieves z-dimension movement resolutions of 0.05 mm.
The likelihood of 0.005 mm definition difference being important increases but is still very low.
Looking at manufacturer-declared significance of mean dimensions and their variability
Cohenâs d = 0.63
â This indicates a moderate to large effect size, meaning the difference between the means is meaningful relative to the spread.
Overlap Coefficient (OVL) â 0.61
â About 61% of the two distributions overlap, suggesting there is considerable but not complete similarity.
KolmogorovâSmirnov (K-S) test KS statistic = 0.376, p-value â 2.5e-63
â This is a highly significant result, indicating that the two distributions are statistically different.
My suggestion
There is a difference between the manufacturer-declared material_z_thickness (i.e. the bottom of the wells that light has to pass through).
But it doesnât seem like any imaging device would realistically be affected by it.
I therefore believe a single definition with variant information in its metadata should be sufficient.
you have proved indisputably that there is no practical difference, for this particular plate
however, for the naming convention, we have to think about the general case
do we require people to run a physical analysis? at what p-level will we accept a shared definition? what statistical test. this gets into scientist territory which is sketchy
also, what if we had 3 plates: A is very similar to B (p<0.05), B to C (p<0.05), but A to C is p>0.05?
I am also an engineer, and engineers perform, based on personal experience, much more thorough analyses - on average - for their testing. e.g. power analyses are very common in engineering while in science you see them rarely outside of clinical trials⊠fun fact: they are valid anywhere
But the point of the significance analysis was more to assess in the first place whether there is a difference based on the variance of the manufacturer-declared dimension of the material_z_thickness. Or in more engineering-y terms, are they within tolerance of each other?
But jokes aside: in practice we should simply distinguish by what actually affects our machines!
If we have 3 plates, all similar in various dimensions by just a little bit, use them and see whether there is a difference in behaviour with specific machines:
imager: is there a difference in focal height
liquid handler: will the same channel crash when aspirating from the cavity_bottom of wells from the 3 different plates
As a rule of thumb, based on the precision of the STAR and the Cytation 5, I would set a threshold on ± 0.2 mm.
A = 0.1, B = 0.3, C = 0.5. A and B are allowed to share a definition, as do B and C, but itâs only clear that only B is allowed for all after you get C. Introduce D = 0.7 and no definition works.
your argument would imply we can use a single plate definition for all plates, given we can introduce a finite number of âintermediaryâ plates all âequivalentâ to each other!
This is only for pairwise comparison⊠after all how likely is it that more than 2 plates vary in this format ⊠+ all the other dimensions and metadata that would require generation of a new resource definition function?
i.e. as soon as any other dimension isnât exactly the same this all becomes void and we require separate definitions anyway
Same goes for when the manufacturer changes, the WellBottomType changes, the CrossSectionProfile changes, âŠ
In this incredibly unlikely scenario: we can simply generate clusters of definitions that work together?
In the end, what really matters is real-world functionality with minimal maintenance cost and maximal cross-environment readiness:
One possibility:
A = 0.1, B = 0.3, C = 0.5. A, D = 0.7
â define 0.2 for cluster [A, B]
â define 0.6 for cluster [C, D]
Then test whether this works?
This is oversimplified as well, because these are just means without tolerances.
I think you are raising a good point, i.e. the main point of this thread:
How do we update our current naming convention, in general, keeping limited namespace in coding in mind and balancing it with human-readability and utility?
Big question, and I think our previous solution has been working well so far but we know it is not bulletproof and we should continue brainstorming and updating when we have a good alternative.
Iâll throw in a contrary view - have a virtual get_unique_name() function on the base class, and have it return "<manufacturer>__<unique_manufacturer_id_for_plate>" in an implementation (ie. in class Plate).
Maybe throw in the well number (96w etc) in there for readability.
PLR is plate-agnostic in the sense that it can use any plate. So it is the userâs responsibility to know what they are doing, or looking for. Taking that to an extreme - Plate definitions should not be in PLR at all, only the classes that describe them (being radical this morning!).
If you try and capture all meta-information in a name, it is going to be a bit Goedelâs theorem at some point. Any description will at some point become incomplete.