@@ -669,6 +669,27 @@ def _get_metadata_value_from_descriptor_document(hdr, *, data_key, stream_name="
669669 return value
670670
671671
672+ def _get_metadata_value_from_descriptor_document_by_pattern (hdr , * , pattern , stream_name = "baseline" ):
673+ """
674+ Returns all variables in the the first occurrence of each variable with the name containing
675+ the patter in specified document stream. Returns empty dictionary if the variable is not found.
676+ """
677+ value_dict = {}
678+ docs = hdr .documents (stream_name = stream_name )
679+ for name , doc in docs :
680+ if (name != "event" ) or ("descriptor" not in doc ):
681+ continue
682+ try :
683+ values = {k : v for k , v in doc ["data" ].items if re .search (pattern , k )}
684+ for k , v in values .items ():
685+ if k not in value_dict :
686+ value_dict [k ] = v
687+ except Exception :
688+ pass
689+
690+ return value_dict
691+
692+
672693def _get_metadata_all_from_descriptor_document (hdr , * , data_key , stream_name = "baseline" ):
673694 """
674695 Returns the list of the recorded values of variables with the name ``data_key`` in
@@ -703,6 +724,21 @@ def _get_metadata_value_from_descriptor_document_tiled(hdr, *, data_key, stream_
703724 return value
704725
705726
727+ def _get_metadata_value_from_descriptor_document_by_pattern_tiled (hdr , * , pattern , stream_name = "baseline" ):
728+ """
729+ Returns all variables in the the first occurrence of each variable with the name containing
730+ the patter in specified document stream. Returns empty dictionary if the variable is not found.
731+ """
732+ value_dict = {}
733+ docs = hdr [stream_name ]["data" ]
734+
735+ for k , v in docs .items ():
736+ if re .search (pattern , k ):
737+ value_dict [k ] = v .compute ()[0 ]
738+
739+ return value_dict
740+
741+
706742def _get_metadata_all_from_descriptor_document_tiled (hdr , * , data_key , stream_name = "baseline" ):
707743 """
708744 Returns the list of the recorded values of variables with the name ``data_key`` in
@@ -2280,6 +2316,24 @@ def map_data2D_srx_new_tiled(
22802316 if v is not None :
22812317 mdata ["instrument_beam_current" ] = v
22822318
2319+ v = _get_metadata_all_from_descriptor_document_tiled (
2320+ hdr , data_key = "nano_det_sample2detector" , stream_name = "baseline"
2321+ )
2322+ if v is not None :
2323+ mdata ["instrument_sample_to_detector" ] = v
2324+
2325+ v = _get_metadata_value_from_descriptor_document_by_pattern_tiled (
2326+ hdr , pattern = "attenuators" , stream_name = "baseline"
2327+ )
2328+ if v :
2329+ mdata ["instrument_attenuators_config" ] = v
2330+
2331+ v = _get_metadata_value_from_descriptor_document_by_pattern_tiled (
2332+ hdr , pattern = "preamp" , stream_name = "baseline"
2333+ )
2334+ if v :
2335+ mdata ["instrument_preamps_config" ] = v
2336+
22832337 for ax in ["X" , "Y" , "Z" ]:
22842338 v = _get_metadata_all_from_descriptor_document_tiled (
22852339 hdr , data_key = f"nanoKB_interferometer_pos{ ax } " , stream_name = "baseline"
@@ -3982,6 +4036,27 @@ def incorrect_type_msg(channel, data_type):
39824036 if "file_software" not in metadata_prepared :
39834037 metadata_prepared .update (metadata_software_version )
39844038
4039+ metadata_prepared2 = metadata_prepared
4040+ metadata_prepared = {}
4041+ for k , v in metadata_prepared2 .items ():
4042+ if isinstance (v , dict ):
4043+ for k2 , v2 in v .items ():
4044+ metadata_prepared [k + "|" + k2 ] = v2
4045+ else :
4046+ metadata_prepared [k ] = v
4047+
4048+ metadata_prepared2 = metadata_prepared
4049+ metadata_prepared = {}
4050+ for k , v in metadata_prepared2 .items ():
4051+ if isinstance (v , np .int64 ):
4052+ metadata_prepared [k ] = int (v )
4053+ elif isinstance (v , np .float64 ):
4054+ metadata_prepared [k ] = float (v )
4055+ elif isinstance (v , np .str_ ):
4056+ metadata_prepared [k ] = str (v )
4057+ else :
4058+ metadata_prepared [k ] = v
4059+
39854060 if metadata_prepared :
39864061 # We assume, that metadata does not contain repeated keys. Otherwise the
39874062 # entry with the last occurrence of the key will override the previous ones.
0 commit comments