@@ -107,6 +107,12 @@ class Measurement:
107107 sample_custom_info : dict [str , Any ] | None = None
108108 custom_info : dict [str , Any ] | None = None
109109
110+ # Custom information documents
111+ device_control_custom_info : dict [str , Any ] | None = None
112+ image_processing_custom_info : dict [str , Any ] | None = None
113+ data_processing_custom_info : dict [str , Any ] | None = None
114+ processed_data_custom_info : dict [str , Any ] | None = None
115+
110116
111117@dataclass (frozen = True )
112118class MeasurementGroup :
@@ -223,21 +229,23 @@ def _get_technique_document(
223229 def _get_measurement_document (
224230 self , measurement : Measurement , metadata : Metadata
225231 ) -> MeasurementDocument :
232+ device_control_doc = DeviceControlDocumentItem (
233+ device_type = metadata .device_type ,
234+ detection_type = metadata .detection_type ,
235+ sample_volume_setting = quantity_or_none (
236+ TQuantityValueMicroliter ,
237+ measurement .sample_volume_setting ,
238+ ),
239+ )
240+ device_control_doc = add_custom_information_document (
241+ device_control_doc , measurement .device_control_custom_info or {}
242+ )
226243 measurement_document = MeasurementDocument (
227244 measurement_time = self .get_date_time (measurement .timestamp ),
228245 measurement_identifier = measurement .measurement_identifier ,
229246 sample_document = self ._get_sample_document (measurement ),
230247 device_control_aggregate_document = DeviceControlAggregateDocument (
231- device_control_document = [
232- DeviceControlDocumentItem (
233- device_type = metadata .device_type ,
234- detection_type = metadata .detection_type ,
235- sample_volume_setting = quantity_or_none (
236- TQuantityValueMicroliter ,
237- measurement .sample_volume_setting ,
238- ),
239- )
240- ]
248+ device_control_document = [device_control_doc ]
241249 ),
242250 processed_data_aggregate_document = self ._get_processed_data_aggregate_document (
243251 measurement
@@ -247,12 +255,16 @@ def _get_measurement_document(
247255 ),
248256 image_aggregate_document = ImageAggregateDocument (
249257 image_document = [
250- ImageDocumentItem (
251- experimental_data_identifier = measurement .experimental_data_identifier
258+ add_custom_information_document (
259+ ImageDocumentItem (
260+ experimental_data_identifier = measurement .experimental_data_identifier
261+ ),
262+ measurement .image_processing_custom_info or {},
252263 )
253264 ],
254265 )
255266 if measurement .experimental_data_identifier
267+ or measurement .image_processing_custom_info
256268 else None ,
257269 )
258270 return add_custom_information_document (
@@ -322,20 +334,23 @@ def _get_processed_data_aggregate_document(
322334 TQuantityValueUnitless , measurement .debris_index
323335 ),
324336 }
325- data_processing_document = DataProcessingDocument (
326- cell_type_processing_method = measurement .cell_type_processing_method ,
327- minimum_cell_diameter_setting = quantity_or_none (
328- TQuantityValueMicrometer ,
329- measurement .minimum_cell_diameter_setting ,
330- ),
331- maximum_cell_diameter_setting = quantity_or_none (
332- TQuantityValueMicrometer ,
333- measurement .maximum_cell_diameter_setting ,
334- ),
335- cell_density_dilution_factor = quantity_or_none (
336- TQuantityValueUnitless ,
337- measurement .cell_density_dilution_factor ,
337+ data_processing_document = add_custom_information_document (
338+ DataProcessingDocument (
339+ cell_type_processing_method = measurement .cell_type_processing_method ,
340+ minimum_cell_diameter_setting = quantity_or_none (
341+ TQuantityValueMicrometer ,
342+ measurement .minimum_cell_diameter_setting ,
343+ ),
344+ maximum_cell_diameter_setting = quantity_or_none (
345+ TQuantityValueMicrometer ,
346+ measurement .maximum_cell_diameter_setting ,
347+ ),
348+ cell_density_dilution_factor = quantity_or_none (
349+ TQuantityValueUnitless ,
350+ measurement .cell_density_dilution_factor ,
351+ ),
338352 ),
353+ measurement .data_processing_custom_info or {},
339354 )
340355 processed_data_document = ProcessedDataDocumentItem (
341356 processed_data_identifier = measurement .processed_data_identifier ,
@@ -389,7 +404,8 @@ def _get_processed_data_aggregate_document(
389404 return ProcessedDataAggregateDocument (
390405 processed_data_document = [
391406 add_custom_information_document (
392- processed_data_document , custom_document
407+ processed_data_document ,
408+ custom_document | (measurement .processed_data_custom_info or {}),
393409 )
394410 ]
395411 )
0 commit comments