From 2ece7c45a69154c8ca9ff98836d3d1b9912109bb Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Tue, 5 Aug 2025 10:54:18 -0500 Subject: [PATCH 01/13] Migrate luminex_xponent to use SeriesData.get_unread --- .../benchling/_2024/_09/multi_analyte_profiling.py | 4 ++++ .../parsers/luminex_xponent/luminex_xponent_structure.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py index 9c13fdaee..ecfbd7368 100644 --- a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py +++ b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from typing import Any from allotropy.allotrope.models.adm.multi_analyte_profiling.benchling._2024._09.multi_analyte_profiling import ( AnalyteAggregateDocument, @@ -101,6 +102,9 @@ class Measurement: minimum_assay_bead_count_setting: float | None = None detector_gain_setting: str | None = None + # custom + custom_info: dict[str, Any] | None = None + @dataclass(frozen=True) class MeasurementGroup: diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 119c7319b..06050caeb 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -180,6 +180,7 @@ class Measurement: analytes: list[Analyte] calculated_data: list[CalculatedDocument] errors: list[Error] | None = None + custom_info: dict[str, Any] | None = None @classmethod def create( @@ -298,6 +299,8 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: analytes=analytes, errors=errors, calculated_data=calculated_data, + # Get unread data after all keys have been read + custom_info=count_data.get_unread() if count_data.get_unread() else None, ) @classmethod @@ -416,6 +419,7 @@ def create_measurement_groups( assay_bead_count=measurement.assay_bead_count, analytes=measurement.analytes, errors=measurement.errors if measurement.errors else None, + custom_info=measurement.custom_info, ) ], ) From a54515daebe814fb2ca420643744a3ad1a25066a Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Tue, 5 Aug 2025 12:09:26 -0500 Subject: [PATCH 02/13] fix warnings --- .../luminex_xponent_structure.py | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 06050caeb..9f9fe0b71 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -73,6 +73,9 @@ def create( raw_datetime = info_row[str, "BatchStartTime"] sample_volume = info_row.get(str, ["SampleVolume", "MaxSampleUptakeVolume"]) + # Capture unread header data to prevent warnings + info_row.get_unread() + return Header( model_number=cls._get_model_number(header_data), software_version=info_row.get(str, "Build"), @@ -138,6 +141,8 @@ def create_calibration(calibration_data: SeriesData) -> Calibration: msg = f"Expected at least two columns on the calibration line, got:\n{calibration_data.series}." raise AllotropeConversionError(msg) + # Read the calibration data using SeriesData methods + calibration_name = calibration_data.series.iloc[0] calibration_info = str(calibration_data.series.iloc[1]).strip() # Check if the calibration info starts with a known status value @@ -164,7 +169,7 @@ def create_calibration(calibration_data: SeriesData) -> Calibration: raise AllotropeConversionError(msg) return Calibration( - name=calibration_data.series.iloc[0].replace("Last", "").strip(), + name=calibration_name.replace("Last", "").strip(), time=time, report=report, ) @@ -202,9 +207,12 @@ def create( metadata_keys = ["Sample", "Total Events"] well_location, location_id = cls._get_location_details(location) - dilution_factor_setting = SeriesData(dilution_factor_data.loc[location]).get( + dilution_factor_series = SeriesData(dilution_factor_data.loc[location]) + dilution_factor_setting = dilution_factor_series.get( float, "Dilution Factor", NEGATIVE_ZERO, validate=SeriesData.NOT_NAN ) + # Capture unread dilution factor data to prevent warnings + dilution_factor_series.get_unread() errors: list[Error] = [] data_errors = cls._get_errors(errors_data, well_location) or [] for data_error in data_errors: @@ -319,8 +327,15 @@ def _get_errors( ) -> list[str] | None: if errors_data is None or well_location not in errors_data.index: return None + + def extract_message(data: SeriesData) -> str: + message = data[str, "Message"] + # Capture unread error data to prevent warnings + data.get_unread() + return message + return map_rows( - errors_data.loc[[well_location]], lambda data: data[str, "Message"] + errors_data.loc[[well_location]], extract_message ) @@ -357,6 +372,9 @@ def create_measurement(count_data: SeriesData) -> Measurement: bead_ids_data=bead_ids_data, ) + # Capture unread bead IDs data to prevent warnings + bead_ids_data.get_unread() + return MeasurementList(map_rows(results_data["Count"], create_measurement)) From 28c9db66046a3472c985ae87b4c65fc5a9fbf0ce Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Tue, 5 Aug 2025 12:13:10 -0500 Subject: [PATCH 03/13] hatch lint fixes --- .../parsers/luminex_xponent/luminex_xponent_structure.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 9f9fe0b71..d412fd542 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -334,9 +334,7 @@ def extract_message(data: SeriesData) -> str: data.get_unread() return message - return map_rows( - errors_data.loc[[well_location]], extract_message - ) + return map_rows(errors_data.loc[[well_location]], extract_message) @dataclass(frozen=True) From cc884694dab1c7d83900ca7aaf5735e47cdd3f0c Mon Sep 17 00:00:00 2001 From: Nathan Stender Date: Tue, 5 Aug 2025 14:50:29 -0400 Subject: [PATCH 04/13] Fix case for calibration data --- .../parsers/luminex_xponent/luminex_xponent_structure.py | 1 + src/allotropy/parsers/utils/pandas.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index d412fd542..c7f64ac1d 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -144,6 +144,7 @@ def create_calibration(calibration_data: SeriesData) -> Calibration: # Read the calibration data using SeriesData methods calibration_name = calibration_data.series.iloc[0] calibration_info = str(calibration_data.series.iloc[1]).strip() + calibration_data.get_unread() # Check if the calibration info starts with a known status value status_values = ["Passed", "Failed", "Calibrated", "Verified"] diff --git a/src/allotropy/parsers/utils/pandas.py b/src/allotropy/parsers/utils/pandas.py index 129850372..57499d9c3 100644 --- a/src/allotropy/parsers/utils/pandas.py +++ b/src/allotropy/parsers/utils/pandas.py @@ -282,7 +282,7 @@ def _get_matching_keys(self, key_or_keys: str | set[str]) -> set[str]: for matched in [ k for k in self.series.index - if k == regex_key or re.fullmatch(regex_key, k) + if k == regex_key or re.fullmatch(str(regex_key), str(k)) ] } @@ -437,7 +437,7 @@ def get( Returns: type: A value of the type provided or default value. """ - if not isinstance(key, str): + if isinstance(key, tuple | list | set): return get_first_not_none( lambda k: self.get( type_, k, validate=validate, duplicate_strategy=duplicate_strategy From 6274f4215adeb3c9b794174d760c8c1b988f6d01 Mon Sep 17 00:00:00 2001 From: Nathan Stender Date: Tue, 5 Aug 2025 14:53:25 -0400 Subject: [PATCH 05/13] Fix typing --- src/allotropy/parsers/utils/pandas.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/allotropy/parsers/utils/pandas.py b/src/allotropy/parsers/utils/pandas.py index 57499d9c3..5885a8bfe 100644 --- a/src/allotropy/parsers/utils/pandas.py +++ b/src/allotropy/parsers/utils/pandas.py @@ -444,6 +444,9 @@ def get( ), key, ) + elif not isinstance(key, str): + msg = f"Unexpected key type ({type(key)}): {key}" + raise ValueError(msg) self.read_keys.add(key) # Handle duplicate keys if needed From 34a1ec011e51ad18f07be1eb302823d77b90f091 Mon Sep 17 00:00:00 2001 From: Nathan Stender Date: Tue, 5 Aug 2025 14:55:56 -0400 Subject: [PATCH 06/13] Allow int --- src/allotropy/parsers/utils/pandas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/allotropy/parsers/utils/pandas.py b/src/allotropy/parsers/utils/pandas.py index 5885a8bfe..a3dca0225 100644 --- a/src/allotropy/parsers/utils/pandas.py +++ b/src/allotropy/parsers/utils/pandas.py @@ -444,7 +444,7 @@ def get( ), key, ) - elif not isinstance(key, str): + elif not isinstance(key, str | int): msg = f"Unexpected key type ({type(key)}): {key}" raise ValueError(msg) self.read_keys.add(key) From 3e0a094910f2f53285f6f89baf01dc3c3131d671 Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Wed, 6 Aug 2025 10:53:11 -0500 Subject: [PATCH 07/13] add_custom_information_document added --- .../_2024/_09/multi_analyte_profiling.py | 43 +++++++++++++------ .../luminex_xponent_structure.py | 1 - 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py index ecfbd7368..4e3b37484 100644 --- a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py +++ b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from typing import Any +from allotropy.allotrope.converter import add_custom_information_document from allotropy.allotrope.models.adm.multi_analyte_profiling.benchling._2024._09.multi_analyte_profiling import ( AnalyteAggregateDocument, AnalyteDocumentItem, @@ -140,6 +141,7 @@ class Metadata: product_manufacturer: str | None = None calibrations: list[Calibration] | None = None + custom_info: dict[str, Any] | None = None @dataclass(frozen=True) @@ -164,15 +166,18 @@ def map_model(self, data: Data) -> Model: data.metadata.calibrations ), ), - data_system_document=DataSystemDocument( - data_system_instance_identifier=data.metadata.data_system_instance_identifier, - file_name=data.metadata.file_name, - UNC_path=data.metadata.unc_path, - software_name=data.metadata.software_name, - software_version=data.metadata.software_version, - ASM_file_identifier=data.metadata.asm_file_identifier, - ASM_converter_name=self.converter_name, - ASM_converter_version=ASM_CONVERTER_VERSION, + data_system_document=add_custom_information_document( + DataSystemDocument( + data_system_instance_identifier=data.metadata.data_system_instance_identifier, + file_name=data.metadata.file_name, + UNC_path=data.metadata.unc_path, + software_name=data.metadata.software_name, + software_version=data.metadata.software_version, + ASM_file_identifier=data.metadata.asm_file_identifier, + ASM_converter_name=self.converter_name, + ASM_converter_version=ASM_CONVERTER_VERSION, + ), + custom_info_doc=data.metadata.custom_info, ), multi_analyte_profiling_document=[ self._get_technique_document(measurement_group, data.metadata) @@ -209,7 +214,7 @@ def _get_technique_document( def _get_measurement_document( self, measurement: Measurement, metadata: Metadata ) -> MeasurementDocumentItem: - return MeasurementDocumentItem( + measurement_document = MeasurementDocumentItem( measurement_identifier=measurement.identifier, measurement_time=self.get_date_time(measurement.measurement_time), sample_document=self._get_sample_document(measurement), @@ -220,8 +225,12 @@ def _get_measurement_document( sample_volume_setting=quantity_or_none( TQuantityValueMicroliter, measurement.sample_volume_setting ), - dilution_factor_setting=quantity_or_none( - TQuantityValueUnitless, measurement.dilution_factor_setting + dilution_factor_setting=add_custom_information_document( + quantity_or_none( + TQuantityValueUnitless, + measurement.dilution_factor_setting, + ), + custom_info_doc=measurement.custom_info, ), detector_gain_setting=measurement.detector_gain_setting, minimum_assay_bead_count_threshold_setting=quantity_or_none( @@ -231,7 +240,10 @@ def _get_measurement_document( ) ] ), - assay_bead_count=TQuantityValueNumber(value=measurement.assay_bead_count), + assay_bead_count=add_custom_information_document( + TQuantityValueNumber(value=measurement.assay_bead_count), + custom_info_doc=measurement.custom_info, + ), analyte_aggregate_document=AnalyteAggregateDocument( analyte_document=[ AnalyteDocumentItem( @@ -279,6 +291,11 @@ def _get_measurement_document( ), ) + return add_custom_information_document( + measurement_document, + custom_info_doc=measurement.custom_info, + ) + def _get_sample_document(self, measurement: Measurement) -> SampleDocument: return SampleDocument( sample_identifier=measurement.sample_identifier, diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index c7f64ac1d..ae4290d8e 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -308,7 +308,6 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: analytes=analytes, errors=errors, calculated_data=calculated_data, - # Get unread data after all keys have been read custom_info=count_data.get_unread() if count_data.get_unread() else None, ) From a789332bc96d63b79d3d9f71527443306ff533d8 Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Wed, 6 Aug 2025 11:21:32 -0500 Subject: [PATCH 08/13] add_custom_information_document added to Header --- .../benchling/_2024/_09/multi_analyte_profiling.py | 13 +++---------- .../luminex_xponent/luminex_xponent_structure.py | 2 ++ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py index 4e3b37484..2e191de97 100644 --- a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py +++ b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py @@ -225,12 +225,8 @@ def _get_measurement_document( sample_volume_setting=quantity_or_none( TQuantityValueMicroliter, measurement.sample_volume_setting ), - dilution_factor_setting=add_custom_information_document( - quantity_or_none( - TQuantityValueUnitless, - measurement.dilution_factor_setting, - ), - custom_info_doc=measurement.custom_info, + dilution_factor_setting=quantity_or_none( + TQuantityValueUnitless, measurement.dilution_factor_setting ), detector_gain_setting=measurement.detector_gain_setting, minimum_assay_bead_count_threshold_setting=quantity_or_none( @@ -240,10 +236,7 @@ def _get_measurement_document( ) ] ), - assay_bead_count=add_custom_information_document( - TQuantityValueNumber(value=measurement.assay_bead_count), - custom_info_doc=measurement.custom_info, - ), + assay_bead_count=TQuantityValueNumber(value=measurement.assay_bead_count), analyte_aggregate_document=AnalyteAggregateDocument( analyte_document=[ AnalyteDocumentItem( diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index ae4290d8e..e0da32914 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -64,6 +64,7 @@ class Header: detector_gain_setting: str | None minimum_assay_bead_count_setting: float | None analyst: str | None + custom_info: dict[str, Any] | None = None @classmethod def create( @@ -96,6 +97,7 @@ def create( data_system_instance_identifier=info_row[str, "ComputerName"], minimum_assay_bead_count_setting=minimum_assay_bead_count_setting, analyst=info_row.get(str, "Operator"), + custom_info=info_row.get_unread() if info_row.get_unread() else None, ) @classmethod From 58fe6c8e45e047041422f55804513a233b8c2ac3 Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Wed, 6 Aug 2025 13:16:10 -0500 Subject: [PATCH 09/13] fix get_unread usage --- .../luminex_xponent_structure.py | 57 +++++++++++++------ ...x_xPONENT_NaN_and_not_reported_values.json | 17 +++++- .../testdata/luminex_xPONENT_example02.json | 18 +++++- .../luminex_xPONENT_example02_saved.json | 18 +++++- .../testdata/luminex_xPONENT_example03.json | 18 +++++- ...minex_xPONENT_missing_optional_fields.json | 18 +++++- 6 files changed, 120 insertions(+), 26 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index e0da32914..49d1af878 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -74,16 +74,35 @@ def create( raw_datetime = info_row[str, "BatchStartTime"] sample_volume = info_row.get(str, ["SampleVolume", "MaxSampleUptakeVolume"]) - # Capture unread header data to prevent warnings - info_row.get_unread() + # Read all the keys first + software_version = info_row.get(str, "Build") + equipment_serial_number = info_row.get(str, "SN") + analytical_method_identifier = info_row.get(str, "ProtocolName") + method_version = info_row.get(str, "ProtocolVersion") + experimental_data_identifier = info_row.get(str, "Batch") + detector_gain_setting = info_row.get( + str, ["ProtocolReporterGain", "ProtocolOperatingMode"] + ) + data_system_instance_identifier = info_row[str, "ComputerName"] + analyst = info_row.get(str, "Operator") + + # Mark keys that are accessed directly in helper methods + if "Program" in header_data: + info_row.mark_read("Program") + if "ProtocolPlate" in header_data: + info_row.mark_read("ProtocolPlate") + + # Get unread keys after all keys have been read. It can only be called once. + custom_info = info_row.get_unread() + # Build parameters dictionary return Header( model_number=cls._get_model_number(header_data), - software_version=info_row.get(str, "Build"), - equipment_serial_number=info_row.get(str, "SN"), - analytical_method_identifier=info_row.get(str, "ProtocolName"), - method_version=info_row.get(str, "ProtocolVersion"), - experimental_data_identifier=info_row.get(str, "Batch"), + software_version=software_version, + equipment_serial_number=equipment_serial_number, + analytical_method_identifier=analytical_method_identifier, + method_version=method_version, + experimental_data_identifier=experimental_data_identifier, sample_volume_setting=( try_float(sample_volume.split()[0], "sample volume setting") if sample_volume @@ -91,13 +110,11 @@ def create( ), plate_well_count=cls._get_plate_well_count(header_data), measurement_time=raw_datetime, - detector_gain_setting=info_row.get( - str, ["ProtocolReporterGain", "ProtocolOperatingMode"] - ), - data_system_instance_identifier=info_row[str, "ComputerName"], + detector_gain_setting=detector_gain_setting, + data_system_instance_identifier=data_system_instance_identifier, minimum_assay_bead_count_setting=minimum_assay_bead_count_setting, - analyst=info_row.get(str, "Operator"), - custom_info=info_row.get_unread() if info_row.get_unread() else None, + analyst=analyst, + custom_info=custom_info if custom_info else None, ) @classmethod @@ -301,16 +318,23 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: ) ) + # Read the remaining keys from count_data + sample_identifier = count_data[str, "Sample"] + assay_bead_count = count_data[float, "Total Events"] + + # Get unread keys after all keys have been read + custom_info = count_data.get_unread() + return Measurement( identifier=measurement_identifier, - sample_identifier=count_data[str, "Sample"], + sample_identifier=sample_identifier, location_identifier=location_id, dilution_factor_setting=dilution_factor_setting, - assay_bead_count=count_data[float, "Total Events"], + assay_bead_count=assay_bead_count, analytes=analytes, errors=errors, calculated_data=calculated_data, - custom_info=count_data.get_unread() if count_data.get_unread() else None, + custom_info=custom_info if custom_info else None, ) @classmethod @@ -410,6 +434,7 @@ def create_metadata( software_name=DEFAULT_SOFTWARE_NAME, software_version=header.software_version, device_type=DEFAULT_DEVICE_TYPE, + custom_info=header.custom_info, ) diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json index 673ccef9b..01621d661 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json @@ -20553,9 +20553,22 @@ "file name": "luminex_xPONENT_NaN_and_not_reported_values.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.99", + "ASM converter version": "0.1.102", "software name": "xPONENT", - "software version": "4.3.309.1" + "software version": "4.3.309.1", + "custom information document": { + "DDGate": "7500 to 15000", + "ProtocolAnalysis": "Off", + "SampleTimeout": "1 sec", + "ProtocolDescription": "1 second timeout, no plate layout assignment", + "ProtocolMicrosphere": "Map", + "Country Code": 0.0, + "ProtocolHeater": "Off", + "Version": 1.0, + "Date": "01/01/2025", + "BatchStopTime": "1/1/2025 1:00:00 AM", + "BatchDescription": "" + } }, "device system document": { "equipment serial number": "1234", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json index 456afbd0e..c06643576 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json @@ -568,9 +568,23 @@ "file name": "luminex_xPONENT_example02.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.92", + "ASM converter version": "0.1.102", "software name": "xPONENT", - "software version": "4.3.229.0" + "software version": "4.3.229.0", + "custom information document": { + "ProtocolDevelopingCompany": "WAN", + "ProtocolHeater": "Off", + "Date": "05/17/2023", + "Country Code": "7F", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def", + "Version": 1.0, + "SampleTimeout": "0 sec", + "BatchDescription": "", + "BatchStopTime": "5/17/2023 7:06:59 PM", + "DDGate": "5000 to 25000", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" + } }, "device system document": { "equipment serial number": "FM3DD20137021", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json index e48bac87a..6a8df8486 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json @@ -568,9 +568,23 @@ "file name": "luminex_xPONENT_example02_saved.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.92", + "ASM converter version": "0.1.102", "software name": "xPONENT", - "software version": "4.3.229.0" + "software version": "4.3.229.0", + "custom information document": { + "ProtocolAnalysis": "Off", + "Version": 1.0, + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def", + "Date": "05/17/2023", + "ProtocolMicrosphere": "Map", + "ProtocolHeater": "Off", + "ProtocolDevelopingCompany": "WAN", + "SampleTimeout": "0 sec", + "BatchStopTime": "5/17/2023 7:06:59 PM", + "BatchDescription": "", + "DDGate": "5000 to 25000", + "Country Code": "7F" + } }, "device system document": { "equipment serial number": "FM3DD20137021", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json index 4eb3c20bd..81183c3b2 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json @@ -571,9 +571,23 @@ "file name": "luminex_xPONENT_example03.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.92", + "ASM converter version": "0.1.102", "software name": "xPONENT", - "software version": "4.3.229.0" + "software version": "4.3.229.0", + "custom information document": { + "Version": 1.0, + "ProtocolHeater": "Off", + "ProtocolDevelopingCompany": "WAN", + "Country Code": "7F", + "SampleTimeout": "0 sec", + "Date": "05/18/2023", + "ProtocolAnalysis": "Off", + "BatchStopTime": "5/18/2023 11:36:34 AM", + "BatchDescription": "", + "ProtocolMicrosphere": "Map", + "ProtocolDescription": "baz", + "DDGate": "5000 to 25000" + } }, "device system document": { "equipment serial number": "FM3DD12345678", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json index 1765c67e4..ed9c92b62 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json @@ -6673,9 +6673,23 @@ "file name": "luminex_xPONENT_missing_optional_fields.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.98", + "ASM converter version": "0.1.102", "software name": "xPONENT", - "software version": "2.1.1015" + "software version": "2.1.1015", + "custom information document": { + "BeadType": "MagPlex", + "Version": 1.0, + "PanelName": "Panel-12345678910 [v1]", + "ProtocolHeater": "Off", + "BatchStopTime": "2024-10-18 12:15", + "PlateReadDirection": "Horizontal", + "ProtocolAnalysis": "Off", + "DDGate": "7000 to 17000", + "Date": "2024-10-19", + "SampleTimeout": "50 sec", + "ProtocolMicrosphere": "Map", + "Country Code": 409.0 + } }, "device system document": { "equipment serial number": "SERIAL_12345", From a53ed5cd52977831b9f92983333329ec638f6b4b Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Tue, 19 Aug 2025 19:04:00 -0400 Subject: [PATCH 10/13] Re arrange custom fields --- .../_2024/_09/multi_analyte_profiling.py | 85 +- .../luminex_xponent_structure.py | 68 +- .../luminex_xponent_structure_test.py | 74 +- ...x_xPONENT_NaN_and_not_reported_values.json | 1555 +++++++++++++++-- .../testdata/luminex_xPONENT_example02.json | 84 +- .../luminex_xPONENT_example02_saved.json | 84 +- .../testdata/luminex_xPONENT_example03.json | 84 +- ...minex_xPONENT_missing_optional_fields.json | 224 ++- 8 files changed, 2026 insertions(+), 232 deletions(-) diff --git a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py index 2e191de97..09afc6196 100644 --- a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py +++ b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py @@ -104,7 +104,9 @@ class Measurement: detector_gain_setting: str | None = None # custom - custom_info: dict[str, Any] | None = None + measurement_custom_info: dict[str, Any] | None = None + sample_custom_info: dict[str, Any] | None = None + device_control_custom_info: dict[str, Any] | None = None @dataclass(frozen=True) @@ -117,6 +119,7 @@ class MeasurementGroup: method_version: str | None = None container_type: str | None = None experiment_type: str | None = None + custom_info: dict[str, Any] | None = None @dataclass(frozen=True) @@ -157,14 +160,17 @@ class Mapper(SchemaMapper[Data, Model]): def map_model(self, data: Data) -> Model: return Model( multi_analyte_profiling_aggregate_document=MultiAnalyteProfilingAggregateDocument( - device_system_document=DeviceSystemDocument( - model_number=data.metadata.model_number, - product_manufacturer=data.metadata.product_manufacturer, - firmware_version=data.metadata.firmware_version, - equipment_serial_number=data.metadata.equipment_serial_number, - calibration_aggregate_document=self._get_calibration_aggregate_document( - data.metadata.calibrations + device_system_document=add_custom_information_document( + DeviceSystemDocument( + model_number=data.metadata.model_number, + product_manufacturer=data.metadata.product_manufacturer, + firmware_version=data.metadata.firmware_version, + equipment_serial_number=data.metadata.equipment_serial_number, + calibration_aggregate_document=self._get_calibration_aggregate_document( + data.metadata.calibrations + ), ), + custom_info_doc=data.metadata.custom_info, ), data_system_document=add_custom_information_document( DataSystemDocument( @@ -195,19 +201,22 @@ def _get_technique_document( ) -> MultiAnalyteProfilingDocumentItem: return MultiAnalyteProfilingDocumentItem( analyst=measurement_group.analyst, - measurement_aggregate_document=MeasurementAggregateDocument( - experiment_type=measurement_group.experiment_type, - analytical_method_identifier=measurement_group.analytical_method_identifier, - method_version=measurement_group.method_version, - experimental_data_identifier=measurement_group.experimental_data_identifier, - container_type=measurement_group.container_type, - plate_well_count=quantity_or_none( - TQuantityValueNumber, measurement_group.plate_well_count + measurement_aggregate_document=add_custom_information_document( + MeasurementAggregateDocument( + experiment_type=measurement_group.experiment_type, + analytical_method_identifier=measurement_group.analytical_method_identifier, + method_version=measurement_group.method_version, + experimental_data_identifier=measurement_group.experimental_data_identifier, + container_type=measurement_group.container_type, + plate_well_count=quantity_or_none( + TQuantityValueNumber, measurement_group.plate_well_count + ), + measurement_document=[ + self._get_measurement_document(measurement, metadata) + for measurement in measurement_group.measurements + ], ), - measurement_document=[ - self._get_measurement_document(measurement, metadata) - for measurement in measurement_group.measurements - ], + custom_info_doc=measurement_group.custom_info, ), ) @@ -217,22 +226,30 @@ def _get_measurement_document( measurement_document = MeasurementDocumentItem( measurement_identifier=measurement.identifier, measurement_time=self.get_date_time(measurement.measurement_time), - sample_document=self._get_sample_document(measurement), + sample_document=add_custom_information_document( + self._get_sample_document(measurement), + custom_info_doc=measurement.sample_custom_info, + ), device_control_aggregate_document=DeviceControlAggregateDocument( device_control_document=[ - DeviceControlDocumentItem( - device_type=metadata.device_type, - sample_volume_setting=quantity_or_none( - TQuantityValueMicroliter, measurement.sample_volume_setting - ), - dilution_factor_setting=quantity_or_none( - TQuantityValueUnitless, measurement.dilution_factor_setting - ), - detector_gain_setting=measurement.detector_gain_setting, - minimum_assay_bead_count_threshold_setting=quantity_or_none( - TQuantityValueNumber, - measurement.minimum_assay_bead_count_setting, + add_custom_information_document( + DeviceControlDocumentItem( + device_type=metadata.device_type, + sample_volume_setting=quantity_or_none( + TQuantityValueMicroliter, + measurement.sample_volume_setting, + ), + dilution_factor_setting=quantity_or_none( + TQuantityValueUnitless, + measurement.dilution_factor_setting, + ), + detector_gain_setting=measurement.detector_gain_setting, + minimum_assay_bead_count_threshold_setting=quantity_or_none( + TQuantityValueNumber, + measurement.minimum_assay_bead_count_setting, + ), ), + custom_info_doc=measurement.device_control_custom_info, ) ] ), @@ -286,7 +303,7 @@ def _get_measurement_document( return add_custom_information_document( measurement_document, - custom_info_doc=measurement.custom_info, + custom_info_doc=measurement.measurement_custom_info, ) def _get_sample_document(self, measurement: Measurement) -> SampleDocument: diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 49d1af878..3b9b1f4a8 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -64,7 +64,7 @@ class Header: detector_gain_setting: str | None minimum_assay_bead_count_setting: float | None analyst: str | None - custom_info: dict[str, Any] | None = None + custom_info: dict[str, Any] @classmethod def create( @@ -92,8 +92,14 @@ def create( if "ProtocolPlate" in header_data: info_row.mark_read("ProtocolPlate") - # Get unread keys after all keys have been read. It can only be called once. - custom_info = info_row.get_unread() + custom_info = { + "Country Code": info_row.get(str, "Country Code"), + "ProtocolDevelopingCompany": info_row.get(str, "ProtocolDevelopingCompany"), + "Version": info_row.get(str, "Version"), + # These properties will be used by the mapper to create the measurement groups. + "BatchStopTime": info_row.get(str, "BatchStopTime"), + "ProtocolDescription": info_row.get(str, "ProtocolDescription"), + } # Build parameters dictionary return Header( @@ -114,7 +120,7 @@ def create( data_system_instance_identifier=data_system_instance_identifier, minimum_assay_bead_count_setting=minimum_assay_bead_count_setting, analyst=analyst, - custom_info=custom_info if custom_info else None, + custom_info=custom_info, ) @classmethod @@ -205,7 +211,9 @@ class Measurement: analytes: list[Analyte] calculated_data: list[CalculatedDocument] errors: list[Error] | None = None - custom_info: dict[str, Any] | None = None + measurement_custom_info: dict[str, Any] | None = None + sample_custom_info: dict[str, Any] | None = None + device_control_custom_info: dict[str, Any] | None = None @classmethod def create( @@ -213,11 +221,13 @@ def create( results_data: dict[str, pd.DataFrame], count_data: SeriesData, bead_ids_data: SeriesData, + header_data: pd.DataFrame, ) -> Measurement: location = str(count_data.series.name) dilution_factor_data = results_data["Dilution Factor"] errors_data = results_data.get("Warnings/Errors") measurement_identifier = random_uuid_str() + header_row = SeriesData(header_data.iloc[0]) if location not in dilution_factor_data.index: msg = f"Could not find 'Dilution Factor' data for: '{location}'." @@ -323,7 +333,26 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: assay_bead_count = count_data[float, "Total Events"] # Get unread keys after all keys have been read - custom_info = count_data.get_unread() + count_data.get_unread() + + device_control_custom_info = { + "ProtocolHeater": header_row.get(str, "ProtocolHeater"), + "DDGate": header_row.get(str, "DDGate"), + "SampleTimeout": header_row.get(str, "SampleTimeout"), + "ProtocolAnalysis": header_row.get(str, "ProtocolAnalysis"), + "ProtocolMicrosphere": header_row.get(str, "ProtocolMicrosphere"), + "PlateReadDirection": header_row.get(str, "PlateReadDirection"), # Pending + } + sample_custom_info = { + "BatchDescription": header_row.get(str, "BatchDescription"), + "PanelName": header_row.get(str, "PanelName"), # Pending + "BeadType": header_row.get(str, "BeadType"), # Pending + } + header_row.get_unread( + skip={ + "Date", + }, + ) return Measurement( identifier=measurement_identifier, @@ -334,7 +363,9 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: analytes=analytes, errors=errors, calculated_data=calculated_data, - custom_info=custom_info if custom_info else None, + device_control_custom_info=device_control_custom_info, + sample_custom_info=sample_custom_info, + measurement_custom_info=count_data.get_unread(), ) @classmethod @@ -368,7 +399,9 @@ class MeasurementList: measurements: list[Measurement] @classmethod - def create(cls, results_data: dict[str, pd.DataFrame]) -> MeasurementList: + def create( + cls, results_data: dict[str, pd.DataFrame], header_data: pd.DataFrame + ) -> MeasurementList: if missing_sections := [ section for section in REQUIRED_SECTIONS if section not in results_data ]: @@ -394,6 +427,7 @@ def create_measurement(count_data: SeriesData) -> Measurement: results_data=results_data, count_data=count_data, bead_ids_data=bead_ids_data, + header_data=header_data, ) # Capture unread bead IDs data to prevent warnings @@ -415,7 +449,9 @@ def create(cls, reader: LuminexXponentReader) -> Data: reader.header_data, reader.minimum_assay_bead_count_setting ), calibrations=map_rows(reader.calibration_data, create_calibration), - measurement_list=MeasurementList.create(reader.results_data), + measurement_list=MeasurementList.create( + reader.results_data, reader.header_data + ), ) @@ -462,12 +498,24 @@ def create_measurement_groups( assay_bead_count=measurement.assay_bead_count, analytes=measurement.analytes, errors=measurement.errors if measurement.errors else None, - custom_info=measurement.custom_info, + measurement_custom_info=measurement.measurement_custom_info, + sample_custom_info=measurement.sample_custom_info, + device_control_custom_info=measurement.device_control_custom_info, ) ], + custom_info={ + "BatchStopTime": header.custom_info.get("BatchStopTime", None), + "ProtocolDescription": header.custom_info.get( + "ProtocolDescription", None + ), + }, ) for measurement in measurements ] + # Remove the custom info that was used to create the measurement groups. + header.custom_info.pop("BatchStopTime", None) + header.custom_info.pop("ProtocolDescription", None) + calculated_documents = list( itertools.chain(*[measurement.calculated_data for measurement in measurements]) ) diff --git a/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py b/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py index af01cabae..c90d5a0b5 100644 --- a/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py +++ b/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py @@ -91,6 +91,13 @@ def test_create_header() -> None: analyst=None, # Operator row data_system_instance_identifier="AAA000", # ComputerName minimum_assay_bead_count_setting=10, + custom_info={ + "Country Code": None, + "ProtocolDevelopingCompany": None, + "Version": None, + "BatchStopTime": None, + "ProtocolDescription": None, + }, ) @@ -160,11 +167,31 @@ def test_create_calibration_item_invalid_calibration_result() -> None: def test_create_measurement_list() -> None: results_data = LuminexXponentReader._get_results(CsvReader(get_result_lines())) + + # Create a mock header_data DataFrame for testing + mock_header_data = pd.DataFrame.from_dict( + { + "Program": ["xPonent", None, "Model"], + "Build": ["1.1.0"], + "SN": ["SN1234"], + "Batch": ["ABC_0000"], + "ComputerName": ["AAA000"], + "ProtocolName": ["Order66"], + "ProtocolVersion": ["5"], + "SampleVolume": ["1 uL"], + "BatchStartTime": ["1/17/2024 7:41:29 AM"], + "ProtocolPlate": [None, None, "Type", 10], + "ProtocolReporterGain": ["Pro MAP"], + "BatchDescription": ["Test Batch Description"], + }, + orient="index", + ).T + with mock.patch( "allotropy.parsers.luminex_xponent.luminex_xponent_structure.random_uuid_str", return_value="dummy_id", ): - measurement_list = MeasurementList.create(results_data) + measurement_list = MeasurementList.create(results_data, mock_header_data) assert measurement_list == MeasurementList( measurements=[ @@ -172,14 +199,14 @@ def test_create_measurement_list() -> None: identifier="dummy_id", sample_identifier="Unknown1", location_identifier="A1", - dilution_factor_setting=1, - assay_bead_count=881, + dilution_factor_setting=1.0, + assay_bead_count=881.0, analytes=[ Analyte( identifier="dummy_id", name="alpha", assay_bead_identifier="28", - assay_bead_count=30, + assay_bead_count=30.0, statistics=[ StatisticsDocument( statistical_feature="fluorescence", @@ -197,13 +224,13 @@ def test_create_measurement_list() -> None: identifier="dummy_id", name="bravo", assay_bead_identifier="35", - assay_bead_count=42, + assay_bead_count=42.0, statistics=[ StatisticsDocument( statistical_feature="fluorescence", statistic_dimensions=[ StatisticDimension( - value=37214, + value=37214.0, unit="RFU", statistic_datum_role=TStatisticDatumRole.median_role, ) @@ -217,6 +244,20 @@ def test_create_measurement_list() -> None: Error(error="Another Warning."), ], calculated_data=[], + measurement_custom_info={}, + sample_custom_info={ + "BatchDescription": "Test Batch Description", + "PanelName": None, + "BeadType": None, + }, + device_control_custom_info={ + "ProtocolHeater": None, + "DDGate": None, + "SampleTimeout": None, + "ProtocolAnalysis": None, + "ProtocolMicrosphere": None, + "PlateReadDirection": None, + }, ) ] ) @@ -235,10 +276,29 @@ def test_create_measurement_list_without_required_table_then_raise( if section != table_name } + # Create a mock header_data DataFrame for testing + mock_header_data = pd.DataFrame.from_dict( + { + "Program": ["xPonent", None, "Model"], + "Build": ["1.1.0"], + "SN": ["SN1234"], + "Batch": ["ABC_0000"], + "ComputerName": ["AAA000"], + "ProtocolName": ["Order66"], + "ProtocolVersion": ["5"], + "SampleVolume": ["1 uL"], + "BatchStartTime": ["1/17/2024 7:41:29 AM"], + "ProtocolPlate": [None, None, "Type", 10], + "ProtocolReporterGain": ["Pro MAP"], + "BatchDescription": ["Test Batch Description"], + }, + orient="index", + ).T + with pytest.raises( AllotropeConversionError, match=re.escape( f"Unable to parse input file, missing expected sections: ['{table_name}']." ), ): - MeasurementList.create(results_data) + MeasurementList.create(results_data, mock_header_data) diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json index 01621d661..3fd2aa89a 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json @@ -22,6 +22,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -30,7 +37,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -160,6 +170,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -184,6 +198,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -192,7 +213,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown2", - "location identifier": "B1" + "location identifier": "B1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -326,6 +350,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -350,6 +378,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -358,7 +393,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown3", - "location identifier": "C1" + "location identifier": "C1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -492,6 +530,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -516,6 +558,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -524,7 +573,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown4", - "location identifier": "D1" + "location identifier": "D1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -658,6 +710,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -682,6 +738,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -690,7 +753,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown5", - "location identifier": "E1" + "location identifier": "E1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -824,6 +890,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -848,6 +918,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -856,7 +933,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown6", - "location identifier": "F1" + "location identifier": "F1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -990,6 +1070,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1014,6 +1098,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1022,7 +1113,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown7", - "location identifier": "G1" + "location identifier": "G1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1156,6 +1250,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1180,6 +1278,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1188,7 +1293,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown8", - "location identifier": "H1" + "location identifier": "H1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1322,6 +1430,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1346,6 +1458,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1354,7 +1473,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown9", - "location identifier": "A2" + "location identifier": "A2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1488,6 +1610,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1512,6 +1638,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1520,7 +1653,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown10", - "location identifier": "B2" + "location identifier": "B2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1654,6 +1790,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1678,6 +1818,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1686,7 +1833,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown11", - "location identifier": "C2" + "location identifier": "C2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1820,6 +1970,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -1844,6 +1998,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -1852,7 +2013,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown12", - "location identifier": "D2" + "location identifier": "D2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -1986,6 +2150,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2010,6 +2178,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2018,7 +2193,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown13", - "location identifier": "E2" + "location identifier": "E2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2152,6 +2330,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2176,6 +2358,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2184,7 +2373,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown14", - "location identifier": "F2" + "location identifier": "F2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2318,6 +2510,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2342,6 +2538,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2350,7 +2553,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown15", - "location identifier": "G2" + "location identifier": "G2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2484,6 +2690,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2508,6 +2718,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2516,7 +2733,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown16", - "location identifier": "H2" + "location identifier": "H2", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2650,6 +2870,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2674,6 +2898,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2682,7 +2913,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown17", - "location identifier": "A3" + "location identifier": "A3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2816,6 +3050,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -2840,6 +3078,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -2848,7 +3093,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown18", - "location identifier": "B3" + "location identifier": "B3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -2982,6 +3230,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3006,6 +3258,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3014,7 +3273,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown19", - "location identifier": "C3" + "location identifier": "C3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3148,6 +3410,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3172,6 +3438,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3180,7 +3453,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown20", - "location identifier": "D3" + "location identifier": "D3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3314,6 +3590,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3338,6 +3618,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3346,7 +3633,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown21", - "location identifier": "E3" + "location identifier": "E3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3480,6 +3770,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3504,6 +3798,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3512,7 +3813,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown22", - "location identifier": "F3" + "location identifier": "F3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3646,6 +3950,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3670,6 +3978,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3678,7 +3993,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown23", - "location identifier": "G3" + "location identifier": "G3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3812,6 +4130,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -3836,6 +4158,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -3844,7 +4173,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown24", - "location identifier": "H3" + "location identifier": "H3", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -3978,6 +4310,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4002,6 +4338,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4010,7 +4353,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown25", - "location identifier": "A4" + "location identifier": "A4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4144,6 +4490,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4168,6 +4518,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4176,7 +4533,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown26", - "location identifier": "B4" + "location identifier": "B4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4310,6 +4670,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4334,6 +4698,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4342,7 +4713,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown27", - "location identifier": "C4" + "location identifier": "C4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4476,6 +4850,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4500,6 +4878,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4508,7 +4893,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown28", - "location identifier": "D4" + "location identifier": "D4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4642,6 +5030,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4666,6 +5058,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4674,7 +5073,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown29", - "location identifier": "E4" + "location identifier": "E4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4808,6 +5210,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4832,6 +5238,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -4840,7 +5253,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown30", - "location identifier": "F4" + "location identifier": "F4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -4974,6 +5390,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -4998,6 +5418,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5006,7 +5433,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown31", - "location identifier": "G4" + "location identifier": "G4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5140,6 +5570,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5164,6 +5598,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5172,7 +5613,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown32", - "location identifier": "H4" + "location identifier": "H4", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5306,6 +5750,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5330,6 +5778,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5338,7 +5793,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown33", - "location identifier": "A5" + "location identifier": "A5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5472,6 +5930,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5496,6 +5958,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5504,7 +5973,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown34", - "location identifier": "B5" + "location identifier": "B5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5638,6 +6110,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5662,6 +6138,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5670,7 +6153,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown35", - "location identifier": "C5" + "location identifier": "C5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5804,6 +6290,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5828,6 +6318,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -5836,7 +6333,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown36", - "location identifier": "D5" + "location identifier": "D5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -5970,6 +6470,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -5994,6 +6498,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6002,7 +6513,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown37", - "location identifier": "E5" + "location identifier": "E5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6136,6 +6650,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6160,6 +6678,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6168,7 +6693,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown38", - "location identifier": "F5" + "location identifier": "F5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6302,6 +6830,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6326,6 +6858,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6334,7 +6873,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown39", - "location identifier": "G5" + "location identifier": "G5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6468,6 +7010,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6492,6 +7038,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6500,7 +7053,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown40", - "location identifier": "H5" + "location identifier": "H5", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6634,6 +7190,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6658,6 +7218,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6666,7 +7233,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown41", - "location identifier": "A6" + "location identifier": "A6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6800,6 +7370,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6824,6 +7398,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6832,7 +7413,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown42", - "location identifier": "B6" + "location identifier": "B6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -6966,6 +7550,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -6990,6 +7578,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -6998,7 +7593,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown43", - "location identifier": "C6" + "location identifier": "C6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7132,6 +7730,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7156,6 +7758,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7164,7 +7773,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown44", - "location identifier": "D6" + "location identifier": "D6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7298,6 +7910,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7322,6 +7938,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7330,7 +7953,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown45", - "location identifier": "E6" + "location identifier": "E6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7464,6 +8090,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7488,6 +8118,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7496,7 +8133,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown46", - "location identifier": "F6" + "location identifier": "F6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7630,6 +8270,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7654,6 +8298,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7662,7 +8313,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown47", - "location identifier": "G6" + "location identifier": "G6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7796,6 +8450,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7820,6 +8478,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7828,7 +8493,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown48", - "location identifier": "H6" + "location identifier": "H6", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -7962,6 +8630,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -7986,6 +8658,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -7994,7 +8673,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown49", - "location identifier": "A7" + "location identifier": "A7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8128,6 +8810,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8152,6 +8838,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8160,7 +8853,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown50", - "location identifier": "B7" + "location identifier": "B7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8294,6 +8990,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8318,6 +9018,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8326,7 +9033,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown51", - "location identifier": "C7" + "location identifier": "C7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8460,6 +9170,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8484,6 +9198,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8492,7 +9213,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown52", - "location identifier": "D7" + "location identifier": "D7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8626,6 +9350,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8650,6 +9378,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8658,7 +9393,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown53", - "location identifier": "E7" + "location identifier": "E7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8792,6 +9530,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8816,6 +9558,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8824,7 +9573,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown54", - "location identifier": "F7" + "location identifier": "F7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -8958,6 +9710,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -8982,6 +9738,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -8990,7 +9753,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown55", - "location identifier": "G7" + "location identifier": "G7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9124,6 +9890,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9148,6 +9918,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9156,7 +9933,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown56", - "location identifier": "H7" + "location identifier": "H7", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9290,6 +10070,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9314,6 +10098,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9322,7 +10113,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown57", - "location identifier": "A8" + "location identifier": "A8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9456,6 +10250,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9480,6 +10278,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9488,7 +10293,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown58", - "location identifier": "B8" + "location identifier": "B8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9622,6 +10430,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9646,6 +10458,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9654,7 +10473,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown59", - "location identifier": "C8" + "location identifier": "C8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9788,6 +10610,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9812,6 +10638,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9820,7 +10653,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown60", - "location identifier": "D8" + "location identifier": "D8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -9954,6 +10790,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -9978,6 +10818,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -9986,7 +10833,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown61", - "location identifier": "E8" + "location identifier": "E8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10120,6 +10970,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10144,6 +10998,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10152,7 +11013,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown62", - "location identifier": "F8" + "location identifier": "F8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10286,6 +11150,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10310,6 +11178,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10318,7 +11193,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown63", - "location identifier": "G8" + "location identifier": "G8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10452,6 +11330,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10476,6 +11358,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10484,7 +11373,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown64", - "location identifier": "H8" + "location identifier": "H8", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10618,6 +11510,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10642,6 +11538,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10650,7 +11553,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown65", - "location identifier": "A9" + "location identifier": "A9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10784,6 +11690,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10808,6 +11718,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10816,7 +11733,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown66", - "location identifier": "B9" + "location identifier": "B9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -10950,6 +11870,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -10974,6 +11898,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -10982,7 +11913,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown67", - "location identifier": "C9" + "location identifier": "C9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11116,6 +12050,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11140,6 +12078,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11148,7 +12093,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown68", - "location identifier": "D9" + "location identifier": "D9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11282,6 +12230,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11306,6 +12258,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11314,7 +12273,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown69", - "location identifier": "E9" + "location identifier": "E9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11448,6 +12410,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11472,6 +12438,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11480,7 +12453,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown70", - "location identifier": "F9" + "location identifier": "F9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11614,6 +12590,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11638,6 +12618,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11646,7 +12633,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown71", - "location identifier": "G9" + "location identifier": "G9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11780,6 +12770,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11804,6 +12798,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11812,7 +12813,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown72", - "location identifier": "H9" + "location identifier": "H9", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -11946,6 +12950,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -11970,6 +12978,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -11978,7 +12993,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown73", - "location identifier": "A10" + "location identifier": "A10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12112,6 +13130,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12136,6 +13158,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12144,7 +13173,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown74", - "location identifier": "B10" + "location identifier": "B10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12278,6 +13310,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12302,6 +13338,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12310,7 +13353,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown75", - "location identifier": "C10" + "location identifier": "C10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12444,6 +13490,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12468,6 +13518,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12476,7 +13533,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown76", - "location identifier": "D10" + "location identifier": "D10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12610,6 +13670,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12634,6 +13698,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12642,7 +13713,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown77", - "location identifier": "E10" + "location identifier": "E10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12776,6 +13850,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12800,6 +13878,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12808,7 +13893,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown78", - "location identifier": "F10" + "location identifier": "F10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -12942,6 +14030,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -12966,6 +14058,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -12974,7 +14073,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown79", - "location identifier": "G10" + "location identifier": "G10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13108,6 +14210,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13132,6 +14238,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13140,7 +14253,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown80", - "location identifier": "H10" + "location identifier": "H10", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13274,6 +14390,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13298,6 +14418,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13306,7 +14433,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown81", - "location identifier": "A11" + "location identifier": "A11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13440,6 +14570,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13464,6 +14598,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13472,7 +14613,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown82", - "location identifier": "B11" + "location identifier": "B11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13606,6 +14750,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13630,6 +14778,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13638,7 +14793,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown83", - "location identifier": "C11" + "location identifier": "C11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13772,6 +14930,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13796,6 +14958,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13804,7 +14973,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown84", - "location identifier": "D11" + "location identifier": "D11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -13938,6 +15110,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -13962,6 +15138,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -13970,7 +15153,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown85", - "location identifier": "E11" + "location identifier": "E11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14104,6 +15290,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14128,6 +15318,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14136,7 +15333,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown86", - "location identifier": "F11" + "location identifier": "F11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14270,6 +15470,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14294,6 +15498,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14302,7 +15513,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown87", - "location identifier": "G11" + "location identifier": "G11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14436,6 +15650,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14460,6 +15678,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14468,7 +15693,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown88", - "location identifier": "H11" + "location identifier": "H11", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14602,6 +15830,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14626,6 +15858,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14634,7 +15873,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown89", - "location identifier": "A12" + "location identifier": "A12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14768,6 +16010,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14792,6 +16038,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14800,7 +16053,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown90", - "location identifier": "B12" + "location identifier": "B12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -14934,6 +16190,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -14958,6 +16218,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -14966,7 +16233,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown91", - "location identifier": "C12" + "location identifier": "C12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15100,6 +16370,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -15124,6 +16398,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -15132,7 +16413,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown92", - "location identifier": "D12" + "location identifier": "D12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15266,6 +16550,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -15290,6 +16578,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -15298,7 +16593,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown93", - "location identifier": "E12" + "location identifier": "E12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15432,6 +16730,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -15456,6 +16758,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -15464,7 +16773,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown94", - "location identifier": "F12" + "location identifier": "F12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15598,6 +16910,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -15622,6 +16938,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -15630,7 +16953,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown95", - "location identifier": "G12" + "location identifier": "G12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15764,6 +17090,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -15788,6 +17118,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7500 to 15000", + "SampleTimeout": "1 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -15796,7 +17133,10 @@ "measurement time": "2025-01-01T01:00:00+00:00", "sample document": { "sample identifier": "Unknown96", - "location identifier": "H12" + "location identifier": "H12", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -15930,6 +17270,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "1/1/2025 1:00:00 AM", + "ProtocolDescription": "1 second timeout, no plate layout assignment" } }, "analyst": "user" @@ -20553,21 +21897,12 @@ "file name": "luminex_xPONENT_NaN_and_not_reported_values.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.102", + "ASM converter version": "0.1.103", "software name": "xPONENT", "software version": "4.3.309.1", "custom information document": { - "DDGate": "7500 to 15000", - "ProtocolAnalysis": "Off", - "SampleTimeout": "1 sec", - "ProtocolDescription": "1 second timeout, no plate layout assignment", - "ProtocolMicrosphere": "Map", - "Country Code": 0.0, - "ProtocolHeater": "Off", - "Version": 1.0, - "Date": "01/01/2025", - "BatchStopTime": "1/1/2025 1:00:00 AM", - "BatchDescription": "" + "Country Code": "0", + "Version": "1" } }, "device system document": { @@ -20600,6 +21935,10 @@ "calibration time": "2025-01-01T01:00:00+00:00" } ] + }, + "custom information document": { + "Country Code": "0", + "Version": "1" } } } diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json index c06643576..ed7da2625 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json @@ -22,6 +22,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -30,7 +37,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -110,6 +120,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -134,6 +148,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -142,7 +163,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown2", - "location identifier": "B1" + "location identifier": "B1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 728.0, @@ -215,6 +239,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -239,6 +267,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -247,7 +282,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown3", - "location identifier": "C1" + "location identifier": "C1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 786.0, @@ -320,6 +358,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -344,6 +386,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -352,7 +401,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown4", - "location identifier": "D1" + "location identifier": "D1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 921.0, @@ -425,6 +477,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -568,22 +624,13 @@ "file name": "luminex_xPONENT_example02.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.102", + "ASM converter version": "0.1.103", "software name": "xPONENT", "software version": "4.3.229.0", "custom information document": { - "ProtocolDevelopingCompany": "WAN", - "ProtocolHeater": "Off", - "Date": "05/17/2023", "Country Code": "7F", - "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def", - "Version": 1.0, - "SampleTimeout": "0 sec", - "BatchDescription": "", - "BatchStopTime": "5/17/2023 7:06:59 PM", - "DDGate": "5000 to 25000", - "ProtocolAnalysis": "Off", - "ProtocolMicrosphere": "Map" + "ProtocolDevelopingCompany": "WAN", + "Version": "1" } }, "device system document": { @@ -622,6 +669,11 @@ "calibration report": "Passed" } ] + }, + "custom information document": { + "Country Code": "7F", + "ProtocolDevelopingCompany": "WAN", + "Version": "1" } } } diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json index 6a8df8486..9e524ec16 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json @@ -22,6 +22,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -30,7 +37,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -110,6 +120,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -134,6 +148,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -142,7 +163,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown2", - "location identifier": "B1" + "location identifier": "B1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 728.0, @@ -215,6 +239,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -239,6 +267,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -247,7 +282,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown3", - "location identifier": "C1" + "location identifier": "C1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 786.0, @@ -320,6 +358,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -344,6 +386,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -352,7 +401,10 @@ "measurement time": "2023-05-17T18:42:29+00:00", "sample document": { "sample identifier": "Unknown4", - "location identifier": "D1" + "location identifier": "D1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 921.0, @@ -425,6 +477,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/17/2023 7:06:59 PM", + "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def" } }, "analyst": "nguymaip" @@ -568,22 +624,13 @@ "file name": "luminex_xPONENT_example02_saved.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.102", + "ASM converter version": "0.1.103", "software name": "xPONENT", "software version": "4.3.229.0", "custom information document": { - "ProtocolAnalysis": "Off", - "Version": 1.0, - "ProtocolDescription": "V116 plates 50�l sample 25 count cutoff. No plate def", - "Date": "05/17/2023", - "ProtocolMicrosphere": "Map", - "ProtocolHeater": "Off", + "Country Code": "7F", "ProtocolDevelopingCompany": "WAN", - "SampleTimeout": "0 sec", - "BatchStopTime": "5/17/2023 7:06:59 PM", - "BatchDescription": "", - "DDGate": "5000 to 25000", - "Country Code": "7F" + "Version": "1" } }, "device system document": { @@ -622,6 +669,11 @@ "calibration report": "Passed" } ] + }, + "custom information document": { + "Country Code": "7F", + "ProtocolDevelopingCompany": "WAN", + "Version": "1" } } } diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json index 81183c3b2..eb98b7ab8 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json @@ -22,6 +22,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -30,7 +37,10 @@ "measurement time": "2023-05-18T11:03:56+00:00", "sample document": { "sample identifier": "Unknown1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "BatchDescription": "" + } }, "error aggregate document": { "error document": [ @@ -113,6 +123,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/18/2023 11:36:34 AM", + "ProtocolDescription": "baz" } }, "analyst": "waldo" @@ -137,6 +151,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -145,7 +166,10 @@ "measurement time": "2023-05-18T11:03:56+00:00", "sample document": { "sample identifier": "Unknown2", - "location identifier": "B1" + "location identifier": "B1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 832.0, @@ -218,6 +242,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/18/2023 11:36:34 AM", + "ProtocolDescription": "baz" } }, "analyst": "waldo" @@ -242,6 +270,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -250,7 +285,10 @@ "measurement time": "2023-05-18T11:03:56+00:00", "sample document": { "sample identifier": "Unknown3", - "location identifier": "C1" + "location identifier": "C1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 799.0, @@ -323,6 +361,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/18/2023 11:36:34 AM", + "ProtocolDescription": "baz" } }, "analyst": "waldo" @@ -347,6 +389,13 @@ "minimum assay bead count threshold setting": { "value": 100.0, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "5000 to 25000", + "SampleTimeout": "0 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map" } } ] @@ -355,7 +404,10 @@ "measurement time": "2023-05-18T11:03:56+00:00", "sample document": { "sample identifier": "Unknown4", - "location identifier": "D1" + "location identifier": "D1", + "custom information document": { + "BatchDescription": "" + } }, "assay bead count": { "value": 845.0, @@ -428,6 +480,10 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "5/18/2023 11:36:34 AM", + "ProtocolDescription": "baz" } }, "analyst": "waldo" @@ -571,22 +627,13 @@ "file name": "luminex_xPONENT_example03.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.102", + "ASM converter version": "0.1.103", "software name": "xPONENT", "software version": "4.3.229.0", "custom information document": { - "Version": 1.0, - "ProtocolHeater": "Off", - "ProtocolDevelopingCompany": "WAN", "Country Code": "7F", - "SampleTimeout": "0 sec", - "Date": "05/18/2023", - "ProtocolAnalysis": "Off", - "BatchStopTime": "5/18/2023 11:36:34 AM", - "BatchDescription": "", - "ProtocolMicrosphere": "Map", - "ProtocolDescription": "baz", - "DDGate": "5000 to 25000" + "ProtocolDevelopingCompany": "WAN", + "Version": "1" } }, "device system document": { @@ -625,6 +672,11 @@ "calibration report": "Passed" } ] + }, + "custom information document": { + "Country Code": "7F", + "ProtocolDevelopingCompany": "WAN", + "Version": "1" } } } diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json index ed9c92b62..84d2d45e7 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json @@ -22,6 +22,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -30,7 +38,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 428.0, @@ -392,6 +404,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -415,6 +430,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -423,7 +446,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_2", - "location identifier": "A2" + "location identifier": "A2", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 279.0, @@ -785,6 +812,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -808,6 +838,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -816,7 +854,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_3", - "location identifier": "A3" + "location identifier": "A3", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 323.0, @@ -1178,6 +1220,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1201,6 +1246,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1209,7 +1262,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_4", - "location identifier": "A4" + "location identifier": "A4", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 417.0, @@ -1571,6 +1628,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1594,6 +1654,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1602,7 +1670,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_5", - "location identifier": "A5" + "location identifier": "A5", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 390.0, @@ -1964,6 +2036,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1987,6 +2062,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1995,7 +2078,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_6", - "location identifier": "A6" + "location identifier": "A6", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 442.0, @@ -2357,6 +2444,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -2380,6 +2470,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -2388,7 +2486,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_1", - "location identifier": "A7" + "location identifier": "A7", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 463.0, @@ -2750,6 +2852,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -2773,6 +2878,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -2781,7 +2894,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_2", - "location identifier": "A8" + "location identifier": "A8", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 335.0, @@ -3143,6 +3260,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3166,6 +3286,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3174,7 +3302,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_3", - "location identifier": "A9" + "location identifier": "A9", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 429.0, @@ -3536,6 +3668,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3559,6 +3694,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3567,7 +3710,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A10" + "location identifier": "A10", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -3937,6 +4084,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3960,6 +4110,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3968,7 +4126,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A11" + "location identifier": "A11", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -4338,6 +4500,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -4361,6 +4526,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -4369,7 +4542,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A12" + "location identifier": "A12", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -4739,6 +4916,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } } @@ -6673,22 +6853,12 @@ "file name": "luminex_xPONENT_missing_optional_fields.csv", "UNC path": "tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.csv", "ASM converter name": "allotropy_luminex_xponent", - "ASM converter version": "0.1.102", + "ASM converter version": "0.1.103", "software name": "xPONENT", "software version": "2.1.1015", "custom information document": { - "BeadType": "MagPlex", - "Version": 1.0, - "PanelName": "Panel-12345678910 [v1]", - "ProtocolHeater": "Off", - "BatchStopTime": "2024-10-18 12:15", - "PlateReadDirection": "Horizontal", - "ProtocolAnalysis": "Off", - "DDGate": "7000 to 17000", - "Date": "2024-10-19", - "SampleTimeout": "50 sec", - "ProtocolMicrosphere": "Map", - "Country Code": 409.0 + "Country Code": "409", + "Version": "1" } }, "device system document": { @@ -6712,6 +6882,10 @@ "calibration report": "Verified" } ] + }, + "custom information document": { + "Country Code": "409", + "Version": "1" } } } From ecb922619590209c30b21f87c2c3abe1de6f8bd9 Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Wed, 20 Aug 2025 11:38:44 -0400 Subject: [PATCH 11/13] remove unnecessary block --- .../_2024/_09/multi_analyte_profiling.py | 21 ++++++++----------- .../luminex_xponent_structure.py | 10 ++++++++- ...x_xPONENT_NaN_and_not_reported_values.json | 6 +----- .../testdata/luminex_xPONENT_example02.json | 7 +------ .../luminex_xPONENT_example02_saved.json | 7 +------ .../testdata/luminex_xPONENT_example03.json | 7 +------ ...minex_xPONENT_missing_optional_fields.json | 6 +----- 7 files changed, 23 insertions(+), 41 deletions(-) diff --git a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py index 09afc6196..b9839d82c 100644 --- a/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py +++ b/src/allotropy/allotrope/schema_mappers/adm/multi_analyte_profiling/benchling/_2024/_09/multi_analyte_profiling.py @@ -172,18 +172,15 @@ def map_model(self, data: Data) -> Model: ), custom_info_doc=data.metadata.custom_info, ), - data_system_document=add_custom_information_document( - DataSystemDocument( - data_system_instance_identifier=data.metadata.data_system_instance_identifier, - file_name=data.metadata.file_name, - UNC_path=data.metadata.unc_path, - software_name=data.metadata.software_name, - software_version=data.metadata.software_version, - ASM_file_identifier=data.metadata.asm_file_identifier, - ASM_converter_name=self.converter_name, - ASM_converter_version=ASM_CONVERTER_VERSION, - ), - custom_info_doc=data.metadata.custom_info, + data_system_document=DataSystemDocument( + data_system_instance_identifier=data.metadata.data_system_instance_identifier, + file_name=data.metadata.file_name, + UNC_path=data.metadata.unc_path, + software_name=data.metadata.software_name, + software_version=data.metadata.software_version, + ASM_file_identifier=data.metadata.asm_file_identifier, + ASM_converter_name=self.converter_name, + ASM_converter_version=ASM_CONVERTER_VERSION, ), multi_analyte_profiling_document=[ self._get_technique_document(measurement_group, data.metadata) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 3b9b1f4a8..4f35ce3ef 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -96,11 +96,17 @@ def create( "Country Code": info_row.get(str, "Country Code"), "ProtocolDevelopingCompany": info_row.get(str, "ProtocolDevelopingCompany"), "Version": info_row.get(str, "Version"), - # These properties will be used by the mapper to create the measurement groups. + # These properties will be used by the measurement groups down below. "BatchStopTime": info_row.get(str, "BatchStopTime"), "ProtocolDescription": info_row.get(str, "ProtocolDescription"), } + info_row.get_unread( + skip={ + "Date", + }, + ) + # Build parameters dictionary return Header( model_number=cls._get_model_number(header_data), @@ -348,6 +354,8 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: "PanelName": header_row.get(str, "PanelName"), # Pending "BeadType": header_row.get(str, "BeadType"), # Pending } + + # Get unread keys after all keys have been read header_row.get_unread( skip={ "Date", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json index 3fd2aa89a..bc01e44d5 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_NaN_and_not_reported_values.json @@ -21899,11 +21899,7 @@ "ASM converter name": "allotropy_luminex_xponent", "ASM converter version": "0.1.103", "software name": "xPONENT", - "software version": "4.3.309.1", - "custom information document": { - "Country Code": "0", - "Version": "1" - } + "software version": "4.3.309.1" }, "device system document": { "equipment serial number": "1234", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json index ed7da2625..89965ddbf 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02.json @@ -626,12 +626,7 @@ "ASM converter name": "allotropy_luminex_xponent", "ASM converter version": "0.1.103", "software name": "xPONENT", - "software version": "4.3.229.0", - "custom information document": { - "Country Code": "7F", - "ProtocolDevelopingCompany": "WAN", - "Version": "1" - } + "software version": "4.3.229.0" }, "device system document": { "equipment serial number": "FM3DD20137021", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json index 9e524ec16..ee9fe2c56 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example02_saved.json @@ -626,12 +626,7 @@ "ASM converter name": "allotropy_luminex_xponent", "ASM converter version": "0.1.103", "software name": "xPONENT", - "software version": "4.3.229.0", - "custom information document": { - "Country Code": "7F", - "ProtocolDevelopingCompany": "WAN", - "Version": "1" - } + "software version": "4.3.229.0" }, "device system document": { "equipment serial number": "FM3DD20137021", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json index eb98b7ab8..345e62e36 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_example03.json @@ -629,12 +629,7 @@ "ASM converter name": "allotropy_luminex_xponent", "ASM converter version": "0.1.103", "software name": "xPONENT", - "software version": "4.3.229.0", - "custom information document": { - "Country Code": "7F", - "ProtocolDevelopingCompany": "WAN", - "Version": "1" - } + "software version": "4.3.229.0" }, "device system document": { "equipment serial number": "FM3DD12345678", diff --git a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json index 84d2d45e7..a5d3794fc 100644 --- a/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json +++ b/tests/parsers/luminex_xponent/testdata/luminex_xPONENT_missing_optional_fields.json @@ -6855,11 +6855,7 @@ "ASM converter name": "allotropy_luminex_xponent", "ASM converter version": "0.1.103", "software name": "xPONENT", - "software version": "2.1.1015", - "custom information document": { - "Country Code": "409", - "Version": "1" - } + "software version": "2.1.1015" }, "device system document": { "equipment serial number": "SERIAL_12345", From 326784b5cd156f4c57d813706dc8565ee3bfd951 Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Wed, 20 Aug 2025 12:06:08 -0400 Subject: [PATCH 12/13] add missing test json file --- .../luminex_xponent_structure.py | 10 +- .../luminex_intelliflex_example_01.json | 206 ++++++++++++++++-- 2 files changed, 197 insertions(+), 19 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 4f35ce3ef..7adcf5729 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -338,24 +338,22 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: sample_identifier = count_data[str, "Sample"] assay_bead_count = count_data[float, "Total Events"] - # Get unread keys after all keys have been read - count_data.get_unread() - device_control_custom_info = { "ProtocolHeater": header_row.get(str, "ProtocolHeater"), "DDGate": header_row.get(str, "DDGate"), "SampleTimeout": header_row.get(str, "SampleTimeout"), "ProtocolAnalysis": header_row.get(str, "ProtocolAnalysis"), "ProtocolMicrosphere": header_row.get(str, "ProtocolMicrosphere"), - "PlateReadDirection": header_row.get(str, "PlateReadDirection"), # Pending + "PlateReadDirection": header_row.get(str, "PlateReadDirection"), } sample_custom_info = { "BatchDescription": header_row.get(str, "BatchDescription"), - "PanelName": header_row.get(str, "PanelName"), # Pending - "BeadType": header_row.get(str, "BeadType"), # Pending + "PanelName": header_row.get(str, "PanelName"), + "BeadType": header_row.get(str, "BeadType"), } # Get unread keys after all keys have been read + count_data.get_unread() header_row.get_unread( skip={ "Date", diff --git a/tests/parsers/luminex_intelliflex/testdata/luminex_intelliflex_example_01.json b/tests/parsers/luminex_intelliflex/testdata/luminex_intelliflex_example_01.json index e8af70324..be95d4d9c 100644 --- a/tests/parsers/luminex_intelliflex/testdata/luminex_intelliflex_example_01.json +++ b/tests/parsers/luminex_intelliflex/testdata/luminex_intelliflex_example_01.json @@ -22,6 +22,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -30,7 +38,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_1", - "location identifier": "A1" + "location identifier": "A1", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 428.0, @@ -392,6 +404,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -415,6 +430,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -423,7 +446,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_2", - "location identifier": "A2" + "location identifier": "A2", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 279.0, @@ -785,6 +812,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -808,6 +838,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -816,7 +854,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_3", - "location identifier": "A3" + "location identifier": "A3", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 323.0, @@ -1178,6 +1220,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1201,6 +1246,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1209,7 +1262,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_4", - "location identifier": "A4" + "location identifier": "A4", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 417.0, @@ -1571,6 +1628,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1594,6 +1654,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1602,7 +1670,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_5", - "location identifier": "A5" + "location identifier": "A5", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 390.0, @@ -1964,6 +2036,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -1987,6 +2062,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -1995,7 +2078,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_6", - "location identifier": "A6" + "location identifier": "A6", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 442.0, @@ -2357,6 +2444,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -2380,6 +2470,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -2388,7 +2486,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_1", - "location identifier": "A7" + "location identifier": "A7", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 463.0, @@ -2750,6 +2852,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -2773,6 +2878,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -2781,7 +2894,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_2", - "location identifier": "A8" + "location identifier": "A8", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 335.0, @@ -3143,6 +3260,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3166,6 +3286,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3174,7 +3302,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Donor14_3", - "location identifier": "A9" + "location identifier": "A9", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "assay bead count": { "value": 429.0, @@ -3536,6 +3668,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3559,6 +3694,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3567,7 +3710,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A10" + "location identifier": "A10", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -3937,6 +4084,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -3960,6 +4110,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -3968,7 +4126,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A11" + "location identifier": "A11", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -4338,6 +4500,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } }, @@ -4361,6 +4526,14 @@ "minimum assay bead count threshold setting": { "value": 100, "unit": "#" + }, + "custom information document": { + "ProtocolHeater": "Off", + "DDGate": "7000 to 17000", + "SampleTimeout": "50 sec", + "ProtocolAnalysis": "Off", + "ProtocolMicrosphere": "Map", + "PlateReadDirection": "Horizontal" } } ] @@ -4369,7 +4542,11 @@ "measurement time": "2024-10-18T11:36:00+00:00", "sample document": { "sample identifier": "Background", - "location identifier": "A12" + "location identifier": "A12", + "custom information document": { + "PanelName": "Panel-12345678910 [v1]", + "BeadType": "MagPlex" + } }, "error aggregate document": { "error document": [ @@ -4739,6 +4916,9 @@ "plate well count": { "value": 96.0, "unit": "#" + }, + "custom information document": { + "BatchStopTime": "2024-10-18 12:15" } } } @@ -6673,7 +6853,7 @@ "file name": "luminex_intelliflex_example_01.csv", "UNC path": "tests/parsers/luminex_intelliflex/testdata/luminex_intelliflex_example_01.csv", "ASM converter name": "allotropy_luminex_intelliflex", - "ASM converter version": "0.1.100", + "ASM converter version": "0.1.103", "software name": "INTELLIFLEX", "software version": "2.1.1015" }, From 2b7cb99adb6fd39adde73d6f2e703e844ca6df9c Mon Sep 17 00:00:00 2001 From: Oscar Castro Date: Thu, 21 Aug 2025 10:53:50 -0400 Subject: [PATCH 13/13] move params to constructor --- .../luminex_xponent_structure.py | 112 ++++++------------ .../luminex_xponent_structure_test.py | 26 +++- 2 files changed, 59 insertions(+), 79 deletions(-) diff --git a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py index 7adcf5729..a08b74a1d 100644 --- a/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py +++ b/src/allotropy/parsers/luminex_xponent/luminex_xponent_structure.py @@ -68,65 +68,45 @@ class Header: @classmethod def create( - cls, header_data: pd.DataFrame, minimum_assay_bead_count_setting: float | None + cls, + header_data: pd.DataFrame, + header_row: SeriesData, + minimum_assay_bead_count_setting: float | None, ) -> Header: - info_row = SeriesData(header_data.iloc[0]) - raw_datetime = info_row[str, "BatchStartTime"] - sample_volume = info_row.get(str, ["SampleVolume", "MaxSampleUptakeVolume"]) - - # Read all the keys first - software_version = info_row.get(str, "Build") - equipment_serial_number = info_row.get(str, "SN") - analytical_method_identifier = info_row.get(str, "ProtocolName") - method_version = info_row.get(str, "ProtocolVersion") - experimental_data_identifier = info_row.get(str, "Batch") - detector_gain_setting = info_row.get( - str, ["ProtocolReporterGain", "ProtocolOperatingMode"] - ) - data_system_instance_identifier = info_row[str, "ComputerName"] - analyst = info_row.get(str, "Operator") - - # Mark keys that are accessed directly in helper methods - if "Program" in header_data: - info_row.mark_read("Program") - if "ProtocolPlate" in header_data: - info_row.mark_read("ProtocolPlate") - - custom_info = { - "Country Code": info_row.get(str, "Country Code"), - "ProtocolDevelopingCompany": info_row.get(str, "ProtocolDevelopingCompany"), - "Version": info_row.get(str, "Version"), - # These properties will be used by the measurement groups down below. - "BatchStopTime": info_row.get(str, "BatchStopTime"), - "ProtocolDescription": info_row.get(str, "ProtocolDescription"), - } + sample_volume = header_row.get(str, ["SampleVolume", "MaxSampleUptakeVolume"]) - info_row.get_unread( - skip={ - "Date", - }, - ) + header_row.mark_read({"Program", "ProtocolPlate", "Date"}) - # Build parameters dictionary return Header( model_number=cls._get_model_number(header_data), - software_version=software_version, - equipment_serial_number=equipment_serial_number, - analytical_method_identifier=analytical_method_identifier, - method_version=method_version, - experimental_data_identifier=experimental_data_identifier, + software_version=header_row.get(str, "Build"), + equipment_serial_number=header_row.get(str, "SN"), + analytical_method_identifier=header_row.get(str, "ProtocolName"), + method_version=header_row.get(str, "ProtocolVersion"), + experimental_data_identifier=header_row.get(str, "Batch"), sample_volume_setting=( try_float(sample_volume.split()[0], "sample volume setting") if sample_volume else None ), plate_well_count=cls._get_plate_well_count(header_data), - measurement_time=raw_datetime, - detector_gain_setting=detector_gain_setting, - data_system_instance_identifier=data_system_instance_identifier, + measurement_time=header_row[str, "BatchStartTime"], + detector_gain_setting=header_row.get( + str, ["ProtocolReporterGain", "ProtocolOperatingMode"] + ), + data_system_instance_identifier=header_row[str, "ComputerName"], minimum_assay_bead_count_setting=minimum_assay_bead_count_setting, - analyst=analyst, - custom_info=custom_info, + analyst=header_row.get(str, "Operator"), + custom_info={ + "Country Code": header_row.get(str, "Country Code"), + "ProtocolDevelopingCompany": header_row.get( + str, "ProtocolDevelopingCompany" + ), + "Version": header_row.get(str, "Version"), + # Used for the measurement groups + "BatchStopTime": header_row.get(str, "BatchStopTime"), + "ProtocolDescription": header_row.get(str, "ProtocolDescription"), + }, ) @classmethod @@ -227,13 +207,12 @@ def create( results_data: dict[str, pd.DataFrame], count_data: SeriesData, bead_ids_data: SeriesData, - header_data: pd.DataFrame, + header_row: SeriesData, ) -> Measurement: location = str(count_data.series.name) dilution_factor_data = results_data["Dilution Factor"] errors_data = results_data.get("Warnings/Errors") measurement_identifier = random_uuid_str() - header_row = SeriesData(header_data.iloc[0]) if location not in dilution_factor_data.index: msg = f"Could not find 'Dilution Factor' data for: '{location}'." @@ -334,10 +313,6 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: ) ) - # Read the remaining keys from count_data - sample_identifier = count_data[str, "Sample"] - assay_bead_count = count_data[float, "Total Events"] - device_control_custom_info = { "ProtocolHeater": header_row.get(str, "ProtocolHeater"), "DDGate": header_row.get(str, "DDGate"), @@ -352,26 +327,18 @@ def get_statistic_dimensions(analyte: str) -> list[StatisticDimension]: "BeadType": header_row.get(str, "BeadType"), } - # Get unread keys after all keys have been read - count_data.get_unread() - header_row.get_unread( - skip={ - "Date", - }, - ) - return Measurement( identifier=measurement_identifier, - sample_identifier=sample_identifier, + sample_identifier=count_data[str, "Sample"], location_identifier=location_id, dilution_factor_setting=dilution_factor_setting, - assay_bead_count=assay_bead_count, + assay_bead_count=count_data[float, "Total Events"], analytes=analytes, errors=errors, calculated_data=calculated_data, device_control_custom_info=device_control_custom_info, sample_custom_info=sample_custom_info, - measurement_custom_info=count_data.get_unread(), + measurement_custom_info=count_data.get_unread() | header_row.get_unread(), ) @classmethod @@ -406,7 +373,7 @@ class MeasurementList: @classmethod def create( - cls, results_data: dict[str, pd.DataFrame], header_data: pd.DataFrame + cls, results_data: dict[str, pd.DataFrame], header_row: SeriesData ) -> MeasurementList: if missing_sections := [ section for section in REQUIRED_SECTIONS if section not in results_data @@ -433,12 +400,9 @@ def create_measurement(count_data: SeriesData) -> Measurement: results_data=results_data, count_data=count_data, bead_ids_data=bead_ids_data, - header_data=header_data, + header_row=header_row, ) - # Capture unread bead IDs data to prevent warnings - bead_ids_data.get_unread() - return MeasurementList(map_rows(results_data["Count"], create_measurement)) @@ -450,14 +414,14 @@ class Data: @classmethod def create(cls, reader: LuminexXponentReader) -> Data: + header_row = SeriesData(reader.header_data.iloc[0]) + return Data( header=Header.create( - reader.header_data, reader.minimum_assay_bead_count_setting + reader.header_data, header_row, reader.minimum_assay_bead_count_setting ), calibrations=map_rows(reader.calibration_data, create_calibration), - measurement_list=MeasurementList.create( - reader.results_data, reader.header_data - ), + measurement_list=MeasurementList.create(reader.results_data, header_row), ) @@ -518,7 +482,7 @@ def create_measurement_groups( ) for measurement in measurements ] - # Remove the custom info that was used to create the measurement groups. + # Remove the header custom info that was used to create the measurement groups. header.custom_info.pop("BatchStopTime", None) header.custom_info.pop("ProtocolDescription", None) diff --git a/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py b/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py index c90d5a0b5..ac429699e 100644 --- a/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py +++ b/tests/parsers/luminex_xponent/luminex_xponent_structure_test.py @@ -75,7 +75,8 @@ def test_create_header() -> None: }, orient="index", ).T - header = Header.create(data, minimum_assay_bead_count_setting=10) + header_row = SeriesData(data.iloc[0]) + header = Header.create(data, header_row, minimum_assay_bead_count_setting=10) assert header == Header( model_number="Model", # Program, col 4 @@ -133,8 +134,10 @@ def test_create_heder_without_required_col(required_col: str) -> None: ) with pytest.raises(AllotropeConversionError, match=error_msg): + data_without_col = data.drop(columns=[required_col]) + header_row = SeriesData(data_without_col.iloc[0]) Header.create( - data.drop(columns=[required_col]), minimum_assay_bead_count_setting=100 + data_without_col, header_row, minimum_assay_bead_count_setting=100 ) @@ -191,7 +194,8 @@ def test_create_measurement_list() -> None: "allotropy.parsers.luminex_xponent.luminex_xponent_structure.random_uuid_str", return_value="dummy_id", ): - measurement_list = MeasurementList.create(results_data, mock_header_data) + header_row = SeriesData(mock_header_data.iloc[0]) + measurement_list = MeasurementList.create(results_data, header_row) assert measurement_list == MeasurementList( measurements=[ @@ -244,7 +248,18 @@ def test_create_measurement_list() -> None: Error(error="Another Warning."), ], calculated_data=[], - measurement_custom_info={}, + measurement_custom_info={ + "ProtocolName": "Order66", + "ProtocolVersion": 5.0, + "ProtocolReporterGain": "Pro MAP", + "SampleVolume": "1 uL", + "Build": "1.1.0", + "Program": "xPonent", + "SN": "SN1234", + "ComputerName": "AAA000", + "Batch": "ABC_0000", + "BatchStartTime": "1/17/2024 7:41:29 AM", + }, sample_custom_info={ "BatchDescription": "Test Batch Description", "PanelName": None, @@ -301,4 +316,5 @@ def test_create_measurement_list_without_required_table_then_raise( f"Unable to parse input file, missing expected sections: ['{table_name}']." ), ): - MeasurementList.create(results_data, mock_header_data) + header_row = SeriesData(mock_header_data.iloc[0]) + MeasurementList.create(results_data, header_row)