diff --git a/CHANGELOG.md b/CHANGELOG.md
index b9458940..92e18c3f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,38 @@
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
+## [Unreleased]
+
+### Changed
+
+* To simplify object instantiation and fields' assignment for some
+ of the response models, converted `PacBioWell` and `PacBioWellFull`
+ models to pydantic dataclasses.
+* Changed the response model for filtered by either QC status or run wells from
+ `PacBioWell` to `PacBioWellSummary`, the latter initially being identical
+ the former. In order to propagate information about a study to the tabbed
+ well summary view, added a new field, study_names, to the `PacBioWellSummary`
+ model.
+* Added a new event to the tabbed well summary view, to the button with the well
+ name. Mouse hover over this button displays study names associated with the
+ well.
+* Changed the colour scheme of the above mentioned button from grey to orange
+ if one of the studies associated with the well is the BIOSCAN study, which
+ the QC team needs to deal with slightly differently.
+* Added a new QC state 'On hold external'. Semantically the new state is similar
+ to the existing 'On hold' state. The intended purpose of the new QC state - to
+ highlight the wells, which are waiting for a completion of some off-site
+ process (example - deplexing at http://mbrave.net/).
+
+### Added
+
+* A new response model `PacBioWellSummary`, which replaces `PacBioWell`
+ in the latest's capacity of the response model for a PacBio well
+ summary.
+* A new field, `study_names`, a potentially empty sorted array of
+ unique study names, is added to the response model for a PacBio
+ well summary.
+
## [2.0.0] - 2024-02-20
### Changed
diff --git a/alembic/versions/2.1.0_extend_qc_state_dict.py b/alembic/versions/2.1.0_extend_qc_state_dict.py
new file mode 100644
index 00000000..8844d8dd
--- /dev/null
+++ b/alembic/versions/2.1.0_extend_qc_state_dict.py
@@ -0,0 +1,22 @@
+"""extend_qc_state_dict
+
+Revision ID: 2.1.0
+Revises: 2.0.0
+Create Date: 2024-03-19 12:31:26.359652
+
+"""
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = "2.1.0"
+down_revision = "2.0.0"
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ op.execute("INSERT INTO qc_state_dict VALUES ('On hold external', NULL)")
+
+
+def downgrade() -> None:
+ op.execute("DELETE FROM qc_state_dict WHERE state='On hold external'")
diff --git a/frontend/src/components/QcView.vue b/frontend/src/components/QcView.vue
index d1783be6..0ab4c6aa 100644
--- a/frontend/src/components/QcView.vue
+++ b/frontend/src/components/QcView.vue
@@ -5,7 +5,7 @@
import { computed } from "vue";
import groupMetrics from "../utils/metrics.js";
- import combineLabelWithPlate from "../utils/text.js"
+ import { combineLabelWithPlate } from "../utils/text.js"
const props = defineProps({
// Well object representing one prepared input for the instrument
diff --git a/frontend/src/components/WellTable.vue b/frontend/src/components/WellTable.vue
index d0522d2e..3d6eb6ea 100644
--- a/frontend/src/components/WellTable.vue
+++ b/frontend/src/components/WellTable.vue
@@ -2,7 +2,11 @@
/*
* Renders a table for a list of wells and generates buttons for selecting wells
*/
-import combineLabelWithPlate from "../utils/text.js"
+import { combineLabelWithPlate, listStudiesForTooltip } from "../utils/text.js"
+import { ElTooltip, ElButton } from "element-plus";
+
+const tooltipDelay = 500
+const studyNameHighlight = 'BIOSCAN UK for flying insects'
defineProps({
wellCollection: Object
@@ -28,9 +32,17 @@ defineEmits(['wellSelected'])
{{ wellObj.run_name }}
-
- {{ combineLabelWithPlate(wellObj.label, wellObj.plate_number) }}
-
+
+
+ {{ combineLabelWithPlate(wellObj.label, wellObj.plate_number) }}
+
+
{{ wellObj.instrument_type }} {{ wellObj.instrument_name }}
{{ wellObj.qc_state ? wellObj.qc_state.qc_state : ' ' }}
diff --git a/frontend/src/components/__tests__/WellTable.spec.js b/frontend/src/components/__tests__/WellTable.spec.js
index b7dcd97a..13749671 100644
--- a/frontend/src/components/__tests__/WellTable.spec.js
+++ b/frontend/src/components/__tests__/WellTable.spec.js
@@ -7,9 +7,33 @@ describe('Rows of data give rows in the table', () => {
const table = mount(WellTable, {
props: {
wellCollection: [
- {run_name: 'TEST1', label: 'A1', plate_number: null, instrument_name: '1234', instrument_type: 'Revio', id_product: 'ABCDEF'},
- {run_name: 'TEST1', label: 'B1', plate_number: null, instrument_name: '1234', instrument_type: 'Revio', id_product: '123456'},
- {run_name: 'TEST2', label: 'A1', plate_number: 1, instrument_name: '1234', instrument_type: 'Revio', id_product: '123457'},
+ {
+ run_name: 'TEST1',
+ label: 'A1',
+ plate_number: null,
+ instrument_name: '1234',
+ instrument_type: 'Revio',
+ id_product: 'ABCDEF',
+ study_names: []
+ },
+ {
+ run_name: 'TEST1',
+ label: 'B1',
+ plate_number: null,
+ instrument_name: '1234',
+ instrument_type: 'Revio',
+ id_product: '123456',
+ study_names: ['Study name 1', 'Study name 2']
+ },
+ {
+ run_name: 'TEST2',
+ label: 'A1',
+ plate_number: 1,
+ instrument_name: '1234',
+ instrument_type: 'Revio',
+ id_product: '123457',
+ study_names: ['BIOSCAN UK for flying insects']
+ },
]
}
})
@@ -40,7 +64,14 @@ describe('Rows of data give rows in the table', () => {
expect(table.emitted().wellSelected[0][0]).toHaveProperty('idProduct')
expect(table.emitted().wellSelected[0][0].idProduct).toEqual('ABCDEF')
- await rows[2].find('button').trigger('click')
+ let wellButton = rows[2].find('button')
+ await wellButton.trigger('click')
expect(table.emitted().wellSelected[1][0].idProduct).toEqual('123456')
+ expect(wellButton.classes('el-tooltip__trigger')).toBeTruthy()
+ expect(wellButton.classes('el-button--info')).toBeTruthy()
+
+ wellButton = rows[3].find('button')
+ expect(wellButton.classes('el-tooltip__trigger')).toBeTruthy()
+ expect(wellButton.classes('el-button--warning')).toBeTruthy()
})
})
diff --git a/frontend/src/utils/__tests__/text.spec.js b/frontend/src/utils/__tests__/text.spec.js
index 1d0be431..4d573097 100644
--- a/frontend/src/utils/__tests__/text.spec.js
+++ b/frontend/src/utils/__tests__/text.spec.js
@@ -1,7 +1,7 @@
import { describe, test, expect } from 'vitest'
-import combineLabelWithPlate from '../text'
+import { combineLabelWithPlate, listStudiesForTooltip } from '../text'
-describe('Text processing', () => {
+describe('Well label and plate display', () => {
test('Print well label without plate number', () => {
expect(combineLabelWithPlate('A1', undefined)).toEqual('A1')
expect(combineLabelWithPlate('A1', null)).toEqual('A1')
@@ -11,3 +11,18 @@ describe('Text processing', () => {
expect(combineLabelWithPlate('A1', 1)).toEqual('1-A1')
})
})
+
+describe('Study names tooltip', () => {
+ test('Display a warning in case of an empty study array', () => {
+ expect(listStudiesForTooltip([])).toEqual('No study info')
+ })
+
+ test('Display a single study name for an array of one study', () => {
+ expect(listStudiesForTooltip(['My single study'])).toEqual('My single study')
+ })
+
+ test('Display multiple lines for multiple studies', () => {
+ expect(listStudiesForTooltip(['Study One', 'Study two', 'Study 3'])).toEqual(
+ 'Study One Study two Study 3')
+ })
+})
diff --git a/frontend/src/utils/text.js b/frontend/src/utils/text.js
index 34f6130a..1721f4e6 100644
--- a/frontend/src/utils/text.js
+++ b/frontend/src/utils/text.js
@@ -1,9 +1,16 @@
// Reusable text-mangling for the interface
-export default function combineLabelWithPlate(well, plate) {
+export { combineLabelWithPlate, listStudiesForTooltip }
+
+function combineLabelWithPlate(well, plate) {
if (!plate) {
return well
} else {
return `${plate}-${well}`
}
}
+
+function listStudiesForTooltip(study_names) {
+ let names = study_names.length == 0 ? ['No study info'] : study_names
+ return names.join(' ')
+}
diff --git a/frontend/src/views/__tests__/WellsByRun.spec.js b/frontend/src/views/__tests__/WellsByRun.spec.js
index 7f645310..fa1991e8 100644
--- a/frontend/src/views/__tests__/WellsByRun.spec.js
+++ b/frontend/src/views/__tests__/WellsByRun.spec.js
@@ -38,6 +38,7 @@ for (let index = 0; index < 2; index++) {
instrument_name: "1234",
instrument_type: "Revio",
id_product: `${index}23456`,
+ study_names: [`Study ${index}`, 'Another study'],
...someLinkGeneration
})
}
@@ -48,6 +49,7 @@ const secondaryRun = {
instrument_name: '1234',
instrument_type: 'Revio',
id_product: 'ABCDEF',
+ study_names: [],
...someLinkGeneration
}
@@ -141,7 +143,6 @@ describe('Does it work?', async () => {
let buttons = wrapper.findAll('button')
buttons[1].trigger('click')
await flushPromises()
-
expect(wrapper.get('#well_summary').exists()).toBe(true)
})
diff --git a/frontend/src/views/__tests__/WellsByStatus.spec.js b/frontend/src/views/__tests__/WellsByStatus.spec.js
index 654fb80a..6d61ed84 100644
--- a/frontend/src/views/__tests__/WellsByStatus.spec.js
+++ b/frontend/src/views/__tests__/WellsByStatus.spec.js
@@ -31,7 +31,8 @@ for (let index = 0; index < 10; index++) {
well_status: "Complete",
qc_state: null,
instrument_name: 1234,
- instrument_type: 'Revio'
+ instrument_type: 'Revio',
+ study_names: ['Some study'],
})
}
@@ -140,6 +141,7 @@ describe('View loads configuration on mount', async () => {
qc_state: null,
instrument_name: '1234',
instrument_type: 'Revio',
+ study_names: [],
}]
})
)
diff --git a/lang_qc/db/helper/wells.py b/lang_qc/db/helper/wells.py
index 91c1d9b7..976dd632 100644
--- a/lang_qc/db/helper/wells.py
+++ b/lang_qc/db/helper/wells.py
@@ -33,7 +33,7 @@
)
from lang_qc.db.mlwh_schema import PacBioRunWellMetrics
from lang_qc.db.qc_schema import QcState, QcStateDict, QcType
-from lang_qc.models.pacbio.well import PacBioPagedWells, PacBioWell
+from lang_qc.models.pacbio.well import PacBioPagedWells, PacBioWellSummary
from lang_qc.models.pager import PagedResponse
from lang_qc.models.qc_flow_status import QcFlowStatusEnum
from lang_qc.models.qc_state import QcState as QcStateModel
@@ -169,10 +169,10 @@ class PacBioPagedWellsFactory(WellWh, PagedResponse):
# For MySQL it's OK to use case-sensitive comparison operators since
# its string comparisons for the collation we use are case-insensitive.
FILTERS: ClassVar = {
- QcFlowStatusEnum.ON_HOLD.name: (QcStateDict.state == "On hold"),
+ QcFlowStatusEnum.ON_HOLD.name: (QcStateDict.state.ilike("On hold%")),
QcFlowStatusEnum.QC_COMPLETE.name: (QcState.is_preliminary == 0),
QcFlowStatusEnum.IN_PROGRESS.name: and_(
- QcState.is_preliminary == 1, QcStateDict.state != "On hold"
+ QcState.is_preliminary == 1, QcStateDict.state.notilike("On hold%")
),
QcFlowStatusEnum.ABORTED.name: or_(
PacBioRunWellMetrics.well_status.like("Abort%"),
@@ -195,7 +195,7 @@ def create_for_qc_status(
specified by the `page_size`, `page_number` object's attributes and
`qc_flow_status` argument of this function..
- The `PacBioWell` objects in `wells` attribute of the returned object
+ The `PacBioWellPacBioWell` objects in `wells` attribute of the returned object
are sorted in a way appropriate for the requested `qc_flow_status`.
For the 'in progress' and 'on hold' requests the wells with most recently
assigned QC states come first. For inbox requests the wells with least
@@ -230,7 +230,7 @@ def create_for_run(self, run_name: str) -> PacBioPagedWells:
"""
Returns `PacBioPagedWells` object that corresponds to the criteria
specified by the `page_size` and `page_number` attributes.
- The `PacBioWell` objects in `wells` attribute of the returned object
+ The `PacBioWellSummary` objects in `wells` attribute of the returned object
belong to runs specified by the `run_name` argument and are sorted
by the run name and well label.
"""
@@ -281,7 +281,7 @@ def _retrieve_paged_qc_states(
def _get_wells_for_status(
self, qc_flow_status: QcFlowStatusEnum
- ) -> List[PacBioWell]:
+ ) -> List[PacBioWellSummary]:
wells = []
@@ -290,7 +290,7 @@ def _get_wells_for_status(
id_product = qc_state_model.id_product
mlwh_well = self.get_mlwh_well_by_product_id(id_product=id_product)
if mlwh_well is not None:
- pbw = PacBioWell(db_well=mlwh_well, qc_state=qc_state_model)
+ pbw = PacBioWellSummary(db_well=mlwh_well, qc_state=qc_state_model)
wells.append(pbw)
else:
"""
@@ -394,7 +394,7 @@ def _well_models(
qc_state = None
if id_product in qced_products:
qc_state = qced_products[id_product][0]
- pb_well = PacBioWell(db_well=db_well, qc_state=qc_state)
+ pb_well = PacBioWellSummary(db_well=db_well, qc_state=qc_state)
pb_wells.append(pb_well)
return pb_wells
diff --git a/lang_qc/db/mlwh_schema.py b/lang_qc/db/mlwh_schema.py
index 533c80ea..2a98011a 100644
--- a/lang_qc/db/mlwh_schema.py
+++ b/lang_qc/db/mlwh_schema.py
@@ -538,6 +538,27 @@ class PacBioRunWellMetrics(Base):
"PacBioProductMetrics", back_populates="pac_bio_run_well_metrics"
)
+ def get_experiment_info(self):
+ """Returns a list of PacBioRun mlwh database rows.
+
+ Returns LIMS information about the PacBio experiment
+ for this well, one pac_bio_run table row per sample
+ (product) in the well.
+
+ If any or all of the pac_bio_product_metrics rows linked
+ to this well record are not linked to the pac_bio_run
+ table, and empty array is returned, thus preventing incomplete
+ data being supplied to the client.
+ """
+ product_metrics = self.pac_bio_product_metrics
+ experiment_info = [
+ pbr for pbr in [pm.pac_bio_run for pm in product_metrics] if pbr is not None
+ ]
+ if len(experiment_info) != len(product_metrics):
+ experiment_info = []
+
+ return experiment_info
+
class PacBioProductMetrics(Base):
__tablename__ = "pac_bio_product_metrics"
diff --git a/lang_qc/endpoints/config.py b/lang_qc/endpoints/config.py
index 2436ab16..0f8dbb19 100644
--- a/lang_qc/endpoints/config.py
+++ b/lang_qc/endpoints/config.py
@@ -65,6 +65,8 @@ def _states_for_update(session) -> List:
states = []
for (name, row) in qc_state_dict(session).items():
if name not in ["Aborted", "Claimed"]:
- states.append({"description": name, "only_prelim": row.state == "On hold"})
+ states.append(
+ {"description": name, "only_prelim": "on hold" in row.state.lower()}
+ )
return states
diff --git a/lang_qc/models/pacbio/well.py b/lang_qc/models/pacbio/well.py
index 9deea4f0..d2047a59 100644
--- a/lang_qc/models/pacbio/well.py
+++ b/lang_qc/models/pacbio/well.py
@@ -60,7 +60,7 @@ class PacBioWell:
`run_name`, `label`, `plate_number`, and `id_product` fields uniquely
identify the well. The model also has fields that reflect the time line
of the run and information about a PacBio instrument. The optional
- `qc_state field might contain the current QC state of the well.
+ `qc_state` field might contain the current QC state of the well.
The best way to instantiate the model is via the constructor, supplying
the an ORM object representing a database row with information about
@@ -133,6 +133,7 @@ def pre_root(cls, values: dict[str, Any]) -> dict[str, Any]:
# https://github.com/pydantic/pydantic-core/blob/main/python/pydantic_core/_pydantic_core.pyi
mlwh_db_row: PacBioRunWellMetrics = values.kwargs["db_well"]
+ assert mlwh_db_row
column_names = [column.key for column in PacBioRunWellMetrics.__table__.columns]
@@ -147,14 +148,41 @@ def pre_root(cls, values: dict[str, Any]) -> dict[str, Any]:
return assigned
+@dataclass(kw_only=True, frozen=True)
+class PacBioWellSummary(PacBioWell):
+ """A response model for a summary about a single PacBio well.
+
+ Adds `study_names` to a list of attributes of the parent class `PacBioWell`.
+ Instance creation is described in the documentation of the parent class.
+
+ `get_experiment_info` method in this package is used to retrieve study
+ information, see its documentation for details.
+ """
+
+ study_names: list = Field(
+ title="An alphabetically sorted list of distinct study names",
+ )
+
+ @model_validator(mode="before")
+ def pre_root(cls, values: dict[str, Any]) -> dict[str, Any]:
+
+ assigned = super().pre_root(values)
+ mlwh_db_row: PacBioRunWellMetrics = values.kwargs["db_well"]
+ assigned["study_names"] = sorted(
+ set([row.study.name for row in mlwh_db_row.get_experiment_info()])
+ )
+
+ return assigned
+
+
class PacBioPagedWells(PagedResponse, extra="forbid"):
"""A response model for paged data about PacBio wells."""
- wells: list[PacBioWell] = Field(
+ wells: list[PacBioWellSummary] = Field(
default=[],
- title="A list of PacBioWell objects",
+ title="A list of PacBioWellSummary objects",
description="""
- A list of `PacBioWell` objects that corresponds to the page number
+ A list of `PacBioWellSummary` objects that corresponds to the page number
and size specified by the `page_size` and `page_number` attributes.
""",
)
@@ -164,13 +192,16 @@ class PacBioPagedWells(PagedResponse, extra="forbid"):
class PacBioWellFull(PacBioWell):
"""A full response model for a single PacBio well.
- The model has teh fields that uniquely define the well (`run_name`, `label`,
+ The model has the fields that uniquely define the well (`run_name`, `label`,
`plate_number`, `id_product`), along with the laboratory experiment and
sequence run tracking information, current QC state of this well and
QC data for this well.
Instance creation is described in the documentation of this class's parent
`PacBioWell`.
+
+ `get_experiment_info` method in this package is used to retrieve information
+ about the experiment, see its documentation for details.
"""
metrics: QCDataWell = Field(
@@ -189,16 +220,9 @@ def pre_root(cls, values: dict[str, Any]) -> dict[str, Any]:
assigned = super().pre_root(values)
mlwh_db_row: PacBioRunWellMetrics = values.kwargs["db_well"]
-
assigned["metrics"] = QCDataWell.from_orm(mlwh_db_row)
-
- product_metrics = mlwh_db_row.pac_bio_product_metrics
- experiment_info = [
- pbr for pbr in [pm.pac_bio_run for pm in product_metrics] if pbr is not None
- ]
- # Occasionally product rows are not linked to LIMS rows.
- # Go for all or nothing, do not supply incomplete data.
- if len(experiment_info) and (len(experiment_info) == len(product_metrics)):
+ experiment_info = mlwh_db_row.get_experiment_info()
+ if len(experiment_info):
assigned["experiment_tracking"] = PacBioExperiment.from_orm(experiment_info)
return assigned
diff --git a/tests/conftest.py b/tests/conftest.py
index b4588056..0178e469 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -20,15 +20,6 @@
test_ini = os.path.join(os.path.dirname(__file__), "testdb.ini")
-@pytest.fixture(scope="package")
-def config() -> configparser.ConfigParser:
- # Database credentials for the test MySQL instance are stored here. This
- # should be an instance in a container, discarded after each test run.
- test_config = configparser.ConfigParser()
- test_config.read(test_ini)
- return test_config
-
-
def mysql_url(
config: configparser.ConfigParser,
section: str,
@@ -70,6 +61,43 @@ def mysql_url(
)
+def insert_from_yaml(session, dir_path, module_name):
+
+ # Load the schema module where the table ORM classes are defined.
+ module = importlib.import_module(module_name)
+
+ # Find all files in a given directory.
+ dir_obj = pathlib.Path(dir_path)
+ file_paths = list(str(f) for f in dir_obj.iterdir())
+ file_paths.sort()
+
+ for file_path in file_paths:
+ with open(file_path, "r") as f:
+ (head, file_name) = os.path.split(file_path)
+ # File name example: 200-PacBioRun.yml
+ m = re.match(r"\A\d+-([a-zA-Z]+)\.yml\Z", file_name)
+ if m is not None:
+ class_name = m.group(1)
+ table_class = getattr(module, class_name)
+ data = yaml.safe_load(f)
+ session.execute(insert(table_class), data)
+
+ session.commit()
+
+
+def compare_dates(date_obj, date_string):
+ assert date_obj.isoformat(sep=" ", timespec="seconds") == date_string
+
+
+@pytest.fixture(scope="package")
+def config() -> configparser.ConfigParser:
+ # Database credentials for the test MySQL instance are stored here. This
+ # should be an instance in a container, discarded after each test run.
+ test_config = configparser.ConfigParser()
+ test_config.read(test_ini)
+ return test_config
+
+
@pytest.fixture(scope="module", name="mlwhdb_test_sessionfactory")
def create_mlwhdb_test_sessionfactory(config):
"""Create a MLWH SQLAlchemy session factory, using credentials from config.
@@ -165,30 +193,8 @@ def override_get_qc_db():
return client
-def insert_from_yaml(session, dir_path, module_name):
-
- # Load the schema module where the table ORM classes are defined.
- module = importlib.import_module(module_name)
-
- # Find all files in a given directory.
- dir_obj = pathlib.Path(dir_path)
- file_paths = list(str(f) for f in dir_obj.iterdir())
- file_paths.sort()
-
- for file_path in file_paths:
- with open(file_path, "r") as f:
- (head, file_name) = os.path.split(file_path)
- # File name example: 200-PacBioRun.yml
- m = re.match(r"\A\d+-([a-zA-Z]+)\.yml\Z", file_name)
- if m is None:
- raise Exception(f"Unexpected file {file_path} in fixtures.")
- class_name = m.group(1)
- table_class = getattr(module, class_name)
- data = yaml.safe_load(f)
- session.execute(insert(table_class), data)
-
- session.commit()
-
-
-def compare_dates(date_obj, date_string):
- assert date_obj.isoformat(sep=" ", timespec="seconds") == date_string
+@pytest.fixture(scope="module", name="mlwhdb_load_runs")
+def mlwhdb_load_from_yaml(mlwhdb_test_session):
+ insert_from_yaml(
+ mlwhdb_test_session, "tests/data/mlwh_pb_runs", "lang_qc.db.mlwh_schema"
+ )
diff --git a/tests/data/mlwh_pb_demux_525/200-PacBioRunWellMetrics.yml b/tests/data/mlwh_pb_demux_525/200-PacBioRunWellMetrics.yml
deleted file mode 100644
index 9c24aedd..00000000
--- a/tests/data/mlwh_pb_demux_525/200-PacBioRunWellMetrics.yml
+++ /dev/null
@@ -1,132 +0,0 @@
----
-# Two runs, one with a well with no deplexing, the other with
-- adapter_dimer_percent: 0
- binding_kit: Sequel II Binding Kit 2.2
- ccs_execution_mode: OnInstrument
- cell_lot_number: 417079
- chemistry_sw_version: 10.2.0.133424
- chip_type: 8mChip
- control_concordance_mean: 0.868282
- control_concordance_mode: 0.91
- control_num_reads: 24837
- control_read_length_mean: 50169
- created_by: eg18
- demultiplex_mode: OnInstrument
- heteroduplex_analysis: ~
- hifi_barcoded_reads: ~
- hifi_bases_in_barcoded_reads: ~
- hifi_low_quality_num_reads: 260532
- hifi_low_quality_read_bases: 2670039556
- hifi_low_quality_read_length_mean: 10248
- hifi_low_quality_read_quality_median: 17
- hifi_num_reads: 2877051
- hifi_number_passes_mean: 18
- hifi_only_reads: ~
- hifi_read_bases: 27076668646
- hifi_read_length_mean: 9411
- hifi_read_quality_median: 43
- id_pac_bio_product: cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa61
- id_pac_bio_rw_metrics_tmp: 1732
- include_kinetics: 0
- insert_length_mean: 16227
- insert_length_n50: 23250
- instrument_name: 64222E
- instrument_sw_version: 10.1.0.119549
- instrument_type: Sequel2e
- loading_conc: 80
- local_base_rate: 2.76789
- movie_minutes: 1800
- movie_name: m64222e_220414_130247
- p0_num: 2800130
- p1_num: 5033971
- p2_num: 180570
- pac_bio_run_name: TRACTION-RUN-92
- polymerase_num_reads: 5009134
- polymerase_read_bases: 645567171652
- polymerase_read_length_mean: 128878
- polymerase_read_length_n50: 251250
- primary_analysis_sw_version: 10.1.0.119549
- productive_zmws_num: 7989834
- run_complete: 2022-04-20 09:16:53
- run_start: 2022-04-14 12:52:34
- run_status: Complete
- run_transfer_complete: 2022-04-20 16:03:18
- sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
- sequencing_kit_lot_number: 123660
- short_insert_percent: 0
- sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
- sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
- sl_ccs_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29ro
- ts_run_name: r64222e_20220414_125138
- unique_molecular_bases: 68501667840
- well_complete: 2022-04-16 12:36:21
- well_label: A1
- well_start: 2022-04-14 13:02:48
- well_status: Complete
-- id_pac_bio_rw_metrics_tmp: 3725
- id_pac_bio_product: 7454d3e822388a257437d1736361fb00c7493ab8b24ecd8ce3506ff45deb6716
- pac_bio_run_name: TRACTION-RUN-525
- well_label: A1
- qc_seq_state: Passed
- qc_seq_state_is_final: 1
- qc_seq_date: 2023-04-12 16:49:52
- qc_seq: 1
- instrument_type: Revio
- instrument_name: 84047
- chip_type: 25mChip
- sl_hostname: pacbio02.dnapipelines.sanger.ac.uk
- sl_run_uuid: f1490bb9-7a99-45b2-9d79-24582881742d
- sl_ccs_uuid: a9ad9f86-04c2-4194-ba69-48240cb745f9
- ts_run_name: r84047_20230404_164149
- movie_name: m84047_230404_164952_s1
- movie_minutes: 1440
- created_by: chc
- binding_kit: Revio polymerase kit
- sequencing_kit: Revio sequencing plate
- sequencing_kit_lot_number: 030157
- cell_lot_number: 1000000291
- ccs_execution_mode: OnInstrument
- demultiplex_mode: OnInstrument
- include_kinetics: 1
- hifi_only_reads: 1
- heteroduplex_analysis: 0
- loading_conc: 227
- run_start: 2023-04-04 16:42:51
- run_complete: 2023-04-05 23:16:26
- run_transfer_complete: 2023-04-06 16:28:42
- run_status: Complete
- well_start: 2023-04-04 16:49:53
- well_complete: 2023-04-06 10:15:28
- well_status: Complete
- chemistry_sw_version: 12.0.0.172289
- instrument_sw_version: 12.0.0.178953
- primary_analysis_sw_version: 12.0.0.1
- control_num_reads: 2724
- control_concordance_mean: 0.899633
- control_concordance_mode: 0.91
- control_read_length_mean: 59917
- local_base_rate: 2.182480
- polymerase_read_bases: 1324865295449
- polymerase_num_reads: 18759739
- polymerase_read_length_mean: 70623
- polymerase_read_length_n50: 132750
- insert_length_mean: 14885
- insert_length_n50: 20250
- unique_molecular_bases: 250195427328
- productive_zmws_num: 16777216
- p0_num: 5846918
- p1_num: 18762463
- p2_num: 556443
- adapter_dimer_percent: 0.00
- short_insert_percent: 0.00
- hifi_read_bases: 92922481974
- hifi_num_reads: 8297069
- hifi_read_length_mean: 11199
- hifi_read_quality_median: 34
- hifi_number_passes_mean: 14
- hifi_low_quality_read_bases: NULL
- hifi_low_quality_num_reads: NULL
- hifi_low_quality_read_length_mean: NULL
- hifi_low_quality_read_quality_median: NULL
- hifi_barcoded_reads: 8255091
- hifi_bases_in_barcoded_reads: 92439476821
diff --git a/tests/data/mlwh_pb_run_92/100-Study.yml b/tests/data/mlwh_pb_run_92/100-Study.yml
deleted file mode 100644
index 86e6fed4..00000000
--- a/tests/data/mlwh_pb_run_92/100-Study.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-- accession_number: ERP129860
- aligned: 1
- contains_human_dna: 0
- contaminated_human_dna: 0
- id_lims: SQSCP
- id_study_lims: 6457
- id_study_tmp: 6287
- name: Tree of Life - ASG
- reference_genome: ' '
- remove_x_and_autosomes: 0
- separate_y_chromosome_data: 0
- study_title: Tree of Life - ASG
- study_visibility: Public
- uuid_study_lims: 8d58238e-a2b5-11eb-84d2-fa163eac3af7
-- accession_number: ERP116890
- aligned: 1
- contains_human_dna: 0
- contaminated_human_dna: 0
- id_lims: SQSCP
- id_study_lims: 5901
- id_study_tmp: 5735
- name: DTOL_Darwin Tree of Life
- reference_genome: ' '
- remove_x_and_autosomes: 0
- separate_y_chromosome_data: 0
- study_title: Darwin Tree of Life
- study_visibility: Public
- uuid_study_lims: cf04ea86-ac82-11e9-8998-68b599768938
-- accession_number: ERP141224
- aligned: 1
- contains_human_dna: 0
- contaminated_human_dna: 0
- description: Study for release prior to publication of selected datasets
- id_lims: SQSCP
- id_study_lims: 7069
- id_study_tmp: 6942
- name: Alternative Enzymes 2022 microbial genomes
- reference_genome: Clostridium_difficile (Strain_630)
- remove_x_and_autosomes: 0
- separate_y_chromosome_data: 0
- study_title: Alternative Enzymes 2022 microbial genomes
- study_visibility: Public
- uuid_study_lims: 39ba6ae6-3500-11ed-b3f3-fa163eac3af7
diff --git a/tests/data/mlwh_pb_run_92/200-PacBioRunWellMetrics.yml b/tests/data/mlwh_pb_run_92/200-PacBioRunWellMetrics.yml
deleted file mode 100644
index f3461522..00000000
--- a/tests/data/mlwh_pb_run_92/200-PacBioRunWellMetrics.yml
+++ /dev/null
@@ -1,253 +0,0 @@
----
-- adapter_dimer_percent: 0
- binding_kit: Sequel II Binding Kit 2.2
- ccs_execution_mode: OnInstrument
- cell_lot_number: 417079
- chemistry_sw_version: 10.2.0.133424
- chip_type: 8mChip
- control_concordance_mean: 0.868282
- control_concordance_mode: 0.91
- control_num_reads: 24837
- control_read_length_mean: 50169
- created_by: eg18
- demultiplex_mode: ~
- heteroduplex_analysis: ~
- hifi_barcoded_reads: ~
- hifi_bases_in_barcoded_reads: ~
- hifi_low_quality_num_reads: 260532
- hifi_low_quality_read_bases: 2670039556
- hifi_low_quality_read_length_mean: 10248
- hifi_low_quality_read_quality_median: 17
- hifi_num_reads: 2877051
- hifi_number_passes_mean: 18
- hifi_only_reads: ~
- hifi_read_bases: 27076668646
- hifi_read_length_mean: 9411
- hifi_read_quality_median: 43
- id_pac_bio_product: cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa61
- id_pac_bio_rw_metrics_tmp: 1732
- include_kinetics: 0
- insert_length_mean: 16227
- insert_length_n50: 23250
- instrument_name: 64222E
- instrument_sw_version: 10.1.0.119549
- instrument_type: Sequel2e
- loading_conc: 80
- local_base_rate: 2.76789
- movie_minutes: 1800
- movie_name: m64222e_220414_130247
- p0_num: 2800130
- p1_num: 5033971
- p2_num: 180570
- pac_bio_run_name: TRACTION-RUN-92
- polymerase_num_reads: 5009134
- polymerase_read_bases: 645567171652
- polymerase_read_length_mean: 128878
- polymerase_read_length_n50: 251250
- primary_analysis_sw_version: 10.1.0.119549
- productive_zmws_num: 7989834
- run_complete: 2022-04-20 09:16:53
- run_start: 2022-04-14 12:52:34
- run_status: Complete
- run_transfer_complete: 2022-04-20 16:03:18
- sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
- sequencing_kit_lot_number: 123660
- short_insert_percent: 0
- sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
- sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
- sl_ccs_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29ro
- ts_run_name: r64222e_20220414_125138
- unique_molecular_bases: 68501667840
- well_complete: 2022-04-16 12:36:21
- well_label: A1
- well_start: 2022-04-14 13:02:48
- well_status: Complete
-- adapter_dimer_percent: 0
- binding_kit: Sequel II Binding Kit 2.2
- ccs_execution_mode: OnInstrument
- cell_lot_number: 417079
- chemistry_sw_version: 10.2.0.133424
- chip_type: 8mChip
- control_concordance_mean: 0.865786
- control_concordance_mode: 0.91
- control_num_reads: 42962
- control_read_length_mean: 51810
- created_by: eg18
- demultiplex_mode: ~
- heteroduplex_analysis: ~
- hifi_barcoded_reads: ~
- hifi_bases_in_barcoded_reads: ~
- hifi_low_quality_num_reads: 204155
- hifi_low_quality_read_bases: 1887795985
- hifi_low_quality_read_length_mean: 9246
- hifi_low_quality_read_quality_median: 16
- hifi_num_reads: 2082542
- hifi_number_passes_mean: 18
- hifi_only_reads: ~
- hifi_read_bases: 17706147796
- hifi_read_length_mean: 8502
- hifi_read_quality_median: 40
- id_pac_bio_product: 63fb9a37ff19c248fc7d99bd254a61085226ded540de7c5445daf1398e339833
- id_pac_bio_rw_metrics_tmp: 1733
- include_kinetics: 0
- insert_length_mean: 16407
- insert_length_n50: 28250
- instrument_name: 64222E
- instrument_sw_version: 10.1.0.119549
- instrument_type: Sequel2e
- loading_conc: 80
- local_base_rate: 2.80566
- movie_minutes: 1800
- movie_name: m64222e_220415_235643
- p0_num: 4427179
- p1_num: 3512385
- p2_num: 75107
- pac_bio_run_name: TRACTION-RUN-92
- polymerase_num_reads: 3469423
- polymerase_read_bases: 455958509506
- polymerase_read_length_mean: 131422
- polymerase_read_length_n50: 251750
- primary_analysis_sw_version: 10.1.0.119549
- productive_zmws_num: 7971709
- run_complete: 2022-04-20 09:16:53
- run_start: 2022-04-14 12:52:34
- run_status: Complete
- run_transfer_complete: 2022-04-20 16:03:18
- sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
- sequencing_kit_lot_number: 123660
- short_insert_percent: 0
- sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
- sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
- sl_ccs_uuid: ~
- ts_run_name: r64222e_20220414_125138
- unique_molecular_bases: 45990051840
- well_complete: 2022-04-17 23:16:35
- well_label: B1
- well_start: 2022-04-15 23:56:43
- well_status: Complete
-- adapter_dimer_percent: 0
- binding_kit: Sequel II Binding Kit 2.2
- ccs_execution_mode: OnInstrument
- cell_lot_number: 417079
- chemistry_sw_version: 10.2.0.133424
- chip_type: 8mChip
- control_concordance_mean: 0.866249
- control_concordance_mode: 0.89
- control_num_reads: 40787
- control_read_length_mean: 49421
- created_by: eg18
- demultiplex_mode: ~
- heteroduplex_analysis: ~
- hifi_low_quality_num_reads: 173039
- hifi_low_quality_read_bases: 1743404181
- hifi_low_quality_read_length_mean: 10075
- hifi_low_quality_read_quality_median: 17
- hifi_num_reads: 1698191
- hifi_number_passes_mean: 17
- hifi_only_reads: ~
- hifi_read_bases: 16029605719
- hifi_read_length_mean: 9439
- hifi_read_quality_median: 40
- hifi_barcoded_reads: ~
- hifi_bases_in_barcoded_reads: ~
- id_pac_bio_product: a65eae06f3048a186aeb9104d0a8d3f46ca59dff7747eec9918fcfa85587a3c2
- id_pac_bio_rw_metrics_tmp: 1734
- include_kinetics: 0
- insert_length_mean: 15260
- insert_length_n50: 15750
- instrument_name: 64222E
- instrument_sw_version: 10.1.0.119549
- instrument_type: Sequel2e
- loading_conc: 130
- local_base_rate: 2.76102
- movie_minutes: 1800
- movie_name: m64222e_220417_105320
- p0_num: 5019384
- p1_num: 2944690
- p2_num: 50597
- pac_bio_run_name: TRACTION-RUN-92
- polymerase_num_reads: 2903903
- polymerase_read_bases: 360656040891
- polymerase_read_length_mean: 124197
- polymerase_read_length_n50: 244750
- primary_analysis_sw_version: 10.1.0.119549
- productive_zmws_num: 7973884
- run_complete: 2022-04-20 09:16:53
- run_start: 2022-04-14 12:52:34
- run_status: Complete
- run_transfer_complete: 2022-04-20 16:03:18
- sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
- sequencing_kit_lot_number: 123660
- short_insert_percent: 0
- sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
- sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
- sl_ccs_uuid: ~
- ts_run_name: r64222e_20220414_125138
- unique_molecular_bases: 37178580992
- well_complete: 2022-04-19 04:22:35
- well_label: C1
- well_start: 2022-04-17 10:53:21
- well_status: Complete
-- adapter_dimer_percent: 0
- binding_kit: Sequel II Binding Kit 2.2
- ccs_execution_mode: OnInstrument
- cell_lot_number: 417079
- chemistry_sw_version: 10.2.0.133424
- chip_type: 8mChip
- control_concordance_mean: 0.863292
- control_concordance_mode: 0.91
- control_num_reads: 24842
- control_read_length_mean: 44982
- created_by: eg18
- demultiplex_mode: ~
- heteroduplex_analysis: ~
- hifi_barcoded_reads: ~
- hifi_bases_in_barcoded_reads: ~
- hifi_low_quality_num_reads: 193115
- hifi_low_quality_read_bases: 1672216211
- hifi_low_quality_read_length_mean: 8659
- hifi_low_quality_read_quality_median: 16
- hifi_num_reads: 1912626
- hifi_number_passes_mean: 18
- hifi_only_reads: ~
- hifi_read_bases: 14052550494
- hifi_read_length_mean: 7347
- hifi_read_quality_median: 41
- id_pac_bio_product: c5babd5516f7b9faab8415927e5f300d5152bb96b8b922e768d876469a14fa5d
- id_pac_bio_rw_metrics_tmp: 1735
- include_kinetics: 0
- insert_length_mean: 15043
- insert_length_n50: 33750
- instrument_name: 64222E
- instrument_sw_version: 10.1.0.119549
- instrument_type: Sequel2e
- loading_conc: 80
- local_base_rate: 2.71738
- movie_minutes: 1800
- movie_name: m64222e_220418_214938
- p0_num: 3784476
- p1_num: 4078117
- p2_num: 152078
- pac_bio_run_name: TRACTION-RUN-92
- polymerase_num_reads: 4053275
- polymerase_read_bases: 405355872925
- polymerase_read_length_mean: 100007
- polymerase_read_length_n50: 234250
- primary_analysis_sw_version: 10.1.0.119549
- productive_zmws_num: 7989829
- run_complete: 2022-04-20 09:16:53
- run_start: 2022-04-14 12:52:34
- run_status: Complete
- run_transfer_complete: 2022-04-20 16:03:18
- sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
- sequencing_kit_lot_number: 123660
- short_insert_percent: 0.01
- sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
- sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
- sl_ccs_uuid: ~
- ts_run_name: r64222e_20220414_125138
- unique_molecular_bases: 48624848896
- well_complete: 2022-04-20 16:03:18
- well_label: D1
- well_start: 2022-04-18 21:49:38
- well_status: Complete
diff --git a/tests/data/mlwh_pb_run_92/300-PacBioProductMetrics.yml b/tests/data/mlwh_pb_run_92/300-PacBioProductMetrics.yml
deleted file mode 100644
index b27f0519..00000000
--- a/tests/data/mlwh_pb_run_92/300-PacBioProductMetrics.yml
+++ /dev/null
@@ -1,175 +0,0 @@
----
-- id_pac_bio_pr_metrics_tmp: 9675
- id_pac_bio_product: cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa61
- id_pac_bio_rw_metrics_tmp: 1732
- id_pac_bio_tmp: 98966
-- id_pac_bio_pr_metrics_tmp: 9676
- id_pac_bio_product: 63fb9a37ff19c248fc7d99bd254a61085226ded540de7c5445daf1398e339833
- id_pac_bio_rw_metrics_tmp: 1733
- id_pac_bio_tmp: 98967
-- id_pac_bio_pr_metrics_tmp: 9677
- id_pac_bio_product: a65eae06f3048a186aeb9104d0a8d3f46ca59dff7747eec9918fcfa85587a3c2
- id_pac_bio_rw_metrics_tmp: 1734
- id_pac_bio_tmp: 98968
-- id_pac_bio_pr_metrics_tmp: 9678
- id_pac_bio_product: 57538925519f7ae568fbd5cd075fd2fb600a2273394f6537a17d97917e224b11
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98969
-- id_pac_bio_pr_metrics_tmp: 9679
- id_pac_bio_product: 2307cbc4bf6b6917fa6a20d7e077302ad617c4df61cc0f845facfb24548360e4
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98970
-- id_pac_bio_pr_metrics_tmp: 9680
- id_pac_bio_product: 568b595c45b01faa601cab34ac91987b738106e2c10d2343fed1a2823726b036
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98971
-- id_pac_bio_pr_metrics_tmp: 9681
- id_pac_bio_product: 5a7af02c0fa288456f61046c15fcc2f14ae14ef890eea7de2239abdbc06cd1a2
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98972
-- id_pac_bio_pr_metrics_tmp: 9682
- id_pac_bio_product: 6efad9725471425b8574eaa8772cfd077cfca761c6654dbd36fb3bdb3e939ac3
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98973
-- id_pac_bio_pr_metrics_tmp: 9683
- id_pac_bio_product: 40053aa11e7cf4b74c0dc641c42fbe45145f007a6edacd7e1d476d20d3dc8899
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98974
-- id_pac_bio_pr_metrics_tmp: 9684
- id_pac_bio_product: f0993ebd8924e24e202c269a34598972541c3bccbe9778ca38889d8119ef8fbc
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98975
-- id_pac_bio_pr_metrics_tmp: 9685
- id_pac_bio_product: 67a948d085b4be890f02a04779ed44351bf64506f14e1a703cede5b901f7732d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98976
-- id_pac_bio_pr_metrics_tmp: 9686
- id_pac_bio_product: 22be6501a64e534e8bcd4d94222b8b226880d8574b2c2a13b47993d67bf953ed
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98977
-- id_pac_bio_pr_metrics_tmp: 9687
- id_pac_bio_product: a85234a2ce0b894cdde92dd592202b93e973aec86a22584d5d5aad6207936c3a
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98978
-- id_pac_bio_pr_metrics_tmp: 9688
- id_pac_bio_product: 925c97e811bd1320575eb09a9c6208ebceb092f39be9804f13ae6ea57d6ee3f4
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98979
-- id_pac_bio_pr_metrics_tmp: 9689
- id_pac_bio_product: 4cd35d863fb960d2e65b11c3092034272b71c63a7cceb8a4eb82459b442e5649
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98980
-- id_pac_bio_pr_metrics_tmp: 9690
- id_pac_bio_product: 13e08185c8f214ddb7fda427eb12de14d2328966dc6dd407e04931540d563764
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98981
-- id_pac_bio_pr_metrics_tmp: 9691
- id_pac_bio_product: b5131d50fc95fcd36b1670a0a200424d8ab1568b4a8c4e3ae267ab78dd482189
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98982
-- id_pac_bio_pr_metrics_tmp: 9692
- id_pac_bio_product: f16140784d4fe024bda8c121e3f9aefb3d8907f11787be71894120048b2cc504
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98983
-- id_pac_bio_pr_metrics_tmp: 9693
- id_pac_bio_product: 5a9fe0fb67614b9fd250dcf711e1fcf3e2ce13f450ecc68af699035490e3e0ec
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98984
-- id_pac_bio_pr_metrics_tmp: 9694
- id_pac_bio_product: 9f045c9356f681c1b452ec6dd92415264f7e9646b91e82bbe9f739d2d97b621c
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98985
-- id_pac_bio_pr_metrics_tmp: 9695
- id_pac_bio_product: c060619f13f862370b4047c4a897aa4d9e907f6252d1f5e2962e09495d32becb
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98986
-- id_pac_bio_pr_metrics_tmp: 9696
- id_pac_bio_product: f997587d6945cc8feaf015e6f74247c6d5d72afeae5e4aac550cb69ebdbd8381
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98987
-- id_pac_bio_pr_metrics_tmp: 9697
- id_pac_bio_product: 044ddae518c4f27a9b4c362098d78dbddbfb3c777eb7b755d64413e4cde4cd3c
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98988
-- id_pac_bio_pr_metrics_tmp: 9698
- id_pac_bio_product: 03e42278867da02c593029170ce087048e62f6f69165a3080e94f21d3de5e6b9
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98989
-- id_pac_bio_pr_metrics_tmp: 9699
- id_pac_bio_product: fdf0c4eb042807b7694842569a907e530fe603ade6470e1b4878beab7de9c055
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98990
-- id_pac_bio_pr_metrics_tmp: 9700
- id_pac_bio_product: a5c8aa41feee6cf782936786d3702c716fac193e5943398662975136fd5e30a1
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98991
-- id_pac_bio_pr_metrics_tmp: 9701
- id_pac_bio_product: 11c1424601a9dd783e9eab728934f88205b1c2251ce5b5da64d9ba25a34458fb
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98992
-- id_pac_bio_pr_metrics_tmp: 9702
- id_pac_bio_product: 9708d23c8ea56d4d0680dc6f3f78b102d08708d70f8205e079a0215f9331c27d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98993
-- id_pac_bio_pr_metrics_tmp: 9703
- id_pac_bio_product: e0d3aa0edd255e4bcf14ad2c855a195677f44109ad444e395845a7b82c1d477d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98994
-- id_pac_bio_pr_metrics_tmp: 9704
- id_pac_bio_product: 41887713d6f40e42b97384931254e986635189cc432652ac5d16d11c371b6d71
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98995
-- id_pac_bio_pr_metrics_tmp: 9705
- id_pac_bio_product: 49da248e9147189033f81b7f5f44f036bb26be0a5c3efcf61c484dc8dc50d432
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98996
-- id_pac_bio_pr_metrics_tmp: 9706
- id_pac_bio_product: ccc81d884b5319d7d6dd4beb14944fd9dc7b6063933a57882f53652da435af2d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98997
-- id_pac_bio_pr_metrics_tmp: 9707
- id_pac_bio_product: 6ac18d5b5b63eca3a3773686733be395a58d67213b597111c2b51c6fec4ce814
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98998
-- id_pac_bio_pr_metrics_tmp: 9708
- id_pac_bio_product: dcb13705145a63f6034692b6e5cd568fc34e9c6669f0b0ce37a54160c45a1a04
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 98999
-- id_pac_bio_pr_metrics_tmp: 9709
- id_pac_bio_product: 4e6c23a4627eb23514d03630512548d521f822d44467f951ae61e169d16a868e
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99000
-- id_pac_bio_pr_metrics_tmp: 9710
- id_pac_bio_product: 878b1e205768c5965cdce2b11d779d41ad267f5d84cac8652e64d9c7139fd692
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99001
-- id_pac_bio_pr_metrics_tmp: 9711
- id_pac_bio_product: 75ad3eb849261accf19df9c5acfb97b10f73d658dd1f403a032dab25fdeee64a
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99002
-- id_pac_bio_pr_metrics_tmp: 9712
- id_pac_bio_product: b209eb8f689ff8391bf42dece19d8de44ef4ee63158219cc81bd0cb45196b631
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99003
-- id_pac_bio_pr_metrics_tmp: 9713
- id_pac_bio_product: 18078959e14a3416b428624e6cc200c649a8b3b92fc40a20444e9cdca373137b
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99004
-- id_pac_bio_pr_metrics_tmp: 9714
- id_pac_bio_product: 0a82107d88ee710dcf46139a8710f443da8f4051142c478cb0a99ec5c6d64a2a
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99005
-- id_pac_bio_pr_metrics_tmp: 9715
- id_pac_bio_product: 6a81185dec0b9dcf06412b43fad08ce92cbf5ad492da7fa25dee63723950de5d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99006
-- id_pac_bio_pr_metrics_tmp: 9716
- id_pac_bio_product: 7f3912931b878be0b3c949fc20acd59d51b68a27a04fa89491a74905219f8deb
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99007
-- id_pac_bio_pr_metrics_tmp: 9717
- id_pac_bio_product: 4cf97b14a1c23d892f3b9609642d1978b56ca4a7fca6995897be68c29ed9211d
- id_pac_bio_rw_metrics_tmp: 1735
- id_pac_bio_tmp: 99008
-
-
diff --git a/tests/data/mlwh_pb_run_92/100-Sample.yml b/tests/data/mlwh_pb_runs/100-Sample.yml
similarity index 59%
rename from tests/data/mlwh_pb_run_92/100-Sample.yml
rename to tests/data/mlwh_pb_runs/100-Sample.yml
index e0ae6a0b..7b8c233e 100644
--- a/tests/data/mlwh_pb_run_92/100-Sample.yml
+++ b/tests/data/mlwh_pb_runs/100-Sample.yml
@@ -1,3 +1,4 @@
+---
- accession_number: SAMEA11604903
common_name: Lamellibrachia barhami
consent_withdrawn: 0
@@ -815,3 +816,481 @@
supplier_name: promegaB_12
taxon_id: 4932
uuid_sample_lims: b887566c-b3f6-11ec-9caa-fa163eac3af7
+- accession_number: SAMEA10332404
+ common_name: Verbascum thapsus
+ consent_withdrawn: 0
+ control: 0
+ created: 2022-10-21 08:10:07
+ donor_id: SAMEA10332243
+ id_lims: SQSCP
+ id_sample_lims: 8500551
+ id_sample_tmp: 8427375
+ last_updated: 2022-10-21 08:10:07
+ name: DTOL13174735
+ public_name: daVerThap1
+ recorded_at: 2022-10-21 08:10:08
+ sanger_sample_id: DTOL13174735
+ supplier_name: FS63842463
+ taxon_id: 39388
+ uuid_sample_lims: c64320ec-5117-11ed-9bd8-fa163eac3af7
+- accession_number: SAMEA9065892
+ common_name: Thaumetopoea processionea
+ consent_withdrawn: 0
+ control: 0
+ created: 2022-10-28 16:01:15
+ donor_id: SAMEA9065811
+ id_lims: SQSCP
+ id_sample_lims: 8509377
+ id_sample_tmp: 8436094
+ last_updated: 2022-10-28 16:01:16
+ name: DTOL13161568
+ public_name: ilThaProc3
+ recorded_at: 2022-10-28 16:01:16
+ sanger_sample_id: DTOL13161568
+ supplier_name: FD30823809
+ taxon_id: 499230
+ uuid_sample_lims: c0a80bf8-56d9-11ed-975e-fa163eea3084
+- accession_number: SAMEA10369798
+ cohort: 2982900000
+ common_name: Agrimonia eupatoria
+ consent_withdrawn: 0
+ created: 2023-03-01 11:55:55
+ customer_measured_volume: 60
+ description: Plant MagAttract v4
+ donor_id: SAMEA10369788
+ id_lims: SQSCP
+ id_sample_lims: 8633375
+ id_sample_tmp: 8559246
+ last_updated: 2023-03-01 11:55:59
+ name: DTOL13630447
+ public_name: drAgrEupa1
+ recorded_at: 2023-03-01 11:56:01
+ sample_type: vouchering
+ sanger_sample_id: DTOL13630447
+ strain: Cryoprep
+ supplier_name: KDTOL10382
+ taxon_id: 57912
+ uuid_sample_lims: 05bd2f02-b828-11ed-b0d1-fa163eea3084
+- accession_number: SAMEA7696557
+ common_name: Tachypodoiulus niger
+ consent_withdrawn: 0
+ control: 0
+ created: 2023-03-17 15:23:41
+ donor_id: SAMEA7696482
+ id_lims: SQSCP
+ id_sample_lims: 8654507
+ id_sample_tmp: 8579905
+ last_updated: 2023-03-17 15:23:41
+ name: DTOL13642523
+ public_name: qdTacNige1
+ recorded_at: 2023-03-17 15:23:42
+ sanger_sample_id: DTOL13642523
+ supplier_name: SubSam_qdTacNige1_3685
+ taxon_id: 433595
+ uuid_sample_lims: b2b60038-c4d7-11ed-8019-fa163eac3af7
+- accession_number: SAMEA12813521
+ common_name: Clistosaccus paguri
+ consent_withdrawn: 0
+ control: 0
+ created: 2023-03-23 08:54:42
+ donor_id: SAMEA12813472
+ id_lims: SQSCP
+ id_sample_lims: 8657549
+ id_sample_tmp: 8582947
+ last_updated: 2023-03-23 08:54:42
+ name: 6771STDY13618009
+ public_name: qxCliPagu9
+ recorded_at: 2023-03-23 08:54:43
+ sanger_sample_id: 6771STDY13618009
+ supplier_name: SubSam_qxCliPagu9_3522
+ taxon_id: 319673
+ uuid_sample_lims: 5a41b3e0-c958-11ed-8ab8-fa163eac3af7
+- accession_number: SAMEA7521974
+ common_name: Borago officinalis
+ consent_withdrawn: 0
+ control: 0
+ created: 2023-03-30 14:59:21
+ donor_id: SAMEA7521932
+ id_lims: SQSCP
+ id_sample_lims: 8663492
+ id_sample_tmp: 8588834
+ last_updated: 2023-03-30 14:59:21
+ name: DTOL13653276
+ public_name: daBorOffi1
+ recorded_at: 2023-03-30 14:59:21
+ sanger_sample_id: DTOL13653276
+ supplier_name: FS63807999
+ taxon_id: 13363
+ uuid_sample_lims: 73aa3736-cf0b-11ed-aa59-fa163eea3084
+- accession_number: SAMEA112963171
+ cohort: 306847500
+ common_name: Selandria serva
+ consent_withdrawn: 0
+ country_of_origin: not provided
+ created: 2023-06-07 15:29:56
+ customer_measured_volume: 14
+ date_of_sample_collection: 2022-07-05
+ description: MagAttract
+ donor_id: SAMEA112963078
+ id_lims: SQSCP
+ id_sample_lims: 8713294
+ id_sample_tmp: 8625878
+ last_updated: 2023-06-07 15:30:03
+ name: DTOL13788282
+ public_name: iySelServ2
+ recorded_at: 2023-06-07 15:30:06
+ sample_type: Vouchering
+ sanger_sample_id: DTOL13788282
+ strain: Powermash
+ supplier_name: NHMUK015059202
+ taxon_id: 410286
+ uuid_sample_lims: 2839dbd0-0548-11ee-add0-fa163eea3084
+- accession_number: SAMEA113426911
+ cohort: 260392500
+ common_name: Chamaemyia aridella
+ consent_withdrawn: 0
+ country_of_origin: not provided
+ created: 2023-06-14 13:22:28
+ customer_measured_volume: 3
+ date_of_sample_collection: not provided
+ description: MagAttract
+ donor_id: SAMEA113425591
+ id_lims: SQSCP
+ id_sample_lims: 8718071
+ id_sample_tmp: 8630655
+ last_updated: 2023-06-14 13:22:32
+ name: DTOL13795633
+ public_name: idChaArid1
+ recorded_at: 2023-06-14 13:22:35
+ sample_type: Vouchering
+ sanger_sample_id: DTOL13795633
+ strain: Powermash
+ supplier_name: Ox002879
+ taxon_id: 2881674
+ uuid_sample_lims: 8260135e-0ab6-11ee-b5ba-fa163eac3af7
+- accession_number: SAMEA113425916
+ cohort: 260392500
+ common_name: Chlorops ringens
+ consent_withdrawn: 0
+ country_of_origin: not provided
+ created: 2023-06-14 13:22:28
+ customer_measured_volume: 1
+ date_of_sample_collection: not provided
+ description: MagAttract
+ donor_id: SAMEA113425730
+ id_lims: SQSCP
+ id_sample_lims: 8718072
+ id_sample_tmp: 8630656
+ last_updated: 2023-06-14 13:22:32
+ name: DTOL13795634
+ public_name: idChlRing1
+ recorded_at: 2023-06-14 13:22:35
+ sample_type: Vouchering
+ sanger_sample_id: DTOL13795634
+ strain: Powermash
+ supplier_name: Ox003155
+ taxon_id: 3039479
+ uuid_sample_lims: 8262fee8-0ab6-11ee-b5ba-fa163eac3af7
+- accession_number: SAMEA113425922
+ cohort: 260392500
+ common_name: Diastata fuscula
+ consent_withdrawn: 0
+ country_of_origin: not provided
+ created: 2023-06-14 13:22:28
+ customer_measured_volume: 1
+ date_of_sample_collection: not provided
+ description: MagAttract
+ donor_id: SAMEA113425735
+ id_lims: SQSCP
+ id_sample_lims: 8718076
+ id_sample_tmp: 8630660
+ last_updated: 2023-06-14 13:22:32
+ name: DTOL13795638
+ public_name: idDiaFusc1
+ recorded_at: 2023-06-14 13:22:35
+ sample_type: Vouchering
+ sanger_sample_id: DTOL13795638
+ strain: Powermash
+ supplier_name: Ox003161
+ taxon_id: 1262299
+ uuid_sample_lims: 826e9b7c-0ab6-11ee-b5ba-fa163eac3af7
+- common_name: Procloeon bifidum
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-11-15 11:46:28
+ date_of_sample_collection: not provided
+ description: SAMEA112222208
+ donor_id: DTOL14162027
+ id_lims: SQSCP
+ id_sample_lims: 9444455
+ id_sample_tmp: 9302420
+ last_updated: 2023-11-15 11:46:28
+ name: DTOL14162027
+ public_name: ieProBifi2
+ recorded_at: 2023-11-15 11:46:28
+ sanger_sample_id: DTOL14162027
+ strain: SAMEA112222162
+ supplier_name: SubSam_ieProBifi2_5062
+ taxon_id: 1592913
+ uuid_sample_lims: 9ca7c5f8-83ac-11ee-9e2f-024293460e78
+- accession_number: SAMEA111431652
+ common_name: Linnaea borealis
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-11-17 08:36:09
+ date_of_sample_collection: not provided
+ donor_id: SAMEA7535987
+ id_lims: SQSCP
+ id_sample_lims: 9451544
+ id_sample_tmp: 9309564
+ last_updated: 2023-11-17 08:36:10
+ name: DTOL13810175
+ public_name: daLinBore1
+ recorded_at: 2023-11-17 08:36:10
+ sanger_sample_id: DTOL13810175
+ supplier_name: SubSam_daLinBore1_4724
+ taxon_id: 77623
+ uuid_sample_lims: 5bc32040-8524-11ee-a665-024224dd57f4
+- accession_number: SAMEA7522163
+ common_name: Chaenorhinum minus
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-11-24 09:47:11
+ date_of_sample_collection: not provided
+ donor_id: SAMEA7522063
+ id_lims: SQSCP
+ id_sample_lims: 9463590
+ id_sample_tmp: 9321705
+ last_updated: 2023-11-24 09:47:12
+ name: DTOL14291044
+ public_name: daChaMinu2
+ recorded_at: 2023-11-24 09:47:12
+ sanger_sample_id: DTOL14291044
+ supplier_name: SubSam_daChaMinu2_5222
+ taxon_id: 105913
+ uuid_sample_lims: 70e98a88-8aae-11ee-becc-024224dd57f4
+- accession_number: SAMEA111431250
+ common_name: Rosa spinosissima
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-11-24 10:53:53
+ date_of_sample_collection: not provided
+ donor_id: SAMEA111431184
+ id_lims: SQSCP
+ id_sample_lims: 9463632
+ id_sample_tmp: 9321748
+ last_updated: 2023-11-24 10:53:54
+ name: DTOL14452869
+ public_name: drRosSpin1
+ recorded_at: 2023-11-24 10:53:54
+ sanger_sample_id: DTOL14452869
+ supplier_name: SubSam_drRosSpin1_5278
+ taxon_id: 74630
+ uuid_sample_lims: c239f784-8ab7-11ee-ae26-024293460e78
+- accession_number: SAMEA9335449
+ common_name: Cephalanthera damasonium
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-11-24 11:10:32
+ date_of_sample_collection: not provided
+ donor_id: SAMEA9335281
+ id_lims: SQSCP
+ id_sample_lims: 9463663
+ id_sample_tmp: 9321777
+ last_updated: 2023-11-24 11:10:33
+ name: DTOL14290946
+ public_name: lsCepDama1
+ recorded_at: 2023-11-24 11:10:33
+ sanger_sample_id: DTOL14290946
+ supplier_name: SubSam_lsCepDama1_5149
+ taxon_id: 78719
+ uuid_sample_lims: 15aef692-8aba-11ee-ae26-024293460e78
+- accession_number: SAMEA110187304
+ common_name: Caenorhabditis sp. BRC20456
+ concentration_determined_by: Spectrophotometer
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: Solomon Islands
+ created: 2023-11-27 09:25:21
+ customer_measured_concentration: 14.7
+ customer_measured_volume: 45
+ date_of_sample_collection: 2015-01-01
+ date_of_sample_extraction: 11/23
+ dna_source: Tissue
+ donor_id: SAMEA110187300
+ extraction_method: Monarch Extraction
+ gender: Mixed
+ id_lims: SQSCP
+ id_sample_lims: 9463876
+ id_sample_tmp: 9321998
+ last_updated: 2023-11-27 09:25:23
+ name: BlaxGeNe14563575
+ public_name: nxCaeSpeh1
+ purification_method: Ethanol
+ purified: Yes
+ recorded_at: 2023-11-27 09:25:23
+ sanger_sample_id: BlaxGeNe14563575
+ storage_conditions: +4C
+ supplier_name: BRC20456
+ taxon_id: 2883082
+ uuid_sample_lims: e36343f6-8d06-11ee-890d-024293460e78
+- accession_number: SAMEA10369857
+ common_name: Halimione portulacoides
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-01 12:08:58
+ date_of_sample_collection: not provided
+ donor_id: SAMEA10369847
+ id_lims: SQSCP
+ id_sample_lims: 9478716
+ id_sample_tmp: 9336860
+ last_updated: 2023-12-01 12:08:59
+ name: DTOL14523233
+ public_name: dcHalPort1
+ recorded_at: 2023-12-01 12:08:59
+ sample_type: LI
+ sanger_sample_id: DTOL14523233
+ supplier_name: SubSam_5444
+ taxon_id: 376799
+ uuid_sample_lims: 68647e92-9042-11ee-a0e6-024293460e78
+- accession_number: SAMEA10369760
+ common_name: Origanum vulgare
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-01 12:08:59
+ date_of_sample_collection: not provided
+ donor_id: SAMEA10369670
+ id_lims: SQSCP
+ id_sample_lims: 9478726
+ id_sample_tmp: 9336869
+ last_updated: 2023-12-01 12:08:59
+ name: DTOL14523243
+ public_name: daOriVulg1
+ recorded_at: 2023-12-01 12:08:59
+ sample_type: LI
+ sanger_sample_id: DTOL14523243
+ supplier_name: SubSam_5438
+ taxon_id: 39352
+ uuid_sample_lims: 688268d0-9042-11ee-a0e6-024293460e78
+- accession_number: SAMEA9335181
+ common_name: Hippuris vulgaris
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-04 13:03:46
+ date_of_sample_collection: not provided
+ donor_id: SAMEA9335108
+ id_lims: SQSCP
+ id_sample_lims: 9478845
+ id_sample_tmp: 9336988
+ last_updated: 2023-12-04 13:03:47
+ name: DTOL14523333
+ public_name: daHipVulg1
+ recorded_at: 2023-12-04 13:03:47
+ sanger_sample_id: DTOL14523333
+ supplier_name: SubSam_5456
+ taxon_id: 39321
+ uuid_sample_lims: 8f4b9580-92a5-11ee-a0e6-024293460e78
+- accession_number: SAMEA9335379
+ common_name: Linum bienne
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-13 08:24:26
+ date_of_sample_collection: not provided
+ donor_id: SAMEA9335256
+ id_lims: SQSCP
+ id_sample_lims: 9506156
+ id_sample_tmp: 9358950
+ last_updated: 2023-12-13 08:24:27
+ name: DTOL14200517
+ public_name: ddLinBien1
+ recorded_at: 2023-12-13 08:24:28
+ sanger_sample_id: DTOL14200517
+ supplier_name: SubSam_ddLinBien1_5026
+ taxon_id: 347648
+ uuid_sample_lims: 074a7f78-9991-11ee-8911-024224dd57f4
+- accession_number: SAMEA113970418
+ common_name: Arabis scabra
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-13 08:24:27
+ date_of_sample_collection: not provided
+ donor_id: SAMEA113970357
+ id_lims: SQSCP
+ id_sample_lims: 9506178
+ id_sample_tmp: 9358974
+ last_updated: 2023-12-13 08:24:27
+ name: DTOL14200539
+ public_name: ddAraScab1
+ recorded_at: 2023-12-13 08:24:28
+ sanger_sample_id: DTOL14200539
+ supplier_name: SubSam_ddAraScab1_5048
+ taxon_id: 50454
+ uuid_sample_lims: 0788e31c-9991-11ee-8911-024224dd57f4
+- accession_number: SAMEA9143697
+ common_name: Veronica hederifolia
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-14 12:28:19
+ date_of_sample_collection: not provided
+ donor_id: SAMEA9143033
+ id_lims: SQSCP
+ id_sample_lims: 9511440
+ id_sample_tmp: 9364225
+ last_updated: 2023-12-14 12:28:19
+ name: DTOL_RD14581308
+ public_name: daVerHede1
+ recorded_at: 2023-12-14 12:28:20
+ sanger_sample_id: DTOL_RD14581308
+ supplier_name: SubSam_5606
+ taxon_id: 202477
+ uuid_sample_lims: 438aed2e-9a7c-11ee-a4e9-024224dd57f4
+- accession_number: SAMEA113425515
+ common_name: Graphomya maculata
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2023-12-18 12:39:16
+ date_of_sample_collection: not provided
+ donor_id: SAMEA113425419
+ id_lims: SQSCP
+ id_sample_lims: 9515159
+ id_sample_tmp: 9367590
+ last_updated: 2023-12-18 12:39:16
+ name: DTOL14026427
+ public_name: idGraMacu2
+ recorded_at: 2023-12-18 12:39:17
+ sanger_sample_id: DTOL14026427
+ supplier_name: SubSam_idGraMacu2_4846
+ taxon_id: 1230139
+ uuid_sample_lims: 74d0724a-9da2-11ee-8314-024293460e78
+- accession_number: SAMEA110451460
+ common_name: Brachypodium pinnatum
+ consent_withdrawn: 0
+ control: 0
+ country_of_origin: not provided
+ created: 2024-01-03 12:32:18
+ date_of_sample_collection: not provided
+ donor_id: SAMEA110451258
+ id_lims: SQSCP
+ id_sample_lims: 9518398
+ id_sample_tmp: 9371025
+ last_updated: 2024-01-03 12:32:18
+ name: DTOL14180244
+ public_name: lpBraPinn1
+ recorded_at: 2024-01-03 12:32:18
+ sanger_sample_id: DTOL14180244
+ supplier_name: SubSam_lpBraPinn1_4987
+ taxon_id: 29663
+ uuid_sample_lims: 22008a52-aa34-11ee-bf16-024224dd57f4
+
diff --git a/tests/data/mlwh_pb_runs/100-Study.yml b/tests/data/mlwh_pb_runs/100-Study.yml
new file mode 100644
index 00000000..453d6bae
--- /dev/null
+++ b/tests/data/mlwh_pb_runs/100-Study.yml
@@ -0,0 +1,122 @@
+- accession_number: ERP129860
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ id_lims: SQSCP
+ id_study_lims: 6457
+ id_study_tmp: 6287
+ name: Tree of Life - ASG
+ reference_genome: ' '
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ study_title: Tree of Life - ASG
+ study_visibility: Public
+ uuid_study_lims: 8d58238e-a2b5-11eb-84d2-fa163eac3af7
+- accession_number: ERP116890
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ id_lims: SQSCP
+ id_study_lims: 5901
+ id_study_tmp: 5735
+ name: DTOL_Darwin Tree of Life
+ reference_genome: ' '
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ study_title: Darwin Tree of Life
+ study_visibility: Public
+ uuid_study_lims: cf04ea86-ac82-11e9-8998-68b599768938
+- accession_number: ERP141224
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ description: Study for release prior to publication of selected datasets
+ id_lims: SQSCP
+ id_study_lims: 7069
+ id_study_tmp: 6942
+ name: Alternative Enzymes 2022 microbial genomes
+ reference_genome: Clostridium_difficile (Strain_630)
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ study_title: Alternative Enzymes 2022 microbial genomes
+ study_visibility: Public
+ uuid_study_lims: 39ba6ae6-3500-11ed-b3f3-fa163eac3af7
+- abbreviation: DTOL_RD
+ abstract: Sequencing and assembly of genomes from British species for the Darwin Tree of Life Project
+ accession_number: ERP115230
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ created: 2019-05-10 08:36:03
+ data_release_sort_of_study: genotyping or cytogenetics
+ data_release_strategy: not applicable
+ data_release_timing: never
+ description: "Sequencing and assembly of genomes from British species for the Darwin Tree of Life Project"
+ faculty_sponsor: MB
+ id_lims: SQSCP
+ id_study_lims: 5822
+ id_study_tmp: 5656
+ last_updated: 2023-07-24 15:18:11
+ name: DTOL_Darwin R&D
+ recorded_at: 2023-07-24 15:18:11
+ reference_genome: ' '
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ state: active
+ study_title: Darwin R&D
+ study_type: Whole Genome Sequencing
+ study_visibility: Hold
+ uuid_study_lims: a54462b6-72fe-11e9-9cbc-68b599768938
+- abbreviation: BlaxGeNe
+ abstract: 'High quality reference genome sequences and formal species descriptions'
+ accession_number: ERP120055
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ created: 2020-02-17 14:34:51
+ data_release_sort_of_study: genomic sequencing
+ data_release_strategy: open
+ data_release_timing: standard
+ description: 'other description'
+ faculty_sponsor: MB
+ id_lims: SQSCP
+ id_study_lims: 6137
+ id_study_tmp: 5967
+ last_updated: 2023-07-24 15:18:11
+ name: 959 Nematode Genomes
+ recorded_at: 2023-07-24 15:18:12
+ reference_genome: ' '
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ state: active
+ study_title: 959 Nematode Genomes
+ study_type: Whole Genome Sequencing
+ study_visibility: Public
+ uuid_study_lims: a845b2e4-5192-11ea-91ec-fa163e9d6485
+- abbreviation: 6771STDY
+ abstract: 'some abstract'
+ accession_number: ERP135012
+ aligned: 1
+ contains_human_dna: 0
+ contaminated_human_dna: 0
+ created: 2022-01-19 16:07:11
+ data_release_sort_of_study: genomic sequencing
+ data_release_strategy: open
+ data_release_timing: standard
+ description: 'some description'
+ faculty_sponsor: MB
+ id_lims: SQSCP
+ id_study_lims: 6771
+ id_study_tmp: 6615
+ last_updated: 2024-01-05 10:36:10
+ name: ToL_Blaxter_ Reference Genomes_ DNA
+ recorded_at: 2024-01-05 10:36:10
+ reference_genome: ' '
+ remove_x_and_autosomes: 0
+ separate_y_chromosome_data: 0
+ state: active
+ study_title: Reference Genome
+ study_type: Whole Genome Sequencing
+ study_visibility: Hold
+ uuid_study_lims: dbfc7680-7941-11ec-bf7f-fa163eea3084
+
diff --git a/tests/data/mlwh_pb_run_92/200-PacBioRun.yml b/tests/data/mlwh_pb_runs/200-PacBioRun.yml
similarity index 68%
rename from tests/data/mlwh_pb_run_92/200-PacBioRun.yml
rename to tests/data/mlwh_pb_runs/200-PacBioRun.yml
index c403aff7..b87a5e5f 100644
--- a/tests/data/mlwh_pb_run_92/200-PacBioRun.yml
+++ b/tests/data/mlwh_pb_runs/200-PacBioRun.yml
@@ -1246,5 +1246,556 @@
tag_set_name: Sequel_48_Microbial_Barcoded_OHA_v1
well_label: D1
well_uuid_lims: 1cc67f96-ec1d-47da-a991-2fcfd53d09be
-
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120626
+ id_sample_tmp: 9336988
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7673
+ pac_bio_library_tube_id_lims: 5980
+ pac_bio_library_tube_name: DTOL14523333
+ pac_bio_library_tube_uuid: 6e4ff201-b417-4041-a0e2-c24a7a5c7f06
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2020
+ tag_sequence: ACTATGCGTCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: A1
+ well_uuid_lims: 2ae339ab-ddf7-4520-9c33-dde1c1055158
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120627
+ id_sample_tmp: 9321748
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7673
+ pac_bio_library_tube_id_lims: 5981
+ pac_bio_library_tube_name: DTOL14452869
+ pac_bio_library_tube_uuid: 32f08465-d1db-4c7f-bd16-f78c13a7587e
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2011
+ tag_sequence: CTGACAGTACGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: A1
+ well_uuid_lims: 2ae339ab-ddf7-4520-9c33-dde1c1055158
+- cost_code: S4773
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120628
+ id_sample_tmp: 8436094
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7674
+ pac_bio_library_tube_id_lims: 5982
+ pac_bio_library_tube_name: DTOL13161568
+ pac_bio_library_tube_uuid: df7b6f48-83e3-4c79-a2c2-ac7b88263bf1
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc1011_BAK8A_OA
+ tag_sequence: CTATACGTATATCTATT
+ tag_set_id_lims: 1
+ tag_set_name: Sequel_16_barcodes_v3
+ well_label: B1
+ well_uuid_lims: dc4995b1-62aa-446e-9524-74be301d85ea
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120629
+ id_sample_tmp: 8579905
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7674
+ pac_bio_library_tube_id_lims: 5983
+ pac_bio_library_tube_name: DTOL13642523
+ pac_bio_library_tube_uuid: 424e1d84-1d07-4883-9b15-90ce3318e987
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc1022_BAK8B_OA
+ tag_sequence: CACTCACGTGTGATATT
+ tag_set_id_lims: 1
+ tag_set_name: Sequel_16_barcodes_v3
+ well_label: B1
+ well_uuid_lims: dc4995b1-62aa-446e-9524-74be301d85ea
+- cost_code: S4773
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120630
+ id_sample_tmp: 8427375
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7674
+ pac_bio_library_tube_id_lims: 5984
+ pac_bio_library_tube_name: DTOL13174735
+ pac_bio_library_tube_uuid: 1f54742d-c690-4b60-ba75-b610796cd419
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc1001_BAK8A_OA
+ tag_sequence: CACATATCAGAGTGCGT
+ tag_set_id_lims: 1
+ tag_set_name: Sequel_16_barcodes_v3
+ well_label: B1
+ well_uuid_lims: dc4995b1-62aa-446e-9524-74be301d85ea
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120631
+ id_sample_tmp: 9302420
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7675
+ pac_bio_library_tube_id_lims: 5985
+ pac_bio_library_tube_name: DTOL14162027
+ pac_bio_library_tube_uuid: 772c136a-d5b4-481e-9b3b-975d5e655eff
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2035
+ tag_sequence: CAGCTGACATGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: a083ef9a-730c-45bb-a4b9-8e2c31b510bb
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120632
+ id_sample_tmp: 9309564
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7675
+ pac_bio_library_tube_id_lims: 5986
+ pac_bio_library_tube_name: DTOL13810175
+ pac_bio_library_tube_uuid: a37f15e5-4971-4f61-b34f-6ca48e759a9a
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2052
+ tag_sequence: CAGACTAGTCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: a083ef9a-730c-45bb-a4b9-8e2c31b510bb
+- cost_code: S4773
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120633
+ id_sample_tmp: 8559246
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7676
+ pac_bio_library_tube_id_lims: 5987
+ pac_bio_library_tube_name: DTOL13630447
+ pac_bio_library_tube_uuid: ecbc19bd-be7c-41e9-8e4e-fba4da36099b
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2036
+ tag_sequence: ACGTCGCTGCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: a0a9450d-68df-41c1-9241-eb117f3f9210
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120634
+ id_sample_tmp: 8588834
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7676
+ pac_bio_library_tube_id_lims: 5988
+ pac_bio_library_tube_name: DTOL13653276
+ pac_bio_library_tube_uuid: ad99a84b-6a73-4847-a18e-fc31edbb42d1
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2040
+ tag_sequence: TGCTGCGACTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: a0a9450d-68df-41c1-9241-eb117f3f9210
+- cost_code: S10513
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120635
+ id_sample_tmp: 8582947
+ id_study_tmp: 6615
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7676
+ pac_bio_library_tube_id_lims: 5989
+ pac_bio_library_tube_name: 6771STDY13618009
+ pac_bio_library_tube_uuid: 8e3f3c37-7db1-4f35-85f1-b39b96d5cd53
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2054
+ tag_sequence: CTGCGATCACGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: a0a9450d-68df-41c1-9241-eb117f3f9210
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120636
+ id_sample_tmp: 9321705
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7676
+ pac_bio_library_tube_id_lims: 5990
+ pac_bio_library_tube_name: DTOL14291044
+ pac_bio_library_tube_uuid: 820294b7-2a66-492f-a9a3-81e2cfa8c4f9
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 90d9a51b-0a57-4580-a449-7928b51cffe7
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2063
+ tag_sequence: TCTGCATCATGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: a0a9450d-68df-41c1-9241-eb117f3f9210
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120637
+ id_sample_tmp: 9336869
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7677
+ pac_bio_library_tube_id_lims: 5991
+ pac_bio_library_tube_name: DTOL14523243
+ pac_bio_library_tube_uuid: b51938ee-533c-4fc3-b4dd-32db93a44518
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2016
+ tag_sequence: ATCTGCACGTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: A1
+ well_uuid_lims: ad154a80-2e40-4f83-bb9d-9e5cda87cf70
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120638
+ id_sample_tmp: 9371025
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7677
+ pac_bio_library_tube_id_lims: 5992
+ pac_bio_library_tube_name: DTOL14180244
+ pac_bio_library_tube_uuid: e2c918e2-2401-4c48-8e74-05cdee1945f6
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2096
+ tag_sequence: ATGTACTAGTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: A1
+ well_uuid_lims: ad154a80-2e40-4f83-bb9d-9e5cda87cf70
+- cost_code: s4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120639
+ id_sample_tmp: 9367590
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7678
+ pac_bio_library_tube_id_lims: 5993
+ pac_bio_library_tube_name: DTOL14026427
+ pac_bio_library_tube_uuid: 8cfefce6-f87b-41d8-b3ef-133fd36f8871
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2056
+ tag_sequence: TCGCAGCGTCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: B1
+ well_uuid_lims: d3988e8a-4284-4011-9f60-f905cd8f8f45
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120640
+ id_sample_tmp: 9358950
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7678
+ pac_bio_library_tube_id_lims: 5994
+ pac_bio_library_tube_name: DTOL14200517
+ pac_bio_library_tube_uuid: 8d316f10-7433-4989-b456-624309dbff49
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2072
+ tag_sequence: TATCAGTAGTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: B1
+ well_uuid_lims: d3988e8a-4284-4011-9f60-f905cd8f8f45
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120641
+ id_sample_tmp: 9358974
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7679
+ pac_bio_library_tube_id_lims: 5996
+ pac_bio_library_tube_name: DTOL14200539
+ pac_bio_library_tube_uuid: aed9d9da-feb1-4cdf-aaf8-e6c38b66d938
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2021
+ tag_sequence: CGTACATGCTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: 60aa3fb3-5277-41b3-b269-ac0343e3cfe0
+- cost_code: S4698
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120642
+ id_sample_tmp: 9321998
+ id_study_tmp: 5967
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7679
+ pac_bio_library_tube_id_lims: 6112
+ pac_bio_library_tube_name: BlaxGeNe14563575
+ pac_bio_library_tube_uuid: 15dd954a-1422-4058-a691-a13350350e86
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2011
+ tag_sequence: CTGACAGTACGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: 60aa3fb3-5277-41b3-b269-ac0343e3cfe0
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120643
+ id_sample_tmp: 9336860
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7679
+ pac_bio_library_tube_id_lims: 6113
+ pac_bio_library_tube_name: DTOL14523233
+ pac_bio_library_tube_uuid: 9b763255-4f11-4a22-99d8-4f02be5b3493
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2015
+ tag_sequence: CGACATAGATGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: 60aa3fb3-5277-41b3-b269-ac0343e3cfe0
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120644
+ id_sample_tmp: 8625878
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7680
+ pac_bio_library_tube_id_lims: 5997
+ pac_bio_library_tube_name: DTOL13788282
+ pac_bio_library_tube_uuid: c5f1229c-3182-473a-a9f6-0f2dc696213f
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2083
+ tag_sequence: ACTCATCAGTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: d33e27cc-1f31-4189-b8b5-bc2a03bbcc16
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120645
+ id_sample_tmp: 8630655
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7680
+ pac_bio_library_tube_id_lims: 5998
+ pac_bio_library_tube_name: DTOL13795633
+ pac_bio_library_tube_uuid: 935cfd51-e36c-49d8-bf30-3a5e616eb663
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2084
+ tag_sequence: CTGAGCACTCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: d33e27cc-1f31-4189-b8b5-bc2a03bbcc16
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120646
+ id_sample_tmp: 8630656
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7680
+ pac_bio_library_tube_id_lims: 5999
+ pac_bio_library_tube_name: DTOL13795634
+ pac_bio_library_tube_uuid: 88461b2d-7abe-45cc-98d0-640205f01c42
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2085
+ tag_sequence: ATCATCTACTGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: d33e27cc-1f31-4189-b8b5-bc2a03bbcc16
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1140
+ id_pac_bio_tmp: 120647
+ id_sample_tmp: 8630660
+ id_study_tmp: 5735
+ last_updated: 2024-02-23 10:05:37
+ pac_bio_library_tube_barcode: TRAC-2-7680
+ pac_bio_library_tube_id_lims: 6000
+ pac_bio_library_tube_name: DTOL13795638
+ pac_bio_library_tube_uuid: 69733884-664d-427a-bcbb-9b24dfe1ff06
+ pac_bio_run_name: TRACTION-RUN-1140
+ pac_bio_run_uuid: c0fc009f-1f86-4a61-8869-5d1f76b90ea9
+ pipeline_id_lims: PacBio_Ultra_Low_Input
+ plate_number: 2
+ plate_uuid_lims: 15e4d545-76b3-44e3-98f4-4eef01ef437e
+ recorded_at: 2024-02-23 10:05:37
+ tag_identifier: bc2094
+ tag_sequence: TAGATACAGCGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: d33e27cc-1f31-4189-b8b5-bc2a03bbcc16
+- cost_code: s10492
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1162
+ id_pac_bio_tmp: 120767
+ id_sample_tmp: 9364225
+ id_study_tmp: 5656
+ last_updated: 2024-03-05 16:15:13
+ pac_bio_library_tube_barcode: TRAC-2-7576
+ pac_bio_library_tube_id_lims: 11158
+ pac_bio_library_tube_name: DTOL_RD14581308
+ pac_bio_library_tube_uuid: 7edf3079-d7cf-4a14-9587-1a0312a75518
+ pac_bio_run_name: TRACTION-RUN-1162
+ pac_bio_run_uuid: 0a11c900-22ce-402b-82b4-3fb9fe7c65b6
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 99f3e81b-3857-4c5a-a2b1-0e427bb6d4f4
+ recorded_at: 2024-03-05 16:15:13
+ tag_identifier: bc2070
+ tag_sequence: TACTGCTCACGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: C1
+ well_uuid_lims: c18becff-8538-4820-a3b3-7e1a9c0d1f17
+- cost_code: S4699
+ id_lims: Traction
+ id_pac_bio_run_lims: TRACTION-RUN-1162
+ id_pac_bio_tmp: 120768
+ id_sample_tmp: 9321777
+ id_study_tmp: 5735
+ last_updated: 2024-03-05 16:15:13
+ pac_bio_library_tube_barcode: TRAC-2-7128
+ pac_bio_library_tube_id_lims: 10799
+ pac_bio_library_tube_name: DTOL14290946
+ pac_bio_library_tube_uuid: 806baad7-11c9-4375-ab3c-ac408d78129f
+ pac_bio_run_name: TRACTION-RUN-1162
+ pac_bio_run_uuid: 0a11c900-22ce-402b-82b4-3fb9fe7c65b6
+ pipeline_id_lims: Pacbio_HiFi
+ plate_number: 1
+ plate_uuid_lims: 99f3e81b-3857-4c5a-a2b1-0e427bb6d4f4
+ recorded_at: 2024-03-05 16:15:13
+ tag_identifier: bc2055
+ tag_sequence: CTCAGCATACGAGTAT
+ tag_set_id_lims: 9
+ tag_set_name: Pacbio_96_barcode_plate_v3
+ well_label: D1
+ well_uuid_lims: 6bbf1bf3-bde6-4894-beb4-87dcab110000
diff --git a/tests/data/mlwh_pb_runs/200-PacBioRunWellMetrics.yml b/tests/data/mlwh_pb_runs/200-PacBioRunWellMetrics.yml
new file mode 100644
index 00000000..e3a76268
--- /dev/null
+++ b/tests/data/mlwh_pb_runs/200-PacBioRunWellMetrics.yml
@@ -0,0 +1,1011 @@
+---
+- adapter_dimer_percent: 0
+ binding_kit: Sequel II Binding Kit 2.2
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 417079
+ chemistry_sw_version: 10.2.0.133424
+ chip_type: 8mChip
+ control_concordance_mean: 0.868282
+ control_concordance_mode: 0.91
+ control_num_reads: 24837
+ control_read_length_mean: 50169
+ created_by: eg18
+ demultiplex_mode: ~
+ heteroduplex_analysis: ~
+ hifi_barcoded_reads: ~
+ hifi_bases_in_barcoded_reads: ~
+ hifi_low_quality_num_reads: 260532
+ hifi_low_quality_read_bases: 2670039556
+ hifi_low_quality_read_length_mean: 10248
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 2877051
+ hifi_number_passes_mean: 18
+ hifi_only_reads: ~
+ hifi_read_bases: 27076668646
+ hifi_read_length_mean: 9411
+ hifi_read_quality_median: 43
+ id_pac_bio_product: cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa61
+ id_pac_bio_rw_metrics_tmp: 1732
+ include_kinetics: 0
+ insert_length_mean: 16227
+ insert_length_n50: 23250
+ instrument_name: 64222E
+ instrument_sw_version: 10.1.0.119549
+ instrument_type: Sequel2e
+ loading_conc: 80
+ local_base_rate: 2.76789
+ movie_minutes: 1800
+ movie_name: m64222e_220414_130247
+ p0_num: 2800130
+ p1_num: 5033971
+ p2_num: 180570
+ pac_bio_run_name: TRACTION-RUN-92
+ polymerase_num_reads: 5009134
+ polymerase_read_bases: 645567171652
+ polymerase_read_length_mean: 128878
+ polymerase_read_length_n50: 251250
+ primary_analysis_sw_version: 10.1.0.119549
+ productive_zmws_num: 7989834
+ run_complete: 2022-04-20 09:16:53
+ run_start: 2022-04-14 12:52:34
+ run_status: Complete
+ run_transfer_complete: 2022-04-20 16:03:18
+ sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
+ sequencing_kit_lot_number: 123660
+ short_insert_percent: 0
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
+ sl_ccs_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29ro
+ ts_run_name: r64222e_20220414_125138
+ unique_molecular_bases: 68501667840
+ well_complete: 2022-04-16 12:36:21
+ well_label: A1
+ well_start: 2022-04-14 13:02:48
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Sequel II Binding Kit 2.2
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 417079
+ chemistry_sw_version: 10.2.0.133424
+ chip_type: 8mChip
+ control_concordance_mean: 0.865786
+ control_concordance_mode: 0.91
+ control_num_reads: 42962
+ control_read_length_mean: 51810
+ created_by: eg18
+ demultiplex_mode: ~
+ heteroduplex_analysis: ~
+ hifi_barcoded_reads: ~
+ hifi_bases_in_barcoded_reads: ~
+ hifi_low_quality_num_reads: 204155
+ hifi_low_quality_read_bases: 1887795985
+ hifi_low_quality_read_length_mean: 9246
+ hifi_low_quality_read_quality_median: 16
+ hifi_num_reads: 2082542
+ hifi_number_passes_mean: 18
+ hifi_only_reads: ~
+ hifi_read_bases: 17706147796
+ hifi_read_length_mean: 8502
+ hifi_read_quality_median: 40
+ id_pac_bio_product: 63fb9a37ff19c248fc7d99bd254a61085226ded540de7c5445daf1398e339833
+ id_pac_bio_rw_metrics_tmp: 1733
+ include_kinetics: 0
+ insert_length_mean: 16407
+ insert_length_n50: 28250
+ instrument_name: 64222E
+ instrument_sw_version: 10.1.0.119549
+ instrument_type: Sequel2e
+ loading_conc: 80
+ local_base_rate: 2.80566
+ movie_minutes: 1800
+ movie_name: m64222e_220415_235643
+ p0_num: 4427179
+ p1_num: 3512385
+ p2_num: 75107
+ pac_bio_run_name: TRACTION-RUN-92
+ polymerase_num_reads: 3469423
+ polymerase_read_bases: 455958509506
+ polymerase_read_length_mean: 131422
+ polymerase_read_length_n50: 251750
+ primary_analysis_sw_version: 10.1.0.119549
+ productive_zmws_num: 7971709
+ run_complete: 2022-04-20 09:16:53
+ run_start: 2022-04-14 12:52:34
+ run_status: Complete
+ run_transfer_complete: 2022-04-20 16:03:18
+ sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
+ sequencing_kit_lot_number: 123660
+ short_insert_percent: 0
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
+ sl_ccs_uuid: ~
+ ts_run_name: r64222e_20220414_125138
+ unique_molecular_bases: 45990051840
+ well_complete: 2022-04-17 23:16:35
+ well_label: B1
+ well_start: 2022-04-15 23:56:43
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Sequel II Binding Kit 2.2
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 417079
+ chemistry_sw_version: 10.2.0.133424
+ chip_type: 8mChip
+ control_concordance_mean: 0.866249
+ control_concordance_mode: 0.89
+ control_num_reads: 40787
+ control_read_length_mean: 49421
+ created_by: eg18
+ demultiplex_mode: ~
+ heteroduplex_analysis: ~
+ hifi_low_quality_num_reads: 173039
+ hifi_low_quality_read_bases: 1743404181
+ hifi_low_quality_read_length_mean: 10075
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 1698191
+ hifi_number_passes_mean: 17
+ hifi_only_reads: ~
+ hifi_read_bases: 16029605719
+ hifi_read_length_mean: 9439
+ hifi_read_quality_median: 40
+ hifi_barcoded_reads: ~
+ hifi_bases_in_barcoded_reads: ~
+ id_pac_bio_product: a65eae06f3048a186aeb9104d0a8d3f46ca59dff7747eec9918fcfa85587a3c2
+ id_pac_bio_rw_metrics_tmp: 1734
+ include_kinetics: 0
+ insert_length_mean: 15260
+ insert_length_n50: 15750
+ instrument_name: 64222E
+ instrument_sw_version: 10.1.0.119549
+ instrument_type: Sequel2e
+ loading_conc: 130
+ local_base_rate: 2.76102
+ movie_minutes: 1800
+ movie_name: m64222e_220417_105320
+ p0_num: 5019384
+ p1_num: 2944690
+ p2_num: 50597
+ pac_bio_run_name: TRACTION-RUN-92
+ polymerase_num_reads: 2903903
+ polymerase_read_bases: 360656040891
+ polymerase_read_length_mean: 124197
+ polymerase_read_length_n50: 244750
+ primary_analysis_sw_version: 10.1.0.119549
+ productive_zmws_num: 7973884
+ run_complete: 2022-04-20 09:16:53
+ run_start: 2022-04-14 12:52:34
+ run_status: Complete
+ run_transfer_complete: 2022-04-20 16:03:18
+ sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
+ sequencing_kit_lot_number: 123660
+ short_insert_percent: 0
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
+ sl_ccs_uuid: ~
+ ts_run_name: r64222e_20220414_125138
+ unique_molecular_bases: 37178580992
+ well_complete: 2022-04-19 04:22:35
+ well_label: C1
+ well_start: 2022-04-17 10:53:21
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Sequel II Binding Kit 2.2
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 417079
+ chemistry_sw_version: 10.2.0.133424
+ chip_type: 8mChip
+ control_concordance_mean: 0.863292
+ control_concordance_mode: 0.91
+ control_num_reads: 24842
+ control_read_length_mean: 44982
+ created_by: eg18
+ demultiplex_mode: ~
+ heteroduplex_analysis: ~
+ hifi_barcoded_reads: ~
+ hifi_bases_in_barcoded_reads: ~
+ hifi_low_quality_num_reads: 193115
+ hifi_low_quality_read_bases: 1672216211
+ hifi_low_quality_read_length_mean: 8659
+ hifi_low_quality_read_quality_median: 16
+ hifi_num_reads: 1912626
+ hifi_number_passes_mean: 18
+ hifi_only_reads: ~
+ hifi_read_bases: 14052550494
+ hifi_read_length_mean: 7347
+ hifi_read_quality_median: 41
+ id_pac_bio_product: c5babd5516f7b9faab8415927e5f300d5152bb96b8b922e768d876469a14fa5d
+ id_pac_bio_rw_metrics_tmp: 1735
+ include_kinetics: 0
+ insert_length_mean: 15043
+ insert_length_n50: 33750
+ instrument_name: 64222E
+ instrument_sw_version: 10.1.0.119549
+ instrument_type: Sequel2e
+ loading_conc: 80
+ local_base_rate: 2.71738
+ movie_minutes: 1800
+ movie_name: m64222e_220418_214938
+ p0_num: 3784476
+ p1_num: 4078117
+ p2_num: 152078
+ pac_bio_run_name: TRACTION-RUN-92
+ polymerase_num_reads: 4053275
+ polymerase_read_bases: 405355872925
+ polymerase_read_length_mean: 100007
+ polymerase_read_length_n50: 234250
+ primary_analysis_sw_version: 10.1.0.119549
+ productive_zmws_num: 7989829
+ run_complete: 2022-04-20 09:16:53
+ run_start: 2022-04-14 12:52:34
+ run_status: Complete
+ run_transfer_complete: 2022-04-20 16:03:18
+ sequencing_kit: Sequel II Sequencing Plate 2.0 (4 rxn)
+ sequencing_kit_lot_number: 123660
+ short_insert_percent: 0.01
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 7f5d45ed-aa93-46a6-92b2-4b11d4bf29da
+ sl_ccs_uuid: ~
+ ts_run_name: r64222e_20220414_125138
+ unique_molecular_bases: 48624848896
+ well_complete: 2022-04-20 16:03:18
+ well_label: D1
+ well_start: 2022-04-18 21:49:38
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.907739
+ control_concordance_mode: 0.91
+ control_num_reads: 2756
+ control_read_length_mean: 78413
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 3528067
+ hifi_bases_in_barcoded_reads: 46846424758
+ hifi_low_quality_num_reads: 84204
+ hifi_low_quality_read_bases: 1260401933
+ hifi_low_quality_read_length_mean: 14968
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 3541519
+ hifi_number_passes_mean: 14
+ hifi_only_reads: 1
+ hifi_read_bases: 47020035735
+ hifi_read_length_mean: 13307
+ hifi_read_quality_median: 37
+ id_pac_bio_product: 51094a0e0ca9d839d0ffa4fcf08bb963cbdfd3e9ed0edb3045b8f68f3db5e3af
+ id_pac_bio_rw_metrics_tmp: 6206
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 14:10:14
+ loading_conc: 132
+ local_base_rate: 2.6208
+ movie_minutes: 1440
+ movie_name: m84093_240223_140830_s1
+ p0_num: 16987657
+ p1_num: 8139802
+ p2_num: 38365
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 1
+ polymerase_num_reads: 8137046
+ polymerase_read_bases: 661743638541
+ polymerase_read_length_mean: 81325
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 13:54:34
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: 963d008f-3e0c-4c6c-b506-1ff04dffccdd
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 115761872896
+ well_complete: 2024-02-24 23:29:30
+ well_label: A1
+ well_start: 2024-02-23 14:08:30
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.905139
+ control_concordance_mode: 0.91
+ control_num_reads: 1952
+ control_read_length_mean: 74119
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 4478577
+ hifi_bases_in_barcoded_reads: 51165353149
+ hifi_low_quality_num_reads: 100793
+ hifi_low_quality_read_bases: 1244549883
+ hifi_low_quality_read_length_mean: 12347
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 4501489
+ hifi_number_passes_mean: 15
+ hifi_only_reads: 1
+ hifi_read_bases: 51421432183
+ hifi_read_length_mean: 11453
+ hifi_read_quality_median: 38
+ id_pac_bio_product: 513c674f489b106c6af716dd0d210826ff03b7648d50888839c3722ca1b10dbf
+ id_pac_bio_rw_metrics_tmp: 6210
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 203
+ local_base_rate: 2.6256
+ movie_minutes: 1440
+ movie_name: m84093_240224_142512_s1
+ p0_num: 15323739
+ p1_num: 9783967
+ p2_num: 58118
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 2
+ polymerase_num_reads: 9782015
+ polymerase_read_bases: 773527509148
+ polymerase_read_length_mean: 79076
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:57:13
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: 75d2a390-9840-460e-a6b2-1de7d1bd75d5
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 126338891776
+ well_complete: 2024-02-26 00:27:52
+ well_label: A1
+ well_start: 2024-02-24 14:25:12
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.904677
+ control_concordance_mode: 0.91
+ control_num_reads: 3035
+ control_read_length_mean: 43102
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 3448648
+ hifi_bases_in_barcoded_reads: 31779577424
+ hifi_low_quality_num_reads: 266811
+ hifi_low_quality_read_bases: 2539344050
+ hifi_low_quality_read_length_mean: 9517
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 4787230
+ hifi_number_passes_mean: 11
+ hifi_only_reads: 1
+ hifi_read_bases: 45578791158
+ hifi_read_length_mean: 9559
+ hifi_read_quality_median: 37
+ id_pac_bio_product: 26b18bab742e5b1d0dae2f5462b7e42ee5f40bd5e505c8dec69b11591b8884c8
+ id_pac_bio_rw_metrics_tmp: 6207
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-03-05 15:10:36
+ loading_conc: 207
+ local_base_rate: 2.21877
+ movie_minutes: 1440
+ movie_name: m84093_240223_144004_s2
+ p0_num: 13791241
+ p1_num: 11298110
+ p2_num: 76473
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 1
+ polymerase_num_reads: 11295075
+ polymerase_read_bases: 690231867682
+ polymerase_read_length_mean: 61109
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 0
+ qc_seq_date: 2024-03-05 14:30:59
+ qc_seq_state: 'Failed, SMRT cell'
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0.01
+ sl_ccs_uuid: e72398a9-cc9b-4c98-a304-e1ba6b6c30ba
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 123412045824
+ well_complete: 2024-02-25 00:07:54
+ well_label: B1
+ well_start: 2024-02-23 14:40:04
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.911228
+ control_concordance_mode: 0.91
+ control_num_reads: 2308
+ control_read_length_mean: 69661
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 2899704
+ hifi_bases_in_barcoded_reads: 36621724417
+ hifi_low_quality_num_reads: 121486
+ hifi_low_quality_read_bases: 1479247536
+ hifi_low_quality_read_length_mean: 12176
+ hifi_low_quality_read_quality_median: 16
+ hifi_num_reads: 2913451
+ hifi_number_passes_mean: 13
+ hifi_only_reads: 1
+ hifi_read_bases: 36760645135
+ hifi_read_length_mean: 12648
+ hifi_read_quality_median: 38
+ id_pac_bio_product: 9aa3536a661d9c80ef0e962ef7cbd795c5893ed0600b2e331824f4d17cee6f70
+ id_pac_bio_rw_metrics_tmp: 6211
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 147
+ local_base_rate: 2.38396
+ movie_minutes: 1440
+ movie_name: m84093_240224_145729_s2
+ p0_num: 17389564
+ p1_num: 7735267
+ p2_num: 40993
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 2
+ polymerase_num_reads: 7732959
+ polymerase_read_bases: 635399455224
+ polymerase_read_length_mean: 82168
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:50:29
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: abab78b7-889a-473d-ae1d-0957071c9c1f
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 131024281600
+ well_complete: 2024-02-26 04:53:26
+ well_label: B1
+ well_start: 2024-02-24 14:57:29
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.908116
+ control_concordance_mode: 0.91
+ control_num_reads: 3508
+ control_read_length_mean: 77822
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 4785745
+ hifi_bases_in_barcoded_reads: 55176093961
+ hifi_low_quality_num_reads: 98395
+ hifi_low_quality_read_bases: 1210135020
+ hifi_low_quality_read_length_mean: 12298
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 4807206
+ hifi_number_passes_mean: 15
+ hifi_only_reads: 1
+ hifi_read_bases: 55421297045
+ hifi_read_length_mean: 11559
+ hifi_read_quality_median: 39
+ id_pac_bio_product: c1fa777f6154e38df42aa01f2243d54e50d71c1b0279e17d48f928412b13098e
+ id_pac_bio_rw_metrics_tmp: 6208
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 251
+ local_base_rate: 2.57069
+ movie_minutes: 1440
+ movie_name: m84093_240223_151221_s3
+ p0_num: 15698926
+ p1_num: 9425055
+ p2_num: 41843
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 1
+ polymerase_num_reads: 9421547
+ polymerase_read_bases: 832856275408
+ polymerase_read_length_mean: 88399
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:58:28
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: 0cc14fc3-09fe-449a-9836-836c020868d1
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 123970002944
+ well_complete: 2024-02-25 04:56:03
+ well_label: C1
+ well_start: 2024-02-23 15:12:21
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.908994
+ control_concordance_mode: 0.91
+ control_num_reads: 2911
+ control_read_length_mean: 66109
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 5591332
+ hifi_bases_in_barcoded_reads: 78369321152
+ hifi_low_quality_num_reads: 167825
+ hifi_low_quality_read_bases: 2497650060
+ hifi_low_quality_read_length_mean: 14882
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 5614217
+ hifi_number_passes_mean: 11
+ hifi_only_reads: 1
+ hifi_read_bases: 78684120092
+ hifi_read_length_mean: 14045
+ hifi_read_quality_median: 35
+ id_pac_bio_product: 26928ba6ec2a00c04dd6c7c68008ec9436e3979a384b9f708dc371c99f272e17
+ id_pac_bio_rw_metrics_tmp: 6212
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 193
+ local_base_rate: 2.52023
+ movie_minutes: 1440
+ movie_name: m84093_240224_152946_s3
+ p0_num: 11834823
+ p1_num: 13242033
+ p2_num: 88968
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 2
+ polymerase_num_reads: 13239122
+ polymerase_read_bases: 1008552342223
+ polymerase_read_length_mean: 76180
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:49:43
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: a8e25fa2-cc02-4900-8726-d4596fc420a8
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 203873124352
+ well_complete: 2024-02-26 08:09:31
+ well_label: C1
+ well_start: 2024-02-24 15:29:46
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.904516
+ control_concordance_mode: 0.91
+ control_num_reads: 2354
+ control_read_length_mean: 69681
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 6834801
+ hifi_bases_in_barcoded_reads: 77850197661
+ hifi_low_quality_num_reads: 276005
+ hifi_low_quality_read_bases: 3291108067
+ hifi_low_quality_read_length_mean: 11924
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 6868920
+ hifi_number_passes_mean: 13
+ hifi_only_reads: 1
+ hifi_read_bases: 78217597101
+ hifi_read_length_mean: 11417
+ hifi_read_quality_median: 37
+ id_pac_bio_product: 842022fd31778158517b3e3e5bdccfbaac3e0b874a395cfc7912bc17b303edf9
+ id_pac_bio_rw_metrics_tmp: 6209
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 230
+ local_base_rate: 2.35137
+ movie_minutes: 1440
+ movie_name: m84093_240223_154438_s4
+ p0_num: 8854913
+ p1_num: 16179228
+ p2_num: 131683
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 1
+ polymerase_num_reads: 16176874
+ polymerase_read_bases: 1155795587428
+ polymerase_read_length_mean: 71447
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:57:37
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0
+ sl_ccs_uuid: fe20e437-8962-4d30-9db6-9719d6e23bc0
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 213622784000
+ well_complete: 2024-02-25 09:59:06
+ well_label: D1
+ well_start: 2024-02-23 15:44:38
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.906096
+ control_concordance_mode: 0.91
+ control_num_reads: 3293
+ control_read_length_mean: 66482
+ created_by: su3
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 7749814
+ hifi_bases_in_barcoded_reads: 81448324274
+ hifi_low_quality_num_reads: 222688
+ hifi_low_quality_read_bases: 2321289472
+ hifi_low_quality_read_length_mean: 10423
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 7767562
+ hifi_number_passes_mean: 13
+ hifi_only_reads: 1
+ hifi_read_bases: 81629248758
+ hifi_read_length_mean: 10540
+ hifi_read_quality_median: 38
+ id_pac_bio_product: f101c62463c6fdbf07635f3848f5b60d4c4ba137ba0cf3fbe0df886aff1cdeeb
+ id_pac_bio_rw_metrics_tmp: 6213
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84093
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-02-28 11:10:15
+ loading_conc: 249
+ local_base_rate: 2.59623
+ movie_minutes: 1440
+ movie_name: m84093_240224_160202_s4
+ p0_num: 10939806
+ p1_num: 14128436
+ p2_num: 97582
+ pac_bio_run_name: TRACTION-RUN-1140
+ plate_number: 2
+ polymerase_num_reads: 14125143
+ polymerase_read_bases: 1279541616312
+ polymerase_read_length_mean: 90586
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-02-28 10:49:03
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-02-25 20:53:05
+ run_start: 2024-02-23 10:28:12
+ run_status: Complete
+ run_transfer_complete: 2024-02-26 13:41:02
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033482
+ short_insert_percent: 0.06
+ sl_ccs_uuid: 2607cccf-674b-4bb8-9186-19ecaab35e02
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: 89539688-31c7-49e5-af17-db4735e0a0c1
+ ts_run_name: r84093_20240223_102558
+ unique_molecular_bases: 175556214784
+ well_complete: 2024-02-26 13:41:02
+ well_label: D1
+ well_start: 2024-02-24 16:02:02
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.912356
+ control_concordance_mode: 0.93
+ control_num_reads: 1999
+ control_read_length_mean: 62463
+ created_by: mls
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 6173350
+ hifi_bases_in_barcoded_reads: 78726403707
+ hifi_low_quality_num_reads: 177743
+ hifi_low_quality_read_bases: 2378270804
+ hifi_low_quality_read_length_mean: 13380
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 6203304
+ hifi_number_passes_mean: 11
+ hifi_only_reads: 1
+ hifi_read_bases: 79073748871
+ hifi_read_length_mean: 12777
+ hifi_read_quality_median: 37
+ id_pac_bio_product: 763de43c3b5a025bb4b6a6b1f17d921a9ddc92795f21b2156270c62ddbe2292d
+ id_pac_bio_rw_metrics_tmp: 6306
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84098
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-03-08 12:10:14
+ loading_conc: 222
+ local_base_rate: 2.28141
+ movie_minutes: 1440
+ movie_name: m84098_240306_114240_s3
+ p0_num: 11809042
+ p1_num: 13243515
+ p2_num: 113267
+ pac_bio_run_name: TRACTION-RUN-1162
+ plate_number: 1
+ polymerase_num_reads: 13241516
+ polymerase_read_bases: 1027325804889
+ polymerase_read_length_mean: 77584
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-03-08 11:58:01
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-03-07 16:57:46
+ run_start: 2024-03-06 10:20:53
+ run_status: Complete
+ run_transfer_complete: 2024-03-08 00:51:51
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033676
+ short_insert_percent: 0
+ sl_ccs_uuid: 8f43ff90-3791-4c91-b353-b281ea9e05a2
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: e5ae50f3-d68b-4292-84f3-3fd10c1397ef
+ ts_run_name: r84098_20240306_101912
+ unique_molecular_bases: 194611986432
+ well_complete: 2024-03-08 00:51:51
+ well_label: C1
+ well_start: 2024-03-06 11:42:40
+ well_status: Complete
+- adapter_dimer_percent: 0
+ binding_kit: Revio polymerase kit
+ ccs_execution_mode: OnInstrument
+ cell_lot_number: 1000002284
+ chemistry_sw_version: 13.0.0.205983
+ chip_type: 25mChip
+ control_concordance_mean: 0.910574
+ control_concordance_mode: 0.91
+ control_num_reads: 2648
+ control_read_length_mean: 64785
+ created_by: mls
+ demultiplex_mode: OnInstrument
+ heteroduplex_analysis: 0
+ hifi_barcoded_reads: 5669031
+ hifi_bases_in_barcoded_reads: 60299550012
+ hifi_low_quality_num_reads: 129962
+ hifi_low_quality_read_bases: 1451269786
+ hifi_low_quality_read_length_mean: 11166
+ hifi_low_quality_read_quality_median: 17
+ hifi_num_reads: 5695377
+ hifi_number_passes_mean: 14
+ hifi_only_reads: 1
+ hifi_read_bases: 60589827836
+ hifi_read_length_mean: 10668
+ hifi_read_quality_median: 38
+ id_pac_bio_product: f26bda789770f7029867a84ad5175818fde63fc45af79754d46cfccfd3e437b0
+ id_pac_bio_rw_metrics_tmp: 6307
+ include_kinetics: 0
+ insert_length_mean: ~
+ insert_length_n50: ~
+ instrument_name: 84098
+ instrument_sw_version: 13.0.0.212033
+ instrument_type: Revio
+ last_changed: 2024-03-08 12:10:14
+ loading_conc: 253
+ local_base_rate: 2.44579
+ movie_minutes: 1440
+ movie_name: m84098_240306_121456_s4
+ p0_num: 13167825
+ p1_num: 11795718
+ p2_num: 202281
+ pac_bio_run_name: TRACTION-RUN-1162
+ plate_number: 1
+ polymerase_num_reads: 11793070
+ polymerase_read_bases: 898707409648
+ polymerase_read_length_mean: 76206
+ polymerase_read_length_n50: ~
+ primary_analysis_sw_version: 13.0.0.212033
+ productive_zmws_num: 25165824
+ qc_seq: 1
+ qc_seq_date: 2024-03-08 11:56:48
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ run_complete: 2024-03-07 16:57:46
+ run_start: 2024-03-06 10:20:53
+ run_status: Complete
+ run_transfer_complete: 2024-03-08 00:51:51
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 033676
+ short_insert_percent: 0
+ sl_ccs_uuid: 8463bd15-b2f2-4780-a9e6-a4547e64d9de
+ sl_hostname: pacbio01.dnapipelines.sanger.ac.uk
+ sl_run_uuid: e5ae50f3-d68b-4292-84f3-3fd10c1397ef
+ ts_run_name: r84098_20240306_101912
+ unique_molecular_bases: 152831311872
+ well_complete: 2024-03-07 23:26:11
+ well_label: D1
+ well_start: 2024-03-06 12:14:56
+ well_status: Complete
+
+- id_pac_bio_rw_metrics_tmp: 3725
+ id_pac_bio_product: 7454d3e822388a257437d1736361fb00c7493ab8b24ecd8ce3506ff45deb6716
+ pac_bio_run_name: TRACTION-RUN-525
+ well_label: A1
+ qc_seq_state: Passed
+ qc_seq_state_is_final: 1
+ qc_seq_date: 2023-04-12 16:49:52
+ qc_seq: 1
+ instrument_type: Revio
+ instrument_name: 84047
+ chip_type: 25mChip
+ sl_hostname: pacbio02.dnapipelines.sanger.ac.uk
+ sl_run_uuid: f1490bb9-7a99-45b2-9d79-24582881742d
+ sl_ccs_uuid: a9ad9f86-04c2-4194-ba69-48240cb745f9
+ ts_run_name: r84047_20230404_164149
+ movie_name: m84047_230404_164952_s1
+ movie_minutes: 1440
+ created_by: chc
+ binding_kit: Revio polymerase kit
+ sequencing_kit: Revio sequencing plate
+ sequencing_kit_lot_number: 030157
+ cell_lot_number: 1000000291
+ ccs_execution_mode: OnInstrument
+ demultiplex_mode: OnInstrument
+ include_kinetics: 1
+ hifi_only_reads: 1
+ heteroduplex_analysis: 0
+ loading_conc: 227
+ run_start: 2023-04-04 16:42:51
+ run_complete: 2023-04-05 23:16:26
+ run_transfer_complete: 2023-04-06 16:28:42
+ run_status: Complete
+ well_start: 2023-04-04 16:49:53
+ well_complete: 2023-04-06 10:15:28
+ well_status: Complete
+ chemistry_sw_version: 12.0.0.172289
+ instrument_sw_version: 12.0.0.178953
+ primary_analysis_sw_version: 12.0.0.1
+ control_num_reads: 2724
+ control_concordance_mean: 0.899633
+ control_concordance_mode: 0.91
+ control_read_length_mean: 59917
+ local_base_rate: 2.182480
+ polymerase_read_bases: 1324865295449
+ polymerase_num_reads: 18759739
+ polymerase_read_length_mean: 70623
+ polymerase_read_length_n50: 132750
+ insert_length_mean: 14885
+ insert_length_n50: 20250
+ unique_molecular_bases: 250195427328
+ productive_zmws_num: 16777216
+ p0_num: 5846918
+ p1_num: 18762463
+ p2_num: 556443
+ adapter_dimer_percent: 0.00
+ short_insert_percent: 0.00
+ hifi_read_bases: 92922481974
+ hifi_num_reads: 8297069
+ hifi_read_length_mean: 11199
+ hifi_read_quality_median: 34
+ hifi_number_passes_mean: 14
+ hifi_low_quality_read_bases: NULL
+ hifi_low_quality_num_reads: NULL
+ hifi_low_quality_read_length_mean: NULL
+ hifi_low_quality_read_quality_median: NULL
+ hifi_barcoded_reads: 8255091
+ hifi_bases_in_barcoded_reads: 92439476821
diff --git a/tests/data/mlwh_pb_runs/300-PacBioProductMetrics.yml b/tests/data/mlwh_pb_runs/300-PacBioProductMetrics.yml
new file mode 100644
index 00000000..0b6de2e2
--- /dev/null
+++ b/tests/data/mlwh_pb_runs/300-PacBioProductMetrics.yml
@@ -0,0 +1,462 @@
+---
+- id_pac_bio_pr_metrics_tmp: 9675
+ id_pac_bio_product: cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa61
+ id_pac_bio_rw_metrics_tmp: 1732
+ id_pac_bio_tmp: 98966
+- id_pac_bio_pr_metrics_tmp: 9676
+ id_pac_bio_product: 63fb9a37ff19c248fc7d99bd254a61085226ded540de7c5445daf1398e339833
+ id_pac_bio_rw_metrics_tmp: 1733
+ id_pac_bio_tmp: 98967
+- id_pac_bio_pr_metrics_tmp: 9677
+ id_pac_bio_product: a65eae06f3048a186aeb9104d0a8d3f46ca59dff7747eec9918fcfa85587a3c2
+ id_pac_bio_rw_metrics_tmp: 1734
+ id_pac_bio_tmp: 98968
+- id_pac_bio_pr_metrics_tmp: 9678
+ id_pac_bio_product: 57538925519f7ae568fbd5cd075fd2fb600a2273394f6537a17d97917e224b11
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98969
+- id_pac_bio_pr_metrics_tmp: 9679
+ id_pac_bio_product: 2307cbc4bf6b6917fa6a20d7e077302ad617c4df61cc0f845facfb24548360e4
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98970
+- id_pac_bio_pr_metrics_tmp: 9680
+ id_pac_bio_product: 568b595c45b01faa601cab34ac91987b738106e2c10d2343fed1a2823726b036
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98971
+- id_pac_bio_pr_metrics_tmp: 9681
+ id_pac_bio_product: 5a7af02c0fa288456f61046c15fcc2f14ae14ef890eea7de2239abdbc06cd1a2
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98972
+- id_pac_bio_pr_metrics_tmp: 9682
+ id_pac_bio_product: 6efad9725471425b8574eaa8772cfd077cfca761c6654dbd36fb3bdb3e939ac3
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98973
+- id_pac_bio_pr_metrics_tmp: 9683
+ id_pac_bio_product: 40053aa11e7cf4b74c0dc641c42fbe45145f007a6edacd7e1d476d20d3dc8899
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98974
+- id_pac_bio_pr_metrics_tmp: 9684
+ id_pac_bio_product: f0993ebd8924e24e202c269a34598972541c3bccbe9778ca38889d8119ef8fbc
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98975
+- id_pac_bio_pr_metrics_tmp: 9685
+ id_pac_bio_product: 67a948d085b4be890f02a04779ed44351bf64506f14e1a703cede5b901f7732d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98976
+- id_pac_bio_pr_metrics_tmp: 9686
+ id_pac_bio_product: 22be6501a64e534e8bcd4d94222b8b226880d8574b2c2a13b47993d67bf953ed
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98977
+- id_pac_bio_pr_metrics_tmp: 9687
+ id_pac_bio_product: a85234a2ce0b894cdde92dd592202b93e973aec86a22584d5d5aad6207936c3a
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98978
+- id_pac_bio_pr_metrics_tmp: 9688
+ id_pac_bio_product: 925c97e811bd1320575eb09a9c6208ebceb092f39be9804f13ae6ea57d6ee3f4
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98979
+- id_pac_bio_pr_metrics_tmp: 9689
+ id_pac_bio_product: 4cd35d863fb960d2e65b11c3092034272b71c63a7cceb8a4eb82459b442e5649
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98980
+- id_pac_bio_pr_metrics_tmp: 9690
+ id_pac_bio_product: 13e08185c8f214ddb7fda427eb12de14d2328966dc6dd407e04931540d563764
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98981
+- id_pac_bio_pr_metrics_tmp: 9691
+ id_pac_bio_product: b5131d50fc95fcd36b1670a0a200424d8ab1568b4a8c4e3ae267ab78dd482189
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98982
+- id_pac_bio_pr_metrics_tmp: 9692
+ id_pac_bio_product: f16140784d4fe024bda8c121e3f9aefb3d8907f11787be71894120048b2cc504
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98983
+- id_pac_bio_pr_metrics_tmp: 9693
+ id_pac_bio_product: 5a9fe0fb67614b9fd250dcf711e1fcf3e2ce13f450ecc68af699035490e3e0ec
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98984
+- id_pac_bio_pr_metrics_tmp: 9694
+ id_pac_bio_product: 9f045c9356f681c1b452ec6dd92415264f7e9646b91e82bbe9f739d2d97b621c
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98985
+- id_pac_bio_pr_metrics_tmp: 9695
+ id_pac_bio_product: c060619f13f862370b4047c4a897aa4d9e907f6252d1f5e2962e09495d32becb
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98986
+- id_pac_bio_pr_metrics_tmp: 9696
+ id_pac_bio_product: f997587d6945cc8feaf015e6f74247c6d5d72afeae5e4aac550cb69ebdbd8381
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98987
+- id_pac_bio_pr_metrics_tmp: 9697
+ id_pac_bio_product: 044ddae518c4f27a9b4c362098d78dbddbfb3c777eb7b755d64413e4cde4cd3c
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98988
+- id_pac_bio_pr_metrics_tmp: 9698
+ id_pac_bio_product: 03e42278867da02c593029170ce087048e62f6f69165a3080e94f21d3de5e6b9
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98989
+- id_pac_bio_pr_metrics_tmp: 9699
+ id_pac_bio_product: fdf0c4eb042807b7694842569a907e530fe603ade6470e1b4878beab7de9c055
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98990
+- id_pac_bio_pr_metrics_tmp: 9700
+ id_pac_bio_product: a5c8aa41feee6cf782936786d3702c716fac193e5943398662975136fd5e30a1
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98991
+- id_pac_bio_pr_metrics_tmp: 9701
+ id_pac_bio_product: 11c1424601a9dd783e9eab728934f88205b1c2251ce5b5da64d9ba25a34458fb
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98992
+- id_pac_bio_pr_metrics_tmp: 9702
+ id_pac_bio_product: 9708d23c8ea56d4d0680dc6f3f78b102d08708d70f8205e079a0215f9331c27d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98993
+- id_pac_bio_pr_metrics_tmp: 9703
+ id_pac_bio_product: e0d3aa0edd255e4bcf14ad2c855a195677f44109ad444e395845a7b82c1d477d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98994
+- id_pac_bio_pr_metrics_tmp: 9704
+ id_pac_bio_product: 41887713d6f40e42b97384931254e986635189cc432652ac5d16d11c371b6d71
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98995
+- id_pac_bio_pr_metrics_tmp: 9705
+ id_pac_bio_product: 49da248e9147189033f81b7f5f44f036bb26be0a5c3efcf61c484dc8dc50d432
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98996
+- id_pac_bio_pr_metrics_tmp: 9706
+ id_pac_bio_product: ccc81d884b5319d7d6dd4beb14944fd9dc7b6063933a57882f53652da435af2d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98997
+- id_pac_bio_pr_metrics_tmp: 9707
+ id_pac_bio_product: 6ac18d5b5b63eca3a3773686733be395a58d67213b597111c2b51c6fec4ce814
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98998
+- id_pac_bio_pr_metrics_tmp: 9708
+ id_pac_bio_product: dcb13705145a63f6034692b6e5cd568fc34e9c6669f0b0ce37a54160c45a1a04
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 98999
+- id_pac_bio_pr_metrics_tmp: 9709
+ id_pac_bio_product: 4e6c23a4627eb23514d03630512548d521f822d44467f951ae61e169d16a868e
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99000
+- id_pac_bio_pr_metrics_tmp: 9710
+ id_pac_bio_product: 878b1e205768c5965cdce2b11d779d41ad267f5d84cac8652e64d9c7139fd692
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99001
+- id_pac_bio_pr_metrics_tmp: 9711
+ id_pac_bio_product: 75ad3eb849261accf19df9c5acfb97b10f73d658dd1f403a032dab25fdeee64a
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99002
+- id_pac_bio_pr_metrics_tmp: 9712
+ id_pac_bio_product: b209eb8f689ff8391bf42dece19d8de44ef4ee63158219cc81bd0cb45196b631
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99003
+- id_pac_bio_pr_metrics_tmp: 9713
+ id_pac_bio_product: 18078959e14a3416b428624e6cc200c649a8b3b92fc40a20444e9cdca373137b
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99004
+- id_pac_bio_pr_metrics_tmp: 9714
+ id_pac_bio_product: 0a82107d88ee710dcf46139a8710f443da8f4051142c478cb0a99ec5c6d64a2a
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99005
+- id_pac_bio_pr_metrics_tmp: 9715
+ id_pac_bio_product: 6a81185dec0b9dcf06412b43fad08ce92cbf5ad492da7fa25dee63723950de5d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99006
+- id_pac_bio_pr_metrics_tmp: 9716
+ id_pac_bio_product: 7f3912931b878be0b3c949fc20acd59d51b68a27a04fa89491a74905219f8deb
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99007
+- id_pac_bio_pr_metrics_tmp: 9717
+ id_pac_bio_product: 4cf97b14a1c23d892f3b9609642d1978b56ca4a7fca6995897be68c29ed9211d
+ id_pac_bio_rw_metrics_tmp: 1735
+ id_pac_bio_tmp: 99008
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30016
+ id_pac_bio_product: 3b37d8c1a317f229a3aae182f160f8e4f4856607fb15f1ab0588dde66640afda
+ id_pac_bio_rw_metrics_tmp: 6206
+ id_pac_bio_tmp: ~
+ last_changed: 2024-02-28 14:10:14
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30017
+ id_pac_bio_product: 2b9048414306eb7683056bd91f6ec81f0b2dbf69484b3dd2dbe39932b52bedbb
+ id_pac_bio_rw_metrics_tmp: 6206
+ id_pac_bio_tmp: ~
+ last_changed: 2024-02-28 14:10:14
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30018
+ id_pac_bio_product: f50319c97e28f2e0a67ebbc736080c4e98f23cdf6e5b7cec964349ffb13ae797
+ id_pac_bio_rw_metrics_tmp: 6207
+ id_pac_bio_tmp: 120628
+ last_changed: 2024-03-05 15:10:36
+ qc: 0
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30019
+ id_pac_bio_product: 080733cab28898fcd69d1a418c7675cba38a548c9c20ac2da48a84c5658ee6b2
+ id_pac_bio_rw_metrics_tmp: 6207
+ id_pac_bio_tmp: 120629
+ last_changed: 2024-03-05 15:10:36
+ qc: 0
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30020
+ id_pac_bio_product: 14be4b6a6bb857c0967d56c90d2b57edc1401cdb5f95379312fb8e5ca71e09fa
+ id_pac_bio_rw_metrics_tmp: 6207
+ id_pac_bio_tmp: 120630
+ last_changed: 2024-03-05 15:10:36
+ qc: 0
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30021
+ id_pac_bio_product: 4153f3a64e39588bf626c4dda42e5ee74b424bba67d69bb74bb029adda2e642c
+ id_pac_bio_rw_metrics_tmp: 6208
+ id_pac_bio_tmp: 120631
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30022
+ id_pac_bio_product: fbbcd5cac5d086ce64b3a37646e261b4c784fce6755fd65d6d41f048d2267c61
+ id_pac_bio_rw_metrics_tmp: 6208
+ id_pac_bio_tmp: 120632
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30023
+ id_pac_bio_product: 74af5a311e15af654336aea65826a2c4974842d752e25875b0303ad5a3556167
+ id_pac_bio_rw_metrics_tmp: 6209
+ id_pac_bio_tmp: 120633
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30024
+ id_pac_bio_product: 11022006a649937c570d100ccb382dddadf9a7174ee303903c8d2b7cd7efb328
+ id_pac_bio_rw_metrics_tmp: 6209
+ id_pac_bio_tmp: 120634
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30025
+ id_pac_bio_product: e6a2157d0fda8faae1288025e99ce5f8133f1466b752a67809668e5b9b16d5b1
+ id_pac_bio_rw_metrics_tmp: 6209
+ id_pac_bio_tmp: 120635
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30026
+ id_pac_bio_product: 9840280d97c98ff3ddda36ac95cf3b87f5810cc3be73a64c27d6ab92cfaab0ac
+ id_pac_bio_rw_metrics_tmp: 6209
+ id_pac_bio_tmp: 120636
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30027
+ id_pac_bio_product: 81141cdff1f57c0fc0fc5f88856fa7c6d2945acc5fa6e53e7d1214d17a00c410
+ id_pac_bio_rw_metrics_tmp: 6210
+ id_pac_bio_tmp: 120637
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30028
+ id_pac_bio_product: 4145bf889c130ecaadcd4d757d0a3ca98d68629556427a27ebc08840ffdd0e0f
+ id_pac_bio_rw_metrics_tmp: 6210
+ id_pac_bio_tmp: 120638
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30029
+ id_pac_bio_product: 5b99ad09c31afd4917da39d44fc6cc40e1915572e80c20acbfda6d6c031e74c5
+ id_pac_bio_rw_metrics_tmp: 6211
+ id_pac_bio_tmp: 120639
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30030
+ id_pac_bio_product: 0152d7945c4f74fac3ff828012ad2c01a95574df213d7664e7989e1039727cb5
+ id_pac_bio_rw_metrics_tmp: 6211
+ id_pac_bio_tmp: 120640
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30031
+ id_pac_bio_product: 110e4562a6d28dd96973a98fcc1464d6c82dc413296b95d0c71727d21fa2a193
+ id_pac_bio_rw_metrics_tmp: 6212
+ id_pac_bio_tmp: 120641
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30032
+ id_pac_bio_product: af65875cfecca04ee585c67525661f57a07d7f1427aa15ca39e158c791d63aa5
+ id_pac_bio_rw_metrics_tmp: 6212
+ id_pac_bio_tmp: ~
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30033
+ id_pac_bio_product: c24d50afb4c048f38dca230a03fb4880912713adf7db7a3ec4d5f57ee3c4cdec
+ id_pac_bio_rw_metrics_tmp: 6212
+ id_pac_bio_tmp: 120643
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30034
+ id_pac_bio_product: baa1e87601ca9c16d95b7fda9d9346557de4aaf4adb5c15383d0f8d9366692bf
+ id_pac_bio_rw_metrics_tmp: 6213
+ id_pac_bio_tmp: 120644
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30035
+ id_pac_bio_product: f88bcfb888f075442a005368c070ba83d895b07c013c68e1cb292fce4aaa40f2
+ id_pac_bio_rw_metrics_tmp: 6213
+ id_pac_bio_tmp: 120645
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30036
+ id_pac_bio_product: 61d2c6fc72d593949cf7b60812a0076c9af57b0fa71b394f0669e410e040458e
+ id_pac_bio_rw_metrics_tmp: 6213
+ id_pac_bio_tmp: 120646
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30037
+ id_pac_bio_product: 252c8d3dc0b4c81e6d7359b0808ba962013e7b320eb9b979da526cecf5fdd019
+ id_pac_bio_rw_metrics_tmp: 6213
+ id_pac_bio_tmp: 120647
+ last_changed: 2024-02-28 11:10:15
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30153
+ id_pac_bio_product: 2135bf0b32c6b987042e67e062647aa21ac956c1d3385627b7a1d4cd670c355f
+ id_pac_bio_rw_metrics_tmp: 6306
+ id_pac_bio_tmp: 120767
+ last_changed: 2024-03-08 12:10:14
+ qc: 1
+- barcode_quality_score_mean: ~
+ hifi_bases_percent: ~
+ hifi_num_reads: ~
+ hifi_read_bases: ~
+ hifi_read_length_mean: ~
+ hifi_read_quality_mean: ~
+ id_pac_bio_pr_metrics_tmp: 30154
+ id_pac_bio_product: 790e8882c97615d79ebe27b782eefa87eede2cecda8ebd960cdd88300059f196
+ id_pac_bio_rw_metrics_tmp: 6307
+ id_pac_bio_tmp: 120768
+ last_changed: 2024-03-08 12:10:14
+ qc: 1
+
diff --git a/tests/data/mlwh_pb_runs/README b/tests/data/mlwh_pb_runs/README
new file mode 100644
index 00000000..e2559a82
--- /dev/null
+++ b/tests/data/mlwh_pb_runs/README
@@ -0,0 +1,26 @@
+This set of mlwh fixtures contains data for runs TRACTION-RUN-{92,525,1140,1162}
+
+TRACTION-RUN-92
+Wells {A,B,C,D}1, plate_number undefined
+D1 has 40 samples, the rest have one sample each
+
+TRACTION-RUN-525
+Well A1 only, demultiplexed, pac_bio_run_well_metrics data only
+
+TRACTION-RUN-1140
+
+plate 1
+A1 2 samples, LIMS links deleted
+B1 3 samples
+C1 2 samples
+D1 4 samples, belong to two studies
+
+plate2
+A1 2 samples
+B1 2 samples
+C1 3 samples, belong to two studies, LIMS link to one samples is deleted,
+D1 4 sample
+
+TRACTION-RUN-1162
+plate1
+C1 and D1, both with 1 sample, different studies
diff --git a/tests/endpoints/test_config.py b/tests/endpoints/test_config.py
index 85f63557..97ab9e76 100644
--- a/tests/endpoints/test_config.py
+++ b/tests/endpoints/test_config.py
@@ -23,6 +23,7 @@ def test_get_config(test_client: TestClient, load_dicts_and_users):
{"description": "Failed, Instrument", "only_prelim": False},
{"description": "Failed, SMRT cell", "only_prelim": False},
{"description": "On hold", "only_prelim": True},
+ {"description": "On hold external", "only_prelim": True},
{"description": "Undecided", "only_prelim": False},
],
}
diff --git a/tests/endpoints/test_dump_qc_states.py b/tests/endpoints/test_dump_qc_states.py
index 057fe3d5..49247ee0 100644
--- a/tests/endpoints/test_dump_qc_states.py
+++ b/tests/endpoints/test_dump_qc_states.py
@@ -41,7 +41,7 @@ def test_get_qc_by_product_id(test_client: TestClient, load_data4well_retrieval)
assert SECOND_GOOD_CHECKSUM in response_data
list_1 = response_data[FIRST_GOOD_CHECKSUM]
list_2 = response_data[SECOND_GOOD_CHECKSUM]
- qc_states = ["On hold", "Failed, Instrument"]
+ qc_states = ["On hold external", "Failed, Instrument"]
for index, l in enumerate([list_1, list_2]):
assert len(l) == 2
# The list of QC state objects contains QC states
diff --git a/tests/endpoints/test_filtered_wells.py b/tests/endpoints/test_filtered_wells.py
index c65bd71f..4ea86edb 100644
--- a/tests/endpoints/test_filtered_wells.py
+++ b/tests/endpoints/test_filtered_wells.py
@@ -81,7 +81,10 @@ def test_on_hold_filter(test_client: TestClient, load_data4well_retrieval):
"""Test passing `on_hold` filter."""
status = "on_hold"
- expected_data = [{"TRACTION_RUN_1:D1": "On hold"}, {"TRACTION_RUN_1:B1": "On hold"}]
+ expected_data = [
+ {"TRACTION_RUN_1:D1": "On hold external"},
+ {"TRACTION_RUN_1:B1": "On hold"},
+ ]
num_total = len(expected_data)
response = test_client.get(
diff --git a/tests/endpoints/test_single_well_qc_details.py b/tests/endpoints/test_single_well_qc_details.py
index b54c4b93..7931e425 100644
--- a/tests/endpoints/test_single_well_qc_details.py
+++ b/tests/endpoints/test_single_well_qc_details.py
@@ -1,17 +1,15 @@
from fastapi.testclient import TestClient
-from tests.conftest import insert_from_yaml
from tests.fixtures.well_data import load_data4well_retrieval, load_dicts_and_users
def test_get_well_info(
- test_client: TestClient, mlwhdb_test_session, load_data4well_retrieval
+ test_client: TestClient,
+ mlwhdb_test_session,
+ load_data4well_retrieval,
+ mlwhdb_load_runs,
):
- insert_from_yaml(
- mlwhdb_test_session, "tests/data/mlwh_pb_run_92", "lang_qc.db.mlwh_schema"
- )
-
id_product = "cf18bd66e0f0895ea728c1d08103c62d3de8a57a5f879cee45f7b0acc028aa67"
response = test_client.get(f"/pacbio/products/{id_product}/seq_level")
assert response.status_code == 404
diff --git a/tests/endpoints/test_wells4run.py b/tests/endpoints/test_wells4run.py
index 518e1c20..1347fce7 100644
--- a/tests/endpoints/test_wells4run.py
+++ b/tests/endpoints/test_wells4run.py
@@ -26,7 +26,7 @@ def test_existing_run(test_client: TestClient, load_data4well_retrieval):
label_list = [well["label"] for well in resp["wells"]]
assert label_list == ["A1", "B1", "C1", "D1"]
qc_states = [well["qc_state"]["qc_state"] for well in resp["wells"]]
- assert qc_states == ["Claimed", "On hold", "Claimed", "On hold"]
+ assert qc_states == ["Claimed", "On hold", "Claimed", "On hold external"]
assert (
resp["wells"][0]["instrument_name"] == "64016"
diff --git a/tests/fixtures/inbox_data.py b/tests/fixtures/inbox_data.py
index b8fb04e8..64379b18 100644
--- a/tests/fixtures/inbox_data.py
+++ b/tests/fixtures/inbox_data.py
@@ -20,7 +20,6 @@
SubProductAttr,
User,
)
-from tests.fixtures.utils import clean_mlwhdb, clean_qcdb
@pytest.fixture
@@ -99,8 +98,6 @@ def inbox_data(mlwhdb_test_session):
yield True
- clean_mlwhdb(mlwhdb_test_session)
-
@pytest.fixture()
def test_data_factory(mlwhdb_test_session, qcdb_test_session):
@@ -201,6 +198,3 @@ def setup_data(desired_wells):
return desired_wells
yield setup_data
-
- clean_mlwhdb(mlwhdb_test_session)
- clean_qcdb(qcdb_test_session)
diff --git a/tests/fixtures/utils.py b/tests/fixtures/utils.py
deleted file mode 100644
index 0a4b0e9a..00000000
--- a/tests/fixtures/utils.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from sqlalchemy import delete
-
-from lang_qc.db.mlwh_schema import (
- PacBioProductMetrics,
- PacBioRun,
- PacBioRunWellMetrics,
- Sample,
- Study,
-)
-from lang_qc.db.qc_schema import (
- ProductLayout,
- QcState,
- QcStateDict,
- QcType,
- SeqPlatform,
- SeqProduct,
- SubProduct,
- SubProductAttr,
- User,
-)
-
-
-def clean_mlwhdb(session):
- print("\nCLEAN mlwh schema")
- with session.begin():
- session.execute(delete(PacBioProductMetrics))
- session.execute(delete(PacBioRun))
- session.execute(delete(Study))
- session.execute(delete(Sample))
- session.execute(delete(PacBioRunWellMetrics))
- session.commit()
-
-
-def clean_qcdb(session):
- with session.begin():
- print("\nCLEAN QC DB")
- session.execute(delete(QcState))
- session.execute(delete(ProductLayout))
- session.execute(delete(SeqProduct))
- session.execute(delete(SubProduct))
- session.execute(delete(QcType))
- session.execute(delete(SubProductAttr))
- session.execute(delete(SeqPlatform))
- session.execute(delete(User))
- session.execute(delete(QcStateDict))
- session.commit()
diff --git a/tests/fixtures/well_data.py b/tests/fixtures/well_data.py
index abb99a36..3754c927 100644
--- a/tests/fixtures/well_data.py
+++ b/tests/fixtures/well_data.py
@@ -30,6 +30,7 @@
{"state": "Passed", "outcome": 1},
{"state": "Claimed", "outcome": None},
{"state": "On hold", "outcome": None},
+ {"state": "On hold external", "outcome": None},
]
PLATFORMS = [
@@ -66,7 +67,7 @@
["TRACTION_RUN_1", "A1", "Claimed", True, "2022-12-07 07:15:19", None],
["TRACTION_RUN_1", "B1", "On hold", True, "2022-12-08 07:15:19", None],
["TRACTION_RUN_1", "C1", "Claimed", True, "2022-12-08 08:15:19", None],
- ["TRACTION_RUN_1", "D1", "On hold", True, "2022-12-08 09:15:19", None],
+ ["TRACTION_RUN_1", "D1", "On hold external", True, "2022-12-08 09:15:19", None],
["TRACTION_RUN_1", "E1", "Claimed", True, "2022-12-07 09:15:19", None],
["TRACTION_RUN_2", "A1", "Failed, Instrument", True, "2022-12-07 15:13:56", 1],
["TRACTION_RUN_2", "B1", "Failed, Instrument", False, "2022-12-08 15:18:56", 1],
diff --git a/tests/test_pac_bio_experiment.py b/tests/test_pac_bio_experiment.py
index a9556b27..ff979541 100644
--- a/tests/test_pac_bio_experiment.py
+++ b/tests/test_pac_bio_experiment.py
@@ -3,18 +3,13 @@
from lang_qc.db.mlwh_schema import PacBioRun
from lang_qc.models.pacbio.experiment import PacBioExperiment
-from tests.conftest import insert_from_yaml
-def test_creating_experiment_object(mlwhdb_test_session):
+def test_creating_experiment_object(mlwhdb_test_session, mlwhdb_load_runs):
run_name = "TRACTION-RUN-92"
# Four wells, D1 has 40 samples, the rest have one sample each.
- insert_from_yaml(
- mlwhdb_test_session, "tests/data/mlwh_pb_run_92", "lang_qc.db.mlwh_schema"
- )
-
query = (
select(PacBioRun)
.where(PacBioRun.pac_bio_run_name == run_name)
diff --git a/tests/test_pac_bio_qc_data_well.py b/tests/test_pac_bio_qc_data_well.py
index ccc6557a..701cce85 100644
--- a/tests/test_pac_bio_qc_data_well.py
+++ b/tests/test_pac_bio_qc_data_well.py
@@ -2,18 +2,13 @@
from lang_qc.db.helper.wells import WellWh
from lang_qc.models.pacbio.qc_data import QCDataWell
-from tests.conftest import insert_from_yaml
-def test_creating_qc_data_well(mlwhdb_test_session):
+def test_creating_qc_data_well(mlwhdb_test_session, mlwhdb_load_runs):
"""
Check that run-well metrics are correctly transformed for client rendering
"""
- insert_from_yaml(
- mlwhdb_test_session, "tests/data/mlwh_pb_demux_525", "lang_qc.db.mlwh_schema"
- )
-
helper = WellWh(session=mlwhdb_test_session)
id_product = PacBioEntity(
diff --git a/tests/test_pac_well_full.py b/tests/test_pac_well_full.py
deleted file mode 100644
index c8ff08cb..00000000
--- a/tests/test_pac_well_full.py
+++ /dev/null
@@ -1,85 +0,0 @@
-from npg_id_generation.pac_bio import PacBioEntity
-
-from lang_qc.db.helper.qc import get_qc_states_by_id_product_list
-from lang_qc.db.helper.wells import WellWh
-from lang_qc.models.pacbio.well import PacBioWellFull
-from tests.conftest import compare_dates, insert_from_yaml
-from tests.fixtures.well_data import load_data4well_retrieval, load_dicts_and_users
-
-
-def test_creating_experiment_object(
- mlwhdb_test_session, qcdb_test_session, load_data4well_retrieval
-):
-
- insert_from_yaml(
- mlwhdb_test_session, "tests/data/mlwh_pb_run_92", "lang_qc.db.mlwh_schema"
- )
- helper = WellWh(session=mlwhdb_test_session)
-
- # Full mlwh data, no data in the lang_qc database.
- id_product = PacBioEntity(
- run_name="TRACTION-RUN-92", well_label="A1"
- ).hash_product_id()
- well_row = helper.get_mlwh_well_by_product_id(id_product)
-
- pb_well = PacBioWellFull(db_well=well_row)
- assert pb_well.id_product == id_product
- assert pb_well.run_name == "TRACTION-RUN-92"
- assert pb_well.label == "A1"
- assert pb_well.plate_number is None
- assert pb_well.qc_state is None
- compare_dates(pb_well.run_start_time, "2022-04-14 12:52:34")
- compare_dates(pb_well.run_complete_time, "2022-04-20 09:16:53")
- compare_dates(pb_well.well_start_time, "2022-04-14 13:02:48")
- compare_dates(pb_well.well_complete_time, "2022-04-16 12:36:21")
- assert pb_well.run_status == "Complete"
- assert pb_well.well_status == "Complete"
- assert pb_well.metrics is not None
- assert pb_well.experiment_tracking is not None
- assert pb_well.instrument_name == "64222E"
- assert pb_well.instrument_type == "Sequel2e"
-
- # Only run_well mlwh data (no products), and data in the lang_qc database.
- # Very sketchy mlwh qc metrics data
- id_product = PacBioEntity(
- run_name="TRACTION_RUN_1", well_label="B1"
- ).hash_product_id()
- well_row = helper.get_mlwh_well_by_product_id(id_product)
-
- qc_state = get_qc_states_by_id_product_list(
- session=qcdb_test_session,
- ids=[id_product],
- sequencing_outcomes_only=True,
- )
- pb_well = PacBioWellFull(db_well=well_row, qc_state=qc_state)
- assert pb_well.id_product == id_product
- assert pb_well.run_name == "TRACTION_RUN_1"
- assert pb_well.label == "B1"
- assert pb_well.plate_number is None
- assert pb_well.run_status == "Complete"
- assert pb_well.well_status == "Complete"
- assert pb_well.qc_state is not None
- assert pb_well.metrics is not None
- assert pb_well.experiment_tracking is None
- assert pb_well.instrument_name == "64016"
- assert pb_well.instrument_type == "Sequel2"
-
- # Only run_well mlwh data (no products), no data in the lang_qc database.
- # Very sketchy mlwh qc metrics data
- id_product = PacBioEntity(
- run_name="TRACTION_RUN_10", well_label="C1"
- ).hash_product_id()
- well_row = helper.get_mlwh_well_by_product_id(id_product)
-
- pb_well = PacBioWellFull(db_well=well_row, qc_state=None)
- assert pb_well.id_product == id_product
- assert pb_well.run_name == "TRACTION_RUN_10"
- assert pb_well.label == "C1"
- assert pb_well.plate_number == 1
- assert pb_well.well_status == "Complete"
- assert pb_well.run_status == "Aborted"
- assert pb_well.qc_state is None
- assert pb_well.metrics is not None
- assert pb_well.experiment_tracking is None
- assert pb_well.instrument_name == "1234"
- assert pb_well.instrument_type == "Revio"
diff --git a/tests/test_pb_well_models.py b/tests/test_pb_well_models.py
new file mode 100644
index 00000000..12d64a44
--- /dev/null
+++ b/tests/test_pb_well_models.py
@@ -0,0 +1,190 @@
+from npg_id_generation.pac_bio import PacBioEntity
+from sqlalchemy.orm import Session
+
+from lang_qc.db.helper.qc import get_qc_states_by_id_product_list
+from lang_qc.db.helper.wells import WellWh
+from lang_qc.db.mlwh_schema import PacBioRunWellMetrics
+from lang_qc.models.pacbio.well import PacBioWellFull, PacBioWellSummary
+from tests.conftest import compare_dates
+from tests.fixtures.well_data import load_data4well_retrieval, load_dicts_and_users
+
+yaml_is_loaded: bool = False
+
+
+def _prepare_data(
+ mlwhdb_session: Session,
+ qcdb_session: Session,
+ run_name: str,
+ well_label: str,
+ plate_number: int = None,
+):
+ """Returns mlwh data for one well.
+
+ Returns a tuple of an mlwh db row and QC state model for one well.
+ """
+
+ id_product = PacBioEntity(
+ run_name=run_name, well_label=well_label, plate_number=plate_number
+ ).hash_product_id()
+ well_row = WellWh(session=mlwhdb_session).get_mlwh_well_by_product_id(id_product)
+
+ qc_state = None
+ qc_states = get_qc_states_by_id_product_list(
+ session=qcdb_session,
+ ids=[id_product],
+ sequencing_outcomes_only=True,
+ )
+ if id_product in qc_states:
+ qc_state = qc_states[id_product][0]
+
+ return (well_row, qc_state)
+
+
+def _examine_well_model_a1(pb_well: PacBioRunWellMetrics, id_product: str):
+
+ assert pb_well.id_product == id_product
+ assert pb_well.run_name == "TRACTION-RUN-92"
+ assert pb_well.label == "A1"
+ assert pb_well.plate_number is None
+ assert pb_well.qc_state is None
+ compare_dates(pb_well.run_start_time, "2022-04-14 12:52:34")
+ compare_dates(pb_well.run_complete_time, "2022-04-20 09:16:53")
+ compare_dates(pb_well.well_start_time, "2022-04-14 13:02:48")
+ compare_dates(pb_well.well_complete_time, "2022-04-16 12:36:21")
+ assert pb_well.run_status == "Complete"
+ assert pb_well.well_status == "Complete"
+ assert pb_well.instrument_name == "64222E"
+ assert pb_well.instrument_type == "Sequel2e"
+
+
+def _examine_well_model_b1(pb_well: PacBioRunWellMetrics, id_product: str):
+
+ assert pb_well.id_product == id_product
+ assert pb_well.run_name == "TRACTION_RUN_1"
+ assert pb_well.label == "B1"
+ assert pb_well.plate_number is None
+ assert pb_well.run_status == "Complete"
+ assert pb_well.well_status == "Complete"
+ assert pb_well.qc_state is not None
+ assert pb_well.instrument_name == "64016"
+ assert pb_well.instrument_type == "Sequel2"
+
+
+def _examine_well_model_c1(pb_well: PacBioRunWellMetrics, id_product: str):
+
+ assert pb_well.id_product == id_product
+ assert pb_well.run_name == "TRACTION_RUN_10"
+ assert pb_well.label == "C1"
+ assert pb_well.plate_number == 1
+ assert pb_well.well_status == "Complete"
+ assert pb_well.run_status == "Aborted"
+ assert pb_well.qc_state is None
+ assert pb_well.instrument_name == "1234"
+ assert pb_well.instrument_type == "Revio"
+
+
+def test_create_full_model(
+ mlwhdb_test_session, qcdb_test_session, load_data4well_retrieval, mlwhdb_load_runs
+):
+ # Full mlwh data, no data in the lang_qc database.
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-92", "A1"
+ )
+ pb_well = PacBioWellFull(db_well=well_row)
+ _examine_well_model_a1(pb_well, well_row.id_pac_bio_product)
+ assert pb_well.metrics is not None
+ assert pb_well.experiment_tracking is not None
+
+ # Only run_well mlwh data (no products), and data in the lang_qc database.
+ # Very sketchy mlwh qc metrics data.
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION_RUN_1", "B1"
+ )
+ pb_well = PacBioWellFull(db_well=well_row, qc_state=qc_state)
+ _examine_well_model_b1(pb_well, well_row.id_pac_bio_product)
+ assert pb_well.metrics is not None
+ assert pb_well.experiment_tracking is None
+
+ # Only run_well mlwh data (no products), no data in the lang_qc database.
+ # Very sketchy mlwh qc metrics data.
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION_RUN_10", "C1"
+ )
+ pb_well = PacBioWellFull(db_well=well_row, qc_state=None)
+ _examine_well_model_c1(pb_well, well_row.id_pac_bio_product)
+ assert pb_well.metrics is not None
+ assert pb_well.experiment_tracking is None
+
+
+def test_create_summary_model(
+ mlwhdb_test_session, qcdb_test_session, load_data4well_retrieval, mlwhdb_load_runs
+):
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-92", "A1"
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ _examine_well_model_a1(pb_well, well_row.id_pac_bio_product)
+ assert pb_well.study_names == ["Tree of Life - ASG"]
+
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION_RUN_1", "B1"
+ )
+ pb_well = PacBioWellSummary(db_well=well_row, qc_state=qc_state)
+ _examine_well_model_b1(pb_well, well_row.id_pac_bio_product)
+ assert pb_well.study_names == []
+
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION_RUN_10", "C1"
+ )
+ pb_well = PacBioWellFull(db_well=well_row, qc_state=None)
+ _examine_well_model_c1(pb_well, well_row.id_pac_bio_product)
+
+
+def test_create_summary_model_study_info(
+ mlwhdb_test_session, qcdb_test_session, load_data4well_retrieval, mlwhdb_load_runs
+):
+ # Well with two samples, none is linked to LIMS
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1140", "A1", 1
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == []
+
+ # Fully linked wells with one sample
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1162", "C1"
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == ["DTOL_Darwin R&D"]
+
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1162", "D1", 1
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == ["DTOL_Darwin Tree of Life"]
+
+ # A fully linked well with multiple samples, all belonging to the same study
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1140", "B1", 1
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == ["DTOL_Darwin Tree of Life"]
+
+ # A fully linked well with multiple samples, which belong to two studies
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1140", "D1", 1
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == [
+ "DTOL_Darwin Tree of Life",
+ "ToL_Blaxter_ Reference Genomes_ DNA",
+ ]
+
+ # A partially linked well with three samples, which belong to two studies.
+ # The LIMS link for one of the samples is deleted so that two other samples
+ # belong to the same study.
+ (well_row, qc_state) = _prepare_data(
+ mlwhdb_test_session, qcdb_test_session, "TRACTION-RUN-1140", "C1", 2
+ )
+ pb_well = PacBioWellSummary(db_well=well_row)
+ assert pb_well.study_names == []
diff --git a/tests/test_pb_wells_factory.py b/tests/test_pb_wells_factory.py
index b4638d3f..dc02f612 100644
--- a/tests/test_pb_wells_factory.py
+++ b/tests/test_pb_wells_factory.py
@@ -4,7 +4,7 @@
from lang_qc.db.helper.wells import PacBioPagedWellsFactory, RunNotFoundError
from lang_qc.db.qc_schema import QcState, QcType, SeqProduct
-from lang_qc.models.pacbio.well import PacBioPagedWells, PacBioWell
+from lang_qc.models.pacbio.well import PacBioPagedWells, PacBioWellSummary
from lang_qc.models.qc_flow_status import QcFlowStatusEnum
from lang_qc.models.qc_state import QcState as QcStateModel
from tests.conftest import compare_dates
@@ -31,7 +31,7 @@ def test_query_for_status(
assert isinstance(state, QcState)
assert state.is_preliminary == 1
assert state.qc_type.qc_type == "sequencing"
- assert state.qc_state_dict.state == "On hold"
+ assert state.qc_state_dict.state in ("On hold", "On hold external")
compare_dates(state.date_updated, update_dates[index])
factory = PacBioPagedWellsFactory(
@@ -141,7 +141,7 @@ def test_inbox_wells_retrieval(
mlwh_data = load_data4well_retrieval
well = paged_wells.wells[0]
- assert isinstance(well, PacBioWell)
+ assert isinstance(well, PacBioWellSummary)
assert well.run_name == "TRACTION_RUN_10"
assert well.label == "C1"
assert well.qc_state is None
@@ -154,7 +154,7 @@ def test_inbox_wells_retrieval(
compare_dates(well.well_complete_time, well_fixture[5])
well = paged_wells.wells[1]
- assert isinstance(well, PacBioWell)
+ assert isinstance(well, PacBioWellSummary)
assert well.run_name == "TRACTION_RUN_12"
assert well.label == "A1"
assert well.qc_state is None
@@ -290,7 +290,7 @@ def test_fully_retrieved_data_for_statuses(
paged_wells = factory.create_for_qc_status(QcFlowStatusEnum.QC_COMPLETE)
well = paged_wells.wells[0]
- assert isinstance(well, PacBioWell)
+ assert isinstance(well, PacBioWellSummary)
assert well.run_name == "TRACTION_RUN_5"
assert well.label == "B1"
compare_dates(well.run_start_time, "2022-12-14 11:56:33")
@@ -312,7 +312,7 @@ def test_fully_retrieved_data_for_statuses(
assert qc_state.created_by == "LangQC"
well = paged_wells.wells[3]
- assert isinstance(well, PacBioWell)
+ assert isinstance(well, PacBioWellSummary)
assert well.run_name == "TRACTION_RUN_2"
assert well.label == "D1"
compare_dates(well.run_start_time, "2022-12-02 15:11:22")
@@ -394,14 +394,19 @@ def test_known_run_names_input(
wells = paged_wells_obj.wells
assert len(wells) == 4
object_type_set = {type(well) for well in wells}
- assert object_type_set == {PacBioWell}
+ assert object_type_set == {PacBioWellSummary}
run_name_set = {well.run_name for well in wells}
assert run_name_set == {"TRACTION_RUN_1"}
label_list = [well.label for well in wells]
assert label_list == ["A1", "B1", "C1", "D1"]
- qc_states = [well.qc_state.qc_state for well in wells]
- expected_qc_states = ["Claimed", "On hold", "Claimed", "On hold"]
+ qc_states = sorted([well.qc_state.qc_state for well in wells])
+ expected_qc_states = [
+ "Claimed",
+ "Claimed",
+ "On hold",
+ "On hold external",
+ ]
assert qc_states == expected_qc_states
factory = PacBioPagedWellsFactory(
@@ -419,7 +424,7 @@ def test_known_run_names_input(
wells = paged_wells_obj.wells
assert len(wells) == 2
object_type_set = {type(well) for well in wells}
- assert object_type_set == {PacBioWell}
+ assert object_type_set == {PacBioWellSummary}
run_names = [well.run_name for well in wells]
assert run_names == 2 * ["TRACTION_RUN_3"]
label_list = [well.label for well in wells]
diff --git a/tests/test_qc_state_retrieval.py b/tests/test_qc_state_retrieval.py
index 7babe28d..6d5813e4 100644
--- a/tests/test_qc_state_retrieval.py
+++ b/tests/test_qc_state_retrieval.py
@@ -30,7 +30,7 @@ def test_bulk_retrieval(qcdb_test_session, load_data4well_retrieval):
# product IDs is performed.
assert get_qc_states_by_id_product_list(qcdb_test_session, ["dodo"]) == {}
- qc_state_descriptions = ["On hold", "Failed, Instrument"]
+ qc_state_descriptions = ["On hold external", "Failed, Instrument"]
qc_states = get_qc_states_by_id_product_list(qcdb_test_session, two_good_ids_list)
assert len(qc_states) == 2
@@ -140,7 +140,7 @@ def test_product_qc_state_retrieval(qcdb_test_session, load_data4well_retrieval)
assert qc_state is not None
assert qc_state.seq_product.id_product == FIRST_GOOD_CHECKSUM
assert qc_state.qc_type.qc_type == "sequencing"
- assert qc_state.qc_state_dict.state == "On hold"
+ assert qc_state.qc_state_dict.state == "On hold external"
qc_state = get_qc_state_for_product(
session=qcdb_test_session, id_product=FIRST_GOOD_CHECKSUM, qc_type="sequencing"
@@ -148,7 +148,7 @@ def test_product_qc_state_retrieval(qcdb_test_session, load_data4well_retrieval)
assert qc_state is not None
assert qc_state.seq_product.id_product == FIRST_GOOD_CHECKSUM
assert qc_state.qc_type.qc_type == "sequencing"
- assert qc_state.qc_state_dict.state == "On hold"
+ assert qc_state.qc_state_dict.state == "On hold external"
qc_state = get_qc_state_for_product(
session=qcdb_test_session, id_product=FIRST_GOOD_CHECKSUM, qc_type="library"
@@ -156,7 +156,7 @@ def test_product_qc_state_retrieval(qcdb_test_session, load_data4well_retrieval)
assert qc_state is not None
assert qc_state.seq_product.id_product == FIRST_GOOD_CHECKSUM
assert qc_state.qc_type.qc_type == "library"
- assert qc_state.qc_state_dict.state == "On hold"
+ assert qc_state.qc_state_dict.state == "On hold external"
qc_state = get_qc_state_for_product(qcdb_test_session, SECOND_GOOD_CHECKSUM)
assert qc_state is not None
@@ -183,6 +183,7 @@ def test_dict_helper(qcdb_test_session, load_dicts_and_users):
"Failed, SMRT cell",
"Claimed",
"On hold",
+ "On hold external",
"Undecided",
]
assert list(qc_state_dict(qcdb_test_session).keys()) == expected_sorted_states