29.2.12. Biomaterial LIMS

Figure 29.13. Biomaterial LIMS

Biomaterial LIMS

Biomaterials

There are three main types of biomaterials: BioSourceData, SampleData and ExtractData. All types of are derived from the base class BioMaterialData. The reason for this is that they all share common functionality such as pooling and events. By using a common base class we do not have to create duplicate classes for keeping track of events and parents.

The BioSourceData is the simplest of the biomaterials. It cannot have parents and can't participate in events. It's only used as a (non-required) parent for samples.

The MeasuredBioMaterialData class is used as a base class for the other biomaterial types. It introduces quantity measurements and can store original and remaining quantities. They are both optional. If an original quantity has been specified the core automatically calculates the remaining quantity based on the events a biomaterial participates in.

All measured biomaterial have at least one event associated with them, the creation event, which holds information about the creation of the biomaterial. A measured biomaterial can be created in three ways:

  • From a single item of the same type or the parent type. Biosource is the parent type of samples and sample is the parent type of extracts. The parentType property must be set to the correct parent type and the parent property is set to point to the parent item. The parent information is also always duplicated in the sources collection of the BioMaterialEventData object representing the creation event. It is the responsibility of the core to make sure that everything is properly synchronized and that remaining quantities are calculated.

  • From multiple items of the same type, i.e pooling. In this case the parentType property is set, but the parent property is null. All source biomaterials are contained in the sources collection. The core is still responsible for keeping everything synchronized and to update remaining quantities.

  • As a standalone biomaterial without parents. The parentType property should be null, as should the parent property and the sources collection.

Bioplates and plate types

Biomaterial (except biosource) may optionally be placed on BioPlateData:s. A bioplate is something that collects multiple biomaterial as a unit. A bioplate typically has a PlateGeometryData that determines the number of locations on the plate (BioWellData). A single well can hold a single biomaterial at a time.

The bioplate must be of a specific BioPlateTypeData. The type can be used to put limitations on how the plate can be used. For example, it can be limited to a single type of biomaterial. It is also possible to lock wells so that the biomaterial in them can't be changed. Supported lock modes are:

  • Unlocked: Wells are unlocked and the biomaterial may be changed any number of times.

  • Locked-after-move: The well is locked after it has been used one time and the biomaterial that was put in it has been moved to another plate.

  • Locked-after-add: The well is locked after biomaterial has been put into it. It is not possible to remove the biomaterial.

  • Locked-after-create: The well is locked once it has been created. Biomaterial must be put into wells before the plate is saved to the database.

Biomaterial and plate events

An event represents something that happened to one or more biomaterials, for example the creation of another biomaterial. The BioMaterialEventData holds information about entry and event dates, protocols used, the user who is responsible, etc. There are three types of events represented by the eventType property.

  1. Creation event: This event represents the creation of a (measured) biomaterial. The sources collection contains information about the biomaterials that were used to create the new biomaterial. All sources must be of the same type. There can only be one source of the parent type. These rules are maintained by the core.

  2. Bioassay event: This event represents the creation of a bioassay. This event type is needed because we want to keep track of quantities for extracts. This event has a PhysicalBioAssayData as a product instead of a biomaterial. The sources collection can only contain extracts. If the bioassay can hold extracts in multiple positions the position property in BioMaterialEventSourceData can be used to track which extract that was put in each position. It is allowed to put multiple extracts in the same position, but then the usually need to use different TagData items. However, this is not enforced by the core.

  3. Other event: This event represents some other important information about a single biomaterial that affected the remaining quantity. This event type doesn't have any sources.

It is also possible to register events that applies to one or more bioplates using the BioPlateEventData class. The BioPlateEventParticipantData class holds information about each plate that is part of the event. The role property is a textual description of what happened to the plate. Eg. a move event, may have one source plate and one destination plate. It is recommended (but not required) that all biomaterial that are affected by the plate event are linked via a BioMaterialEventData to a BioPlateEventParticipantData. This will make it easier to keep track of the history of individual biomaterial items. Biomaterial events that are linked in this way are also automatically updated if the bioplate event is modified (eg. selecting a protocol, event date, etc.).