sasdata.metadata module¶
Contains classes describing the metadata for a scattering run
The metadata is structures around the CANSas format version 1.1, found at https://www.cansas.org/formats/canSAS1d/1.1/doc/specification.html
Metadata from other file formats should be massaged to fit into the data classes presented here. Any useful metadata which cannot be included in these classes represent a bug in the CANSas format.
- class sasdata.metadata.Aperture(*, distance: sasdata.quantities.quantity.Quantity[float] | None, size: sasdata.metadata.Vec3 | None, size_name: str | None, name: str | None, type_: str | None)¶
Bases:
object- __annotations__ = {'distance': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'name': str | None, 'size': sasdata.metadata.Vec3 | None, 'size_name': str | None, 'type_': str | None}¶
- __dataclass_fields__ = {'distance': Field(name='distance',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size': Field(name='size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size_name': Field(name='size_name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'type_': Field(name='type_',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 145, '__annotations__': {'distance': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'size': sasdata.metadata.Vec3 | None, 'size_name': str | None, 'name': str | None, 'type_': str | None}, 'summary': <function Aperture.summary>, 'from_json': <staticmethod(<function Aperture.from_json>)>, 'as_h5': <function Aperture.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Aperture' objects>, '__weakref__': <attribute '__weakref__' of 'Aperture' objects>, '__doc__': 'Aperture(*, distance: Optional[sasdata.quantities.quantity.Quantity[float]], size: sasdata.metadata.Vec3 | None, size_name: str | None, name: str | None, type_: str | None)', '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'distance': Field(name='distance',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size': Field(name='size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size_name': Field(name='size_name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'type_': Field(name='type_',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Aperture.__init__>, '__repr__': <function Aperture.__repr__>, '__eq__': <function Aperture.__eq__>, '__match_args__': ()})¶
- __doc__ = 'Aperture(*, distance: Optional[sasdata.quantities.quantity.Quantity[float]], size: sasdata.metadata.Vec3 | None, size_name: str | None, name: str | None, type_: str | None)'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 145¶
- __hash__ = None¶
- __init__(*, distance: Quantity[float] | None, size: Vec3 | None, size_name: str | None, name: str | None, type_: str | None) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- static from_json(obj)¶
- name: str | None¶
- size_name: str | None¶
- summary()¶
- type_: str | None¶
- class sasdata.metadata.BeamSize(*, name: str | None, size: sasdata.metadata.Vec3 | None)¶
Bases:
object- __annotations__ = {'name': str | None, 'size': sasdata.metadata.Vec3 | None}¶
- __dataclass_fields__ = {'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size': Field(name='size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 215, '__annotations__': {'name': str | None, 'size': sasdata.metadata.Vec3 | None}, 'from_json': <staticmethod(<function BeamSize.from_json>)>, 'as_h5': <function BeamSize.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'BeamSize' objects>, '__weakref__': <attribute '__weakref__' of 'BeamSize' objects>, '__doc__': 'BeamSize(*, name: str | None, size: sasdata.metadata.Vec3 | None)', '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'size': Field(name='size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function BeamSize.__init__>, '__repr__': <function BeamSize.__repr__>, '__eq__': <function BeamSize.__eq__>, '__match_args__': ()})¶
- __doc__ = 'BeamSize(*, name: str | None, size: sasdata.metadata.Vec3 | None)'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 215¶
- __hash__ = None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- static from_json(obj)¶
- name: str | None¶
- class sasdata.metadata.Collimation(*, length: Quantity[float] | None, apertures: list[Aperture])¶
Bases:
objectClass to hold collimation information
- __annotations__ = {'apertures': list[sasdata.metadata.Aperture], 'length': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}¶
- __dataclass_fields__ = {'apertures': Field(name='apertures',type=list[sasdata.metadata.Aperture],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'length': Field(name='length',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 188, '__annotations__': {'length': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'apertures': list[sasdata.metadata.Aperture]}, '__doc__': '\nClass to hold collimation information\n', 'summary': <function Collimation.summary>, 'from_json': <staticmethod(<function Collimation.from_json>)>, 'as_h5': <function Collimation.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Collimation' objects>, '__weakref__': <attribute '__weakref__' of 'Collimation' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'length': Field(name='length',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'apertures': Field(name='apertures',type=list[sasdata.metadata.Aperture],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Collimation.__init__>, '__repr__': <function Collimation.__repr__>, '__eq__': <function Collimation.__eq__>, '__match_args__': ()})¶
- __doc__ = '\nClass to hold collimation information\n'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 188¶
- __hash__ = None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- static from_json(obj)¶
- summary()¶
- class sasdata.metadata.Detector(*, name: str | None, distance: Quantity[float] | None, offset: Vec3 | None, orientation: Rot3 | None, beam_center: Vec3 | None, pixel_size: Vec3 | None, slit_length: Quantity[float] | None)¶
Bases:
objectDetector information
- __annotations__ = {'beam_center': sasdata.metadata.Vec3 | None, 'distance': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'name': str | None, 'offset': sasdata.metadata.Vec3 | None, 'orientation': sasdata.metadata.Rot3 | None, 'pixel_size': sasdata.metadata.Vec3 | None, 'slit_length': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}¶
- __dataclass_fields__ = {'beam_center': Field(name='beam_center',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'distance': Field(name='distance',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'offset': Field(name='offset',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'orientation': Field(name='orientation',type=sasdata.metadata.Rot3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'pixel_size': Field(name='pixel_size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'slit_length': Field(name='slit_length',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 90, '__annotations__': {'name': str | None, 'distance': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'offset': sasdata.metadata.Vec3 | None, 'orientation': sasdata.metadata.Rot3 | None, 'beam_center': sasdata.metadata.Vec3 | None, 'pixel_size': sasdata.metadata.Vec3 | None, 'slit_length': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}, '__doc__': '\nDetector information\n', 'summary': <function Detector.summary>, 'from_json': <staticmethod(<function Detector.from_json>)>, 'as_h5': <function Detector.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Detector' objects>, '__weakref__': <attribute '__weakref__' of 'Detector' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'distance': Field(name='distance',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'offset': Field(name='offset',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'orientation': Field(name='orientation',type=sasdata.metadata.Rot3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'beam_center': Field(name='beam_center',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'pixel_size': Field(name='pixel_size',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'slit_length': Field(name='slit_length',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Detector.__init__>, '__repr__': <function Detector.__repr__>, '__eq__': <function Detector.__eq__>, '__match_args__': ()})¶
- __doc__ = '\nDetector information\n'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 90¶
- __hash__ = None¶
- __init__(*, name: str | None, distance: Quantity[float] | None, offset: Vec3 | None, orientation: Rot3 | None, beam_center: Vec3 | None, pixel_size: Vec3 | None, slit_length: Quantity[float] | None) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- static from_json(obj)¶
- name: str | None¶
- summary()¶
- class sasdata.metadata.Instrument(collimations: list[sasdata.metadata.Collimation], source: sasdata.metadata.Source | None, detector: list[sasdata.metadata.Detector])¶
Bases:
object- __annotations__ = {'collimations': list[sasdata.metadata.Collimation], 'detector': list[sasdata.metadata.Detector], 'source': sasdata.metadata.Source | None}¶
- __dataclass_fields__ = {'collimations': Field(name='collimations',type=list[sasdata.metadata.Collimation],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD), 'detector': Field(name='detector',type=list[sasdata.metadata.Detector],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD), 'source': Field(name='source',type=sasdata.metadata.Source | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 416, '__annotations__': {'collimations': list[sasdata.metadata.Collimation], 'source': sasdata.metadata.Source | None, 'detector': list[sasdata.metadata.Detector]}, 'summary': <function Instrument.summary>, 'from_json': <staticmethod(<function Instrument.from_json>)>, 'as_h5': <function Instrument.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Instrument' objects>, '__weakref__': <attribute '__weakref__' of 'Instrument' objects>, '__doc__': 'Instrument(collimations: list[sasdata.metadata.Collimation], source: sasdata.metadata.Source | None, detector: list[sasdata.metadata.Detector])', '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=False,slots=False,weakref_slot=False), '__dataclass_fields__': {'collimations': Field(name='collimations',type=list[sasdata.metadata.Collimation],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD), 'source': Field(name='source',type=sasdata.metadata.Source | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD), 'detector': Field(name='detector',type=list[sasdata.metadata.Detector],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=False,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Instrument.__init__>, '__repr__': <function Instrument.__repr__>, '__eq__': <function Instrument.__eq__>, '__match_args__': ('collimations', 'source', 'detector')})¶
- __doc__ = 'Instrument(collimations: list[sasdata.metadata.Collimation], source: sasdata.metadata.Source | None, detector: list[sasdata.metadata.Detector])'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 416¶
- __hash__ = None¶
- __init__(collimations: list[Collimation], source: Source | None, detector: list[Detector]) None¶
- __match_args__ = ('collimations', 'source', 'detector')¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- collimations: list[Collimation]¶
- static from_json(obj)¶
- summary()¶
- class sasdata.metadata.MetaNode(*, name: str, attrs: dict[str, str], contents: str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'])¶
Bases:
object- __annotations__ = {'attrs': dict[str, str], 'contents': str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'], 'name': <class 'str'>}¶
- __dataclass_fields__ = {'attrs': Field(name='attrs',type=dict[str, str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'contents': Field(name='contents',type=str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=<class 'str'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 447, '__annotations__': {'name': <class 'str'>, 'attrs': dict[str, str], 'contents': str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode']}, 'to_string': <function MetaNode.to_string>, 'filter': <function MetaNode.filter>, '__eq__': <function MetaNode.__eq__>, 'from_json': <staticmethod(<function MetaNode.from_json>)>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'MetaNode' objects>, '__weakref__': <attribute '__weakref__' of 'MetaNode' objects>, '__doc__': "MetaNode(*, name: str, attrs: dict[str, str], contents: str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'])", '__hash__': None, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'name': Field(name='name',type=<class 'str'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'attrs': Field(name='attrs',type=dict[str, str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'contents': Field(name='contents',type=str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__init__': <function MetaNode.__init__>, '__repr__': <function MetaNode.__repr__>, '__match_args__': ()})¶
- __doc__ = "MetaNode(*, name: str, attrs: dict[str, str], contents: str | sasdata.quantities.quantity.Quantity | numpy.ndarray | list['MetaNode'])"¶
- __eq__(other) bool¶
Custom equality overload needed since numpy arrays don’t play nicely with equality
- __firstlineno__ = 447¶
- __hash__ = None¶
- __init__(*, name: str, attrs: dict[str, str], contents: str | Quantity | ndarray | list[MetaNode]) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- attrs: dict[str, str]¶
- static from_json(obj)¶
- name: str¶
- to_string(header='')¶
Convert node to pretty printer string
- class sasdata.metadata.Metadata(*, title: str | None, run: list[str], definition: str | None, process: list[sasdata.metadata.Process], sample: sasdata.metadata.Sample | None, instrument: sasdata.metadata.Instrument | None, raw: sasdata.metadata.MetaNode)¶
Bases:
object- __annotations__ = {'definition': str | None, 'instrument': sasdata.metadata.Instrument | None, 'process': list[sasdata.metadata.Process], 'raw': <class 'sasdata.metadata.MetaNode'>, 'run': list[str], 'sample': sasdata.metadata.Sample | None, 'title': str | None}¶
- __dataclass_fields__ = {'definition': Field(name='definition',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'instrument': Field(name='instrument',type=sasdata.metadata.Instrument | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'process': Field(name='process',type=list[sasdata.metadata.Process],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'raw': Field(name='raw',type=<class 'sasdata.metadata.MetaNode'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'run': Field(name='run',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'sample': Field(name='sample',type=sasdata.metadata.Sample | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'title': Field(name='title',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 533, '__annotations__': {'title': str | None, 'run': list[str], 'definition': str | None, 'process': list[sasdata.metadata.Process], 'sample': sasdata.metadata.Sample | None, 'instrument': sasdata.metadata.Instrument | None, 'raw': <class 'sasdata.metadata.MetaNode'>}, 'summary': <function Metadata.summary>, 'from_json': <staticmethod(<function Metadata.from_json>)>, 'as_h5': <function Metadata.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Metadata' objects>, '__weakref__': <attribute '__weakref__' of 'Metadata' objects>, '__doc__': 'Metadata(*, title: str | None, run: list[str], definition: str | None, process: list[sasdata.metadata.Process], sample: sasdata.metadata.Sample | None, instrument: sasdata.metadata.Instrument | None, raw: sasdata.metadata.MetaNode)', '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'title': Field(name='title',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'run': Field(name='run',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'definition': Field(name='definition',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'process': Field(name='process',type=list[sasdata.metadata.Process],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'sample': Field(name='sample',type=sasdata.metadata.Sample | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'instrument': Field(name='instrument',type=sasdata.metadata.Instrument | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'raw': Field(name='raw',type=<class 'sasdata.metadata.MetaNode'>,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Metadata.__init__>, '__repr__': <function Metadata.__repr__>, '__eq__': <function Metadata.__eq__>, '__match_args__': ()})¶
- __doc__ = 'Metadata(*, title: str | None, run: list[str], definition: str | None, process: list[sasdata.metadata.Process], sample: sasdata.metadata.Sample | None, instrument: sasdata.metadata.Instrument | None, raw: sasdata.metadata.MetaNode)'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 533¶
- __hash__ = None¶
- __init__(*, title: str | None, run: list[str], definition: str | None, process: list[Process], sample: Sample | None, instrument: Instrument | None, raw: MetaNode) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(f: Group)¶
Export data onto an HDF5 group
- definition: str | None¶
- static from_json(obj)¶
- instrument: Instrument | None¶
- run: list[str]¶
- summary()¶
- title: str | None¶
- class sasdata.metadata.MetadataEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)¶
Bases:
JSONEncoder- __annotations__ = {}¶
- __doc__ = None¶
- __firstlineno__ = 589¶
- __module__ = 'sasdata.metadata'¶
- __static_attributes__ = ()¶
- default(obj)¶
Implement this method in a subclass such that it returns a serializable object for
o, or calls the base implementation (to raise aTypeError).For example, to support arbitrary iterators, you could implement default like this:
def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return super().default(o)
- class sasdata.metadata.Process(*, name: str | None, date: str | None, description: str | None, terms: dict[str, str | Quantity[float]], notes: list[str])¶
Bases:
objectClass that holds information about the processes performed on the data.
- __annotations__ = {'date': str | None, 'description': str | None, 'name': str | None, 'notes': list[str], 'terms': dict[str, typing.Union[str, sasdata.quantities.quantity.Quantity[float]]]}¶
- __dataclass_fields__ = {'date': Field(name='date',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'description': Field(name='description',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'notes': Field(name='notes',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'terms': Field(name='terms',type=dict[str, typing.Union[str, sasdata.quantities.quantity.Quantity[float]]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 346, '__annotations__': {'name': str | None, 'date': str | None, 'description': str | None, 'terms': dict[str, typing.Union[str, sasdata.quantities.quantity.Quantity[float]]], 'notes': list[str]}, '__doc__': '\nClass that holds information about the processes\nperformed on the data.\n', 'single_line_desc': <function Process.single_line_desc>, 'summary': <function Process.summary>, 'from_json': <staticmethod(<function Process.from_json>)>, 'as_h5': <function Process.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Process' objects>, '__weakref__': <attribute '__weakref__' of 'Process' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'date': Field(name='date',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'description': Field(name='description',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'terms': Field(name='terms',type=dict[str, typing.Union[str, sasdata.quantities.quantity.Quantity[float]]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'notes': Field(name='notes',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Process.__init__>, '__repr__': <function Process.__repr__>, '__eq__': <function Process.__eq__>, '__match_args__': ()})¶
- __doc__ = '\nClass that holds information about the processes\nperformed on the data.\n'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 346¶
- __hash__ = None¶
- __init__(*, name: str | None, date: str | None, description: str | None, terms: dict[str, str | Quantity[float]], notes: list[str]) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- date: str | None¶
- description: str | None¶
- static from_json(obj)¶
- name: str | None¶
- notes: list[str]¶
- single_line_desc()¶
Return a single line string representing the process
- summary()¶
- class sasdata.metadata.Rot3(*, roll: Quantity[float] | None, pitch: Quantity[float] | None, yaw: Quantity[float] | None)¶
Bases:
objectA measured rotation in 3-space
- __annotations__ = {'pitch': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'roll': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'yaw': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}¶
- __dataclass_fields__ = {'pitch': Field(name='pitch',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'roll': Field(name='roll',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'yaw': Field(name='yaw',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 62, '__annotations__': {'roll': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'pitch': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'yaw': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}, '__doc__': 'A measured rotation in 3-space', 'from_json': <staticmethod(<function Rot3.from_json>)>, 'as_h5': <function Rot3.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Rot3' objects>, '__weakref__': <attribute '__weakref__' of 'Rot3' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'roll': Field(name='roll',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'pitch': Field(name='pitch',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'yaw': Field(name='yaw',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Rot3.__init__>, '__repr__': <function Rot3.__repr__>, '__eq__': <function Rot3.__eq__>, '__match_args__': ()})¶
- __doc__ = 'A measured rotation in 3-space'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 62¶
- __hash__ = None¶
- __init__(*, roll: Quantity[float] | None, pitch: Quantity[float] | None, yaw: Quantity[float] | None) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(f: Group)¶
Export data onto an HDF5 group
- class sasdata.metadata.Sample(*, name: str | None, sample_id: str | None, thickness: Quantity[float] | None, transmission: float | None, temperature: Quantity[float] | None, position: Vec3 | None, orientation: Rot3 | None, details: list[str])¶
Bases:
objectClass to hold the sample description
- __annotations__ = {'details': list[str], 'name': str | None, 'orientation': sasdata.metadata.Rot3 | None, 'position': sasdata.metadata.Vec3 | None, 'sample_id': str | None, 'temperature': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'thickness': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'transmission': float | None}¶
- __dataclass_fields__ = {'details': Field(name='details',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'orientation': Field(name='orientation',type=sasdata.metadata.Rot3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'position': Field(name='position',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'sample_id': Field(name='sample_id',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'temperature': Field(name='temperature',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'thickness': Field(name='thickness',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'transmission': Field(name='transmission',type=float | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 287, '__annotations__': {'name': str | None, 'sample_id': str | None, 'thickness': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'transmission': float | None, 'temperature': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'position': sasdata.metadata.Vec3 | None, 'orientation': sasdata.metadata.Rot3 | None, 'details': list[str]}, '__doc__': '\nClass to hold the sample description\n', 'summary': <function Sample.summary>, 'from_json': <staticmethod(<function Sample.from_json>)>, 'as_h5': <function Sample.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'name': Field(name='name',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'sample_id': Field(name='sample_id',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'thickness': Field(name='thickness',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'transmission': Field(name='transmission',type=float | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'temperature': Field(name='temperature',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'position': Field(name='position',type=sasdata.metadata.Vec3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'orientation': Field(name='orientation',type=sasdata.metadata.Rot3 | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'details': Field(name='details',type=list[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Sample.__init__>, '__repr__': <function Sample.__repr__>, '__eq__': <function Sample.__eq__>, '__match_args__': ()})¶
- __doc__ = '\nClass to hold the sample description\n'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 287¶
- __hash__ = None¶
- __init__(*, name: str | None, sample_id: str | None, thickness: Quantity[float] | None, transmission: float | None, temperature: Quantity[float] | None, position: Vec3 | None, orientation: Rot3 | None, details: list[str]) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(f: Group)¶
Export data onto an HDF5 group
- details: list[str]¶
- static from_json(obj)¶
- name: str | None¶
- sample_id: str | None¶
- summary() str¶
- transmission: float | None¶
- class sasdata.metadata.Source(*, radiation: str | None, beam_shape: str | None, beam_size: sasdata.metadata.BeamSize | None, wavelength: sasdata.quantities.quantity.Quantity[float] | None, wavelength_min: sasdata.quantities.quantity.Quantity[float] | None, wavelength_max: sasdata.quantities.quantity.Quantity[float] | None, wavelength_spread: sasdata.quantities.quantity.Quantity[float] | None)¶
Bases:
object- __annotations__ = {'beam_shape': str | None, 'beam_size': sasdata.metadata.BeamSize | None, 'radiation': str | None, 'wavelength': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_max': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_min': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_spread': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}¶
- __dataclass_fields__ = {'beam_shape': Field(name='beam_shape',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'beam_size': Field(name='beam_size',type=sasdata.metadata.BeamSize | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'radiation': Field(name='radiation',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength': Field(name='wavelength',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_max': Field(name='wavelength_max',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_min': Field(name='wavelength_min',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_spread': Field(name='wavelength_spread',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 232, '__annotations__': {'radiation': str | None, 'beam_shape': str | None, 'beam_size': sasdata.metadata.BeamSize | None, 'wavelength': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_min': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_max': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'wavelength_spread': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}, 'summary': <function Source.summary>, 'from_json': <staticmethod(<function Source.from_json>)>, 'as_h5': <function Source.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Source' objects>, '__weakref__': <attribute '__weakref__' of 'Source' objects>, '__doc__': 'Source(*, radiation: str | None, beam_shape: str | None, beam_size: sasdata.metadata.BeamSize | None, wavelength: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_min: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_max: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_spread: Optional[sasdata.quantities.quantity.Quantity[float]])', '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'radiation': Field(name='radiation',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'beam_shape': Field(name='beam_shape',type=str | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'beam_size': Field(name='beam_size',type=sasdata.metadata.BeamSize | None,default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength': Field(name='wavelength',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_min': Field(name='wavelength_min',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_max': Field(name='wavelength_max',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'wavelength_spread': Field(name='wavelength_spread',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Source.__init__>, '__repr__': <function Source.__repr__>, '__eq__': <function Source.__eq__>, '__match_args__': ()})¶
- __doc__ = 'Source(*, radiation: str | None, beam_shape: str | None, beam_size: sasdata.metadata.BeamSize | None, wavelength: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_min: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_max: Optional[sasdata.quantities.quantity.Quantity[float]], wavelength_spread: Optional[sasdata.quantities.quantity.Quantity[float]])'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 232¶
- __hash__ = None¶
- __init__(*, radiation: str | None, beam_shape: str | None, beam_size: BeamSize | None, wavelength: Quantity[float] | None, wavelength_min: Quantity[float] | None, wavelength_max: Quantity[float] | None, wavelength_spread: Quantity[float] | None) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(group: Group)¶
Export data onto an HDF5 group
- beam_shape: str | None¶
- static from_json(obj)¶
- radiation: str | None¶
- summary() str¶
- class sasdata.metadata.TagCollection(*, singular: set[str] = <factory>, variable: set[str] = <factory>)¶
Bases:
objectThe collected tags and their variability.
- __annotations__ = {'singular': set[str], 'variable': set[str]}¶
- __dataclass_fields__ = {'singular': Field(name='singular',type=set[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<class 'set'>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'variable': Field(name='variable',type=set[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<class 'set'>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 800, '__annotations__': {'singular': set[str], 'variable': set[str]}, '__doc__': 'The collected tags and their variability.', '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'TagCollection' objects>, '__weakref__': <attribute '__weakref__' of 'TagCollection' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'singular': Field(name='singular',type=set[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<class 'set'>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'variable': Field(name='variable',type=set[str],default=<dataclasses._MISSING_TYPE object>,default_factory=<class 'set'>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function TagCollection.__init__>, '__repr__': <function TagCollection.__repr__>, '__eq__': <function TagCollection.__eq__>, '__match_args__': ()})¶
- __doc__ = 'The collected tags and their variability.'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 800¶
- __hash__ = None¶
- __init__(*, singular: set[str] = <factory>, variable: set[str] = <factory>) None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- singular: set[str]¶
- variable: set[str]¶
- class sasdata.metadata.Vec3(*, x: Quantity[float] | None, y: Quantity[float] | None, z: Quantity[float] | None)¶
Bases:
objectA three-vector of measured quantities
- __annotations__ = {'x': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'y': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'z': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}¶
- __dataclass_fields__ = {'x': Field(name='x',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'y': Field(name='y',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'z': Field(name='z',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}¶
- __dataclass_params__ = _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False)¶
- __dict__ = mappingproxy({'__module__': 'sasdata.metadata', '__firstlineno__': 34, '__annotations__': {'x': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'y': typing.Optional[sasdata.quantities.quantity.Quantity[float]], 'z': typing.Optional[sasdata.quantities.quantity.Quantity[float]]}, '__doc__': 'A three-vector of measured quantities', 'from_json': <staticmethod(<function Vec3.from_json>)>, 'as_h5': <function Vec3.as_h5>, '__static_attributes__': (), '__dict__': <attribute '__dict__' of 'Vec3' objects>, '__weakref__': <attribute '__weakref__' of 'Vec3' objects>, '__dataclass_params__': _DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,match_args=True,kw_only=True,slots=False,weakref_slot=False), '__dataclass_fields__': {'x': Field(name='x',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'y': Field(name='y',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD), 'z': Field(name='z',type=typing.Optional[sasdata.quantities.quantity.Quantity[float]],default=<dataclasses._MISSING_TYPE object>,default_factory=<dataclasses._MISSING_TYPE object>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),kw_only=True,_field_type=_FIELD)}, '__replace__': <function _replace>, '__hash__': None, '__init__': <function Vec3.__init__>, '__repr__': <function Vec3.__repr__>, '__eq__': <function Vec3.__eq__>, '__match_args__': ()})¶
- __doc__ = 'A three-vector of measured quantities'¶
- __eq__(other)¶
Return self==value.
- __firstlineno__ = 34¶
- __hash__ = None¶
- __match_args__ = ()¶
- __module__ = 'sasdata.metadata'¶
- __replace__(**changes)¶
- __repr__()¶
Return repr(self).
- __static_attributes__ = ()¶
- __weakref__¶
list of weak references to the object
- as_h5(f: Group)¶
Export data onto an HDF5 group
- sasdata.metadata.access_meta(obj: dataclass, key: str) Any | None¶
Use a string accessor to locate a key from within the data object.
The basic grammar of these accessors explicitly match the python syntax for accessing the data. For example, to access the name field within the object person, you would call access_meta(person, “.name”). Similarly, lists and dicts are access with square brackets.
> assert access_meta(person, ‘.name’) == person.name > assert access_meta(person, ‘.phone.home’) == person.phone.home > assert access_meta(person, ‘.addresses[0].postal_code’) == person.address[0].postal_code > assert access_meta(person, ‘.children[“Taylor”]’) == person.children[“Taylor”]
Obviously, when the accessor is know ahead of time, access_meta provides no benefit over directly retrieving the data. However, when a data structure is loaded at runtime (e.g. the metadata of a neutron scattering file), then it isn’t possible to know in advance the location of the specific value that the user desires. access_meta allows the user to provide the location at runtime.
This function returns None when the key is not a valid address for any data within the structure. Since the leaf could be any type that is not a list, dict, or dataclass, the return type of the function is Any | None.
The list of locations within a structure is given by the meta_tags function.
- sasdata.metadata.collect_tags(objs: list[dataclass]) TagCollection¶
Identify uniform and varying data within a groups of data objects
The resulting TagCollection contains every accessor string that is valid for every object in the objs list. For example, if obj.name is a string for every obj in objs, then the string “.name” will be present in one of the two sets in the tags collection.
To be more specific, if obj.name exists and has the same value for every obj in objs, the string “.name” will be included in the singular set. If there are at least two distinct values for obj.name, then “.name” will be in the variable set.
- sasdata.metadata.meta_tags(obj: dataclass) list[str]¶
Find all leaf accessors from a data object.
The function treats the passed in object as a tree. Lists, dicts, and dataclasses are all treated as branches on the tree and any other type is treated as a leaf. The function then returns a list of strings, where each string is a “path” from the root of the tree to one leaf. The structure of the path is designed to mimic the python code to access that specific leaf value.
These accessors allow us to treat accessing entries within a structure as first class values. This list can then be presented to the user to allow them to select specific information within the larger structure. This is particularly important when plotting against a specific date value within the structure.
Example:
- >@dataclass
- class Thermometer:
temperature: float units: str params: list
> item = Example() > item.temperature = 273 > item.units = “K” > item.old_values = [{‘date’: ‘2025-08-12’, ‘temperature’: 300’}] > assert meta_tags(item) = [‘.temperature’, ‘.units’, ‘.old_values[0][“date”]’, ‘.old_values[0][“temperature”]’]
The actual value of the leaf object specified by a path can be retrieved with the access_meta function.