From e97ef5157573603f17ba8a7b2fd7c06c1340000c Mon Sep 17 00:00:00 2001 From: kekeke21 Date: Wed, 10 Dec 2025 23:08:00 +0000 Subject: [PATCH 1/4] - restore rgb image from ismrmrd format as 6th enum of imagetype with alpha value - add maps as other choices of Imagetype --- cpp/mrd/CMakeLists.txt | 55 ++++---- cpp/mrd/binary/protocols.cc | 8 +- cpp/mrd/binary/protocols.h | 16 +-- cpp/mrd/hdf5/protocols.cc | 42 ++++-- cpp/mrd/hdf5/protocols.h | 4 +- cpp/mrd/ndjson/protocols.cc | 52 +++++++- cpp/mrd/ndjson/protocols.h | 16 +-- cpp/mrd/protocols.cc | 6 +- cpp/mrd/protocols.h | 8 -- cpp/mrd/types.h | 23 +++- .../+mrd/+binary/ImageHeaderSerializer.m | 2 +- .../+mrd/+binary/MrdNoiseCovarianceReader.m | 8 +- matlab/toolbox/+mrd/+binary/MrdReader.m | 8 +- matlab/toolbox/+mrd/AccelerationFactorType.m | 8 +- matlab/toolbox/+mrd/Acquisition.m | 14 +- matlab/toolbox/+mrd/AcquisitionBucket.m | 14 +- matlab/toolbox/+mrd/AcquisitionData.m | 8 ++ matlab/toolbox/+mrd/AcquisitionHeader.m | 42 +++--- .../+mrd/AcquisitionSystemInformationType.m | 24 ++-- matlab/toolbox/+mrd/AnyImage.m | 2 +- matlab/toolbox/+mrd/Array.m | 5 + matlab/toolbox/+mrd/ArrayComplexFloat.m | 8 ++ matlab/toolbox/+mrd/CoilLabelType.m | 8 +- matlab/toolbox/+mrd/DiffusionType.m | 8 +- matlab/toolbox/+mrd/EncodingCounters.m | 24 ++-- matlab/toolbox/+mrd/EncodingLimitsType.m | 40 +++--- matlab/toolbox/+mrd/EncodingSpaceType.m | 8 +- matlab/toolbox/+mrd/EncodingType.m | 18 +-- .../toolbox/+mrd/ExperimentalConditionsType.m | 6 +- matlab/toolbox/+mrd/FieldOfViewMm.m | 10 +- matlab/toolbox/+mrd/GradientDirectionType.m | 10 +- matlab/toolbox/+mrd/Header.m | 24 ++-- matlab/toolbox/+mrd/Image.m | 26 +--- matlab/toolbox/+mrd/ImageArray.m | 18 +-- matlab/toolbox/+mrd/ImageComplexDouble.m | 3 +- matlab/toolbox/+mrd/ImageComplexFloat.m | 3 +- matlab/toolbox/+mrd/ImageData.m | 5 + matlab/toolbox/+mrd/ImageDouble.m | 3 +- matlab/toolbox/+mrd/ImageFloat.m | 3 +- matlab/toolbox/+mrd/ImageHeader.m | 60 +++------ matlab/toolbox/+mrd/ImageInt16.m | 3 +- matlab/toolbox/+mrd/ImageInt32.m | 3 +- matlab/toolbox/+mrd/ImageMeta.m | 3 +- matlab/toolbox/+mrd/ImageMetaValue.m | 2 +- matlab/toolbox/+mrd/ImageType.m | 33 +++++ matlab/toolbox/+mrd/ImageUint16.m | 3 +- matlab/toolbox/+mrd/ImageUint32.m | 3 +- matlab/toolbox/+mrd/LimitType.m | 10 +- matlab/toolbox/+mrd/MatrixSizeType.m | 10 +- .../toolbox/+mrd/MeasurementDependencyType.m | 8 +- .../toolbox/+mrd/MeasurementInformationType.m | 30 ++--- .../+mrd/MrdNoiseCovarianceReaderBase.m | 9 +- matlab/toolbox/+mrd/MrdReaderBase.m | 9 +- matlab/toolbox/+mrd/MrdWriterBase.m | 2 +- matlab/toolbox/+mrd/MultibandSpacingType.m | 6 +- matlab/toolbox/+mrd/MultibandType.m | 14 +- matlab/toolbox/+mrd/NoiseCovariance.m | 16 +-- matlab/toolbox/+mrd/ParallelImagingType.m | 12 +- matlab/toolbox/+mrd/ReconAssembly.m | 8 +- matlab/toolbox/+mrd/ReconBuffer.m | 20 ++- matlab/toolbox/+mrd/ReconData.m | 6 +- .../+mrd/ReferencedImageSequenceType.m | 6 +- matlab/toolbox/+mrd/SamplingDescription.m | 14 +- matlab/toolbox/+mrd/SamplingLimits.m | 10 +- matlab/toolbox/+mrd/SequenceParametersType.m | 22 ++- matlab/toolbox/+mrd/StreamItem.m | 2 +- matlab/toolbox/+mrd/StudyInformationType.m | 20 ++- matlab/toolbox/+mrd/SubjectInformationType.m | 16 +-- matlab/toolbox/+mrd/ThreeDimensionalFloat.m | 10 +- matlab/toolbox/+mrd/TrajectoryData.m | 8 ++ .../toolbox/+mrd/TrajectoryDescriptionType.m | 14 +- matlab/toolbox/+mrd/UserParameterBase64Type.m | 8 +- matlab/toolbox/+mrd/UserParameterDoubleType.m | 8 +- matlab/toolbox/+mrd/UserParameterLongType.m | 8 +- matlab/toolbox/+mrd/UserParameterStringType.m | 8 +- matlab/toolbox/+mrd/UserParametersType.m | 12 +- matlab/toolbox/+mrd/Waveform.m | 32 +---- matlab/toolbox/+mrd/WaveformInformationType.m | 10 +- matlab/toolbox/+mrd/WaveformSamples.m | 5 + matlab/toolbox/+mrd/WaveformUint32.m | 3 +- matlab/toolbox/+yardl/+binary/MapSerializer.m | 8 +- matlab/toolbox/+yardl/Date.m | 8 +- matlab/toolbox/+yardl/DateTime.m | 8 +- matlab/toolbox/+yardl/Time.m | 8 +- matlab/toolbox/+yardl/Union.m | 4 - model/mrd_image.yml | 14 +- python/mrd/binary.py | 10 +- python/mrd/ndjson.py | 21 ++- python/mrd/protocols.py | 12 +- python/mrd/types.py | 125 ++++++++++-------- 90 files changed, 606 insertions(+), 688 deletions(-) create mode 100644 matlab/toolbox/+mrd/AcquisitionData.m create mode 100644 matlab/toolbox/+mrd/Array.m create mode 100644 matlab/toolbox/+mrd/ArrayComplexFloat.m create mode 100644 matlab/toolbox/+mrd/ImageData.m create mode 100644 matlab/toolbox/+mrd/TrajectoryData.m create mode 100644 matlab/toolbox/+mrd/WaveformSamples.m diff --git a/cpp/mrd/CMakeLists.txt b/cpp/mrd/CMakeLists.txt index d67a01c7..a12acf37 100644 --- a/cpp/mrd/CMakeLists.txt +++ b/cpp/mrd/CMakeLists.txt @@ -6,40 +6,35 @@ # target_link_libraries( mrd_generated) # add_subdirectory() -set(Mrd_GENERATED_SOURCES - protocols.cc - types.cc - binary/protocols.cc -) - -set(Mrd_GENERATED_LINK_LIBRARIES - xtensor - date::date -) - set(HOWARD_HINNANT_DATE_MINIMUM_VERSION "3.0.0") find_package(date ${HOWARD_HINNANT_DATE_MINIMUM_VERSION} REQUIRED) -set(XTENSOR_MINIMUM_VERSION "0.21.10") -find_package(xtensor ${XTENSOR_MINIMUM_VERSION} REQUIRED) - -option(Mrd_GENERATED_USE_HDF5 "Whether to use HDF5 in the generated code" ON) -if(Mrd_GENERATED_USE_HDF5) - set(HDF5_MINIMUM_VERSION "1.10.5") - find_package(HDF5 ${HDF5_MINIMUM_VERSION} REQUIRED COMPONENTS CXX) - - list(APPEND Mrd_GENERATED_SOURCES hdf5/protocols.cc) - list(APPEND Mrd_GENERATED_LINK_LIBRARIES HDF5::HDF5) +if(VCPKG_TARGET_TRIPLET) + set(HDF5_CXX_LIBRARIES hdf5::hdf5_cpp-shared) +else() + set(HDF5_CXX_LIBRARIES hdf5::hdf5_cpp) endif() -option(Mrd_GENERATED_USE_NDJSON "Whether to use NDJSON in the generated code" ON) -if(Mrd_GENERATED_USE_NDJSON) - set(NLOHMANN_JSON_MINIMUM_VERSION "3.11.1") - find_package(nlohmann_json ${NLOHMANN_JSON_MINIMUM_VERSION} REQUIRED) +set(HDF5_MINIMUM_VERSION "1.10.5") +find_package(HDF5 ${HDF5_MINIMUM_VERSION} REQUIRED COMPONENTS C CXX) - list(APPEND Mrd_GENERATED_SOURCES ndjson/protocols.cc) - list(APPEND Mrd_GENERATED_LINK_LIBRARIES nlohmann_json::nlohmann_json) -endif() +set(XTENSOR_MINIMUM_VERSION "0.21.10") +find_package(xtensor ${XTENSOR_MINIMUM_VERSION} REQUIRED) + +set(NLOHMANN_JSON_MINIMUM_VERSION "3.11.1") +find_package(nlohmann_json ${NLOHMANN_JSON_MINIMUM_VERSION} REQUIRED) +add_library(mrd_generated OBJECT + protocols.cc + types.cc + ndjson/protocols.cc + binary/protocols.cc + hdf5/protocols.cc +) -add_library(mrd_generated OBJECT ${Mrd_GENERATED_SOURCES}) -target_link_libraries(mrd_generated ${Mrd_GENERATED_LINK_LIBRARIES}) +target_link_libraries(mrd_generated + PUBLIC ${HDF5_C_LIBRARIES} + PUBLIC ${HDF5_CXX_LIBRARIES} + PUBLIC xtensor + PUBLIC date::date + PUBLIC nlohmann_json::nlohmann_json +) diff --git a/cpp/mrd/binary/protocols.cc b/cpp/mrd/binary/protocols.cc index 0c73ba12..035af5e4 100644 --- a/cpp/mrd/binary/protocols.cc +++ b/cpp/mrd/binary/protocols.cc @@ -2534,9 +2534,7 @@ bool MrdReader::ReadDataImpl(std::vector& values) { } void MrdReader::CloseImpl() { - if (!skip_completed_check_) { - stream_.VerifyFinished(); - } + stream_.VerifyFinished(); } void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance const& value) { @@ -2556,9 +2554,7 @@ void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReader::CloseImpl() { - if (!skip_completed_check_) { - stream_.VerifyFinished(); - } + stream_.VerifyFinished(); } } // namespace mrd::binary diff --git a/cpp/mrd/binary/protocols.h b/cpp/mrd/binary/protocols.h index 42e70e23..c51dcba5 100644 --- a/cpp/mrd/binary/protocols.h +++ b/cpp/mrd/binary/protocols.h @@ -38,11 +38,11 @@ class MrdWriter : public mrd::MrdWriterBase, yardl::binary::BinaryWriter { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, yardl::binary::BinaryReader { public: - MrdReader(std::istream& stream, bool skip_completed_check=false) - : mrd::MrdReaderBase(skip_completed_check), yardl::binary::BinaryReader(stream), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} + MrdReader(std::istream& stream) + : yardl::binary::BinaryReader(stream), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} - MrdReader(std::string file_name, bool skip_completed_check=false) - : mrd::MrdReaderBase(skip_completed_check), yardl::binary::BinaryReader(file_name), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} + MrdReader(std::string file_name) + : yardl::binary::BinaryReader(file_name), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} Version GetVersion() { return version_; } @@ -81,11 +81,11 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, yardl // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, yardl::binary::BinaryReader { public: - MrdNoiseCovarianceReader(std::istream& stream, bool skip_completed_check=false) - : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::binary::BinaryReader(stream), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} + MrdNoiseCovarianceReader(std::istream& stream) + : yardl::binary::BinaryReader(stream), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} - MrdNoiseCovarianceReader(std::string file_name, bool skip_completed_check=false) - : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::binary::BinaryReader(file_name), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} + MrdNoiseCovarianceReader(std::string file_name) + : yardl::binary::BinaryReader(file_name), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} Version GetVersion() { return version_; } diff --git a/cpp/mrd/hdf5/protocols.cc b/cpp/mrd/hdf5/protocols.cc index b333f6fd..10bf6e36 100644 --- a/cpp/mrd/hdf5/protocols.cc +++ b/cpp/mrd/hdf5/protocols.cc @@ -738,17 +738,39 @@ namespace { } [[maybe_unused]] H5::EnumType GetImageTypeHdf5Ddl() { - H5::EnumType t(H5::PredType::NATIVE_INT32); - int32_t i = 1; + H5::EnumType t(H5::PredType::NATIVE_UINT64); + uint64_t i = 1ULL; t.insert("magnitude", &i); - i = 2; + i = 2ULL; t.insert("phase", &i); - i = 3; + i = 3ULL; t.insert("real", &i); - i = 4; + i = 4ULL; t.insert("imag", &i); - i = 5; + i = 5ULL; t.insert("complex", &i); + i = 6ULL; + t.insert("rgbaMap", &i); + i = 7ULL; + t.insert("spinDensityMap", &i); + i = 8ULL; + t.insert("t1Map", &i); + i = 9ULL; + t.insert("t2Map", &i); + i = 10ULL; + t.insert("t2starMap", &i); + i = 11ULL; + t.insert("adcMap", &i); + i = 12ULL; + t.insert("b0Map", &i); + i = 13ULL; + t.insert("b1Map", &i); + i = 14ULL; + t.insert("sensitivityMap", &i); + i = 15ULL; + t.insert("gfactorMap", &i); + i = 16ULL; + t.insert("userMap", &i); return t; } @@ -2251,8 +2273,8 @@ void MrdWriter::Flush() { } } -MrdReader::MrdReader(std::string path, bool skip_completed_check) - : mrd::MrdReaderBase(skip_completed_check), yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "Mrd", schema_) { +MrdReader::MrdReader(std::string path) + : yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "Mrd", schema_) { } void MrdReader::ReadHeaderImpl(std::optional& value) { @@ -2354,8 +2376,8 @@ void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance con yardl::hdf5::WriteScalarDataset(group_, "noiseCovariance", mrd::hdf5::GetNoiseCovarianceHdf5Ddl(), value); } -MrdNoiseCovarianceReader::MrdNoiseCovarianceReader(std::string path, bool skip_completed_check) - : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "MrdNoiseCovariance", schema_) { +MrdNoiseCovarianceReader::MrdNoiseCovarianceReader(std::string path) + : yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "MrdNoiseCovariance", schema_) { } void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& value) { diff --git a/cpp/mrd/hdf5/protocols.h b/cpp/mrd/hdf5/protocols.h index 1822992f..25aed732 100644 --- a/cpp/mrd/hdf5/protocols.h +++ b/cpp/mrd/hdf5/protocols.h @@ -35,7 +35,7 @@ class MrdWriter : public mrd::MrdWriterBase, public yardl::hdf5::Hdf5Writer { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, public yardl::hdf5::Hdf5Reader { public: - MrdReader(std::string path, bool skip_completed_check=false); + MrdReader(std::string path); void ReadHeaderImpl(std::optional& value) override; @@ -61,7 +61,7 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, publi // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, public yardl::hdf5::Hdf5Reader { public: - MrdNoiseCovarianceReader(std::string path, bool skip_completed_check=false); + MrdNoiseCovarianceReader(std::string path); void ReadNoiseCovarianceImpl(mrd::NoiseCovariance& value) override; diff --git a/cpp/mrd/ndjson/protocols.cc b/cpp/mrd/ndjson/protocols.cc index 70357602..44ec640b 100644 --- a/cpp/mrd/ndjson/protocols.cc +++ b/cpp/mrd/ndjson/protocols.cc @@ -2542,6 +2542,17 @@ std::unordered_map const __ImageType_values = { {"real", mrd::ImageType::kReal}, {"imag", mrd::ImageType::kImag}, {"complex", mrd::ImageType::kComplex}, + {"rgbaMap", mrd::ImageType::kRgbaMap}, + {"spinDensityMap", mrd::ImageType::kSpinDensityMap}, + {"t1Map", mrd::ImageType::kT1Map}, + {"t2Map", mrd::ImageType::kT2Map}, + {"t2starMap", mrd::ImageType::kT2starMap}, + {"adcMap", mrd::ImageType::kAdcMap}, + {"b0Map", mrd::ImageType::kB0Map}, + {"b1Map", mrd::ImageType::kB1Map}, + {"sensitivityMap", mrd::ImageType::kSensitivityMap}, + {"gfactorMap", mrd::ImageType::kGfactorMap}, + {"userMap", mrd::ImageType::kUserMap}, }; } //namespace @@ -2562,6 +2573,39 @@ void to_json(ordered_json& j, mrd::ImageType const& value) { case mrd::ImageType::kComplex: j = "complex"; break; + case mrd::ImageType::kRgbaMap: + j = "rgbaMap"; + break; + case mrd::ImageType::kSpinDensityMap: + j = "spinDensityMap"; + break; + case mrd::ImageType::kT1Map: + j = "t1Map"; + break; + case mrd::ImageType::kT2Map: + j = "t2Map"; + break; + case mrd::ImageType::kT2starMap: + j = "t2starMap"; + break; + case mrd::ImageType::kAdcMap: + j = "adcMap"; + break; + case mrd::ImageType::kB0Map: + j = "b0Map"; + break; + case mrd::ImageType::kB1Map: + j = "b1Map"; + break; + case mrd::ImageType::kSensitivityMap: + j = "sensitivityMap"; + break; + case mrd::ImageType::kGfactorMap: + j = "gfactorMap"; + break; + case mrd::ImageType::kUserMap: + j = "userMap"; + break; default: using underlying_type = typename std::underlying_type::type; j = static_cast(value); @@ -3057,9 +3101,7 @@ bool MrdReader::ReadDataImpl(mrd::StreamItem& value) { } void MrdReader::CloseImpl() { - if (!skip_completed_check_) { - VerifyFinished(); - } + VerifyFinished(); } void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance const& value) { @@ -3079,9 +3121,7 @@ void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReader::CloseImpl() { - if (!skip_completed_check_) { - VerifyFinished(); - } + VerifyFinished(); } } // namespace mrd::ndjson diff --git a/cpp/mrd/ndjson/protocols.h b/cpp/mrd/ndjson/protocols.h index a6d21cb6..4486b4b6 100644 --- a/cpp/mrd/ndjson/protocols.h +++ b/cpp/mrd/ndjson/protocols.h @@ -37,12 +37,12 @@ class MrdWriter : public mrd::MrdWriterBase, yardl::ndjson::NDJsonWriter { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, yardl::ndjson::NDJsonReader { public: - MrdReader(std::istream& stream, bool skip_completed_check=false) - : mrd::MrdReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(stream, schema_) { + MrdReader(std::istream& stream) + : yardl::ndjson::NDJsonReader(stream, schema_) { } - MrdReader(std::string file_name, bool skip_completed_check=false) - : mrd::MrdReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(file_name, schema_) { + MrdReader(std::string file_name) + : yardl::ndjson::NDJsonReader(file_name, schema_) { } protected: @@ -74,12 +74,12 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, yardl // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, yardl::ndjson::NDJsonReader { public: - MrdNoiseCovarianceReader(std::istream& stream, bool skip_completed_check=false) - : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(stream, schema_) { + MrdNoiseCovarianceReader(std::istream& stream) + : yardl::ndjson::NDJsonReader(stream, schema_) { } - MrdNoiseCovarianceReader(std::string file_name, bool skip_completed_check=false) - : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(file_name, schema_) { + MrdNoiseCovarianceReader(std::string file_name) + : yardl::ndjson::NDJsonReader(file_name, schema_) { } protected: diff --git a/cpp/mrd/protocols.cc b/cpp/mrd/protocols.cc index 0040dccc..0f13df57 100644 --- a/cpp/mrd/protocols.cc +++ b/cpp/mrd/protocols.cc @@ -39,7 +39,7 @@ void MrdReaderBaseInvalidState(uint8_t attempted, uint8_t current) { } // namespace -std::string MrdWriterBase::schema_ = R"({"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]})"; +std::string MrdWriterBase::schema_ = R"({"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]})"; std::vector MrdWriterBase::previous_schemas_ = { }; @@ -174,7 +174,7 @@ bool MrdReaderBase::ReadDataImpl(std::vector& values) { } void MrdReaderBase::Close() { - if (!skip_completed_check_ && unlikely(state_ != 4)) { + if (unlikely(state_ != 4)) { if (state_ == 3) { state_ = 4; } else { @@ -282,7 +282,7 @@ void MrdNoiseCovarianceReaderBase::ReadNoiseCovariance(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReaderBase::Close() { - if (!skip_completed_check_ && unlikely(state_ != 2)) { + if (unlikely(state_ != 2)) { MrdNoiseCovarianceReaderBaseInvalidState(2, state_); } diff --git a/cpp/mrd/protocols.h b/cpp/mrd/protocols.h index bf3a269f..8a7a3061 100644 --- a/cpp/mrd/protocols.h +++ b/cpp/mrd/protocols.h @@ -56,8 +56,6 @@ class MrdWriterBase { // The MRD Protocol class MrdReaderBase { public: - MrdReaderBase(bool skip_completed_check = false): skip_completed_check_(skip_completed_check) {} - // Ordinal 0. void ReadHeader(std::optional& value); @@ -85,8 +83,6 @@ class MrdReaderBase { static Version VersionFromSchema(const std::string& schema); - bool skip_completed_check_; - private: uint8_t state_ = 0; }; @@ -126,8 +122,6 @@ class MrdNoiseCovarianceWriterBase { // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReaderBase { public: - MrdNoiseCovarianceReaderBase(bool skip_completed_check = false): skip_completed_check_(skip_completed_check) {} - // Ordinal 0. void ReadNoiseCovariance(mrd::NoiseCovariance& value); @@ -147,8 +141,6 @@ class MrdNoiseCovarianceReaderBase { static Version VersionFromSchema(const std::string& schema); - bool skip_completed_check_; - private: uint8_t state_ = 0; }; diff --git a/cpp/mrd/types.h b/cpp/mrd/types.h index 6153d206..756e2fcf 100644 --- a/cpp/mrd/types.h +++ b/cpp/mrd/types.h @@ -866,12 +866,23 @@ struct ImageFlags : yardl::BaseFlags { static const ImageFlags kLastInSet; }; -enum class ImageType { - kMagnitude = 1, - kPhase = 2, - kReal = 3, - kImag = 4, - kComplex = 5, +enum class ImageType : uint64_t { + kMagnitude = 1ULL, + kPhase = 2ULL, + kReal = 3ULL, + kImag = 4ULL, + kComplex = 5ULL, + kRgbaMap = 6ULL, + kSpinDensityMap = 7ULL, + kT1Map = 8ULL, + kT2Map = 9ULL, + kT2starMap = 10ULL, + kAdcMap = 11ULL, + kB0Map = 12ULL, + kB1Map = 13ULL, + kSensitivityMap = 14ULL, + kGfactorMap = 15ULL, + kUserMap = 16ULL, }; template diff --git a/matlab/toolbox/+mrd/+binary/ImageHeaderSerializer.m b/matlab/toolbox/+mrd/+binary/ImageHeaderSerializer.m index edf1b775..069e1159 100644 --- a/matlab/toolbox/+mrd/+binary/ImageHeaderSerializer.m +++ b/matlab/toolbox/+mrd/+binary/ImageHeaderSerializer.m @@ -19,7 +19,7 @@ field_serializers{14} = yardl.binary.OptionalSerializer(yardl.binary.Uint32Serializer); field_serializers{15} = yardl.binary.OptionalSerializer(yardl.binary.Uint64Serializer); field_serializers{16} = yardl.binary.VectorSerializer(yardl.binary.Uint64Serializer); - field_serializers{17} = yardl.binary.EnumSerializer('mrd.ImageType', @mrd.ImageType, yardl.binary.Int32Serializer); + field_serializers{17} = yardl.binary.EnumSerializer('mrd.ImageType', @mrd.ImageType, yardl.binary.Uint64Serializer); field_serializers{18} = yardl.binary.OptionalSerializer(yardl.binary.Uint32Serializer); field_serializers{19} = yardl.binary.OptionalSerializer(yardl.binary.Uint32Serializer); field_serializers{20} = yardl.binary.VectorSerializer(yardl.binary.Int32Serializer); diff --git a/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m b/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m index 9660b873..5d0680f3 100644 --- a/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m +++ b/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m @@ -8,12 +8,8 @@ end methods - function self = MrdNoiseCovarianceReader(filename, options) - arguments - filename (1,1) string - options.skip_completed_check (1,1) logical = false - end - self@mrd.MrdNoiseCovarianceReaderBase(skip_completed_check=options.skip_completed_check); + function self = MrdNoiseCovarianceReader(filename) + self@mrd.MrdNoiseCovarianceReaderBase(); self@yardl.binary.BinaryProtocolReader(filename, mrd.MrdNoiseCovarianceReaderBase.schema); self.noise_covariance_serializer = mrd.binary.NoiseCovarianceSerializer(); end diff --git a/matlab/toolbox/+mrd/+binary/MrdReader.m b/matlab/toolbox/+mrd/+binary/MrdReader.m index 83e7fd1d..c43433bc 100644 --- a/matlab/toolbox/+mrd/+binary/MrdReader.m +++ b/matlab/toolbox/+mrd/+binary/MrdReader.m @@ -9,12 +9,8 @@ end methods - function self = MrdReader(filename, options) - arguments - filename (1,1) string - options.skip_completed_check (1,1) logical = false - end - self@mrd.MrdReaderBase(skip_completed_check=options.skip_completed_check); + function self = MrdReader(filename) + self@mrd.MrdReaderBase(); self@yardl.binary.BinaryProtocolReader(filename, mrd.MrdReaderBase.schema); self.header_serializer = yardl.binary.OptionalSerializer(mrd.binary.HeaderSerializer()); self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer()}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray})); diff --git a/matlab/toolbox/+mrd/AccelerationFactorType.m b/matlab/toolbox/+mrd/AccelerationFactorType.m index ec4cab5e..f2f6e323 100644 --- a/matlab/toolbox/+mrd/AccelerationFactorType.m +++ b/matlab/toolbox/+mrd/AccelerationFactorType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.AccelerationFactorType") && ... - isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... - isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}); + isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... + isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/Acquisition.m b/matlab/toolbox/+mrd/Acquisition.m index c2c0bdad..043d21a5 100644 --- a/matlab/toolbox/+mrd/Acquisition.m +++ b/matlab/toolbox/+mrd/Acquisition.m @@ -14,8 +14,8 @@ function self = Acquisition(kwargs) arguments kwargs.head = mrd.AcquisitionHeader(); - kwargs.data = single.empty(); - kwargs.trajectory = single.empty(); + kwargs.data = single.empty(0, 0); + kwargs.trajectory = single.empty(0, 0); end self.head = kwargs.head; self.data = kwargs.data; @@ -51,18 +51,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.Acquisition") && ... - isequal({self.head}, {other.head}) && ... - isequal({self.data}, {other.data}) && ... - isequal({self.trajectory}, {other.trajectory}); + isequal(self.head, other.head) && ... + isequal(self.data, other.data) && ... + isequal(self.trajectory, other.trajectory); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionBucket.m b/matlab/toolbox/+mrd/AcquisitionBucket.m index 19cc3458..fb649449 100644 --- a/matlab/toolbox/+mrd/AcquisitionBucket.m +++ b/matlab/toolbox/+mrd/AcquisitionBucket.m @@ -28,20 +28,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionBucket") && ... - isequal({self.data}, {other.data}) && ... - isequal({self.ref}, {other.ref}) && ... - isequal({self.datastats}, {other.datastats}) && ... - isequal({self.refstats}, {other.refstats}) && ... - isequal({self.waveforms}, {other.waveforms}); + isequal(self.data, other.data) && ... + isequal(self.ref, other.ref) && ... + isequal(self.datastats, other.datastats) && ... + isequal(self.refstats, other.refstats) && ... + isequal(self.waveforms, other.waveforms); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionData.m b/matlab/toolbox/+mrd/AcquisitionData.m new file mode 100644 index 00000000..26275828 --- /dev/null +++ b/matlab/toolbox/+mrd/AcquisitionData.m @@ -0,0 +1,8 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = AcquisitionData(array) + arguments + array single + end + a = array; +end diff --git a/matlab/toolbox/+mrd/AcquisitionHeader.m b/matlab/toolbox/+mrd/AcquisitionHeader.m index 1a40e09d..6c3af8e6 100644 --- a/matlab/toolbox/+mrd/AcquisitionHeader.m +++ b/matlab/toolbox/+mrd/AcquisitionHeader.m @@ -91,34 +91,30 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionHeader") && ... - isequal({self.flags}, {other.flags}) && ... - isequal({self.idx}, {other.idx}) && ... - isequal({self.measurement_uid}, {other.measurement_uid}) && ... - isequal({self.scan_counter}, {other.scan_counter}) && ... - isequal({self.acquisition_time_stamp_ns}, {other.acquisition_time_stamp_ns}) && ... - isequal({self.physiology_time_stamp_ns}, {other.physiology_time_stamp_ns}) && ... - isequal({self.channel_order}, {other.channel_order}) && ... - isequal({self.discard_pre}, {other.discard_pre}) && ... - isequal({self.discard_post}, {other.discard_post}) && ... - isequal({self.center_sample}, {other.center_sample}) && ... - isequal({self.encoding_space_ref}, {other.encoding_space_ref}) && ... - isequal({self.sample_time_ns}, {other.sample_time_ns}) && ... - isequal({self.position}, {other.position}) && ... - isequal({self.read_dir}, {other.read_dir}) && ... - isequal({self.phase_dir}, {other.phase_dir}) && ... - isequal({self.slice_dir}, {other.slice_dir}) && ... - isequal({self.patient_table_position}, {other.patient_table_position}) && ... - isequal({self.user_int}, {other.user_int}) && ... - isequal({self.user_float}, {other.user_float}); + isequal(self.flags, other.flags) && ... + isequal(self.idx, other.idx) && ... + isequal(self.measurement_uid, other.measurement_uid) && ... + isequal(self.scan_counter, other.scan_counter) && ... + isequal(self.acquisition_time_stamp_ns, other.acquisition_time_stamp_ns) && ... + isequal(self.physiology_time_stamp_ns, other.physiology_time_stamp_ns) && ... + isequal(self.channel_order, other.channel_order) && ... + isequal(self.discard_pre, other.discard_pre) && ... + isequal(self.discard_post, other.discard_post) && ... + isequal(self.center_sample, other.center_sample) && ... + isequal(self.encoding_space_ref, other.encoding_space_ref) && ... + isequal(self.sample_time_ns, other.sample_time_ns) && ... + isequal(self.position, other.position) && ... + isequal(self.read_dir, other.read_dir) && ... + isequal(self.phase_dir, other.phase_dir) && ... + isequal(self.slice_dir, other.slice_dir) && ... + isequal(self.patient_table_position, other.patient_table_position) && ... + isequal(self.user_int, other.user_int) && ... + isequal(self.user_float, other.user_float); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m b/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m index 6f1e809e..c09b5f43 100644 --- a/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m +++ b/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m @@ -43,25 +43,21 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionSystemInformationType") && ... - isequal({self.system_vendor}, {other.system_vendor}) && ... - isequal({self.system_model}, {other.system_model}) && ... - isequal({self.system_field_strength_t}, {other.system_field_strength_t}) && ... - isequal({self.relative_receiver_noise_bandwidth}, {other.relative_receiver_noise_bandwidth}) && ... - isequal({self.receiver_channels}, {other.receiver_channels}) && ... - isequal({self.coil_label}, {other.coil_label}) && ... - isequal({self.institution_name}, {other.institution_name}) && ... - isequal({self.station_name}, {other.station_name}) && ... - isequal({self.device_id}, {other.device_id}) && ... - isequal({self.device_serial_number}, {other.device_serial_number}); + isequal(self.system_vendor, other.system_vendor) && ... + isequal(self.system_model, other.system_model) && ... + isequal(self.system_field_strength_t, other.system_field_strength_t) && ... + isequal(self.relative_receiver_noise_bandwidth, other.relative_receiver_noise_bandwidth) && ... + isequal(self.receiver_channels, other.receiver_channels) && ... + isequal(self.coil_label, other.coil_label) && ... + isequal(self.institution_name, other.institution_name) && ... + isequal(self.station_name, other.station_name) && ... + isequal(self.device_id, other.device_id) && ... + isequal(self.device_serial_number, other.device_serial_number); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/AnyImage.m b/matlab/toolbox/+mrd/AnyImage.m index 1d41f5bb..a3aa9f4a 100644 --- a/matlab/toolbox/+mrd/AnyImage.m +++ b/matlab/toolbox/+mrd/AnyImage.m @@ -82,7 +82,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.AnyImage") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); + eq = isa(other, "mrd.AnyImage") && isequal(self.index, other.index) && isequal(self.value, other.value); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/Array.m b/matlab/toolbox/+mrd/Array.m new file mode 100644 index 00000000..ce689e38 --- /dev/null +++ b/matlab/toolbox/+mrd/Array.m @@ -0,0 +1,5 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = Array(array) + a = array; +end diff --git a/matlab/toolbox/+mrd/ArrayComplexFloat.m b/matlab/toolbox/+mrd/ArrayComplexFloat.m new file mode 100644 index 00000000..000318b8 --- /dev/null +++ b/matlab/toolbox/+mrd/ArrayComplexFloat.m @@ -0,0 +1,8 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = ArrayComplexFloat(array) + arguments + array single + end + a = array; +end diff --git a/matlab/toolbox/+mrd/CoilLabelType.m b/matlab/toolbox/+mrd/CoilLabelType.m index 722f0e8e..6f2e5c7d 100644 --- a/matlab/toolbox/+mrd/CoilLabelType.m +++ b/matlab/toolbox/+mrd/CoilLabelType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.CoilLabelType") && ... - isequal({self.coil_number}, {other.coil_number}) && ... - isequal({self.coil_name}, {other.coil_name}); + isequal(self.coil_number, other.coil_number) && ... + isequal(self.coil_name, other.coil_name); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/DiffusionType.m b/matlab/toolbox/+mrd/DiffusionType.m index fa4d4a6d..b799b8d5 100644 --- a/matlab/toolbox/+mrd/DiffusionType.m +++ b/matlab/toolbox/+mrd/DiffusionType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.DiffusionType") && ... - isequal({self.gradient_direction}, {other.gradient_direction}) && ... - isequal({self.bvalue}, {other.bvalue}); + isequal(self.gradient_direction, other.gradient_direction) && ... + isequal(self.bvalue, other.bvalue); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingCounters.m b/matlab/toolbox/+mrd/EncodingCounters.m index 1515142e..5b4d13c8 100644 --- a/matlab/toolbox/+mrd/EncodingCounters.m +++ b/matlab/toolbox/+mrd/EncodingCounters.m @@ -53,25 +53,21 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingCounters") && ... - isequal({self.kspace_encode_step_1}, {other.kspace_encode_step_1}) && ... - isequal({self.kspace_encode_step_2}, {other.kspace_encode_step_2}) && ... - isequal({self.average}, {other.average}) && ... - isequal({self.slice}, {other.slice}) && ... - isequal({self.contrast}, {other.contrast}) && ... - isequal({self.phase}, {other.phase}) && ... - isequal({self.repetition}, {other.repetition}) && ... - isequal({self.set}, {other.set}) && ... - isequal({self.segment}, {other.segment}) && ... - isequal({self.user}, {other.user}); + isequal(self.kspace_encode_step_1, other.kspace_encode_step_1) && ... + isequal(self.kspace_encode_step_2, other.kspace_encode_step_2) && ... + isequal(self.average, other.average) && ... + isequal(self.slice, other.slice) && ... + isequal(self.contrast, other.contrast) && ... + isequal(self.phase, other.phase) && ... + isequal(self.repetition, other.repetition) && ... + isequal(self.set, other.set) && ... + isequal(self.segment, other.segment) && ... + isequal(self.user, other.user); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingLimitsType.m b/matlab/toolbox/+mrd/EncodingLimitsType.m index 2b65cd06..ab9fb103 100644 --- a/matlab/toolbox/+mrd/EncodingLimitsType.m +++ b/matlab/toolbox/+mrd/EncodingLimitsType.m @@ -67,33 +67,29 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingLimitsType") && ... - isequal({self.kspace_encoding_step_0}, {other.kspace_encoding_step_0}) && ... - isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... - isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}) && ... - isequal({self.average}, {other.average}) && ... - isequal({self.slice}, {other.slice}) && ... - isequal({self.contrast}, {other.contrast}) && ... - isequal({self.phase}, {other.phase}) && ... - isequal({self.repetition}, {other.repetition}) && ... - isequal({self.set}, {other.set}) && ... - isequal({self.segment}, {other.segment}) && ... - isequal({self.user_0}, {other.user_0}) && ... - isequal({self.user_1}, {other.user_1}) && ... - isequal({self.user_2}, {other.user_2}) && ... - isequal({self.user_3}, {other.user_3}) && ... - isequal({self.user_4}, {other.user_4}) && ... - isequal({self.user_5}, {other.user_5}) && ... - isequal({self.user_6}, {other.user_6}) && ... - isequal({self.user_7}, {other.user_7}); + isequal(self.kspace_encoding_step_0, other.kspace_encoding_step_0) && ... + isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... + isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2) && ... + isequal(self.average, other.average) && ... + isequal(self.slice, other.slice) && ... + isequal(self.contrast, other.contrast) && ... + isequal(self.phase, other.phase) && ... + isequal(self.repetition, other.repetition) && ... + isequal(self.set, other.set) && ... + isequal(self.segment, other.segment) && ... + isequal(self.user_0, other.user_0) && ... + isequal(self.user_1, other.user_1) && ... + isequal(self.user_2, other.user_2) && ... + isequal(self.user_3, other.user_3) && ... + isequal(self.user_4, other.user_4) && ... + isequal(self.user_5, other.user_5) && ... + isequal(self.user_6, other.user_6) && ... + isequal(self.user_7, other.user_7); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingSpaceType.m b/matlab/toolbox/+mrd/EncodingSpaceType.m index af91e407..98405744 100644 --- a/matlab/toolbox/+mrd/EncodingSpaceType.m +++ b/matlab/toolbox/+mrd/EncodingSpaceType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingSpaceType") && ... - isequal({self.matrix_size}, {other.matrix_size}) && ... - isequal({self.field_of_view_mm}, {other.field_of_view_mm}); + isequal(self.matrix_size, other.matrix_size) && ... + isequal(self.field_of_view_mm, other.field_of_view_mm); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingType.m b/matlab/toolbox/+mrd/EncodingType.m index dc551d89..8d2c38fb 100644 --- a/matlab/toolbox/+mrd/EncodingType.m +++ b/matlab/toolbox/+mrd/EncodingType.m @@ -34,22 +34,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingType") && ... - isequal({self.encoded_space}, {other.encoded_space}) && ... - isequal({self.recon_space}, {other.recon_space}) && ... - isequal({self.encoding_limits}, {other.encoding_limits}) && ... - isequal({self.trajectory}, {other.trajectory}) && ... - isequal({self.trajectory_description}, {other.trajectory_description}) && ... - isequal({self.parallel_imaging}, {other.parallel_imaging}) && ... - isequal({self.echo_train_length}, {other.echo_train_length}); + isequal(self.encoded_space, other.encoded_space) && ... + isequal(self.recon_space, other.recon_space) && ... + isequal(self.encoding_limits, other.encoding_limits) && ... + isequal(self.trajectory, other.trajectory) && ... + isequal(self.trajectory_description, other.trajectory_description) && ... + isequal(self.parallel_imaging, other.parallel_imaging) && ... + isequal(self.echo_train_length, other.echo_train_length); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ExperimentalConditionsType.m b/matlab/toolbox/+mrd/ExperimentalConditionsType.m index 0537c66b..b943f71d 100644 --- a/matlab/toolbox/+mrd/ExperimentalConditionsType.m +++ b/matlab/toolbox/+mrd/ExperimentalConditionsType.m @@ -16,16 +16,12 @@ function res = eq(self, other) res = ... isa(other, "mrd.ExperimentalConditionsType") && ... - isequal({self.h1resonance_frequency_hz}, {other.h1resonance_frequency_hz}); + isequal(self.h1resonance_frequency_hz, other.h1resonance_frequency_hz); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/FieldOfViewMm.m b/matlab/toolbox/+mrd/FieldOfViewMm.m index 918b46f1..ea000991 100644 --- a/matlab/toolbox/+mrd/FieldOfViewMm.m +++ b/matlab/toolbox/+mrd/FieldOfViewMm.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.FieldOfViewMm") && ... - isequal({self.x}, {other.x}) && ... - isequal({self.y}, {other.y}) && ... - isequal({self.z}, {other.z}); + isequal(self.x, other.x) && ... + isequal(self.y, other.y) && ... + isequal(self.z, other.z); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/GradientDirectionType.m b/matlab/toolbox/+mrd/GradientDirectionType.m index a3b6a7fa..5add80d0 100644 --- a/matlab/toolbox/+mrd/GradientDirectionType.m +++ b/matlab/toolbox/+mrd/GradientDirectionType.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.GradientDirectionType") && ... - isequal({self.rl}, {other.rl}) && ... - isequal({self.ap}, {other.ap}) && ... - isequal({self.fh}, {other.fh}); + isequal(self.rl, other.rl) && ... + isequal(self.ap, other.ap) && ... + isequal(self.fh, other.fh); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/Header.m b/matlab/toolbox/+mrd/Header.m index daf15882..856d4692 100644 --- a/matlab/toolbox/+mrd/Header.m +++ b/matlab/toolbox/+mrd/Header.m @@ -43,25 +43,21 @@ function res = eq(self, other) res = ... isa(other, "mrd.Header") && ... - isequal({self.version}, {other.version}) && ... - isequal({self.subject_information}, {other.subject_information}) && ... - isequal({self.study_information}, {other.study_information}) && ... - isequal({self.measurement_information}, {other.measurement_information}) && ... - isequal({self.acquisition_system_information}, {other.acquisition_system_information}) && ... - isequal({self.experimental_conditions}, {other.experimental_conditions}) && ... - isequal({self.encoding}, {other.encoding}) && ... - isequal({self.sequence_parameters}, {other.sequence_parameters}) && ... - isequal({self.user_parameters}, {other.user_parameters}) && ... - isequal({self.waveform_information}, {other.waveform_information}); + isequal(self.version, other.version) && ... + isequal(self.subject_information, other.subject_information) && ... + isequal(self.study_information, other.study_information) && ... + isequal(self.measurement_information, other.measurement_information) && ... + isequal(self.acquisition_system_information, other.acquisition_system_information) && ... + isequal(self.experimental_conditions, other.experimental_conditions) && ... + isequal(self.encoding, other.encoding) && ... + isequal(self.sequence_parameters, other.sequence_parameters) && ... + isequal(self.user_parameters, other.user_parameters) && ... + isequal(self.waveform_information, other.waveform_information); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/Image.m b/matlab/toolbox/+mrd/Image.m index 7869313a..bd2f37a6 100644 --- a/matlab/toolbox/+mrd/Image.m +++ b/matlab/toolbox/+mrd/Image.m @@ -15,7 +15,7 @@ arguments kwargs.head; kwargs.data; - kwargs.meta = yardl.Map; + kwargs.meta = dictionary; end if ~isfield(kwargs, "head") throw(yardl.TypeError("Missing required keyword argument 'head'")) @@ -52,32 +52,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.Image") && ... - isequal({self.head}, {other.head}) && ... - isequal({self.data}, {other.data}) && ... - isequal({self.meta}, {other.meta}); + isequal(self.head, other.head) && ... + isequal(self.data, other.data) && ... + isequal(self.meta, other.meta); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end - methods (Static) - function z = zeros(varargin) - elem = mrd.Image(head=yardl.None, data=yardl.None); - if nargin == 0 - z = elem; - return; - end - sz = [varargin{:}]; - if isscalar(sz) - sz = [sz, sz]; - end - z = reshape(repelem(elem, prod(sz)), sz); - end - end end diff --git a/matlab/toolbox/+mrd/ImageArray.m b/matlab/toolbox/+mrd/ImageArray.m index 2484b5c9..b78621fb 100644 --- a/matlab/toolbox/+mrd/ImageArray.m +++ b/matlab/toolbox/+mrd/ImageArray.m @@ -11,9 +11,9 @@ methods function self = ImageArray(kwargs) arguments - kwargs.data = single.empty(); - kwargs.headers = mrd.ImageHeader.empty(); - kwargs.meta = mrd.ImageMeta.empty(); + kwargs.data = single.empty(0, 0, 0, 0, 0, 0, 0); + kwargs.headers = mrd.ImageHeader.empty(0, 0, 0); + kwargs.meta = mrd.ImageMeta.empty(0, 0, 0); kwargs.waveforms = mrd.WaveformUint32.empty(); end self.data = kwargs.data; @@ -25,19 +25,15 @@ function res = eq(self, other) res = ... isa(other, "mrd.ImageArray") && ... - isequal({self.data}, {other.data}) && ... - isequal({self.headers}, {other.headers}) && ... - isequal({self.meta}, {other.meta}) && ... - isequal({self.waveforms}, {other.waveforms}); + isequal(self.data, other.data) && ... + isequal(self.headers, other.headers) && ... + isequal(self.meta, other.meta) && ... + isequal(self.waveforms, other.waveforms); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ImageComplexDouble.m b/matlab/toolbox/+mrd/ImageComplexDouble.m index 7eb3397e..7333478c 100644 --- a/matlab/toolbox/+mrd/ImageComplexDouble.m +++ b/matlab/toolbox/+mrd/ImageComplexDouble.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageComplexDouble < mrd.Image +function c = ImageComplexDouble(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageComplexFloat.m b/matlab/toolbox/+mrd/ImageComplexFloat.m index 62f86c29..e6d0b0f7 100644 --- a/matlab/toolbox/+mrd/ImageComplexFloat.m +++ b/matlab/toolbox/+mrd/ImageComplexFloat.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageComplexFloat < mrd.Image +function c = ImageComplexFloat(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageData.m b/matlab/toolbox/+mrd/ImageData.m new file mode 100644 index 00000000..2527eac5 --- /dev/null +++ b/matlab/toolbox/+mrd/ImageData.m @@ -0,0 +1,5 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = ImageData(array) + a = array; +end diff --git a/matlab/toolbox/+mrd/ImageDouble.m b/matlab/toolbox/+mrd/ImageDouble.m index eae610ca..3a645f83 100644 --- a/matlab/toolbox/+mrd/ImageDouble.m +++ b/matlab/toolbox/+mrd/ImageDouble.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageDouble < mrd.Image +function c = ImageDouble(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageFloat.m b/matlab/toolbox/+mrd/ImageFloat.m index 0e00d008..ef7cffd7 100644 --- a/matlab/toolbox/+mrd/ImageFloat.m +++ b/matlab/toolbox/+mrd/ImageFloat.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageFloat < mrd.Image +function c = ImageFloat(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageHeader.m b/matlab/toolbox/+mrd/ImageHeader.m index 5667c23b..9556abd6 100644 --- a/matlab/toolbox/+mrd/ImageHeader.m +++ b/matlab/toolbox/+mrd/ImageHeader.m @@ -100,50 +100,32 @@ function res = eq(self, other) res = ... isa(other, "mrd.ImageHeader") && ... - isequal({self.flags}, {other.flags}) && ... - isequal({self.measurement_uid}, {other.measurement_uid}) && ... - isequal({self.field_of_view}, {other.field_of_view}) && ... - isequal({self.position}, {other.position}) && ... - isequal({self.col_dir}, {other.col_dir}) && ... - isequal({self.line_dir}, {other.line_dir}) && ... - isequal({self.slice_dir}, {other.slice_dir}) && ... - isequal({self.patient_table_position}, {other.patient_table_position}) && ... - isequal({self.average}, {other.average}) && ... - isequal({self.slice}, {other.slice}) && ... - isequal({self.contrast}, {other.contrast}) && ... - isequal({self.phase}, {other.phase}) && ... - isequal({self.repetition}, {other.repetition}) && ... - isequal({self.set}, {other.set}) && ... - isequal({self.acquisition_time_stamp_ns}, {other.acquisition_time_stamp_ns}) && ... - isequal({self.physiology_time_stamp_ns}, {other.physiology_time_stamp_ns}) && ... - isequal({self.image_type}, {other.image_type}) && ... - isequal({self.image_index}, {other.image_index}) && ... - isequal({self.image_series_index}, {other.image_series_index}) && ... - isequal({self.user_int}, {other.user_int}) && ... - isequal({self.user_float}, {other.user_float}); + isequal(self.flags, other.flags) && ... + isequal(self.measurement_uid, other.measurement_uid) && ... + isequal(self.field_of_view, other.field_of_view) && ... + isequal(self.position, other.position) && ... + isequal(self.col_dir, other.col_dir) && ... + isequal(self.line_dir, other.line_dir) && ... + isequal(self.slice_dir, other.slice_dir) && ... + isequal(self.patient_table_position, other.patient_table_position) && ... + isequal(self.average, other.average) && ... + isequal(self.slice, other.slice) && ... + isequal(self.contrast, other.contrast) && ... + isequal(self.phase, other.phase) && ... + isequal(self.repetition, other.repetition) && ... + isequal(self.set, other.set) && ... + isequal(self.acquisition_time_stamp_ns, other.acquisition_time_stamp_ns) && ... + isequal(self.physiology_time_stamp_ns, other.physiology_time_stamp_ns) && ... + isequal(self.image_type, other.image_type) && ... + isequal(self.image_index, other.image_index) && ... + isequal(self.image_series_index, other.image_series_index) && ... + isequal(self.user_int, other.user_int) && ... + isequal(self.user_float, other.user_float); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end - methods (Static) - function z = zeros(varargin) - elem = mrd.ImageHeader(image_type=yardl.None); - if nargin == 0 - z = elem; - return; - end - sz = [varargin{:}]; - if isscalar(sz) - sz = [sz, sz]; - end - z = reshape(repelem(elem, prod(sz)), sz); - end - end end diff --git a/matlab/toolbox/+mrd/ImageInt16.m b/matlab/toolbox/+mrd/ImageInt16.m index 20694c34..831b66e1 100644 --- a/matlab/toolbox/+mrd/ImageInt16.m +++ b/matlab/toolbox/+mrd/ImageInt16.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageInt16 < mrd.Image +function c = ImageInt16(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageInt32.m b/matlab/toolbox/+mrd/ImageInt32.m index 1021d20d..d4ee4eb5 100644 --- a/matlab/toolbox/+mrd/ImageInt32.m +++ b/matlab/toolbox/+mrd/ImageInt32.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageInt32 < mrd.Image +function c = ImageInt32(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageMeta.m b/matlab/toolbox/+mrd/ImageMeta.m index 98ae909c..d87112a8 100644 --- a/matlab/toolbox/+mrd/ImageMeta.m +++ b/matlab/toolbox/+mrd/ImageMeta.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageMeta < yardl.Map +function m = ImageMeta(varargin) + m = dictionary(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageMetaValue.m b/matlab/toolbox/+mrd/ImageMetaValue.m index c09285ca..90cddec1 100644 --- a/matlab/toolbox/+mrd/ImageMetaValue.m +++ b/matlab/toolbox/+mrd/ImageMetaValue.m @@ -42,7 +42,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.ImageMetaValue") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); + eq = isa(other, "mrd.ImageMetaValue") && isequal(self.index, other.index) && isequal(self.value, other.value); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/ImageType.m b/matlab/toolbox/+mrd/ImageType.m index 46d7be05..5d82f69b 100644 --- a/matlab/toolbox/+mrd/ImageType.m +++ b/matlab/toolbox/+mrd/ImageType.m @@ -17,6 +17,39 @@ function v = COMPLEX v = mrd.ImageType(5); end + function v = RGBA_MAP + v = mrd.ImageType(6); + end + function v = SPIN_DENSITY_MAP + v = mrd.ImageType(7); + end + function v = T1_MAP + v = mrd.ImageType(8); + end + function v = T2_MAP + v = mrd.ImageType(9); + end + function v = T2STAR_MAP + v = mrd.ImageType(10); + end + function v = ADC_MAP + v = mrd.ImageType(11); + end + function v = B0_MAP + v = mrd.ImageType(12); + end + function v = B1_MAP + v = mrd.ImageType(13); + end + function v = SENSITIVITY_MAP + v = mrd.ImageType(14); + end + function v = GFACTOR_MAP + v = mrd.ImageType(15); + end + function v = USER_MAP + v = mrd.ImageType(16); + end function z = zeros(varargin) elem = mrd.ImageType(0); diff --git a/matlab/toolbox/+mrd/ImageUint16.m b/matlab/toolbox/+mrd/ImageUint16.m index 66e4cc58..d1488c7e 100644 --- a/matlab/toolbox/+mrd/ImageUint16.m +++ b/matlab/toolbox/+mrd/ImageUint16.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageUint16 < mrd.Image +function c = ImageUint16(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/ImageUint32.m b/matlab/toolbox/+mrd/ImageUint32.m index bc0aa907..7b81e088 100644 --- a/matlab/toolbox/+mrd/ImageUint32.m +++ b/matlab/toolbox/+mrd/ImageUint32.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef ImageUint32 < mrd.Image +function c = ImageUint32(varargin) + c = mrd.Image(varargin{:}); end diff --git a/matlab/toolbox/+mrd/LimitType.m b/matlab/toolbox/+mrd/LimitType.m index b589b272..fbdffb90 100644 --- a/matlab/toolbox/+mrd/LimitType.m +++ b/matlab/toolbox/+mrd/LimitType.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.LimitType") && ... - isequal({self.minimum}, {other.minimum}) && ... - isequal({self.maximum}, {other.maximum}) && ... - isequal({self.center}, {other.center}); + isequal(self.minimum, other.minimum) && ... + isequal(self.maximum, other.maximum) && ... + isequal(self.center, other.center); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/MatrixSizeType.m b/matlab/toolbox/+mrd/MatrixSizeType.m index d089ab88..fde97bdb 100644 --- a/matlab/toolbox/+mrd/MatrixSizeType.m +++ b/matlab/toolbox/+mrd/MatrixSizeType.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.MatrixSizeType") && ... - isequal({self.x}, {other.x}) && ... - isequal({self.y}, {other.y}) && ... - isequal({self.z}, {other.z}); + isequal(self.x, other.x) && ... + isequal(self.y, other.y) && ... + isequal(self.z, other.z); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/MeasurementDependencyType.m b/matlab/toolbox/+mrd/MeasurementDependencyType.m index 851066cf..68e3b4b7 100644 --- a/matlab/toolbox/+mrd/MeasurementDependencyType.m +++ b/matlab/toolbox/+mrd/MeasurementDependencyType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.MeasurementDependencyType") && ... - isequal({self.dependency_type}, {other.dependency_type}) && ... - isequal({self.measurement_id}, {other.measurement_id}); + isequal(self.dependency_type, other.dependency_type) && ... + isequal(self.measurement_id, other.measurement_id); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/MeasurementInformationType.m b/matlab/toolbox/+mrd/MeasurementInformationType.m index 5344482f..a3f87c88 100644 --- a/matlab/toolbox/+mrd/MeasurementInformationType.m +++ b/matlab/toolbox/+mrd/MeasurementInformationType.m @@ -52,28 +52,24 @@ function res = eq(self, other) res = ... isa(other, "mrd.MeasurementInformationType") && ... - isequal({self.measurement_id}, {other.measurement_id}) && ... - isequal({self.series_date}, {other.series_date}) && ... - isequal({self.series_time}, {other.series_time}) && ... - isequal({self.patient_position}, {other.patient_position}) && ... - isequal({self.relative_table_position}, {other.relative_table_position}) && ... - isequal({self.initial_series_number}, {other.initial_series_number}) && ... - isequal({self.protocol_name}, {other.protocol_name}) && ... - isequal({self.sequence_name}, {other.sequence_name}) && ... - isequal({self.series_description}, {other.series_description}) && ... - isequal({self.measurement_dependency}, {other.measurement_dependency}) && ... - isequal({self.series_instance_uid_root}, {other.series_instance_uid_root}) && ... - isequal({self.frame_of_reference_uid}, {other.frame_of_reference_uid}) && ... - isequal({self.referenced_image_sequence}, {other.referenced_image_sequence}); + isequal(self.measurement_id, other.measurement_id) && ... + isequal(self.series_date, other.series_date) && ... + isequal(self.series_time, other.series_time) && ... + isequal(self.patient_position, other.patient_position) && ... + isequal(self.relative_table_position, other.relative_table_position) && ... + isequal(self.initial_series_number, other.initial_series_number) && ... + isequal(self.protocol_name, other.protocol_name) && ... + isequal(self.sequence_name, other.sequence_name) && ... + isequal(self.series_description, other.series_description) && ... + isequal(self.measurement_dependency, other.measurement_dependency) && ... + isequal(self.series_instance_uid_root, other.series_instance_uid_root) && ... + isequal(self.frame_of_reference_uid, other.frame_of_reference_uid) && ... + isequal(self.referenced_image_sequence, other.referenced_image_sequence); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m b/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m index 550c6101..76e833c7 100644 --- a/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m +++ b/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m @@ -4,21 +4,16 @@ classdef MrdNoiseCovarianceReaderBase < handle properties (Access=protected) state_ - skip_completed_check_ end methods - function self = MrdNoiseCovarianceReaderBase(options) - arguments - options.skip_completed_check (1,1) logical = false - end + function self = MrdNoiseCovarianceReaderBase() self.state_ = 0; - self.skip_completed_check_ = options.skip_completed_check; end function close(self) self.close_(); - if ~self.skip_completed_check_ && self.state_ ~= 1 + if self.state_ ~= 1 expected_method = self.state_to_method_name_(self.state_); throw(yardl.ProtocolError("Protocol reader closed before all data was consumed. Expected call to '%s'.", expected_method)); end diff --git a/matlab/toolbox/+mrd/MrdReaderBase.m b/matlab/toolbox/+mrd/MrdReaderBase.m index 6a4d6858..9396b5b8 100644 --- a/matlab/toolbox/+mrd/MrdReaderBase.m +++ b/matlab/toolbox/+mrd/MrdReaderBase.m @@ -4,21 +4,16 @@ classdef MrdReaderBase < handle properties (Access=protected) state_ - skip_completed_check_ end methods - function self = MrdReaderBase(options) - arguments - options.skip_completed_check (1,1) logical = false - end + function self = MrdReaderBase() self.state_ = 0; - self.skip_completed_check_ = options.skip_completed_check; end function close(self) self.close_(); - if ~self.skip_completed_check_ && self.state_ ~= 2 + if self.state_ ~= 2 expected_method = self.state_to_method_name_(self.state_); throw(yardl.ProtocolError("Protocol reader closed before all data was consumed. Expected call to '%s'.", expected_method)); end diff --git a/matlab/toolbox/+mrd/MrdWriterBase.m b/matlab/toolbox/+mrd/MrdWriterBase.m index 4057451e..32aeebbb 100644 --- a/matlab/toolbox/+mrd/MrdWriterBase.m +++ b/matlab/toolbox/+mrd/MrdWriterBase.m @@ -51,7 +51,7 @@ function end_data(self) methods (Static) function res = schema() - res = string('{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}'); + res = string('{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}'); end end diff --git a/matlab/toolbox/+mrd/MultibandSpacingType.m b/matlab/toolbox/+mrd/MultibandSpacingType.m index 5a8a7a32..3b3537d0 100644 --- a/matlab/toolbox/+mrd/MultibandSpacingType.m +++ b/matlab/toolbox/+mrd/MultibandSpacingType.m @@ -16,16 +16,12 @@ function res = eq(self, other) res = ... isa(other, "mrd.MultibandSpacingType") && ... - isequal({self.d_z}, {other.d_z}); + isequal(self.d_z, other.d_z); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/MultibandType.m b/matlab/toolbox/+mrd/MultibandType.m index dabff58d..6758bee2 100644 --- a/matlab/toolbox/+mrd/MultibandType.m +++ b/matlab/toolbox/+mrd/MultibandType.m @@ -28,20 +28,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.MultibandType") && ... - isequal({self.spacing}, {other.spacing}) && ... - isequal({self.delta_kz}, {other.delta_kz}) && ... - isequal({self.multiband_factor}, {other.multiband_factor}) && ... - isequal({self.calibration}, {other.calibration}) && ... - isequal({self.calibration_encoding}, {other.calibration_encoding}); + isequal(self.spacing, other.spacing) && ... + isequal(self.delta_kz, other.delta_kz) && ... + isequal(self.multiband_factor, other.multiband_factor) && ... + isequal(self.calibration, other.calibration) && ... + isequal(self.calibration_encoding, other.calibration_encoding); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/NoiseCovariance.m b/matlab/toolbox/+mrd/NoiseCovariance.m index e081df3a..6383c5b9 100644 --- a/matlab/toolbox/+mrd/NoiseCovariance.m +++ b/matlab/toolbox/+mrd/NoiseCovariance.m @@ -21,7 +21,7 @@ kwargs.receiver_noise_bandwidth = single(0); kwargs.noise_dwell_time_ns = uint64(0); kwargs.sample_count = uint64(0); - kwargs.matrix = single.empty(); + kwargs.matrix = single.empty(0, 0); end self.coil_labels = kwargs.coil_labels; self.receiver_noise_bandwidth = kwargs.receiver_noise_bandwidth; @@ -33,20 +33,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.NoiseCovariance") && ... - isequal({self.coil_labels}, {other.coil_labels}) && ... - isequal({self.receiver_noise_bandwidth}, {other.receiver_noise_bandwidth}) && ... - isequal({self.noise_dwell_time_ns}, {other.noise_dwell_time_ns}) && ... - isequal({self.sample_count}, {other.sample_count}) && ... - isequal({self.matrix}, {other.matrix}); + isequal(self.coil_labels, other.coil_labels) && ... + isequal(self.receiver_noise_bandwidth, other.receiver_noise_bandwidth) && ... + isequal(self.noise_dwell_time_ns, other.noise_dwell_time_ns) && ... + isequal(self.sample_count, other.sample_count) && ... + isequal(self.matrix, other.matrix); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ParallelImagingType.m b/matlab/toolbox/+mrd/ParallelImagingType.m index 4c0802a0..31f0ca80 100644 --- a/matlab/toolbox/+mrd/ParallelImagingType.m +++ b/matlab/toolbox/+mrd/ParallelImagingType.m @@ -25,19 +25,15 @@ function res = eq(self, other) res = ... isa(other, "mrd.ParallelImagingType") && ... - isequal({self.acceleration_factor}, {other.acceleration_factor}) && ... - isequal({self.calibration_mode}, {other.calibration_mode}) && ... - isequal({self.interleaving_dimension}, {other.interleaving_dimension}) && ... - isequal({self.multiband}, {other.multiband}); + isequal(self.acceleration_factor, other.acceleration_factor) && ... + isequal(self.calibration_mode, other.calibration_mode) && ... + isequal(self.interleaving_dimension, other.interleaving_dimension) && ... + isequal(self.multiband, other.multiband); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconAssembly.m b/matlab/toolbox/+mrd/ReconAssembly.m index 89f8ae5f..1d68acac 100644 --- a/matlab/toolbox/+mrd/ReconAssembly.m +++ b/matlab/toolbox/+mrd/ReconAssembly.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconAssembly") && ... - isequal({self.data}, {other.data}) && ... - isequal({self.ref}, {other.ref}); + isequal(self.data, other.data) && ... + isequal(self.ref, other.ref); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconBuffer.m b/matlab/toolbox/+mrd/ReconBuffer.m index 479a3947..779ebd12 100644 --- a/matlab/toolbox/+mrd/ReconBuffer.m +++ b/matlab/toolbox/+mrd/ReconBuffer.m @@ -17,10 +17,10 @@ methods function self = ReconBuffer(kwargs) arguments - kwargs.data = single.empty(); - kwargs.trajectory = single.empty(); + kwargs.data = single.empty(0, 0, 0, 0, 0, 0, 0); + kwargs.trajectory = single.empty(0, 0, 0, 0, 0, 0, 0); kwargs.density = yardl.None; - kwargs.headers = mrd.AcquisitionHeader.empty(); + kwargs.headers = mrd.AcquisitionHeader.empty(0, 0, 0, 0, 0); kwargs.sampling = mrd.SamplingDescription(); end self.data = kwargs.data; @@ -33,20 +33,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconBuffer") && ... - isequal({self.data}, {other.data}) && ... - isequal({self.trajectory}, {other.trajectory}) && ... - isequal({self.density}, {other.density}) && ... - isequal({self.headers}, {other.headers}) && ... - isequal({self.sampling}, {other.sampling}); + isequal(self.data, other.data) && ... + isequal(self.trajectory, other.trajectory) && ... + isequal(self.density, other.density) && ... + isequal(self.headers, other.headers) && ... + isequal(self.sampling, other.sampling); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconData.m b/matlab/toolbox/+mrd/ReconData.m index 3478d86b..054b0ccf 100644 --- a/matlab/toolbox/+mrd/ReconData.m +++ b/matlab/toolbox/+mrd/ReconData.m @@ -16,16 +16,12 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconData") && ... - isequal({self.buffers}, {other.buffers}); + isequal(self.buffers, other.buffers); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReferencedImageSequenceType.m b/matlab/toolbox/+mrd/ReferencedImageSequenceType.m index 98fcac30..a3827d60 100644 --- a/matlab/toolbox/+mrd/ReferencedImageSequenceType.m +++ b/matlab/toolbox/+mrd/ReferencedImageSequenceType.m @@ -16,16 +16,12 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReferencedImageSequenceType") && ... - isequal({self.referenced_sop_instance_uid}, {other.referenced_sop_instance_uid}); + isequal(self.referenced_sop_instance_uid, other.referenced_sop_instance_uid); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/SamplingDescription.m b/matlab/toolbox/+mrd/SamplingDescription.m index 1785c42b..46a639b3 100644 --- a/matlab/toolbox/+mrd/SamplingDescription.m +++ b/matlab/toolbox/+mrd/SamplingDescription.m @@ -28,20 +28,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.SamplingDescription") && ... - isequal({self.encoded_fov}, {other.encoded_fov}) && ... - isequal({self.recon_fov}, {other.recon_fov}) && ... - isequal({self.encoded_matrix}, {other.encoded_matrix}) && ... - isequal({self.recon_matrix}, {other.recon_matrix}) && ... - isequal({self.sampling_limits}, {other.sampling_limits}); + isequal(self.encoded_fov, other.encoded_fov) && ... + isequal(self.recon_fov, other.recon_fov) && ... + isequal(self.encoded_matrix, other.encoded_matrix) && ... + isequal(self.recon_matrix, other.recon_matrix) && ... + isequal(self.sampling_limits, other.sampling_limits); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/SamplingLimits.m b/matlab/toolbox/+mrd/SamplingLimits.m index 7cfccbc8..33a53edc 100644 --- a/matlab/toolbox/+mrd/SamplingLimits.m +++ b/matlab/toolbox/+mrd/SamplingLimits.m @@ -23,18 +23,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.SamplingLimits") && ... - isequal({self.kspace_encoding_step_0}, {other.kspace_encoding_step_0}) && ... - isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... - isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}); + isequal(self.kspace_encoding_step_0, other.kspace_encoding_step_0) && ... + isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... + isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/SequenceParametersType.m b/matlab/toolbox/+mrd/SequenceParametersType.m index fc9e9995..0b9e5538 100644 --- a/matlab/toolbox/+mrd/SequenceParametersType.m +++ b/matlab/toolbox/+mrd/SequenceParametersType.m @@ -40,24 +40,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.SequenceParametersType") && ... - isequal({self.t_r}, {other.t_r}) && ... - isequal({self.t_e}, {other.t_e}) && ... - isequal({self.t_i}, {other.t_i}) && ... - isequal({self.flip_angle_deg}, {other.flip_angle_deg}) && ... - isequal({self.sequence_type}, {other.sequence_type}) && ... - isequal({self.echo_spacing}, {other.echo_spacing}) && ... - isequal({self.diffusion_dimension}, {other.diffusion_dimension}) && ... - isequal({self.diffusion}, {other.diffusion}) && ... - isequal({self.diffusion_scheme}, {other.diffusion_scheme}); + isequal(self.t_r, other.t_r) && ... + isequal(self.t_e, other.t_e) && ... + isequal(self.t_i, other.t_i) && ... + isequal(self.flip_angle_deg, other.flip_angle_deg) && ... + isequal(self.sequence_type, other.sequence_type) && ... + isequal(self.echo_spacing, other.echo_spacing) && ... + isequal(self.diffusion_dimension, other.diffusion_dimension) && ... + isequal(self.diffusion, other.diffusion) && ... + isequal(self.diffusion_scheme, other.diffusion_scheme); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/StreamItem.m b/matlab/toolbox/+mrd/StreamItem.m index b803e8d8..ac4da357 100644 --- a/matlab/toolbox/+mrd/StreamItem.m +++ b/matlab/toolbox/+mrd/StreamItem.m @@ -130,7 +130,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.StreamItem") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); + eq = isa(other, "mrd.StreamItem") && isequal(self.index, other.index) && isequal(self.value, other.value); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/StudyInformationType.m b/matlab/toolbox/+mrd/StudyInformationType.m index 6a01936a..d3b7e260 100644 --- a/matlab/toolbox/+mrd/StudyInformationType.m +++ b/matlab/toolbox/+mrd/StudyInformationType.m @@ -37,23 +37,19 @@ function res = eq(self, other) res = ... isa(other, "mrd.StudyInformationType") && ... - isequal({self.study_date}, {other.study_date}) && ... - isequal({self.study_time}, {other.study_time}) && ... - isequal({self.study_id}, {other.study_id}) && ... - isequal({self.accession_number}, {other.accession_number}) && ... - isequal({self.referring_physician_name}, {other.referring_physician_name}) && ... - isequal({self.study_description}, {other.study_description}) && ... - isequal({self.study_instance_uid}, {other.study_instance_uid}) && ... - isequal({self.body_part_examined}, {other.body_part_examined}); + isequal(self.study_date, other.study_date) && ... + isequal(self.study_time, other.study_time) && ... + isequal(self.study_id, other.study_id) && ... + isequal(self.accession_number, other.accession_number) && ... + isequal(self.referring_physician_name, other.referring_physician_name) && ... + isequal(self.study_description, other.study_description) && ... + isequal(self.study_instance_uid, other.study_instance_uid) && ... + isequal(self.body_part_examined, other.body_part_examined); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/SubjectInformationType.m b/matlab/toolbox/+mrd/SubjectInformationType.m index ade3d5e2..68ee9b79 100644 --- a/matlab/toolbox/+mrd/SubjectInformationType.m +++ b/matlab/toolbox/+mrd/SubjectInformationType.m @@ -31,21 +31,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.SubjectInformationType") && ... - isequal({self.patient_name}, {other.patient_name}) && ... - isequal({self.patient_weight_kg}, {other.patient_weight_kg}) && ... - isequal({self.patient_height_m}, {other.patient_height_m}) && ... - isequal({self.patient_id}, {other.patient_id}) && ... - isequal({self.patient_birthdate}, {other.patient_birthdate}) && ... - isequal({self.patient_gender}, {other.patient_gender}); + isequal(self.patient_name, other.patient_name) && ... + isequal(self.patient_weight_kg, other.patient_weight_kg) && ... + isequal(self.patient_height_m, other.patient_height_m) && ... + isequal(self.patient_id, other.patient_id) && ... + isequal(self.patient_birthdate, other.patient_birthdate) && ... + isequal(self.patient_gender, other.patient_gender); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/ThreeDimensionalFloat.m b/matlab/toolbox/+mrd/ThreeDimensionalFloat.m index 347ae440..cddd2acd 100644 --- a/matlab/toolbox/+mrd/ThreeDimensionalFloat.m +++ b/matlab/toolbox/+mrd/ThreeDimensionalFloat.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.ThreeDimensionalFloat") && ... - isequal({self.x}, {other.x}) && ... - isequal({self.y}, {other.y}) && ... - isequal({self.z}, {other.z}); + isequal(self.x, other.x) && ... + isequal(self.y, other.y) && ... + isequal(self.z, other.z); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/TrajectoryData.m b/matlab/toolbox/+mrd/TrajectoryData.m new file mode 100644 index 00000000..fc4281b6 --- /dev/null +++ b/matlab/toolbox/+mrd/TrajectoryData.m @@ -0,0 +1,8 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = TrajectoryData(array) + arguments + array single + end + a = array; +end diff --git a/matlab/toolbox/+mrd/TrajectoryDescriptionType.m b/matlab/toolbox/+mrd/TrajectoryDescriptionType.m index 5a6ba871..e328bee8 100644 --- a/matlab/toolbox/+mrd/TrajectoryDescriptionType.m +++ b/matlab/toolbox/+mrd/TrajectoryDescriptionType.m @@ -28,20 +28,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.TrajectoryDescriptionType") && ... - isequal({self.identifier}, {other.identifier}) && ... - isequal({self.user_parameter_long}, {other.user_parameter_long}) && ... - isequal({self.user_parameter_double}, {other.user_parameter_double}) && ... - isequal({self.user_parameter_string}, {other.user_parameter_string}) && ... - isequal({self.comment}, {other.comment}); + isequal(self.identifier, other.identifier) && ... + isequal(self.user_parameter_long, other.user_parameter_long) && ... + isequal(self.user_parameter_double, other.user_parameter_double) && ... + isequal(self.user_parameter_string, other.user_parameter_string) && ... + isequal(self.comment, other.comment); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterBase64Type.m b/matlab/toolbox/+mrd/UserParameterBase64Type.m index de360eef..3ef9b2ff 100644 --- a/matlab/toolbox/+mrd/UserParameterBase64Type.m +++ b/matlab/toolbox/+mrd/UserParameterBase64Type.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterBase64Type") && ... - isequal({self.name}, {other.name}) && ... - isequal({self.value}, {other.value}); + isequal(self.name, other.name) && ... + isequal(self.value, other.value); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterDoubleType.m b/matlab/toolbox/+mrd/UserParameterDoubleType.m index 70fd6f01..c0d96fe1 100644 --- a/matlab/toolbox/+mrd/UserParameterDoubleType.m +++ b/matlab/toolbox/+mrd/UserParameterDoubleType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterDoubleType") && ... - isequal({self.name}, {other.name}) && ... - isequal({self.value}, {other.value}); + isequal(self.name, other.name) && ... + isequal(self.value, other.value); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterLongType.m b/matlab/toolbox/+mrd/UserParameterLongType.m index c927934b..16553e1c 100644 --- a/matlab/toolbox/+mrd/UserParameterLongType.m +++ b/matlab/toolbox/+mrd/UserParameterLongType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterLongType") && ... - isequal({self.name}, {other.name}) && ... - isequal({self.value}, {other.value}); + isequal(self.name, other.name) && ... + isequal(self.value, other.value); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterStringType.m b/matlab/toolbox/+mrd/UserParameterStringType.m index c4ca6c52..f201dade 100644 --- a/matlab/toolbox/+mrd/UserParameterStringType.m +++ b/matlab/toolbox/+mrd/UserParameterStringType.m @@ -19,17 +19,13 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterStringType") && ... - isequal({self.name}, {other.name}) && ... - isequal({self.value}, {other.value}); + isequal(self.name, other.name) && ... + isequal(self.value, other.value); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParametersType.m b/matlab/toolbox/+mrd/UserParametersType.m index c31d4a2e..a9ef3a2b 100644 --- a/matlab/toolbox/+mrd/UserParametersType.m +++ b/matlab/toolbox/+mrd/UserParametersType.m @@ -25,19 +25,15 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParametersType") && ... - isequal({self.user_parameter_long}, {other.user_parameter_long}) && ... - isequal({self.user_parameter_double}, {other.user_parameter_double}) && ... - isequal({self.user_parameter_string}, {other.user_parameter_string}) && ... - isequal({self.user_parameter_base64}, {other.user_parameter_base64}); + isequal(self.user_parameter_long, other.user_parameter_long) && ... + isequal(self.user_parameter_double, other.user_parameter_double) && ... + isequal(self.user_parameter_string, other.user_parameter_string) && ... + isequal(self.user_parameter_base64, other.user_parameter_base64); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/Waveform.m b/matlab/toolbox/+mrd/Waveform.m index 4decaea0..e53c4e53 100644 --- a/matlab/toolbox/+mrd/Waveform.m +++ b/matlab/toolbox/+mrd/Waveform.m @@ -55,36 +55,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.Waveform") && ... - isequal({self.flags}, {other.flags}) && ... - isequal({self.measurement_uid}, {other.measurement_uid}) && ... - isequal({self.scan_counter}, {other.scan_counter}) && ... - isequal({self.time_stamp_ns}, {other.time_stamp_ns}) && ... - isequal({self.sample_time_ns}, {other.sample_time_ns}) && ... - isequal({self.waveform_id}, {other.waveform_id}) && ... - isequal({self.data}, {other.data}); + isequal(self.flags, other.flags) && ... + isequal(self.measurement_uid, other.measurement_uid) && ... + isequal(self.scan_counter, other.scan_counter) && ... + isequal(self.time_stamp_ns, other.time_stamp_ns) && ... + isequal(self.sample_time_ns, other.sample_time_ns) && ... + isequal(self.waveform_id, other.waveform_id) && ... + isequal(self.data, other.data); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end - methods (Static) - function z = zeros(varargin) - elem = mrd.Waveform(data=yardl.None); - if nargin == 0 - z = elem; - return; - end - sz = [varargin{:}]; - if isscalar(sz) - sz = [sz, sz]; - end - z = reshape(repelem(elem, prod(sz)), sz); - end - end end diff --git a/matlab/toolbox/+mrd/WaveformInformationType.m b/matlab/toolbox/+mrd/WaveformInformationType.m index cc0fcae4..3da9a6a4 100644 --- a/matlab/toolbox/+mrd/WaveformInformationType.m +++ b/matlab/toolbox/+mrd/WaveformInformationType.m @@ -22,18 +22,14 @@ function res = eq(self, other) res = ... isa(other, "mrd.WaveformInformationType") && ... - isequal({self.waveform_name}, {other.waveform_name}) && ... - isequal({self.waveform_type}, {other.waveform_type}) && ... - isequal({self.user_parameters}, {other.user_parameters}); + isequal(self.waveform_name, other.waveform_name) && ... + isequal(self.waveform_type, other.waveform_type) && ... + isequal(self.user_parameters, other.user_parameters); end function res = ne(self, other) res = ~self.eq(other); end - - function res = isequal(self, other) - res = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+mrd/WaveformSamples.m b/matlab/toolbox/+mrd/WaveformSamples.m new file mode 100644 index 00000000..f50765d4 --- /dev/null +++ b/matlab/toolbox/+mrd/WaveformSamples.m @@ -0,0 +1,5 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +function a = WaveformSamples(array) + a = array; +end diff --git a/matlab/toolbox/+mrd/WaveformUint32.m b/matlab/toolbox/+mrd/WaveformUint32.m index dfc7be73..1d1e028d 100644 --- a/matlab/toolbox/+mrd/WaveformUint32.m +++ b/matlab/toolbox/+mrd/WaveformUint32.m @@ -1,4 +1,5 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -classdef WaveformUint32 < mrd.Waveform +function c = WaveformUint32(varargin) + c = mrd.Waveform(varargin{:}); end diff --git a/matlab/toolbox/+yardl/+binary/MapSerializer.m b/matlab/toolbox/+yardl/+binary/MapSerializer.m index e8dfcec6..73ad04d4 100644 --- a/matlab/toolbox/+yardl/+binary/MapSerializer.m +++ b/matlab/toolbox/+yardl/+binary/MapSerializer.m @@ -17,7 +17,7 @@ function write(self, outstream, value) arguments self (1,1) outstream (1,1) yardl.binary.CodedOutputStream - value (1,1) yardl.Map + value (1,1) dictionary end count = numEntries(value); @@ -36,16 +36,16 @@ function write(self, outstream, value) function res = read(self, instream) count = instream.read_unsigned_varint(); - res = yardl.Map(); + res = dictionary(); for i = 1:count k = self.key_serializer_.read(instream); v = self.value_serializer_.read(instream); - insert(res, k, v); + res(k) = v; end end function c = get_class(~) - c = "yardl.Map"; + c = "dictionary"; end end end diff --git a/matlab/toolbox/+yardl/Date.m b/matlab/toolbox/+yardl/Date.m index cbae0f57..ed28ebd9 100644 --- a/matlab/toolbox/+yardl/Date.m +++ b/matlab/toolbox/+yardl/Date.m @@ -30,16 +30,12 @@ end eq = isa(other, 'yardl.Date') && ... - all([self.days_since_epoch] == [other.days_since_epoch]); + all([self.value] == [other.value]); end - function ne = ne(self, other) + function ne = new(self, other) ne = ~self.eq(other); end - - function isequal = isequal(self, other) - isequal = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+yardl/DateTime.m b/matlab/toolbox/+yardl/DateTime.m index af710ec0..5a5ba903 100644 --- a/matlab/toolbox/+yardl/DateTime.m +++ b/matlab/toolbox/+yardl/DateTime.m @@ -31,16 +31,12 @@ end eq = isa(other, 'yardl.DateTime') && ... - all([self.nanoseconds_since_epoch] == [other.nanoseconds_since_epoch]); + all([self.value] == [other.value]); end - function ne = ne(self, other) + function ne = new(self, other) ne = ~self.eq(other); end - - function isequal = isequal(self, other) - isequal = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+yardl/Time.m b/matlab/toolbox/+yardl/Time.m index 533d5de1..e00dea4d 100644 --- a/matlab/toolbox/+yardl/Time.m +++ b/matlab/toolbox/+yardl/Time.m @@ -35,16 +35,12 @@ end eq = isa(other, 'yardl.Time') && ... - all([self.nanoseconds_since_midnight] == [other.nanoseconds_since_midnight]); + all([self.value] == [other.value]); end - function ne = ne(self, other) + function ne = new(self, other) ne = ~self.eq(other); end - - function isequal = isequal(self, other) - isequal = all(eq(self, other)); - end end methods (Static) diff --git a/matlab/toolbox/+yardl/Union.m b/matlab/toolbox/+yardl/Union.m index 7079c97b..60b2750a 100644 --- a/matlab/toolbox/+yardl/Union.m +++ b/matlab/toolbox/+yardl/Union.m @@ -19,10 +19,6 @@ function i = index(self) i = self.index_; end - - function isequal = isequal(self, other) - isequal = all(eq(self, other)); - end end methods (Abstract) diff --git a/model/mrd_image.yml b/model/mrd_image.yml index f98c2f83..30c2ba34 100644 --- a/model/mrd_image.yml +++ b/model/mrd_image.yml @@ -16,12 +16,24 @@ ImageFlags: !flags lastInSet: 0x8000 ImageType: !enum + base: uint64 values: magnitude: 1 phase: 2 real: 3 imag: 4 complex: 5 + rgbaMap: 6 # a uint32 image in which channel dimension is R, G, B, alpha + spinDensityMap: 7 # in mol/m^3 + t1Map: 8 # in s + t2Map: 9 # in s + t2starMap: 10 # in s + adcMap: 11 # in s/m^2 + b0Map: 12 # in Hz (offset from Image.head.measurementFreq[0]) + b1Map: 13 # in rad/s/V, channel dimension is xmit channels + sensitivityMap: 14 # in Vm^3/mol, channel dimension is rcv channels + gfactorMap: 15 # unaccelerated SNR/(accelerated SNR * sqrt of acceleration factor) + userMap: 16 # custom image type with description at ImageMeta ImageData: !array items: Y @@ -61,7 +73,7 @@ ImageHeader: !record repetition: uint? # Sets of different preparation, e.g. flow encoding, diffusion weighting set: uint? - # Clock time stamp (e.g. nanoseconds since midnight) + # Clock time stamp (e.g. nanoseconds since midnight) acquisitionTimeStampNs: uint64? # Time stamps relative to physiological triggering in nanoseconds, e.g. ECG, pulse oximetry, respiratory physiologyTimeStampNs: uint64* diff --git a/python/mrd/binary.py b/python/mrd/binary.py index c8321d8e..8ef0b6ed 100644 --- a/python/mrd/binary.py +++ b/python/mrd/binary.py @@ -44,8 +44,8 @@ class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase): """ - def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None: - MrdReaderBase.__init__(self, skip_completed_check) + def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None: + MrdReaderBase.__init__(self) _binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema) def _read_header(self) -> typing.Optional[Header]: @@ -76,8 +76,8 @@ class BinaryMrdNoiseCovarianceReader(_binary.BinaryProtocolReader, MrdNoiseCovar """ - def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None: - MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check) + def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None: + MrdNoiseCovarianceReaderBase.__init__(self) _binary.BinaryProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema) def _read_noise_covariance(self) -> NoiseCovariance: @@ -679,7 +679,7 @@ def read(self, stream: _binary.CodedInputStream) -> Header: class ImageHeaderSerializer(_binary.RecordSerializer[ImageHeader]): def __init__(self) -> None: - super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, ImageFlags)), ("measurement_uid", _binary.uint32_serializer), ("field_of_view", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("col_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("line_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp_ns", _binary.OptionalSerializer(_binary.uint64_serializer)), ("physiology_time_stamp_ns", _binary.VectorSerializer(_binary.uint64_serializer)), ("image_type", _binary.EnumSerializer(_binary.int32_serializer, ImageType)), ("image_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("image_series_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer))]) + super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, ImageFlags)), ("measurement_uid", _binary.uint32_serializer), ("field_of_view", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("col_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("line_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp_ns", _binary.OptionalSerializer(_binary.uint64_serializer)), ("physiology_time_stamp_ns", _binary.VectorSerializer(_binary.uint64_serializer)), ("image_type", _binary.EnumSerializer(_binary.uint64_serializer, ImageType)), ("image_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("image_series_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer))]) def write(self, stream: _binary.CodedOutputStream, value: ImageHeader) -> None: if isinstance(value, np.void): diff --git a/python/mrd/ndjson.py b/python/mrd/ndjson.py index 88926aa7..c1656db0 100644 --- a/python/mrd/ndjson.py +++ b/python/mrd/ndjson.py @@ -2406,6 +2406,17 @@ def from_json_to_numpy(self, json_object: object) -> np.void: "real": ImageType.REAL, "imag": ImageType.IMAG, "complex": ImageType.COMPLEX, + "rgbaMap": ImageType.RGBA_MAP, + "spinDensityMap": ImageType.SPIN_DENSITY_MAP, + "t1Map": ImageType.T1_MAP, + "t2Map": ImageType.T2_MAP, + "t2starMap": ImageType.T2STAR_MAP, + "adcMap": ImageType.ADC_MAP, + "b0Map": ImageType.B0_MAP, + "b1Map": ImageType.B1_MAP, + "sensitivityMap": ImageType.SENSITIVITY_MAP, + "gfactorMap": ImageType.GFACTOR_MAP, + "userMap": ImageType.USER_MAP, } image_type_value_to_name_map = {v: n for n, v in image_type_name_to_value_map.items()} @@ -2427,7 +2438,7 @@ def __init__(self) -> None: self._set_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter) self._acquisition_time_stamp_ns_converter = _ndjson.OptionalConverter(_ndjson.uint64_converter) self._physiology_time_stamp_ns_converter = _ndjson.VectorConverter(_ndjson.uint64_converter) - self._image_type_converter = _ndjson.EnumConverter(ImageType, np.int32, image_type_name_to_value_map, image_type_value_to_name_map) + self._image_type_converter = _ndjson.EnumConverter(ImageType, np.uint64, image_type_name_to_value_map, image_type_value_to_name_map) self._image_index_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter) self._image_series_index_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter) self._user_int_converter = _ndjson.VectorConverter(_ndjson.int32_converter) @@ -3179,8 +3190,8 @@ class NDJsonMrdReader(_ndjson.NDJsonProtocolReader, MrdReaderBase): """ - def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None: - MrdReaderBase.__init__(self, skip_completed_check) + def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None: + MrdReaderBase.__init__(self) _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdReaderBase.schema) def _read_header(self) -> typing.Optional[Header]: @@ -3217,8 +3228,8 @@ class NDJsonMrdNoiseCovarianceReader(_ndjson.NDJsonProtocolReader, MrdNoiseCovar """ - def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None: - MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check) + def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None: + MrdNoiseCovarianceReaderBase.__init__(self) _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema) def _read_noise_covariance(self) -> NoiseCovariance: diff --git a/python/mrd/protocols.py b/python/mrd/protocols.py index 191d38fe..e1cd0a92 100644 --- a/python/mrd/protocols.py +++ b/python/mrd/protocols.py @@ -24,7 +24,7 @@ class MrdWriterBase(abc.ABC): def __init__(self) -> None: self._state = 0 - schema = r"""{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}""" + schema = r"""{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}""" def close(self) -> None: if self._state == 3: @@ -101,13 +101,12 @@ class MrdReaderBase(abc.ABC): """ - def __init__(self, skip_completed_check: bool = False) -> None: - self._skip_completed_check = skip_completed_check + def __init__(self) -> None: self._state = 0 def close(self) -> None: self._close() - if not self._skip_completed_check and self._state != 4: + if self._state != 4: if self._state % 2 == 1: previous_method = self._state_to_method_name(self._state - 1) raise ProtocolError(f"Protocol reader closed before all data was consumed. The iterable returned by '{previous_method}' was not fully consumed.") @@ -251,13 +250,12 @@ class MrdNoiseCovarianceReaderBase(abc.ABC): """ - def __init__(self, skip_completed_check: bool = False) -> None: - self._skip_completed_check = skip_completed_check + def __init__(self) -> None: self._state = 0 def close(self) -> None: self._close() - if not self._skip_completed_check and self._state != 2: + if self._state != 2: if self._state % 2 == 1: previous_method = self._state_to_method_name(self._state - 1) raise ProtocolError(f"Protocol reader closed before all data was consumed. The iterable returned by '{previous_method}' was not fully consumed.") diff --git a/python/mrd/types.py b/python/mrd/types.py index 4e63966e..e890b132 100644 --- a/python/mrd/types.py +++ b/python/mrd/types.py @@ -135,10 +135,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingCounters(kspace_encode_step_1={self.kspace_encode_step_1}, kspace_encode_step_2={self.kspace_encode_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user={self.user})" + return f"EncodingCounters(kspaceEncodeStep1={self.kspace_encode_step_1}, kspaceEncodeStep2={self.kspace_encode_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user={self.user})" def __repr__(self) -> str: - return f"EncodingCounters(kspace_encode_step_1={repr(self.kspace_encode_step_1)}, kspace_encode_step_2={repr(self.kspace_encode_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user={repr(self.user)})" + return f"EncodingCounters(kspaceEncodeStep1={repr(self.kspace_encode_step_1)}, kspaceEncodeStep2={repr(self.kspace_encode_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user={repr(self.user)})" AcquisitionData = npt.NDArray[np.complex64] @@ -274,10 +274,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AcquisitionHeader(flags={self.flags}, idx={self.idx}, measurement_uid={self.measurement_uid}, scan_counter={self.scan_counter}, acquisition_time_stamp_ns={self.acquisition_time_stamp_ns}, physiology_time_stamp_ns={self.physiology_time_stamp_ns}, channel_order={self.channel_order}, discard_pre={self.discard_pre}, discard_post={self.discard_post}, center_sample={self.center_sample}, encoding_space_ref={self.encoding_space_ref}, sample_time_ns={self.sample_time_ns}, position={self.position}, read_dir={self.read_dir}, phase_dir={self.phase_dir}, slice_dir={self.slice_dir}, patient_table_position={self.patient_table_position}, user_int={self.user_int}, user_float={self.user_float})" + return f"AcquisitionHeader(flags={self.flags}, idx={self.idx}, measurementUid={self.measurement_uid}, scanCounter={self.scan_counter}, acquisitionTimeStampNs={self.acquisition_time_stamp_ns}, physiologyTimeStampNs={self.physiology_time_stamp_ns}, channelOrder={self.channel_order}, discardPre={self.discard_pre}, discardPost={self.discard_post}, centerSample={self.center_sample}, encodingSpaceRef={self.encoding_space_ref}, sampleTimeNs={self.sample_time_ns}, position={self.position}, readDir={self.read_dir}, phaseDir={self.phase_dir}, sliceDir={self.slice_dir}, patientTablePosition={self.patient_table_position}, userInt={self.user_int}, userFloat={self.user_float})" def __repr__(self) -> str: - return f"AcquisitionHeader(flags={repr(self.flags)}, idx={repr(self.idx)}, measurement_uid={repr(self.measurement_uid)}, scan_counter={repr(self.scan_counter)}, acquisition_time_stamp_ns={repr(self.acquisition_time_stamp_ns)}, physiology_time_stamp_ns={repr(self.physiology_time_stamp_ns)}, channel_order={repr(self.channel_order)}, discard_pre={repr(self.discard_pre)}, discard_post={repr(self.discard_post)}, center_sample={repr(self.center_sample)}, encoding_space_ref={repr(self.encoding_space_ref)}, sample_time_ns={repr(self.sample_time_ns)}, position={repr(self.position)}, read_dir={repr(self.read_dir)}, phase_dir={repr(self.phase_dir)}, slice_dir={repr(self.slice_dir)}, patient_table_position={repr(self.patient_table_position)}, user_int={repr(self.user_int)}, user_float={repr(self.user_float)})" + return f"AcquisitionHeader(flags={repr(self.flags)}, idx={repr(self.idx)}, measurementUid={repr(self.measurement_uid)}, scanCounter={repr(self.scan_counter)}, acquisitionTimeStampNs={repr(self.acquisition_time_stamp_ns)}, physiologyTimeStampNs={repr(self.physiology_time_stamp_ns)}, channelOrder={repr(self.channel_order)}, discardPre={repr(self.discard_pre)}, discardPost={repr(self.discard_post)}, centerSample={repr(self.center_sample)}, encodingSpaceRef={repr(self.encoding_space_ref)}, sampleTimeNs={repr(self.sample_time_ns)}, position={repr(self.position)}, readDir={repr(self.read_dir)}, phaseDir={repr(self.phase_dir)}, sliceDir={repr(self.slice_dir)}, patientTablePosition={repr(self.patient_table_position)}, userInt={repr(self.user_int)}, userFloat={repr(self.user_float)})" class Acquisition: @@ -370,10 +370,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SubjectInformationType(patient_name={self.patient_name}, patient_weight_kg={self.patient_weight_kg}, patient_height_m={self.patient_height_m}, patient_id={self.patient_id}, patient_birthdate={self.patient_birthdate}, patient_gender={self.patient_gender})" + return f"SubjectInformationType(patientName={self.patient_name}, patientWeightKg={self.patient_weight_kg}, patientHeightM={self.patient_height_m}, patientID={self.patient_id}, patientBirthdate={self.patient_birthdate}, patientGender={self.patient_gender})" def __repr__(self) -> str: - return f"SubjectInformationType(patient_name={repr(self.patient_name)}, patient_weight_kg={repr(self.patient_weight_kg)}, patient_height_m={repr(self.patient_height_m)}, patient_id={repr(self.patient_id)}, patient_birthdate={repr(self.patient_birthdate)}, patient_gender={repr(self.patient_gender)})" + return f"SubjectInformationType(patientName={repr(self.patient_name)}, patientWeightKg={repr(self.patient_weight_kg)}, patientHeightM={repr(self.patient_height_m)}, patientID={repr(self.patient_id)}, patientBirthdate={repr(self.patient_birthdate)}, patientGender={repr(self.patient_gender)})" class StudyInformationType: @@ -419,10 +419,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"StudyInformationType(study_date={self.study_date}, study_time={self.study_time}, study_id={self.study_id}, accession_number={self.accession_number}, referring_physician_name={self.referring_physician_name}, study_description={self.study_description}, study_instance_uid={self.study_instance_uid}, body_part_examined={self.body_part_examined})" + return f"StudyInformationType(studyDate={self.study_date}, studyTime={self.study_time}, studyID={self.study_id}, accessionNumber={self.accession_number}, referringPhysicianName={self.referring_physician_name}, studyDescription={self.study_description}, studyInstanceUID={self.study_instance_uid}, bodyPartExamined={self.body_part_examined})" def __repr__(self) -> str: - return f"StudyInformationType(study_date={repr(self.study_date)}, study_time={repr(self.study_time)}, study_id={repr(self.study_id)}, accession_number={repr(self.accession_number)}, referring_physician_name={repr(self.referring_physician_name)}, study_description={repr(self.study_description)}, study_instance_uid={repr(self.study_instance_uid)}, body_part_examined={repr(self.body_part_examined)})" + return f"StudyInformationType(studyDate={repr(self.study_date)}, studyTime={repr(self.study_time)}, studyID={repr(self.study_id)}, accessionNumber={repr(self.accession_number)}, referringPhysicianName={repr(self.referring_physician_name)}, studyDescription={repr(self.study_description)}, studyInstanceUID={repr(self.study_instance_uid)}, bodyPartExamined={repr(self.body_part_examined)})" class PatientPosition(yardl.OutOfRangeEnum): @@ -483,10 +483,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MeasurementDependencyType(dependency_type={self.dependency_type}, measurement_id={self.measurement_id})" + return f"MeasurementDependencyType(dependencyType={self.dependency_type}, measurementID={self.measurement_id})" def __repr__(self) -> str: - return f"MeasurementDependencyType(dependency_type={repr(self.dependency_type)}, measurement_id={repr(self.measurement_id)})" + return f"MeasurementDependencyType(dependencyType={repr(self.dependency_type)}, measurementID={repr(self.measurement_id)})" class ReferencedImageSequenceType: @@ -504,10 +504,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ReferencedImageSequenceType(referenced_sop_instance_uid={self.referenced_sop_instance_uid})" + return f"ReferencedImageSequenceType(referencedSOPInstanceUID={self.referenced_sop_instance_uid})" def __repr__(self) -> str: - return f"ReferencedImageSequenceType(referenced_sop_instance_uid={repr(self.referenced_sop_instance_uid)})" + return f"ReferencedImageSequenceType(referencedSOPInstanceUID={repr(self.referenced_sop_instance_uid)})" class MeasurementInformationType: @@ -573,10 +573,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MeasurementInformationType(measurement_id={self.measurement_id}, series_date={self.series_date}, series_time={self.series_time}, patient_position={self.patient_position}, relative_table_position={self.relative_table_position}, initial_series_number={self.initial_series_number}, protocol_name={self.protocol_name}, sequence_name={self.sequence_name}, series_description={self.series_description}, measurement_dependency={self.measurement_dependency}, series_instance_uid_root={self.series_instance_uid_root}, frame_of_reference_uid={self.frame_of_reference_uid}, referenced_image_sequence={self.referenced_image_sequence})" + return f"MeasurementInformationType(measurementID={self.measurement_id}, seriesDate={self.series_date}, seriesTime={self.series_time}, patientPosition={self.patient_position}, relativeTablePosition={self.relative_table_position}, initialSeriesNumber={self.initial_series_number}, protocolName={self.protocol_name}, sequenceName={self.sequence_name}, seriesDescription={self.series_description}, measurementDependency={self.measurement_dependency}, seriesInstanceUIDRoot={self.series_instance_uid_root}, frameOfReferenceUID={self.frame_of_reference_uid}, referencedImageSequence={self.referenced_image_sequence})" def __repr__(self) -> str: - return f"MeasurementInformationType(measurement_id={repr(self.measurement_id)}, series_date={repr(self.series_date)}, series_time={repr(self.series_time)}, patient_position={repr(self.patient_position)}, relative_table_position={repr(self.relative_table_position)}, initial_series_number={repr(self.initial_series_number)}, protocol_name={repr(self.protocol_name)}, sequence_name={repr(self.sequence_name)}, series_description={repr(self.series_description)}, measurement_dependency={repr(self.measurement_dependency)}, series_instance_uid_root={repr(self.series_instance_uid_root)}, frame_of_reference_uid={repr(self.frame_of_reference_uid)}, referenced_image_sequence={repr(self.referenced_image_sequence)})" + return f"MeasurementInformationType(measurementID={repr(self.measurement_id)}, seriesDate={repr(self.series_date)}, seriesTime={repr(self.series_time)}, patientPosition={repr(self.patient_position)}, relativeTablePosition={repr(self.relative_table_position)}, initialSeriesNumber={repr(self.initial_series_number)}, protocolName={repr(self.protocol_name)}, sequenceName={repr(self.sequence_name)}, seriesDescription={repr(self.series_description)}, measurementDependency={repr(self.measurement_dependency)}, seriesInstanceUIDRoot={repr(self.series_instance_uid_root)}, frameOfReferenceUID={repr(self.frame_of_reference_uid)}, referencedImageSequence={repr(self.referenced_image_sequence)})" class CoilLabelType: @@ -598,10 +598,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"CoilLabelType(coil_number={self.coil_number}, coil_name={self.coil_name})" + return f"CoilLabelType(coilNumber={self.coil_number}, coilName={self.coil_name})" def __repr__(self) -> str: - return f"CoilLabelType(coil_number={repr(self.coil_number)}, coil_name={repr(self.coil_name)})" + return f"CoilLabelType(coilNumber={repr(self.coil_number)}, coilName={repr(self.coil_name)})" class AcquisitionSystemInformationType: @@ -655,10 +655,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AcquisitionSystemInformationType(system_vendor={self.system_vendor}, system_model={self.system_model}, system_field_strength_t={self.system_field_strength_t}, relative_receiver_noise_bandwidth={self.relative_receiver_noise_bandwidth}, receiver_channels={self.receiver_channels}, coil_label={self.coil_label}, institution_name={self.institution_name}, station_name={self.station_name}, device_id={self.device_id}, device_serial_number={self.device_serial_number})" + return f"AcquisitionSystemInformationType(systemVendor={self.system_vendor}, systemModel={self.system_model}, systemFieldStrengthT={self.system_field_strength_t}, relativeReceiverNoiseBandwidth={self.relative_receiver_noise_bandwidth}, receiverChannels={self.receiver_channels}, coilLabel={self.coil_label}, institutionName={self.institution_name}, stationName={self.station_name}, deviceID={self.device_id}, deviceSerialNumber={self.device_serial_number})" def __repr__(self) -> str: - return f"AcquisitionSystemInformationType(system_vendor={repr(self.system_vendor)}, system_model={repr(self.system_model)}, system_field_strength_t={repr(self.system_field_strength_t)}, relative_receiver_noise_bandwidth={repr(self.relative_receiver_noise_bandwidth)}, receiver_channels={repr(self.receiver_channels)}, coil_label={repr(self.coil_label)}, institution_name={repr(self.institution_name)}, station_name={repr(self.station_name)}, device_id={repr(self.device_id)}, device_serial_number={repr(self.device_serial_number)})" + return f"AcquisitionSystemInformationType(systemVendor={repr(self.system_vendor)}, systemModel={repr(self.system_model)}, systemFieldStrengthT={repr(self.system_field_strength_t)}, relativeReceiverNoiseBandwidth={repr(self.relative_receiver_noise_bandwidth)}, receiverChannels={repr(self.receiver_channels)}, coilLabel={repr(self.coil_label)}, institutionName={repr(self.institution_name)}, stationName={repr(self.station_name)}, deviceID={repr(self.device_id)}, deviceSerialNumber={repr(self.device_serial_number)})" class ExperimentalConditionsType: @@ -676,10 +676,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ExperimentalConditionsType(h1resonance_frequency_hz={self.h1resonance_frequency_hz})" + return f"ExperimentalConditionsType(h1resonanceFrequencyHz={self.h1resonance_frequency_hz})" def __repr__(self) -> str: - return f"ExperimentalConditionsType(h1resonance_frequency_hz={repr(self.h1resonance_frequency_hz)})" + return f"ExperimentalConditionsType(h1resonanceFrequencyHz={repr(self.h1resonance_frequency_hz)})" class MatrixSizeType: @@ -759,10 +759,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingSpaceType(matrix_size={self.matrix_size}, field_of_view_mm={self.field_of_view_mm})" + return f"EncodingSpaceType(matrixSize={self.matrix_size}, fieldOfViewMm={self.field_of_view_mm})" def __repr__(self) -> str: - return f"EncodingSpaceType(matrix_size={repr(self.matrix_size)}, field_of_view_mm={repr(self.field_of_view_mm)})" + return f"EncodingSpaceType(matrixSize={repr(self.matrix_size)}, fieldOfViewMm={repr(self.field_of_view_mm)})" class LimitType: @@ -877,10 +877,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingLimitsType(kspace_encoding_step_0={self.kspace_encoding_step_0}, kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user_0={self.user_0}, user_1={self.user_1}, user_2={self.user_2}, user_3={self.user_3}, user_4={self.user_4}, user_5={self.user_5}, user_6={self.user_6}, user_7={self.user_7})" + return f"EncodingLimitsType(kspaceEncodingStep0={self.kspace_encoding_step_0}, kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user0={self.user_0}, user1={self.user_1}, user2={self.user_2}, user3={self.user_3}, user4={self.user_4}, user5={self.user_5}, user6={self.user_6}, user7={self.user_7})" def __repr__(self) -> str: - return f"EncodingLimitsType(kspace_encoding_step_0={repr(self.kspace_encoding_step_0)}, kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user_0={repr(self.user_0)}, user_1={repr(self.user_1)}, user_2={repr(self.user_2)}, user_3={repr(self.user_3)}, user_4={repr(self.user_4)}, user_5={repr(self.user_5)}, user_6={repr(self.user_6)}, user_7={repr(self.user_7)})" + return f"EncodingLimitsType(kspaceEncodingStep0={repr(self.kspace_encoding_step_0)}, kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user0={repr(self.user_0)}, user1={repr(self.user_1)}, user2={repr(self.user_2)}, user3={repr(self.user_3)}, user4={repr(self.user_4)}, user5={repr(self.user_5)}, user6={repr(self.user_6)}, user7={repr(self.user_7)})" class Trajectory(yardl.OutOfRangeEnum): @@ -997,10 +997,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"TrajectoryDescriptionType(identifier={self.identifier}, user_parameter_long={self.user_parameter_long}, user_parameter_double={self.user_parameter_double}, user_parameter_string={self.user_parameter_string}, comment={self.comment})" + return f"TrajectoryDescriptionType(identifier={self.identifier}, userParameterLong={self.user_parameter_long}, userParameterDouble={self.user_parameter_double}, userParameterString={self.user_parameter_string}, comment={self.comment})" def __repr__(self) -> str: - return f"TrajectoryDescriptionType(identifier={repr(self.identifier)}, user_parameter_long={repr(self.user_parameter_long)}, user_parameter_double={repr(self.user_parameter_double)}, user_parameter_string={repr(self.user_parameter_string)}, comment={repr(self.comment)})" + return f"TrajectoryDescriptionType(identifier={repr(self.identifier)}, userParameterLong={repr(self.user_parameter_long)}, userParameterDouble={repr(self.user_parameter_double)}, userParameterString={repr(self.user_parameter_string)}, comment={repr(self.comment)})" class AccelerationFactorType: @@ -1022,10 +1022,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AccelerationFactorType(kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2})" + return f"AccelerationFactorType(kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2})" def __repr__(self) -> str: - return f"AccelerationFactorType(kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)})" + return f"AccelerationFactorType(kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)})" class CalibrationMode(yardl.OutOfRangeEnum): @@ -1058,10 +1058,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MultibandSpacingType(d_z={self.d_z})" + return f"MultibandSpacingType(dZ={self.d_z})" def __repr__(self) -> str: - return f"MultibandSpacingType(d_z={repr(self.d_z)})" + return f"MultibandSpacingType(dZ={repr(self.d_z)})" class Calibration(yardl.OutOfRangeEnum): @@ -1100,10 +1100,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MultibandType(spacing={self.spacing}, delta_kz={self.delta_kz}, multiband_factor={self.multiband_factor}, calibration={self.calibration}, calibration_encoding={self.calibration_encoding})" + return f"MultibandType(spacing={self.spacing}, deltaKz={self.delta_kz}, multibandFactor={self.multiband_factor}, calibration={self.calibration}, calibrationEncoding={self.calibration_encoding})" def __repr__(self) -> str: - return f"MultibandType(spacing={repr(self.spacing)}, delta_kz={repr(self.delta_kz)}, multiband_factor={repr(self.multiband_factor)}, calibration={repr(self.calibration)}, calibration_encoding={repr(self.calibration_encoding)})" + return f"MultibandType(spacing={repr(self.spacing)}, deltaKz={repr(self.delta_kz)}, multibandFactor={repr(self.multiband_factor)}, calibration={repr(self.calibration)}, calibrationEncoding={repr(self.calibration_encoding)})" class ParallelImagingType: @@ -1133,10 +1133,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ParallelImagingType(acceleration_factor={self.acceleration_factor}, calibration_mode={self.calibration_mode}, interleaving_dimension={self.interleaving_dimension}, multiband={self.multiband})" + return f"ParallelImagingType(accelerationFactor={self.acceleration_factor}, calibrationMode={self.calibration_mode}, interleavingDimension={self.interleaving_dimension}, multiband={self.multiband})" def __repr__(self) -> str: - return f"ParallelImagingType(acceleration_factor={repr(self.acceleration_factor)}, calibration_mode={repr(self.calibration_mode)}, interleaving_dimension={repr(self.interleaving_dimension)}, multiband={repr(self.multiband)})" + return f"ParallelImagingType(accelerationFactor={repr(self.acceleration_factor)}, calibrationMode={repr(self.calibration_mode)}, interleavingDimension={repr(self.interleaving_dimension)}, multiband={repr(self.multiband)})" class EncodingType: @@ -1178,10 +1178,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingType(encoded_space={self.encoded_space}, recon_space={self.recon_space}, encoding_limits={self.encoding_limits}, trajectory={self.trajectory}, trajectory_description={self.trajectory_description}, parallel_imaging={self.parallel_imaging}, echo_train_length={self.echo_train_length})" + return f"EncodingType(encodedSpace={self.encoded_space}, reconSpace={self.recon_space}, encodingLimits={self.encoding_limits}, trajectory={self.trajectory}, trajectoryDescription={self.trajectory_description}, parallelImaging={self.parallel_imaging}, echoTrainLength={self.echo_train_length})" def __repr__(self) -> str: - return f"EncodingType(encoded_space={repr(self.encoded_space)}, recon_space={repr(self.recon_space)}, encoding_limits={repr(self.encoding_limits)}, trajectory={repr(self.trajectory)}, trajectory_description={repr(self.trajectory_description)}, parallel_imaging={repr(self.parallel_imaging)}, echo_train_length={repr(self.echo_train_length)})" + return f"EncodingType(encodedSpace={repr(self.encoded_space)}, reconSpace={repr(self.recon_space)}, encodingLimits={repr(self.encoding_limits)}, trajectory={repr(self.trajectory)}, trajectoryDescription={repr(self.trajectory_description)}, parallelImaging={repr(self.parallel_imaging)}, echoTrainLength={repr(self.echo_train_length)})" class DiffusionDimension(yardl.OutOfRangeEnum): @@ -1248,10 +1248,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"DiffusionType(gradient_direction={self.gradient_direction}, bvalue={self.bvalue})" + return f"DiffusionType(gradientDirection={self.gradient_direction}, bvalue={self.bvalue})" def __repr__(self) -> str: - return f"DiffusionType(gradient_direction={repr(self.gradient_direction)}, bvalue={repr(self.bvalue)})" + return f"DiffusionType(gradientDirection={repr(self.gradient_direction)}, bvalue={repr(self.bvalue)})" class SequenceParametersType: @@ -1301,10 +1301,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SequenceParametersType(t_r={self.t_r}, t_e={self.t_e}, t_i={self.t_i}, flip_angle_deg={self.flip_angle_deg}, sequence_type={self.sequence_type}, echo_spacing={self.echo_spacing}, diffusion_dimension={self.diffusion_dimension}, diffusion={self.diffusion}, diffusion_scheme={self.diffusion_scheme})" + return f"SequenceParametersType(tR={self.t_r}, tE={self.t_e}, tI={self.t_i}, flipAngleDeg={self.flip_angle_deg}, sequenceType={self.sequence_type}, echoSpacing={self.echo_spacing}, diffusionDimension={self.diffusion_dimension}, diffusion={self.diffusion}, diffusionScheme={self.diffusion_scheme})" def __repr__(self) -> str: - return f"SequenceParametersType(t_r={repr(self.t_r)}, t_e={repr(self.t_e)}, t_i={repr(self.t_i)}, flip_angle_deg={repr(self.flip_angle_deg)}, sequence_type={repr(self.sequence_type)}, echo_spacing={repr(self.echo_spacing)}, diffusion_dimension={repr(self.diffusion_dimension)}, diffusion={repr(self.diffusion)}, diffusion_scheme={repr(self.diffusion_scheme)})" + return f"SequenceParametersType(tR={repr(self.t_r)}, tE={repr(self.t_e)}, tI={repr(self.t_i)}, flipAngleDeg={repr(self.flip_angle_deg)}, sequenceType={repr(self.sequence_type)}, echoSpacing={repr(self.echo_spacing)}, diffusionDimension={repr(self.diffusion_dimension)}, diffusion={repr(self.diffusion)}, diffusionScheme={repr(self.diffusion_scheme)})" class UserParameterBase64Type: @@ -1359,10 +1359,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"UserParametersType(user_parameter_long={self.user_parameter_long}, user_parameter_double={self.user_parameter_double}, user_parameter_string={self.user_parameter_string}, user_parameter_base64={self.user_parameter_base64})" + return f"UserParametersType(userParameterLong={self.user_parameter_long}, userParameterDouble={self.user_parameter_double}, userParameterString={self.user_parameter_string}, userParameterBase64={self.user_parameter_base64})" def __repr__(self) -> str: - return f"UserParametersType(user_parameter_long={repr(self.user_parameter_long)}, user_parameter_double={repr(self.user_parameter_double)}, user_parameter_string={repr(self.user_parameter_string)}, user_parameter_base64={repr(self.user_parameter_base64)})" + return f"UserParametersType(userParameterLong={repr(self.user_parameter_long)}, userParameterDouble={repr(self.user_parameter_double)}, userParameterString={repr(self.user_parameter_string)}, userParameterBase64={repr(self.user_parameter_base64)})" class WaveformType(yardl.OutOfRangeEnum): @@ -1396,10 +1396,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"WaveformInformationType(waveform_name={self.waveform_name}, waveform_type={self.waveform_type}, user_parameters={self.user_parameters})" + return f"WaveformInformationType(waveformName={self.waveform_name}, waveformType={self.waveform_type}, userParameters={self.user_parameters})" def __repr__(self) -> str: - return f"WaveformInformationType(waveform_name={repr(self.waveform_name)}, waveform_type={repr(self.waveform_type)}, user_parameters={repr(self.user_parameters)})" + return f"WaveformInformationType(waveformName={repr(self.waveform_name)}, waveformType={repr(self.waveform_type)}, userParameters={repr(self.user_parameters)})" class Header: @@ -1453,10 +1453,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"Header(version={self.version}, subject_information={self.subject_information}, study_information={self.study_information}, measurement_information={self.measurement_information}, acquisition_system_information={self.acquisition_system_information}, experimental_conditions={self.experimental_conditions}, encoding={self.encoding}, sequence_parameters={self.sequence_parameters}, user_parameters={self.user_parameters}, waveform_information={self.waveform_information})" + return f"Header(version={self.version}, subjectInformation={self.subject_information}, studyInformation={self.study_information}, measurementInformation={self.measurement_information}, acquisitionSystemInformation={self.acquisition_system_information}, experimentalConditions={self.experimental_conditions}, encoding={self.encoding}, sequenceParameters={self.sequence_parameters}, userParameters={self.user_parameters}, waveformInformation={self.waveform_information})" def __repr__(self) -> str: - return f"Header(version={repr(self.version)}, subject_information={repr(self.subject_information)}, study_information={repr(self.study_information)}, measurement_information={repr(self.measurement_information)}, acquisition_system_information={repr(self.acquisition_system_information)}, experimental_conditions={repr(self.experimental_conditions)}, encoding={repr(self.encoding)}, sequence_parameters={repr(self.sequence_parameters)}, user_parameters={repr(self.user_parameters)}, waveform_information={repr(self.waveform_information)})" + return f"Header(version={repr(self.version)}, subjectInformation={repr(self.subject_information)}, studyInformation={repr(self.study_information)}, measurementInformation={repr(self.measurement_information)}, acquisitionSystemInformation={repr(self.acquisition_system_information)}, experimentalConditions={repr(self.experimental_conditions)}, encoding={repr(self.encoding)}, sequenceParameters={repr(self.sequence_parameters)}, userParameters={repr(self.user_parameters)}, waveformInformation={repr(self.waveform_information)})" class ImageFlags(enum.IntFlag): @@ -1488,6 +1488,17 @@ class ImageType(yardl.OutOfRangeEnum): REAL = 3 IMAG = 4 COMPLEX = 5 + RGBA_MAP = 6 + SPIN_DENSITY_MAP = 7 + T1_MAP = 8 + T2_MAP = 9 + T2STAR_MAP = 10 + ADC_MAP = 11 + B0_MAP = 12 + B1_MAP = 13 + SENSITIVITY_MAP = 14 + GFACTOR_MAP = 15 + USER_MAP = 16 ImageData = npt.NDArray[Y_NP] @@ -1628,10 +1639,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ImageHeader(flags={self.flags}, measurement_uid={self.measurement_uid}, field_of_view={self.field_of_view}, position={self.position}, col_dir={self.col_dir}, line_dir={self.line_dir}, slice_dir={self.slice_dir}, patient_table_position={self.patient_table_position}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, acquisition_time_stamp_ns={self.acquisition_time_stamp_ns}, physiology_time_stamp_ns={self.physiology_time_stamp_ns}, image_type={self.image_type}, image_index={self.image_index}, image_series_index={self.image_series_index}, user_int={self.user_int}, user_float={self.user_float})" + return f"ImageHeader(flags={self.flags}, measurementUid={self.measurement_uid}, fieldOfView={self.field_of_view}, position={self.position}, colDir={self.col_dir}, lineDir={self.line_dir}, sliceDir={self.slice_dir}, patientTablePosition={self.patient_table_position}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, acquisitionTimeStampNs={self.acquisition_time_stamp_ns}, physiologyTimeStampNs={self.physiology_time_stamp_ns}, imageType={self.image_type}, imageIndex={self.image_index}, imageSeriesIndex={self.image_series_index}, userInt={self.user_int}, userFloat={self.user_float})" def __repr__(self) -> str: - return f"ImageHeader(flags={repr(self.flags)}, measurement_uid={repr(self.measurement_uid)}, field_of_view={repr(self.field_of_view)}, position={repr(self.position)}, col_dir={repr(self.col_dir)}, line_dir={repr(self.line_dir)}, slice_dir={repr(self.slice_dir)}, patient_table_position={repr(self.patient_table_position)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, acquisition_time_stamp_ns={repr(self.acquisition_time_stamp_ns)}, physiology_time_stamp_ns={repr(self.physiology_time_stamp_ns)}, image_type={repr(self.image_type)}, image_index={repr(self.image_index)}, image_series_index={repr(self.image_series_index)}, user_int={repr(self.user_int)}, user_float={repr(self.user_float)})" + return f"ImageHeader(flags={repr(self.flags)}, measurementUid={repr(self.measurement_uid)}, fieldOfView={repr(self.field_of_view)}, position={repr(self.position)}, colDir={repr(self.col_dir)}, lineDir={repr(self.line_dir)}, sliceDir={repr(self.slice_dir)}, patientTablePosition={repr(self.patient_table_position)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, acquisitionTimeStampNs={repr(self.acquisition_time_stamp_ns)}, physiologyTimeStampNs={repr(self.physiology_time_stamp_ns)}, imageType={repr(self.image_type)}, imageIndex={repr(self.image_index)}, imageSeriesIndex={repr(self.image_series_index)}, userInt={repr(self.user_int)}, userFloat={repr(self.user_float)})" _T = typing.TypeVar('_T') @@ -1778,10 +1789,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"NoiseCovariance(coil_labels={self.coil_labels}, receiver_noise_bandwidth={self.receiver_noise_bandwidth}, noise_dwell_time_ns={self.noise_dwell_time_ns}, sample_count={self.sample_count}, matrix={self.matrix})" + return f"NoiseCovariance(coilLabels={self.coil_labels}, receiverNoiseBandwidth={self.receiver_noise_bandwidth}, noiseDwellTimeNs={self.noise_dwell_time_ns}, sampleCount={self.sample_count}, matrix={self.matrix})" def __repr__(self) -> str: - return f"NoiseCovariance(coil_labels={repr(self.coil_labels)}, receiver_noise_bandwidth={repr(self.receiver_noise_bandwidth)}, noise_dwell_time_ns={repr(self.noise_dwell_time_ns)}, sample_count={repr(self.sample_count)}, matrix={repr(self.matrix)})" + return f"NoiseCovariance(coilLabels={repr(self.coil_labels)}, receiverNoiseBandwidth={repr(self.receiver_noise_bandwidth)}, noiseDwellTimeNs={repr(self.noise_dwell_time_ns)}, sampleCount={repr(self.sample_count)}, matrix={repr(self.matrix)})" WaveformSamples = npt.NDArray[T_NP] @@ -1845,10 +1856,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"Waveform(flags={self.flags}, measurement_uid={self.measurement_uid}, scan_counter={self.scan_counter}, time_stamp_ns={self.time_stamp_ns}, sample_time_ns={self.sample_time_ns}, waveform_id={self.waveform_id}, data={self.data})" + return f"Waveform(flags={self.flags}, measurementUid={self.measurement_uid}, scanCounter={self.scan_counter}, timeStampNs={self.time_stamp_ns}, sampleTimeNs={self.sample_time_ns}, waveformId={self.waveform_id}, data={self.data})" def __repr__(self) -> str: - return f"Waveform(flags={repr(self.flags)}, measurement_uid={repr(self.measurement_uid)}, scan_counter={repr(self.scan_counter)}, time_stamp_ns={repr(self.time_stamp_ns)}, sample_time_ns={repr(self.sample_time_ns)}, waveform_id={repr(self.waveform_id)}, data={repr(self.data)})" + return f"Waveform(flags={repr(self.flags)}, measurementUid={repr(self.measurement_uid)}, scanCounter={repr(self.scan_counter)}, timeStampNs={repr(self.time_stamp_ns)}, sampleTimeNs={repr(self.sample_time_ns)}, waveformId={repr(self.waveform_id)}, data={repr(self.data)})" WaveformUint32 = Waveform[np.uint32] @@ -1915,10 +1926,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SamplingLimits(kspace_encoding_step_0={self.kspace_encoding_step_0}, kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2})" + return f"SamplingLimits(kspaceEncodingStep0={self.kspace_encoding_step_0}, kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2})" def __repr__(self) -> str: - return f"SamplingLimits(kspace_encoding_step_0={repr(self.kspace_encoding_step_0)}, kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)})" + return f"SamplingLimits(kspaceEncodingStep0={repr(self.kspace_encoding_step_0)}, kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)})" class SamplingDescription: @@ -1952,10 +1963,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SamplingDescription(encoded_fov={self.encoded_fov}, recon_fov={self.recon_fov}, encoded_matrix={self.encoded_matrix}, recon_matrix={self.recon_matrix}, sampling_limits={self.sampling_limits})" + return f"SamplingDescription(encodedFOV={self.encoded_fov}, reconFOV={self.recon_fov}, encodedMatrix={self.encoded_matrix}, reconMatrix={self.recon_matrix}, samplingLimits={self.sampling_limits})" def __repr__(self) -> str: - return f"SamplingDescription(encoded_fov={repr(self.encoded_fov)}, recon_fov={repr(self.recon_fov)}, encoded_matrix={repr(self.encoded_matrix)}, recon_matrix={repr(self.recon_matrix)}, sampling_limits={repr(self.sampling_limits)})" + return f"SamplingDescription(encodedFOV={repr(self.encoded_fov)}, reconFOV={repr(self.recon_fov)}, encodedMatrix={repr(self.encoded_matrix)}, reconMatrix={repr(self.recon_matrix)}, samplingLimits={repr(self.sampling_limits)})" class ReconBuffer: @@ -2170,7 +2181,7 @@ def _mk_get_dtype(): dtype_map.setdefault(WaveformInformationType, np.dtype([('waveform_name', np.dtype(np.object_)), ('waveform_type', get_dtype(WaveformType)), ('user_parameters', get_dtype(UserParametersType))], align=True)) dtype_map.setdefault(Header, np.dtype([('version', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.int64))], align=True)), ('subject_information', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(SubjectInformationType))], align=True)), ('study_information', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(StudyInformationType))], align=True)), ('measurement_information', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(MeasurementInformationType))], align=True)), ('acquisition_system_information', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(AcquisitionSystemInformationType))], align=True)), ('experimental_conditions', get_dtype(ExperimentalConditionsType)), ('encoding', np.dtype(np.object_)), ('sequence_parameters', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(SequenceParametersType))], align=True)), ('user_parameters', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(UserParametersType))], align=True)), ('waveform_information', np.dtype(np.object_))], align=True)) dtype_map.setdefault(ImageFlags, np.dtype(np.uint64)) - dtype_map.setdefault(ImageType, np.dtype(np.int32)) + dtype_map.setdefault(ImageType, np.dtype(np.uint64)) dtype_map.setdefault(ImageHeader, np.dtype([('flags', get_dtype(ImageFlags)), ('measurement_uid', np.dtype(np.uint32)), ('field_of_view', np.dtype(np.float32), (3,)), ('position', np.dtype(np.float32), (3,)), ('col_dir', np.dtype(np.float32), (3,)), ('line_dir', np.dtype(np.float32), (3,)), ('slice_dir', np.dtype(np.float32), (3,)), ('patient_table_position', np.dtype(np.float32), (3,)), ('average', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('slice', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('contrast', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('phase', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('repetition', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('set', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('acquisition_time_stamp_ns', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint64))], align=True)), ('physiology_time_stamp_ns', np.dtype(np.object_)), ('image_type', get_dtype(ImageType)), ('image_index', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('image_series_index', np.dtype([('has_value', np.dtype(np.bool_)), ('value', np.dtype(np.uint32))], align=True)), ('user_int', np.dtype(np.object_)), ('user_float', np.dtype(np.object_))], align=True)) dtype_map.setdefault(ImageMetaValue, np.dtype(np.object_)) dtype_map.setdefault(Image, lambda type_args: np.dtype([('head', get_dtype(ImageHeader)), ('data', np.dtype(np.object_)), ('meta', np.dtype(np.object_))], align=True)) From 444f81646a88b07bc34d8ad9989a85860aedf79a Mon Sep 17 00:00:00 2001 From: kekeke21 Date: Mon, 15 Dec 2025 12:36:13 -0500 Subject: [PATCH 2/4] add generated code with yardl ver.0.6.4 --- cpp/mrd/CMakeLists.txt | 55 +++++---- cpp/mrd/binary/protocols.cc | 8 +- cpp/mrd/binary/protocols.h | 16 +-- cpp/mrd/hdf5/protocols.cc | 8 +- cpp/mrd/hdf5/protocols.h | 4 +- cpp/mrd/ndjson/protocols.cc | 8 +- cpp/mrd/ndjson/protocols.h | 16 +-- cpp/mrd/protocols.cc | 4 +- cpp/mrd/protocols.h | 8 ++ .../+mrd/+binary/MrdNoiseCovarianceReader.m | 8 +- matlab/toolbox/+mrd/+binary/MrdReader.m | 8 +- matlab/toolbox/+mrd/AccelerationFactorType.m | 8 +- matlab/toolbox/+mrd/Acquisition.m | 14 ++- matlab/toolbox/+mrd/AcquisitionBucket.m | 14 ++- matlab/toolbox/+mrd/AcquisitionData.m | 8 -- matlab/toolbox/+mrd/AcquisitionHeader.m | 42 ++++--- .../+mrd/AcquisitionSystemInformationType.m | 24 ++-- matlab/toolbox/+mrd/AnyImage.m | 2 +- matlab/toolbox/+mrd/Array.m | 5 - matlab/toolbox/+mrd/ArrayComplexFloat.m | 8 -- matlab/toolbox/+mrd/CoilLabelType.m | 8 +- matlab/toolbox/+mrd/DiffusionType.m | 8 +- matlab/toolbox/+mrd/EncodingCounters.m | 24 ++-- matlab/toolbox/+mrd/EncodingLimitsType.m | 40 ++++--- matlab/toolbox/+mrd/EncodingSpaceType.m | 8 +- matlab/toolbox/+mrd/EncodingType.m | 18 +-- .../toolbox/+mrd/ExperimentalConditionsType.m | 6 +- matlab/toolbox/+mrd/FieldOfViewMm.m | 10 +- matlab/toolbox/+mrd/GradientDirectionType.m | 10 +- matlab/toolbox/+mrd/Header.m | 24 ++-- matlab/toolbox/+mrd/Image.m | 26 +++- matlab/toolbox/+mrd/ImageArray.m | 18 +-- matlab/toolbox/+mrd/ImageComplexDouble.m | 3 +- matlab/toolbox/+mrd/ImageComplexFloat.m | 3 +- matlab/toolbox/+mrd/ImageData.m | 5 - matlab/toolbox/+mrd/ImageDouble.m | 3 +- matlab/toolbox/+mrd/ImageFloat.m | 3 +- matlab/toolbox/+mrd/ImageHeader.m | 60 ++++++---- matlab/toolbox/+mrd/ImageInt16.m | 3 +- matlab/toolbox/+mrd/ImageInt32.m | 3 +- matlab/toolbox/+mrd/ImageMeta.m | 3 +- matlab/toolbox/+mrd/ImageMetaValue.m | 2 +- matlab/toolbox/+mrd/ImageUint16.m | 3 +- matlab/toolbox/+mrd/ImageUint32.m | 3 +- matlab/toolbox/+mrd/LimitType.m | 10 +- matlab/toolbox/+mrd/MatrixSizeType.m | 10 +- .../toolbox/+mrd/MeasurementDependencyType.m | 8 +- .../toolbox/+mrd/MeasurementInformationType.m | 30 +++-- .../+mrd/MrdNoiseCovarianceReaderBase.m | 9 +- matlab/toolbox/+mrd/MrdReaderBase.m | 9 +- matlab/toolbox/+mrd/MultibandSpacingType.m | 6 +- matlab/toolbox/+mrd/MultibandType.m | 14 ++- matlab/toolbox/+mrd/NoiseCovariance.m | 16 ++- matlab/toolbox/+mrd/ParallelImagingType.m | 12 +- matlab/toolbox/+mrd/ReconAssembly.m | 8 +- matlab/toolbox/+mrd/ReconBuffer.m | 20 ++-- matlab/toolbox/+mrd/ReconData.m | 6 +- .../+mrd/ReferencedImageSequenceType.m | 6 +- matlab/toolbox/+mrd/SamplingDescription.m | 14 ++- matlab/toolbox/+mrd/SamplingLimits.m | 10 +- matlab/toolbox/+mrd/SequenceParametersType.m | 22 ++-- matlab/toolbox/+mrd/StreamItem.m | 2 +- matlab/toolbox/+mrd/StudyInformationType.m | 20 ++-- matlab/toolbox/+mrd/SubjectInformationType.m | 16 ++- matlab/toolbox/+mrd/ThreeDimensionalFloat.m | 10 +- matlab/toolbox/+mrd/TrajectoryData.m | 8 -- .../toolbox/+mrd/TrajectoryDescriptionType.m | 14 ++- matlab/toolbox/+mrd/UserParameterBase64Type.m | 8 +- matlab/toolbox/+mrd/UserParameterDoubleType.m | 8 +- matlab/toolbox/+mrd/UserParameterLongType.m | 8 +- matlab/toolbox/+mrd/UserParameterStringType.m | 8 +- matlab/toolbox/+mrd/UserParametersType.m | 12 +- matlab/toolbox/+mrd/Waveform.m | 32 +++-- matlab/toolbox/+mrd/WaveformInformationType.m | 10 +- matlab/toolbox/+mrd/WaveformSamples.m | 5 - matlab/toolbox/+mrd/WaveformUint32.m | 3 +- matlab/toolbox/+yardl/+binary/MapSerializer.m | 8 +- matlab/toolbox/+yardl/Date.m | 8 +- matlab/toolbox/+yardl/DateTime.m | 8 +- matlab/toolbox/+yardl/Time.m | 8 +- matlab/toolbox/+yardl/Union.m | 4 + python/mrd/binary.py | 8 +- python/mrd/ndjson.py | 8 +- python/mrd/protocols.py | 10 +- python/mrd/types.py | 112 +++++++++--------- 85 files changed, 668 insertions(+), 442 deletions(-) delete mode 100644 matlab/toolbox/+mrd/AcquisitionData.m delete mode 100644 matlab/toolbox/+mrd/Array.m delete mode 100644 matlab/toolbox/+mrd/ArrayComplexFloat.m delete mode 100644 matlab/toolbox/+mrd/ImageData.m delete mode 100644 matlab/toolbox/+mrd/TrajectoryData.m delete mode 100644 matlab/toolbox/+mrd/WaveformSamples.m diff --git a/cpp/mrd/CMakeLists.txt b/cpp/mrd/CMakeLists.txt index a12acf37..d67a01c7 100644 --- a/cpp/mrd/CMakeLists.txt +++ b/cpp/mrd/CMakeLists.txt @@ -6,35 +6,40 @@ # target_link_libraries( mrd_generated) # add_subdirectory() -set(HOWARD_HINNANT_DATE_MINIMUM_VERSION "3.0.0") -find_package(date ${HOWARD_HINNANT_DATE_MINIMUM_VERSION} REQUIRED) +set(Mrd_GENERATED_SOURCES + protocols.cc + types.cc + binary/protocols.cc +) -if(VCPKG_TARGET_TRIPLET) - set(HDF5_CXX_LIBRARIES hdf5::hdf5_cpp-shared) -else() - set(HDF5_CXX_LIBRARIES hdf5::hdf5_cpp) -endif() +set(Mrd_GENERATED_LINK_LIBRARIES + xtensor + date::date +) -set(HDF5_MINIMUM_VERSION "1.10.5") -find_package(HDF5 ${HDF5_MINIMUM_VERSION} REQUIRED COMPONENTS C CXX) +set(HOWARD_HINNANT_DATE_MINIMUM_VERSION "3.0.0") +find_package(date ${HOWARD_HINNANT_DATE_MINIMUM_VERSION} REQUIRED) set(XTENSOR_MINIMUM_VERSION "0.21.10") find_package(xtensor ${XTENSOR_MINIMUM_VERSION} REQUIRED) -set(NLOHMANN_JSON_MINIMUM_VERSION "3.11.1") -find_package(nlohmann_json ${NLOHMANN_JSON_MINIMUM_VERSION} REQUIRED) -add_library(mrd_generated OBJECT - protocols.cc - types.cc - ndjson/protocols.cc - binary/protocols.cc - hdf5/protocols.cc -) +option(Mrd_GENERATED_USE_HDF5 "Whether to use HDF5 in the generated code" ON) +if(Mrd_GENERATED_USE_HDF5) + set(HDF5_MINIMUM_VERSION "1.10.5") + find_package(HDF5 ${HDF5_MINIMUM_VERSION} REQUIRED COMPONENTS CXX) -target_link_libraries(mrd_generated - PUBLIC ${HDF5_C_LIBRARIES} - PUBLIC ${HDF5_CXX_LIBRARIES} - PUBLIC xtensor - PUBLIC date::date - PUBLIC nlohmann_json::nlohmann_json -) + list(APPEND Mrd_GENERATED_SOURCES hdf5/protocols.cc) + list(APPEND Mrd_GENERATED_LINK_LIBRARIES HDF5::HDF5) +endif() + +option(Mrd_GENERATED_USE_NDJSON "Whether to use NDJSON in the generated code" ON) +if(Mrd_GENERATED_USE_NDJSON) + set(NLOHMANN_JSON_MINIMUM_VERSION "3.11.1") + find_package(nlohmann_json ${NLOHMANN_JSON_MINIMUM_VERSION} REQUIRED) + + list(APPEND Mrd_GENERATED_SOURCES ndjson/protocols.cc) + list(APPEND Mrd_GENERATED_LINK_LIBRARIES nlohmann_json::nlohmann_json) +endif() + +add_library(mrd_generated OBJECT ${Mrd_GENERATED_SOURCES}) +target_link_libraries(mrd_generated ${Mrd_GENERATED_LINK_LIBRARIES}) diff --git a/cpp/mrd/binary/protocols.cc b/cpp/mrd/binary/protocols.cc index 035af5e4..0c73ba12 100644 --- a/cpp/mrd/binary/protocols.cc +++ b/cpp/mrd/binary/protocols.cc @@ -2534,7 +2534,9 @@ bool MrdReader::ReadDataImpl(std::vector& values) { } void MrdReader::CloseImpl() { - stream_.VerifyFinished(); + if (!skip_completed_check_) { + stream_.VerifyFinished(); + } } void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance const& value) { @@ -2554,7 +2556,9 @@ void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReader::CloseImpl() { - stream_.VerifyFinished(); + if (!skip_completed_check_) { + stream_.VerifyFinished(); + } } } // namespace mrd::binary diff --git a/cpp/mrd/binary/protocols.h b/cpp/mrd/binary/protocols.h index c51dcba5..42e70e23 100644 --- a/cpp/mrd/binary/protocols.h +++ b/cpp/mrd/binary/protocols.h @@ -38,11 +38,11 @@ class MrdWriter : public mrd::MrdWriterBase, yardl::binary::BinaryWriter { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, yardl::binary::BinaryReader { public: - MrdReader(std::istream& stream) - : yardl::binary::BinaryReader(stream), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} + MrdReader(std::istream& stream, bool skip_completed_check=false) + : mrd::MrdReaderBase(skip_completed_check), yardl::binary::BinaryReader(stream), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} - MrdReader(std::string file_name) - : yardl::binary::BinaryReader(file_name), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} + MrdReader(std::string file_name, bool skip_completed_check=false) + : mrd::MrdReaderBase(skip_completed_check), yardl::binary::BinaryReader(file_name), version_(mrd::MrdReaderBase::VersionFromSchema(schema_read_)) {} Version GetVersion() { return version_; } @@ -81,11 +81,11 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, yardl // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, yardl::binary::BinaryReader { public: - MrdNoiseCovarianceReader(std::istream& stream) - : yardl::binary::BinaryReader(stream), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} + MrdNoiseCovarianceReader(std::istream& stream, bool skip_completed_check=false) + : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::binary::BinaryReader(stream), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} - MrdNoiseCovarianceReader(std::string file_name) - : yardl::binary::BinaryReader(file_name), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} + MrdNoiseCovarianceReader(std::string file_name, bool skip_completed_check=false) + : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::binary::BinaryReader(file_name), version_(mrd::MrdNoiseCovarianceReaderBase::VersionFromSchema(schema_read_)) {} Version GetVersion() { return version_; } diff --git a/cpp/mrd/hdf5/protocols.cc b/cpp/mrd/hdf5/protocols.cc index 10bf6e36..a942a8a9 100644 --- a/cpp/mrd/hdf5/protocols.cc +++ b/cpp/mrd/hdf5/protocols.cc @@ -2273,8 +2273,8 @@ void MrdWriter::Flush() { } } -MrdReader::MrdReader(std::string path) - : yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "Mrd", schema_) { +MrdReader::MrdReader(std::string path, bool skip_completed_check) + : mrd::MrdReaderBase(skip_completed_check), yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "Mrd", schema_) { } void MrdReader::ReadHeaderImpl(std::optional& value) { @@ -2376,8 +2376,8 @@ void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance con yardl::hdf5::WriteScalarDataset(group_, "noiseCovariance", mrd::hdf5::GetNoiseCovarianceHdf5Ddl(), value); } -MrdNoiseCovarianceReader::MrdNoiseCovarianceReader(std::string path) - : yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "MrdNoiseCovariance", schema_) { +MrdNoiseCovarianceReader::MrdNoiseCovarianceReader(std::string path, bool skip_completed_check) + : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::hdf5::Hdf5Reader::Hdf5Reader(path, "MrdNoiseCovariance", schema_) { } void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& value) { diff --git a/cpp/mrd/hdf5/protocols.h b/cpp/mrd/hdf5/protocols.h index 25aed732..1822992f 100644 --- a/cpp/mrd/hdf5/protocols.h +++ b/cpp/mrd/hdf5/protocols.h @@ -35,7 +35,7 @@ class MrdWriter : public mrd::MrdWriterBase, public yardl::hdf5::Hdf5Writer { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, public yardl::hdf5::Hdf5Reader { public: - MrdReader(std::string path); + MrdReader(std::string path, bool skip_completed_check=false); void ReadHeaderImpl(std::optional& value) override; @@ -61,7 +61,7 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, publi // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, public yardl::hdf5::Hdf5Reader { public: - MrdNoiseCovarianceReader(std::string path); + MrdNoiseCovarianceReader(std::string path, bool skip_completed_check=false); void ReadNoiseCovarianceImpl(mrd::NoiseCovariance& value) override; diff --git a/cpp/mrd/ndjson/protocols.cc b/cpp/mrd/ndjson/protocols.cc index 44ec640b..389cca09 100644 --- a/cpp/mrd/ndjson/protocols.cc +++ b/cpp/mrd/ndjson/protocols.cc @@ -3101,7 +3101,9 @@ bool MrdReader::ReadDataImpl(mrd::StreamItem& value) { } void MrdReader::CloseImpl() { - VerifyFinished(); + if (!skip_completed_check_) { + VerifyFinished(); + } } void MrdNoiseCovarianceWriter::WriteNoiseCovarianceImpl(mrd::NoiseCovariance const& value) { @@ -3121,7 +3123,9 @@ void MrdNoiseCovarianceReader::ReadNoiseCovarianceImpl(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReader::CloseImpl() { - VerifyFinished(); + if (!skip_completed_check_) { + VerifyFinished(); + } } } // namespace mrd::ndjson diff --git a/cpp/mrd/ndjson/protocols.h b/cpp/mrd/ndjson/protocols.h index 4486b4b6..a6d21cb6 100644 --- a/cpp/mrd/ndjson/protocols.h +++ b/cpp/mrd/ndjson/protocols.h @@ -37,12 +37,12 @@ class MrdWriter : public mrd::MrdWriterBase, yardl::ndjson::NDJsonWriter { // The MRD Protocol class MrdReader : public mrd::MrdReaderBase, yardl::ndjson::NDJsonReader { public: - MrdReader(std::istream& stream) - : yardl::ndjson::NDJsonReader(stream, schema_) { + MrdReader(std::istream& stream, bool skip_completed_check=false) + : mrd::MrdReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(stream, schema_) { } - MrdReader(std::string file_name) - : yardl::ndjson::NDJsonReader(file_name, schema_) { + MrdReader(std::string file_name, bool skip_completed_check=false) + : mrd::MrdReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(file_name, schema_) { } protected: @@ -74,12 +74,12 @@ class MrdNoiseCovarianceWriter : public mrd::MrdNoiseCovarianceWriterBase, yardl // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReader : public mrd::MrdNoiseCovarianceReaderBase, yardl::ndjson::NDJsonReader { public: - MrdNoiseCovarianceReader(std::istream& stream) - : yardl::ndjson::NDJsonReader(stream, schema_) { + MrdNoiseCovarianceReader(std::istream& stream, bool skip_completed_check=false) + : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(stream, schema_) { } - MrdNoiseCovarianceReader(std::string file_name) - : yardl::ndjson::NDJsonReader(file_name, schema_) { + MrdNoiseCovarianceReader(std::string file_name, bool skip_completed_check=false) + : mrd::MrdNoiseCovarianceReaderBase(skip_completed_check), yardl::ndjson::NDJsonReader(file_name, schema_) { } protected: diff --git a/cpp/mrd/protocols.cc b/cpp/mrd/protocols.cc index 0f13df57..5397ee28 100644 --- a/cpp/mrd/protocols.cc +++ b/cpp/mrd/protocols.cc @@ -174,7 +174,7 @@ bool MrdReaderBase::ReadDataImpl(std::vector& values) { } void MrdReaderBase::Close() { - if (unlikely(state_ != 4)) { + if (!skip_completed_check_ && unlikely(state_ != 4)) { if (state_ == 3) { state_ = 4; } else { @@ -282,7 +282,7 @@ void MrdNoiseCovarianceReaderBase::ReadNoiseCovariance(mrd::NoiseCovariance& val } void MrdNoiseCovarianceReaderBase::Close() { - if (unlikely(state_ != 2)) { + if (!skip_completed_check_ && unlikely(state_ != 2)) { MrdNoiseCovarianceReaderBaseInvalidState(2, state_); } diff --git a/cpp/mrd/protocols.h b/cpp/mrd/protocols.h index 8a7a3061..bf3a269f 100644 --- a/cpp/mrd/protocols.h +++ b/cpp/mrd/protocols.h @@ -56,6 +56,8 @@ class MrdWriterBase { // The MRD Protocol class MrdReaderBase { public: + MrdReaderBase(bool skip_completed_check = false): skip_completed_check_(skip_completed_check) {} + // Ordinal 0. void ReadHeader(std::optional& value); @@ -83,6 +85,8 @@ class MrdReaderBase { static Version VersionFromSchema(const std::string& schema); + bool skip_completed_check_; + private: uint8_t state_ = 0; }; @@ -122,6 +126,8 @@ class MrdNoiseCovarianceWriterBase { // Protocol for serializing a noise covariance matrix class MrdNoiseCovarianceReaderBase { public: + MrdNoiseCovarianceReaderBase(bool skip_completed_check = false): skip_completed_check_(skip_completed_check) {} + // Ordinal 0. void ReadNoiseCovariance(mrd::NoiseCovariance& value); @@ -141,6 +147,8 @@ class MrdNoiseCovarianceReaderBase { static Version VersionFromSchema(const std::string& schema); + bool skip_completed_check_; + private: uint8_t state_ = 0; }; diff --git a/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m b/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m index 5d0680f3..9660b873 100644 --- a/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m +++ b/matlab/toolbox/+mrd/+binary/MrdNoiseCovarianceReader.m @@ -8,8 +8,12 @@ end methods - function self = MrdNoiseCovarianceReader(filename) - self@mrd.MrdNoiseCovarianceReaderBase(); + function self = MrdNoiseCovarianceReader(filename, options) + arguments + filename (1,1) string + options.skip_completed_check (1,1) logical = false + end + self@mrd.MrdNoiseCovarianceReaderBase(skip_completed_check=options.skip_completed_check); self@yardl.binary.BinaryProtocolReader(filename, mrd.MrdNoiseCovarianceReaderBase.schema); self.noise_covariance_serializer = mrd.binary.NoiseCovarianceSerializer(); end diff --git a/matlab/toolbox/+mrd/+binary/MrdReader.m b/matlab/toolbox/+mrd/+binary/MrdReader.m index c43433bc..83e7fd1d 100644 --- a/matlab/toolbox/+mrd/+binary/MrdReader.m +++ b/matlab/toolbox/+mrd/+binary/MrdReader.m @@ -9,8 +9,12 @@ end methods - function self = MrdReader(filename) - self@mrd.MrdReaderBase(); + function self = MrdReader(filename, options) + arguments + filename (1,1) string + options.skip_completed_check (1,1) logical = false + end + self@mrd.MrdReaderBase(skip_completed_check=options.skip_completed_check); self@yardl.binary.BinaryProtocolReader(filename, mrd.MrdReaderBase.schema); self.header_serializer = yardl.binary.OptionalSerializer(mrd.binary.HeaderSerializer()); self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer()}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray})); diff --git a/matlab/toolbox/+mrd/AccelerationFactorType.m b/matlab/toolbox/+mrd/AccelerationFactorType.m index f2f6e323..ec4cab5e 100644 --- a/matlab/toolbox/+mrd/AccelerationFactorType.m +++ b/matlab/toolbox/+mrd/AccelerationFactorType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.AccelerationFactorType") && ... - isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... - isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2); + isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... + isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/Acquisition.m b/matlab/toolbox/+mrd/Acquisition.m index 043d21a5..c2c0bdad 100644 --- a/matlab/toolbox/+mrd/Acquisition.m +++ b/matlab/toolbox/+mrd/Acquisition.m @@ -14,8 +14,8 @@ function self = Acquisition(kwargs) arguments kwargs.head = mrd.AcquisitionHeader(); - kwargs.data = single.empty(0, 0); - kwargs.trajectory = single.empty(0, 0); + kwargs.data = single.empty(); + kwargs.trajectory = single.empty(); end self.head = kwargs.head; self.data = kwargs.data; @@ -51,14 +51,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.Acquisition") && ... - isequal(self.head, other.head) && ... - isequal(self.data, other.data) && ... - isequal(self.trajectory, other.trajectory); + isequal({self.head}, {other.head}) && ... + isequal({self.data}, {other.data}) && ... + isequal({self.trajectory}, {other.trajectory}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionBucket.m b/matlab/toolbox/+mrd/AcquisitionBucket.m index fb649449..19cc3458 100644 --- a/matlab/toolbox/+mrd/AcquisitionBucket.m +++ b/matlab/toolbox/+mrd/AcquisitionBucket.m @@ -28,16 +28,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionBucket") && ... - isequal(self.data, other.data) && ... - isequal(self.ref, other.ref) && ... - isequal(self.datastats, other.datastats) && ... - isequal(self.refstats, other.refstats) && ... - isequal(self.waveforms, other.waveforms); + isequal({self.data}, {other.data}) && ... + isequal({self.ref}, {other.ref}) && ... + isequal({self.datastats}, {other.datastats}) && ... + isequal({self.refstats}, {other.refstats}) && ... + isequal({self.waveforms}, {other.waveforms}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionData.m b/matlab/toolbox/+mrd/AcquisitionData.m deleted file mode 100644 index 26275828..00000000 --- a/matlab/toolbox/+mrd/AcquisitionData.m +++ /dev/null @@ -1,8 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = AcquisitionData(array) - arguments - array single - end - a = array; -end diff --git a/matlab/toolbox/+mrd/AcquisitionHeader.m b/matlab/toolbox/+mrd/AcquisitionHeader.m index 6c3af8e6..1a40e09d 100644 --- a/matlab/toolbox/+mrd/AcquisitionHeader.m +++ b/matlab/toolbox/+mrd/AcquisitionHeader.m @@ -91,30 +91,34 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionHeader") && ... - isequal(self.flags, other.flags) && ... - isequal(self.idx, other.idx) && ... - isequal(self.measurement_uid, other.measurement_uid) && ... - isequal(self.scan_counter, other.scan_counter) && ... - isequal(self.acquisition_time_stamp_ns, other.acquisition_time_stamp_ns) && ... - isequal(self.physiology_time_stamp_ns, other.physiology_time_stamp_ns) && ... - isequal(self.channel_order, other.channel_order) && ... - isequal(self.discard_pre, other.discard_pre) && ... - isequal(self.discard_post, other.discard_post) && ... - isequal(self.center_sample, other.center_sample) && ... - isequal(self.encoding_space_ref, other.encoding_space_ref) && ... - isequal(self.sample_time_ns, other.sample_time_ns) && ... - isequal(self.position, other.position) && ... - isequal(self.read_dir, other.read_dir) && ... - isequal(self.phase_dir, other.phase_dir) && ... - isequal(self.slice_dir, other.slice_dir) && ... - isequal(self.patient_table_position, other.patient_table_position) && ... - isequal(self.user_int, other.user_int) && ... - isequal(self.user_float, other.user_float); + isequal({self.flags}, {other.flags}) && ... + isequal({self.idx}, {other.idx}) && ... + isequal({self.measurement_uid}, {other.measurement_uid}) && ... + isequal({self.scan_counter}, {other.scan_counter}) && ... + isequal({self.acquisition_time_stamp_ns}, {other.acquisition_time_stamp_ns}) && ... + isequal({self.physiology_time_stamp_ns}, {other.physiology_time_stamp_ns}) && ... + isequal({self.channel_order}, {other.channel_order}) && ... + isequal({self.discard_pre}, {other.discard_pre}) && ... + isequal({self.discard_post}, {other.discard_post}) && ... + isequal({self.center_sample}, {other.center_sample}) && ... + isequal({self.encoding_space_ref}, {other.encoding_space_ref}) && ... + isequal({self.sample_time_ns}, {other.sample_time_ns}) && ... + isequal({self.position}, {other.position}) && ... + isequal({self.read_dir}, {other.read_dir}) && ... + isequal({self.phase_dir}, {other.phase_dir}) && ... + isequal({self.slice_dir}, {other.slice_dir}) && ... + isequal({self.patient_table_position}, {other.patient_table_position}) && ... + isequal({self.user_int}, {other.user_int}) && ... + isequal({self.user_float}, {other.user_float}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m b/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m index c09b5f43..6f1e809e 100644 --- a/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m +++ b/matlab/toolbox/+mrd/AcquisitionSystemInformationType.m @@ -43,21 +43,25 @@ function res = eq(self, other) res = ... isa(other, "mrd.AcquisitionSystemInformationType") && ... - isequal(self.system_vendor, other.system_vendor) && ... - isequal(self.system_model, other.system_model) && ... - isequal(self.system_field_strength_t, other.system_field_strength_t) && ... - isequal(self.relative_receiver_noise_bandwidth, other.relative_receiver_noise_bandwidth) && ... - isequal(self.receiver_channels, other.receiver_channels) && ... - isequal(self.coil_label, other.coil_label) && ... - isequal(self.institution_name, other.institution_name) && ... - isequal(self.station_name, other.station_name) && ... - isequal(self.device_id, other.device_id) && ... - isequal(self.device_serial_number, other.device_serial_number); + isequal({self.system_vendor}, {other.system_vendor}) && ... + isequal({self.system_model}, {other.system_model}) && ... + isequal({self.system_field_strength_t}, {other.system_field_strength_t}) && ... + isequal({self.relative_receiver_noise_bandwidth}, {other.relative_receiver_noise_bandwidth}) && ... + isequal({self.receiver_channels}, {other.receiver_channels}) && ... + isequal({self.coil_label}, {other.coil_label}) && ... + isequal({self.institution_name}, {other.institution_name}) && ... + isequal({self.station_name}, {other.station_name}) && ... + isequal({self.device_id}, {other.device_id}) && ... + isequal({self.device_serial_number}, {other.device_serial_number}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/AnyImage.m b/matlab/toolbox/+mrd/AnyImage.m index a3aa9f4a..1d41f5bb 100644 --- a/matlab/toolbox/+mrd/AnyImage.m +++ b/matlab/toolbox/+mrd/AnyImage.m @@ -82,7 +82,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.AnyImage") && isequal(self.index, other.index) && isequal(self.value, other.value); + eq = isa(other, "mrd.AnyImage") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/Array.m b/matlab/toolbox/+mrd/Array.m deleted file mode 100644 index ce689e38..00000000 --- a/matlab/toolbox/+mrd/Array.m +++ /dev/null @@ -1,5 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = Array(array) - a = array; -end diff --git a/matlab/toolbox/+mrd/ArrayComplexFloat.m b/matlab/toolbox/+mrd/ArrayComplexFloat.m deleted file mode 100644 index 000318b8..00000000 --- a/matlab/toolbox/+mrd/ArrayComplexFloat.m +++ /dev/null @@ -1,8 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = ArrayComplexFloat(array) - arguments - array single - end - a = array; -end diff --git a/matlab/toolbox/+mrd/CoilLabelType.m b/matlab/toolbox/+mrd/CoilLabelType.m index 6f2e5c7d..722f0e8e 100644 --- a/matlab/toolbox/+mrd/CoilLabelType.m +++ b/matlab/toolbox/+mrd/CoilLabelType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.CoilLabelType") && ... - isequal(self.coil_number, other.coil_number) && ... - isequal(self.coil_name, other.coil_name); + isequal({self.coil_number}, {other.coil_number}) && ... + isequal({self.coil_name}, {other.coil_name}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/DiffusionType.m b/matlab/toolbox/+mrd/DiffusionType.m index b799b8d5..fa4d4a6d 100644 --- a/matlab/toolbox/+mrd/DiffusionType.m +++ b/matlab/toolbox/+mrd/DiffusionType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.DiffusionType") && ... - isequal(self.gradient_direction, other.gradient_direction) && ... - isequal(self.bvalue, other.bvalue); + isequal({self.gradient_direction}, {other.gradient_direction}) && ... + isequal({self.bvalue}, {other.bvalue}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingCounters.m b/matlab/toolbox/+mrd/EncodingCounters.m index 5b4d13c8..1515142e 100644 --- a/matlab/toolbox/+mrd/EncodingCounters.m +++ b/matlab/toolbox/+mrd/EncodingCounters.m @@ -53,21 +53,25 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingCounters") && ... - isequal(self.kspace_encode_step_1, other.kspace_encode_step_1) && ... - isequal(self.kspace_encode_step_2, other.kspace_encode_step_2) && ... - isequal(self.average, other.average) && ... - isequal(self.slice, other.slice) && ... - isequal(self.contrast, other.contrast) && ... - isequal(self.phase, other.phase) && ... - isequal(self.repetition, other.repetition) && ... - isequal(self.set, other.set) && ... - isequal(self.segment, other.segment) && ... - isequal(self.user, other.user); + isequal({self.kspace_encode_step_1}, {other.kspace_encode_step_1}) && ... + isequal({self.kspace_encode_step_2}, {other.kspace_encode_step_2}) && ... + isequal({self.average}, {other.average}) && ... + isequal({self.slice}, {other.slice}) && ... + isequal({self.contrast}, {other.contrast}) && ... + isequal({self.phase}, {other.phase}) && ... + isequal({self.repetition}, {other.repetition}) && ... + isequal({self.set}, {other.set}) && ... + isequal({self.segment}, {other.segment}) && ... + isequal({self.user}, {other.user}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingLimitsType.m b/matlab/toolbox/+mrd/EncodingLimitsType.m index ab9fb103..2b65cd06 100644 --- a/matlab/toolbox/+mrd/EncodingLimitsType.m +++ b/matlab/toolbox/+mrd/EncodingLimitsType.m @@ -67,29 +67,33 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingLimitsType") && ... - isequal(self.kspace_encoding_step_0, other.kspace_encoding_step_0) && ... - isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... - isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2) && ... - isequal(self.average, other.average) && ... - isequal(self.slice, other.slice) && ... - isequal(self.contrast, other.contrast) && ... - isequal(self.phase, other.phase) && ... - isequal(self.repetition, other.repetition) && ... - isequal(self.set, other.set) && ... - isequal(self.segment, other.segment) && ... - isequal(self.user_0, other.user_0) && ... - isequal(self.user_1, other.user_1) && ... - isequal(self.user_2, other.user_2) && ... - isequal(self.user_3, other.user_3) && ... - isequal(self.user_4, other.user_4) && ... - isequal(self.user_5, other.user_5) && ... - isequal(self.user_6, other.user_6) && ... - isequal(self.user_7, other.user_7); + isequal({self.kspace_encoding_step_0}, {other.kspace_encoding_step_0}) && ... + isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... + isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}) && ... + isequal({self.average}, {other.average}) && ... + isequal({self.slice}, {other.slice}) && ... + isequal({self.contrast}, {other.contrast}) && ... + isequal({self.phase}, {other.phase}) && ... + isequal({self.repetition}, {other.repetition}) && ... + isequal({self.set}, {other.set}) && ... + isequal({self.segment}, {other.segment}) && ... + isequal({self.user_0}, {other.user_0}) && ... + isequal({self.user_1}, {other.user_1}) && ... + isequal({self.user_2}, {other.user_2}) && ... + isequal({self.user_3}, {other.user_3}) && ... + isequal({self.user_4}, {other.user_4}) && ... + isequal({self.user_5}, {other.user_5}) && ... + isequal({self.user_6}, {other.user_6}) && ... + isequal({self.user_7}, {other.user_7}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingSpaceType.m b/matlab/toolbox/+mrd/EncodingSpaceType.m index 98405744..af91e407 100644 --- a/matlab/toolbox/+mrd/EncodingSpaceType.m +++ b/matlab/toolbox/+mrd/EncodingSpaceType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingSpaceType") && ... - isequal(self.matrix_size, other.matrix_size) && ... - isequal(self.field_of_view_mm, other.field_of_view_mm); + isequal({self.matrix_size}, {other.matrix_size}) && ... + isequal({self.field_of_view_mm}, {other.field_of_view_mm}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/EncodingType.m b/matlab/toolbox/+mrd/EncodingType.m index 8d2c38fb..dc551d89 100644 --- a/matlab/toolbox/+mrd/EncodingType.m +++ b/matlab/toolbox/+mrd/EncodingType.m @@ -34,18 +34,22 @@ function res = eq(self, other) res = ... isa(other, "mrd.EncodingType") && ... - isequal(self.encoded_space, other.encoded_space) && ... - isequal(self.recon_space, other.recon_space) && ... - isequal(self.encoding_limits, other.encoding_limits) && ... - isequal(self.trajectory, other.trajectory) && ... - isequal(self.trajectory_description, other.trajectory_description) && ... - isequal(self.parallel_imaging, other.parallel_imaging) && ... - isequal(self.echo_train_length, other.echo_train_length); + isequal({self.encoded_space}, {other.encoded_space}) && ... + isequal({self.recon_space}, {other.recon_space}) && ... + isequal({self.encoding_limits}, {other.encoding_limits}) && ... + isequal({self.trajectory}, {other.trajectory}) && ... + isequal({self.trajectory_description}, {other.trajectory_description}) && ... + isequal({self.parallel_imaging}, {other.parallel_imaging}) && ... + isequal({self.echo_train_length}, {other.echo_train_length}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ExperimentalConditionsType.m b/matlab/toolbox/+mrd/ExperimentalConditionsType.m index b943f71d..0537c66b 100644 --- a/matlab/toolbox/+mrd/ExperimentalConditionsType.m +++ b/matlab/toolbox/+mrd/ExperimentalConditionsType.m @@ -16,12 +16,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.ExperimentalConditionsType") && ... - isequal(self.h1resonance_frequency_hz, other.h1resonance_frequency_hz); + isequal({self.h1resonance_frequency_hz}, {other.h1resonance_frequency_hz}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/FieldOfViewMm.m b/matlab/toolbox/+mrd/FieldOfViewMm.m index ea000991..918b46f1 100644 --- a/matlab/toolbox/+mrd/FieldOfViewMm.m +++ b/matlab/toolbox/+mrd/FieldOfViewMm.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.FieldOfViewMm") && ... - isequal(self.x, other.x) && ... - isequal(self.y, other.y) && ... - isequal(self.z, other.z); + isequal({self.x}, {other.x}) && ... + isequal({self.y}, {other.y}) && ... + isequal({self.z}, {other.z}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/GradientDirectionType.m b/matlab/toolbox/+mrd/GradientDirectionType.m index 5add80d0..a3b6a7fa 100644 --- a/matlab/toolbox/+mrd/GradientDirectionType.m +++ b/matlab/toolbox/+mrd/GradientDirectionType.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.GradientDirectionType") && ... - isequal(self.rl, other.rl) && ... - isequal(self.ap, other.ap) && ... - isequal(self.fh, other.fh); + isequal({self.rl}, {other.rl}) && ... + isequal({self.ap}, {other.ap}) && ... + isequal({self.fh}, {other.fh}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/Header.m b/matlab/toolbox/+mrd/Header.m index 856d4692..daf15882 100644 --- a/matlab/toolbox/+mrd/Header.m +++ b/matlab/toolbox/+mrd/Header.m @@ -43,21 +43,25 @@ function res = eq(self, other) res = ... isa(other, "mrd.Header") && ... - isequal(self.version, other.version) && ... - isequal(self.subject_information, other.subject_information) && ... - isequal(self.study_information, other.study_information) && ... - isequal(self.measurement_information, other.measurement_information) && ... - isequal(self.acquisition_system_information, other.acquisition_system_information) && ... - isequal(self.experimental_conditions, other.experimental_conditions) && ... - isequal(self.encoding, other.encoding) && ... - isequal(self.sequence_parameters, other.sequence_parameters) && ... - isequal(self.user_parameters, other.user_parameters) && ... - isequal(self.waveform_information, other.waveform_information); + isequal({self.version}, {other.version}) && ... + isequal({self.subject_information}, {other.subject_information}) && ... + isequal({self.study_information}, {other.study_information}) && ... + isequal({self.measurement_information}, {other.measurement_information}) && ... + isequal({self.acquisition_system_information}, {other.acquisition_system_information}) && ... + isequal({self.experimental_conditions}, {other.experimental_conditions}) && ... + isequal({self.encoding}, {other.encoding}) && ... + isequal({self.sequence_parameters}, {other.sequence_parameters}) && ... + isequal({self.user_parameters}, {other.user_parameters}) && ... + isequal({self.waveform_information}, {other.waveform_information}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/Image.m b/matlab/toolbox/+mrd/Image.m index bd2f37a6..7869313a 100644 --- a/matlab/toolbox/+mrd/Image.m +++ b/matlab/toolbox/+mrd/Image.m @@ -15,7 +15,7 @@ arguments kwargs.head; kwargs.data; - kwargs.meta = dictionary; + kwargs.meta = yardl.Map; end if ~isfield(kwargs, "head") throw(yardl.TypeError("Missing required keyword argument 'head'")) @@ -52,14 +52,32 @@ function res = eq(self, other) res = ... isa(other, "mrd.Image") && ... - isequal(self.head, other.head) && ... - isequal(self.data, other.data) && ... - isequal(self.meta, other.meta); + isequal({self.head}, {other.head}) && ... + isequal({self.data}, {other.data}) && ... + isequal({self.meta}, {other.meta}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end + methods (Static) + function z = zeros(varargin) + elem = mrd.Image(head=yardl.None, data=yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end end diff --git a/matlab/toolbox/+mrd/ImageArray.m b/matlab/toolbox/+mrd/ImageArray.m index b78621fb..2484b5c9 100644 --- a/matlab/toolbox/+mrd/ImageArray.m +++ b/matlab/toolbox/+mrd/ImageArray.m @@ -11,9 +11,9 @@ methods function self = ImageArray(kwargs) arguments - kwargs.data = single.empty(0, 0, 0, 0, 0, 0, 0); - kwargs.headers = mrd.ImageHeader.empty(0, 0, 0); - kwargs.meta = mrd.ImageMeta.empty(0, 0, 0); + kwargs.data = single.empty(); + kwargs.headers = mrd.ImageHeader.empty(); + kwargs.meta = mrd.ImageMeta.empty(); kwargs.waveforms = mrd.WaveformUint32.empty(); end self.data = kwargs.data; @@ -25,15 +25,19 @@ function res = eq(self, other) res = ... isa(other, "mrd.ImageArray") && ... - isequal(self.data, other.data) && ... - isequal(self.headers, other.headers) && ... - isequal(self.meta, other.meta) && ... - isequal(self.waveforms, other.waveforms); + isequal({self.data}, {other.data}) && ... + isequal({self.headers}, {other.headers}) && ... + isequal({self.meta}, {other.meta}) && ... + isequal({self.waveforms}, {other.waveforms}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ImageComplexDouble.m b/matlab/toolbox/+mrd/ImageComplexDouble.m index 7333478c..7eb3397e 100644 --- a/matlab/toolbox/+mrd/ImageComplexDouble.m +++ b/matlab/toolbox/+mrd/ImageComplexDouble.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageComplexDouble(varargin) - c = mrd.Image(varargin{:}); +classdef ImageComplexDouble < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageComplexFloat.m b/matlab/toolbox/+mrd/ImageComplexFloat.m index e6d0b0f7..62f86c29 100644 --- a/matlab/toolbox/+mrd/ImageComplexFloat.m +++ b/matlab/toolbox/+mrd/ImageComplexFloat.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageComplexFloat(varargin) - c = mrd.Image(varargin{:}); +classdef ImageComplexFloat < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageData.m b/matlab/toolbox/+mrd/ImageData.m deleted file mode 100644 index 2527eac5..00000000 --- a/matlab/toolbox/+mrd/ImageData.m +++ /dev/null @@ -1,5 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = ImageData(array) - a = array; -end diff --git a/matlab/toolbox/+mrd/ImageDouble.m b/matlab/toolbox/+mrd/ImageDouble.m index 3a645f83..eae610ca 100644 --- a/matlab/toolbox/+mrd/ImageDouble.m +++ b/matlab/toolbox/+mrd/ImageDouble.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageDouble(varargin) - c = mrd.Image(varargin{:}); +classdef ImageDouble < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageFloat.m b/matlab/toolbox/+mrd/ImageFloat.m index ef7cffd7..0e00d008 100644 --- a/matlab/toolbox/+mrd/ImageFloat.m +++ b/matlab/toolbox/+mrd/ImageFloat.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageFloat(varargin) - c = mrd.Image(varargin{:}); +classdef ImageFloat < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageHeader.m b/matlab/toolbox/+mrd/ImageHeader.m index 9556abd6..5667c23b 100644 --- a/matlab/toolbox/+mrd/ImageHeader.m +++ b/matlab/toolbox/+mrd/ImageHeader.m @@ -100,32 +100,50 @@ function res = eq(self, other) res = ... isa(other, "mrd.ImageHeader") && ... - isequal(self.flags, other.flags) && ... - isequal(self.measurement_uid, other.measurement_uid) && ... - isequal(self.field_of_view, other.field_of_view) && ... - isequal(self.position, other.position) && ... - isequal(self.col_dir, other.col_dir) && ... - isequal(self.line_dir, other.line_dir) && ... - isequal(self.slice_dir, other.slice_dir) && ... - isequal(self.patient_table_position, other.patient_table_position) && ... - isequal(self.average, other.average) && ... - isequal(self.slice, other.slice) && ... - isequal(self.contrast, other.contrast) && ... - isequal(self.phase, other.phase) && ... - isequal(self.repetition, other.repetition) && ... - isequal(self.set, other.set) && ... - isequal(self.acquisition_time_stamp_ns, other.acquisition_time_stamp_ns) && ... - isequal(self.physiology_time_stamp_ns, other.physiology_time_stamp_ns) && ... - isequal(self.image_type, other.image_type) && ... - isequal(self.image_index, other.image_index) && ... - isequal(self.image_series_index, other.image_series_index) && ... - isequal(self.user_int, other.user_int) && ... - isequal(self.user_float, other.user_float); + isequal({self.flags}, {other.flags}) && ... + isequal({self.measurement_uid}, {other.measurement_uid}) && ... + isequal({self.field_of_view}, {other.field_of_view}) && ... + isequal({self.position}, {other.position}) && ... + isequal({self.col_dir}, {other.col_dir}) && ... + isequal({self.line_dir}, {other.line_dir}) && ... + isequal({self.slice_dir}, {other.slice_dir}) && ... + isequal({self.patient_table_position}, {other.patient_table_position}) && ... + isequal({self.average}, {other.average}) && ... + isequal({self.slice}, {other.slice}) && ... + isequal({self.contrast}, {other.contrast}) && ... + isequal({self.phase}, {other.phase}) && ... + isequal({self.repetition}, {other.repetition}) && ... + isequal({self.set}, {other.set}) && ... + isequal({self.acquisition_time_stamp_ns}, {other.acquisition_time_stamp_ns}) && ... + isequal({self.physiology_time_stamp_ns}, {other.physiology_time_stamp_ns}) && ... + isequal({self.image_type}, {other.image_type}) && ... + isequal({self.image_index}, {other.image_index}) && ... + isequal({self.image_series_index}, {other.image_series_index}) && ... + isequal({self.user_int}, {other.user_int}) && ... + isequal({self.user_float}, {other.user_float}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end + methods (Static) + function z = zeros(varargin) + elem = mrd.ImageHeader(image_type=yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end end diff --git a/matlab/toolbox/+mrd/ImageInt16.m b/matlab/toolbox/+mrd/ImageInt16.m index 831b66e1..20694c34 100644 --- a/matlab/toolbox/+mrd/ImageInt16.m +++ b/matlab/toolbox/+mrd/ImageInt16.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageInt16(varargin) - c = mrd.Image(varargin{:}); +classdef ImageInt16 < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageInt32.m b/matlab/toolbox/+mrd/ImageInt32.m index d4ee4eb5..1021d20d 100644 --- a/matlab/toolbox/+mrd/ImageInt32.m +++ b/matlab/toolbox/+mrd/ImageInt32.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageInt32(varargin) - c = mrd.Image(varargin{:}); +classdef ImageInt32 < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageMeta.m b/matlab/toolbox/+mrd/ImageMeta.m index d87112a8..98ae909c 100644 --- a/matlab/toolbox/+mrd/ImageMeta.m +++ b/matlab/toolbox/+mrd/ImageMeta.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function m = ImageMeta(varargin) - m = dictionary(varargin{:}); +classdef ImageMeta < yardl.Map end diff --git a/matlab/toolbox/+mrd/ImageMetaValue.m b/matlab/toolbox/+mrd/ImageMetaValue.m index 90cddec1..c09285ca 100644 --- a/matlab/toolbox/+mrd/ImageMetaValue.m +++ b/matlab/toolbox/+mrd/ImageMetaValue.m @@ -42,7 +42,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.ImageMetaValue") && isequal(self.index, other.index) && isequal(self.value, other.value); + eq = isa(other, "mrd.ImageMetaValue") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/ImageUint16.m b/matlab/toolbox/+mrd/ImageUint16.m index d1488c7e..66e4cc58 100644 --- a/matlab/toolbox/+mrd/ImageUint16.m +++ b/matlab/toolbox/+mrd/ImageUint16.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageUint16(varargin) - c = mrd.Image(varargin{:}); +classdef ImageUint16 < mrd.Image end diff --git a/matlab/toolbox/+mrd/ImageUint32.m b/matlab/toolbox/+mrd/ImageUint32.m index 7b81e088..bc0aa907 100644 --- a/matlab/toolbox/+mrd/ImageUint32.m +++ b/matlab/toolbox/+mrd/ImageUint32.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = ImageUint32(varargin) - c = mrd.Image(varargin{:}); +classdef ImageUint32 < mrd.Image end diff --git a/matlab/toolbox/+mrd/LimitType.m b/matlab/toolbox/+mrd/LimitType.m index fbdffb90..b589b272 100644 --- a/matlab/toolbox/+mrd/LimitType.m +++ b/matlab/toolbox/+mrd/LimitType.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.LimitType") && ... - isequal(self.minimum, other.minimum) && ... - isequal(self.maximum, other.maximum) && ... - isequal(self.center, other.center); + isequal({self.minimum}, {other.minimum}) && ... + isequal({self.maximum}, {other.maximum}) && ... + isequal({self.center}, {other.center}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/MatrixSizeType.m b/matlab/toolbox/+mrd/MatrixSizeType.m index fde97bdb..d089ab88 100644 --- a/matlab/toolbox/+mrd/MatrixSizeType.m +++ b/matlab/toolbox/+mrd/MatrixSizeType.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.MatrixSizeType") && ... - isequal(self.x, other.x) && ... - isequal(self.y, other.y) && ... - isequal(self.z, other.z); + isequal({self.x}, {other.x}) && ... + isequal({self.y}, {other.y}) && ... + isequal({self.z}, {other.z}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/MeasurementDependencyType.m b/matlab/toolbox/+mrd/MeasurementDependencyType.m index 68e3b4b7..851066cf 100644 --- a/matlab/toolbox/+mrd/MeasurementDependencyType.m +++ b/matlab/toolbox/+mrd/MeasurementDependencyType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.MeasurementDependencyType") && ... - isequal(self.dependency_type, other.dependency_type) && ... - isequal(self.measurement_id, other.measurement_id); + isequal({self.dependency_type}, {other.dependency_type}) && ... + isequal({self.measurement_id}, {other.measurement_id}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/MeasurementInformationType.m b/matlab/toolbox/+mrd/MeasurementInformationType.m index a3f87c88..5344482f 100644 --- a/matlab/toolbox/+mrd/MeasurementInformationType.m +++ b/matlab/toolbox/+mrd/MeasurementInformationType.m @@ -52,24 +52,28 @@ function res = eq(self, other) res = ... isa(other, "mrd.MeasurementInformationType") && ... - isequal(self.measurement_id, other.measurement_id) && ... - isequal(self.series_date, other.series_date) && ... - isequal(self.series_time, other.series_time) && ... - isequal(self.patient_position, other.patient_position) && ... - isequal(self.relative_table_position, other.relative_table_position) && ... - isequal(self.initial_series_number, other.initial_series_number) && ... - isequal(self.protocol_name, other.protocol_name) && ... - isequal(self.sequence_name, other.sequence_name) && ... - isequal(self.series_description, other.series_description) && ... - isequal(self.measurement_dependency, other.measurement_dependency) && ... - isequal(self.series_instance_uid_root, other.series_instance_uid_root) && ... - isequal(self.frame_of_reference_uid, other.frame_of_reference_uid) && ... - isequal(self.referenced_image_sequence, other.referenced_image_sequence); + isequal({self.measurement_id}, {other.measurement_id}) && ... + isequal({self.series_date}, {other.series_date}) && ... + isequal({self.series_time}, {other.series_time}) && ... + isequal({self.patient_position}, {other.patient_position}) && ... + isequal({self.relative_table_position}, {other.relative_table_position}) && ... + isequal({self.initial_series_number}, {other.initial_series_number}) && ... + isequal({self.protocol_name}, {other.protocol_name}) && ... + isequal({self.sequence_name}, {other.sequence_name}) && ... + isequal({self.series_description}, {other.series_description}) && ... + isequal({self.measurement_dependency}, {other.measurement_dependency}) && ... + isequal({self.series_instance_uid_root}, {other.series_instance_uid_root}) && ... + isequal({self.frame_of_reference_uid}, {other.frame_of_reference_uid}) && ... + isequal({self.referenced_image_sequence}, {other.referenced_image_sequence}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m b/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m index 76e833c7..550c6101 100644 --- a/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m +++ b/matlab/toolbox/+mrd/MrdNoiseCovarianceReaderBase.m @@ -4,16 +4,21 @@ classdef MrdNoiseCovarianceReaderBase < handle properties (Access=protected) state_ + skip_completed_check_ end methods - function self = MrdNoiseCovarianceReaderBase() + function self = MrdNoiseCovarianceReaderBase(options) + arguments + options.skip_completed_check (1,1) logical = false + end self.state_ = 0; + self.skip_completed_check_ = options.skip_completed_check; end function close(self) self.close_(); - if self.state_ ~= 1 + if ~self.skip_completed_check_ && self.state_ ~= 1 expected_method = self.state_to_method_name_(self.state_); throw(yardl.ProtocolError("Protocol reader closed before all data was consumed. Expected call to '%s'.", expected_method)); end diff --git a/matlab/toolbox/+mrd/MrdReaderBase.m b/matlab/toolbox/+mrd/MrdReaderBase.m index 9396b5b8..6a4d6858 100644 --- a/matlab/toolbox/+mrd/MrdReaderBase.m +++ b/matlab/toolbox/+mrd/MrdReaderBase.m @@ -4,16 +4,21 @@ classdef MrdReaderBase < handle properties (Access=protected) state_ + skip_completed_check_ end methods - function self = MrdReaderBase() + function self = MrdReaderBase(options) + arguments + options.skip_completed_check (1,1) logical = false + end self.state_ = 0; + self.skip_completed_check_ = options.skip_completed_check; end function close(self) self.close_(); - if self.state_ ~= 2 + if ~self.skip_completed_check_ && self.state_ ~= 2 expected_method = self.state_to_method_name_(self.state_); throw(yardl.ProtocolError("Protocol reader closed before all data was consumed. Expected call to '%s'.", expected_method)); end diff --git a/matlab/toolbox/+mrd/MultibandSpacingType.m b/matlab/toolbox/+mrd/MultibandSpacingType.m index 3b3537d0..5a8a7a32 100644 --- a/matlab/toolbox/+mrd/MultibandSpacingType.m +++ b/matlab/toolbox/+mrd/MultibandSpacingType.m @@ -16,12 +16,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.MultibandSpacingType") && ... - isequal(self.d_z, other.d_z); + isequal({self.d_z}, {other.d_z}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/MultibandType.m b/matlab/toolbox/+mrd/MultibandType.m index 6758bee2..dabff58d 100644 --- a/matlab/toolbox/+mrd/MultibandType.m +++ b/matlab/toolbox/+mrd/MultibandType.m @@ -28,16 +28,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.MultibandType") && ... - isequal(self.spacing, other.spacing) && ... - isequal(self.delta_kz, other.delta_kz) && ... - isequal(self.multiband_factor, other.multiband_factor) && ... - isequal(self.calibration, other.calibration) && ... - isequal(self.calibration_encoding, other.calibration_encoding); + isequal({self.spacing}, {other.spacing}) && ... + isequal({self.delta_kz}, {other.delta_kz}) && ... + isequal({self.multiband_factor}, {other.multiband_factor}) && ... + isequal({self.calibration}, {other.calibration}) && ... + isequal({self.calibration_encoding}, {other.calibration_encoding}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/NoiseCovariance.m b/matlab/toolbox/+mrd/NoiseCovariance.m index 6383c5b9..e081df3a 100644 --- a/matlab/toolbox/+mrd/NoiseCovariance.m +++ b/matlab/toolbox/+mrd/NoiseCovariance.m @@ -21,7 +21,7 @@ kwargs.receiver_noise_bandwidth = single(0); kwargs.noise_dwell_time_ns = uint64(0); kwargs.sample_count = uint64(0); - kwargs.matrix = single.empty(0, 0); + kwargs.matrix = single.empty(); end self.coil_labels = kwargs.coil_labels; self.receiver_noise_bandwidth = kwargs.receiver_noise_bandwidth; @@ -33,16 +33,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.NoiseCovariance") && ... - isequal(self.coil_labels, other.coil_labels) && ... - isequal(self.receiver_noise_bandwidth, other.receiver_noise_bandwidth) && ... - isequal(self.noise_dwell_time_ns, other.noise_dwell_time_ns) && ... - isequal(self.sample_count, other.sample_count) && ... - isequal(self.matrix, other.matrix); + isequal({self.coil_labels}, {other.coil_labels}) && ... + isequal({self.receiver_noise_bandwidth}, {other.receiver_noise_bandwidth}) && ... + isequal({self.noise_dwell_time_ns}, {other.noise_dwell_time_ns}) && ... + isequal({self.sample_count}, {other.sample_count}) && ... + isequal({self.matrix}, {other.matrix}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ParallelImagingType.m b/matlab/toolbox/+mrd/ParallelImagingType.m index 31f0ca80..4c0802a0 100644 --- a/matlab/toolbox/+mrd/ParallelImagingType.m +++ b/matlab/toolbox/+mrd/ParallelImagingType.m @@ -25,15 +25,19 @@ function res = eq(self, other) res = ... isa(other, "mrd.ParallelImagingType") && ... - isequal(self.acceleration_factor, other.acceleration_factor) && ... - isequal(self.calibration_mode, other.calibration_mode) && ... - isequal(self.interleaving_dimension, other.interleaving_dimension) && ... - isequal(self.multiband, other.multiband); + isequal({self.acceleration_factor}, {other.acceleration_factor}) && ... + isequal({self.calibration_mode}, {other.calibration_mode}) && ... + isequal({self.interleaving_dimension}, {other.interleaving_dimension}) && ... + isequal({self.multiband}, {other.multiband}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconAssembly.m b/matlab/toolbox/+mrd/ReconAssembly.m index 1d68acac..89f8ae5f 100644 --- a/matlab/toolbox/+mrd/ReconAssembly.m +++ b/matlab/toolbox/+mrd/ReconAssembly.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconAssembly") && ... - isequal(self.data, other.data) && ... - isequal(self.ref, other.ref); + isequal({self.data}, {other.data}) && ... + isequal({self.ref}, {other.ref}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconBuffer.m b/matlab/toolbox/+mrd/ReconBuffer.m index 779ebd12..479a3947 100644 --- a/matlab/toolbox/+mrd/ReconBuffer.m +++ b/matlab/toolbox/+mrd/ReconBuffer.m @@ -17,10 +17,10 @@ methods function self = ReconBuffer(kwargs) arguments - kwargs.data = single.empty(0, 0, 0, 0, 0, 0, 0); - kwargs.trajectory = single.empty(0, 0, 0, 0, 0, 0, 0); + kwargs.data = single.empty(); + kwargs.trajectory = single.empty(); kwargs.density = yardl.None; - kwargs.headers = mrd.AcquisitionHeader.empty(0, 0, 0, 0, 0); + kwargs.headers = mrd.AcquisitionHeader.empty(); kwargs.sampling = mrd.SamplingDescription(); end self.data = kwargs.data; @@ -33,16 +33,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconBuffer") && ... - isequal(self.data, other.data) && ... - isequal(self.trajectory, other.trajectory) && ... - isequal(self.density, other.density) && ... - isequal(self.headers, other.headers) && ... - isequal(self.sampling, other.sampling); + isequal({self.data}, {other.data}) && ... + isequal({self.trajectory}, {other.trajectory}) && ... + isequal({self.density}, {other.density}) && ... + isequal({self.headers}, {other.headers}) && ... + isequal({self.sampling}, {other.sampling}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReconData.m b/matlab/toolbox/+mrd/ReconData.m index 054b0ccf..3478d86b 100644 --- a/matlab/toolbox/+mrd/ReconData.m +++ b/matlab/toolbox/+mrd/ReconData.m @@ -16,12 +16,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReconData") && ... - isequal(self.buffers, other.buffers); + isequal({self.buffers}, {other.buffers}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ReferencedImageSequenceType.m b/matlab/toolbox/+mrd/ReferencedImageSequenceType.m index a3827d60..98fcac30 100644 --- a/matlab/toolbox/+mrd/ReferencedImageSequenceType.m +++ b/matlab/toolbox/+mrd/ReferencedImageSequenceType.m @@ -16,12 +16,16 @@ function res = eq(self, other) res = ... isa(other, "mrd.ReferencedImageSequenceType") && ... - isequal(self.referenced_sop_instance_uid, other.referenced_sop_instance_uid); + isequal({self.referenced_sop_instance_uid}, {other.referenced_sop_instance_uid}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/SamplingDescription.m b/matlab/toolbox/+mrd/SamplingDescription.m index 46a639b3..1785c42b 100644 --- a/matlab/toolbox/+mrd/SamplingDescription.m +++ b/matlab/toolbox/+mrd/SamplingDescription.m @@ -28,16 +28,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.SamplingDescription") && ... - isequal(self.encoded_fov, other.encoded_fov) && ... - isequal(self.recon_fov, other.recon_fov) && ... - isequal(self.encoded_matrix, other.encoded_matrix) && ... - isequal(self.recon_matrix, other.recon_matrix) && ... - isequal(self.sampling_limits, other.sampling_limits); + isequal({self.encoded_fov}, {other.encoded_fov}) && ... + isequal({self.recon_fov}, {other.recon_fov}) && ... + isequal({self.encoded_matrix}, {other.encoded_matrix}) && ... + isequal({self.recon_matrix}, {other.recon_matrix}) && ... + isequal({self.sampling_limits}, {other.sampling_limits}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/SamplingLimits.m b/matlab/toolbox/+mrd/SamplingLimits.m index 33a53edc..7cfccbc8 100644 --- a/matlab/toolbox/+mrd/SamplingLimits.m +++ b/matlab/toolbox/+mrd/SamplingLimits.m @@ -23,14 +23,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.SamplingLimits") && ... - isequal(self.kspace_encoding_step_0, other.kspace_encoding_step_0) && ... - isequal(self.kspace_encoding_step_1, other.kspace_encoding_step_1) && ... - isequal(self.kspace_encoding_step_2, other.kspace_encoding_step_2); + isequal({self.kspace_encoding_step_0}, {other.kspace_encoding_step_0}) && ... + isequal({self.kspace_encoding_step_1}, {other.kspace_encoding_step_1}) && ... + isequal({self.kspace_encoding_step_2}, {other.kspace_encoding_step_2}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/SequenceParametersType.m b/matlab/toolbox/+mrd/SequenceParametersType.m index 0b9e5538..fc9e9995 100644 --- a/matlab/toolbox/+mrd/SequenceParametersType.m +++ b/matlab/toolbox/+mrd/SequenceParametersType.m @@ -40,20 +40,24 @@ function res = eq(self, other) res = ... isa(other, "mrd.SequenceParametersType") && ... - isequal(self.t_r, other.t_r) && ... - isequal(self.t_e, other.t_e) && ... - isequal(self.t_i, other.t_i) && ... - isequal(self.flip_angle_deg, other.flip_angle_deg) && ... - isequal(self.sequence_type, other.sequence_type) && ... - isequal(self.echo_spacing, other.echo_spacing) && ... - isequal(self.diffusion_dimension, other.diffusion_dimension) && ... - isequal(self.diffusion, other.diffusion) && ... - isequal(self.diffusion_scheme, other.diffusion_scheme); + isequal({self.t_r}, {other.t_r}) && ... + isequal({self.t_e}, {other.t_e}) && ... + isequal({self.t_i}, {other.t_i}) && ... + isequal({self.flip_angle_deg}, {other.flip_angle_deg}) && ... + isequal({self.sequence_type}, {other.sequence_type}) && ... + isequal({self.echo_spacing}, {other.echo_spacing}) && ... + isequal({self.diffusion_dimension}, {other.diffusion_dimension}) && ... + isequal({self.diffusion}, {other.diffusion}) && ... + isequal({self.diffusion_scheme}, {other.diffusion_scheme}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/StreamItem.m b/matlab/toolbox/+mrd/StreamItem.m index ac4da357..b803e8d8 100644 --- a/matlab/toolbox/+mrd/StreamItem.m +++ b/matlab/toolbox/+mrd/StreamItem.m @@ -130,7 +130,7 @@ end function eq = eq(self, other) - eq = isa(other, "mrd.StreamItem") && isequal(self.index, other.index) && isequal(self.value, other.value); + eq = isa(other, "mrd.StreamItem") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); end function ne = ne(self, other) diff --git a/matlab/toolbox/+mrd/StudyInformationType.m b/matlab/toolbox/+mrd/StudyInformationType.m index d3b7e260..6a01936a 100644 --- a/matlab/toolbox/+mrd/StudyInformationType.m +++ b/matlab/toolbox/+mrd/StudyInformationType.m @@ -37,19 +37,23 @@ function res = eq(self, other) res = ... isa(other, "mrd.StudyInformationType") && ... - isequal(self.study_date, other.study_date) && ... - isequal(self.study_time, other.study_time) && ... - isequal(self.study_id, other.study_id) && ... - isequal(self.accession_number, other.accession_number) && ... - isequal(self.referring_physician_name, other.referring_physician_name) && ... - isequal(self.study_description, other.study_description) && ... - isequal(self.study_instance_uid, other.study_instance_uid) && ... - isequal(self.body_part_examined, other.body_part_examined); + isequal({self.study_date}, {other.study_date}) && ... + isequal({self.study_time}, {other.study_time}) && ... + isequal({self.study_id}, {other.study_id}) && ... + isequal({self.accession_number}, {other.accession_number}) && ... + isequal({self.referring_physician_name}, {other.referring_physician_name}) && ... + isequal({self.study_description}, {other.study_description}) && ... + isequal({self.study_instance_uid}, {other.study_instance_uid}) && ... + isequal({self.body_part_examined}, {other.body_part_examined}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/SubjectInformationType.m b/matlab/toolbox/+mrd/SubjectInformationType.m index 68ee9b79..ade3d5e2 100644 --- a/matlab/toolbox/+mrd/SubjectInformationType.m +++ b/matlab/toolbox/+mrd/SubjectInformationType.m @@ -31,17 +31,21 @@ function res = eq(self, other) res = ... isa(other, "mrd.SubjectInformationType") && ... - isequal(self.patient_name, other.patient_name) && ... - isequal(self.patient_weight_kg, other.patient_weight_kg) && ... - isequal(self.patient_height_m, other.patient_height_m) && ... - isequal(self.patient_id, other.patient_id) && ... - isequal(self.patient_birthdate, other.patient_birthdate) && ... - isequal(self.patient_gender, other.patient_gender); + isequal({self.patient_name}, {other.patient_name}) && ... + isequal({self.patient_weight_kg}, {other.patient_weight_kg}) && ... + isequal({self.patient_height_m}, {other.patient_height_m}) && ... + isequal({self.patient_id}, {other.patient_id}) && ... + isequal({self.patient_birthdate}, {other.patient_birthdate}) && ... + isequal({self.patient_gender}, {other.patient_gender}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/ThreeDimensionalFloat.m b/matlab/toolbox/+mrd/ThreeDimensionalFloat.m index cddd2acd..347ae440 100644 --- a/matlab/toolbox/+mrd/ThreeDimensionalFloat.m +++ b/matlab/toolbox/+mrd/ThreeDimensionalFloat.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.ThreeDimensionalFloat") && ... - isequal(self.x, other.x) && ... - isequal(self.y, other.y) && ... - isequal(self.z, other.z); + isequal({self.x}, {other.x}) && ... + isequal({self.y}, {other.y}) && ... + isequal({self.z}, {other.z}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/TrajectoryData.m b/matlab/toolbox/+mrd/TrajectoryData.m deleted file mode 100644 index fc4281b6..00000000 --- a/matlab/toolbox/+mrd/TrajectoryData.m +++ /dev/null @@ -1,8 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = TrajectoryData(array) - arguments - array single - end - a = array; -end diff --git a/matlab/toolbox/+mrd/TrajectoryDescriptionType.m b/matlab/toolbox/+mrd/TrajectoryDescriptionType.m index e328bee8..5a6ba871 100644 --- a/matlab/toolbox/+mrd/TrajectoryDescriptionType.m +++ b/matlab/toolbox/+mrd/TrajectoryDescriptionType.m @@ -28,16 +28,20 @@ function res = eq(self, other) res = ... isa(other, "mrd.TrajectoryDescriptionType") && ... - isequal(self.identifier, other.identifier) && ... - isequal(self.user_parameter_long, other.user_parameter_long) && ... - isequal(self.user_parameter_double, other.user_parameter_double) && ... - isequal(self.user_parameter_string, other.user_parameter_string) && ... - isequal(self.comment, other.comment); + isequal({self.identifier}, {other.identifier}) && ... + isequal({self.user_parameter_long}, {other.user_parameter_long}) && ... + isequal({self.user_parameter_double}, {other.user_parameter_double}) && ... + isequal({self.user_parameter_string}, {other.user_parameter_string}) && ... + isequal({self.comment}, {other.comment}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterBase64Type.m b/matlab/toolbox/+mrd/UserParameterBase64Type.m index 3ef9b2ff..de360eef 100644 --- a/matlab/toolbox/+mrd/UserParameterBase64Type.m +++ b/matlab/toolbox/+mrd/UserParameterBase64Type.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterBase64Type") && ... - isequal(self.name, other.name) && ... - isequal(self.value, other.value); + isequal({self.name}, {other.name}) && ... + isequal({self.value}, {other.value}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterDoubleType.m b/matlab/toolbox/+mrd/UserParameterDoubleType.m index c0d96fe1..70fd6f01 100644 --- a/matlab/toolbox/+mrd/UserParameterDoubleType.m +++ b/matlab/toolbox/+mrd/UserParameterDoubleType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterDoubleType") && ... - isequal(self.name, other.name) && ... - isequal(self.value, other.value); + isequal({self.name}, {other.name}) && ... + isequal({self.value}, {other.value}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterLongType.m b/matlab/toolbox/+mrd/UserParameterLongType.m index 16553e1c..c927934b 100644 --- a/matlab/toolbox/+mrd/UserParameterLongType.m +++ b/matlab/toolbox/+mrd/UserParameterLongType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterLongType") && ... - isequal(self.name, other.name) && ... - isequal(self.value, other.value); + isequal({self.name}, {other.name}) && ... + isequal({self.value}, {other.value}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParameterStringType.m b/matlab/toolbox/+mrd/UserParameterStringType.m index f201dade..c4ca6c52 100644 --- a/matlab/toolbox/+mrd/UserParameterStringType.m +++ b/matlab/toolbox/+mrd/UserParameterStringType.m @@ -19,13 +19,17 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParameterStringType") && ... - isequal(self.name, other.name) && ... - isequal(self.value, other.value); + isequal({self.name}, {other.name}) && ... + isequal({self.value}, {other.value}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/UserParametersType.m b/matlab/toolbox/+mrd/UserParametersType.m index a9ef3a2b..c31d4a2e 100644 --- a/matlab/toolbox/+mrd/UserParametersType.m +++ b/matlab/toolbox/+mrd/UserParametersType.m @@ -25,15 +25,19 @@ function res = eq(self, other) res = ... isa(other, "mrd.UserParametersType") && ... - isequal(self.user_parameter_long, other.user_parameter_long) && ... - isequal(self.user_parameter_double, other.user_parameter_double) && ... - isequal(self.user_parameter_string, other.user_parameter_string) && ... - isequal(self.user_parameter_base64, other.user_parameter_base64); + isequal({self.user_parameter_long}, {other.user_parameter_long}) && ... + isequal({self.user_parameter_double}, {other.user_parameter_double}) && ... + isequal({self.user_parameter_string}, {other.user_parameter_string}) && ... + isequal({self.user_parameter_base64}, {other.user_parameter_base64}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/Waveform.m b/matlab/toolbox/+mrd/Waveform.m index e53c4e53..4decaea0 100644 --- a/matlab/toolbox/+mrd/Waveform.m +++ b/matlab/toolbox/+mrd/Waveform.m @@ -55,18 +55,36 @@ function res = eq(self, other) res = ... isa(other, "mrd.Waveform") && ... - isequal(self.flags, other.flags) && ... - isequal(self.measurement_uid, other.measurement_uid) && ... - isequal(self.scan_counter, other.scan_counter) && ... - isequal(self.time_stamp_ns, other.time_stamp_ns) && ... - isequal(self.sample_time_ns, other.sample_time_ns) && ... - isequal(self.waveform_id, other.waveform_id) && ... - isequal(self.data, other.data); + isequal({self.flags}, {other.flags}) && ... + isequal({self.measurement_uid}, {other.measurement_uid}) && ... + isequal({self.scan_counter}, {other.scan_counter}) && ... + isequal({self.time_stamp_ns}, {other.time_stamp_ns}) && ... + isequal({self.sample_time_ns}, {other.sample_time_ns}) && ... + isequal({self.waveform_id}, {other.waveform_id}) && ... + isequal({self.data}, {other.data}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end + methods (Static) + function z = zeros(varargin) + elem = mrd.Waveform(data=yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end end diff --git a/matlab/toolbox/+mrd/WaveformInformationType.m b/matlab/toolbox/+mrd/WaveformInformationType.m index 3da9a6a4..cc0fcae4 100644 --- a/matlab/toolbox/+mrd/WaveformInformationType.m +++ b/matlab/toolbox/+mrd/WaveformInformationType.m @@ -22,14 +22,18 @@ function res = eq(self, other) res = ... isa(other, "mrd.WaveformInformationType") && ... - isequal(self.waveform_name, other.waveform_name) && ... - isequal(self.waveform_type, other.waveform_type) && ... - isequal(self.user_parameters, other.user_parameters); + isequal({self.waveform_name}, {other.waveform_name}) && ... + isequal({self.waveform_type}, {other.waveform_type}) && ... + isequal({self.user_parameters}, {other.user_parameters}); end function res = ne(self, other) res = ~self.eq(other); end + + function res = isequal(self, other) + res = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+mrd/WaveformSamples.m b/matlab/toolbox/+mrd/WaveformSamples.m deleted file mode 100644 index f50765d4..00000000 --- a/matlab/toolbox/+mrd/WaveformSamples.m +++ /dev/null @@ -1,5 +0,0 @@ -% This file was generated by the "yardl" tool. DO NOT EDIT. - -function a = WaveformSamples(array) - a = array; -end diff --git a/matlab/toolbox/+mrd/WaveformUint32.m b/matlab/toolbox/+mrd/WaveformUint32.m index 1d1e028d..dfc7be73 100644 --- a/matlab/toolbox/+mrd/WaveformUint32.m +++ b/matlab/toolbox/+mrd/WaveformUint32.m @@ -1,5 +1,4 @@ % This file was generated by the "yardl" tool. DO NOT EDIT. -function c = WaveformUint32(varargin) - c = mrd.Waveform(varargin{:}); +classdef WaveformUint32 < mrd.Waveform end diff --git a/matlab/toolbox/+yardl/+binary/MapSerializer.m b/matlab/toolbox/+yardl/+binary/MapSerializer.m index 73ad04d4..e8dfcec6 100644 --- a/matlab/toolbox/+yardl/+binary/MapSerializer.m +++ b/matlab/toolbox/+yardl/+binary/MapSerializer.m @@ -17,7 +17,7 @@ function write(self, outstream, value) arguments self (1,1) outstream (1,1) yardl.binary.CodedOutputStream - value (1,1) dictionary + value (1,1) yardl.Map end count = numEntries(value); @@ -36,16 +36,16 @@ function write(self, outstream, value) function res = read(self, instream) count = instream.read_unsigned_varint(); - res = dictionary(); + res = yardl.Map(); for i = 1:count k = self.key_serializer_.read(instream); v = self.value_serializer_.read(instream); - res(k) = v; + insert(res, k, v); end end function c = get_class(~) - c = "dictionary"; + c = "yardl.Map"; end end end diff --git a/matlab/toolbox/+yardl/Date.m b/matlab/toolbox/+yardl/Date.m index ed28ebd9..cbae0f57 100644 --- a/matlab/toolbox/+yardl/Date.m +++ b/matlab/toolbox/+yardl/Date.m @@ -30,12 +30,16 @@ end eq = isa(other, 'yardl.Date') && ... - all([self.value] == [other.value]); + all([self.days_since_epoch] == [other.days_since_epoch]); end - function ne = new(self, other) + function ne = ne(self, other) ne = ~self.eq(other); end + + function isequal = isequal(self, other) + isequal = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+yardl/DateTime.m b/matlab/toolbox/+yardl/DateTime.m index 5a5ba903..af710ec0 100644 --- a/matlab/toolbox/+yardl/DateTime.m +++ b/matlab/toolbox/+yardl/DateTime.m @@ -31,12 +31,16 @@ end eq = isa(other, 'yardl.DateTime') && ... - all([self.value] == [other.value]); + all([self.nanoseconds_since_epoch] == [other.nanoseconds_since_epoch]); end - function ne = new(self, other) + function ne = ne(self, other) ne = ~self.eq(other); end + + function isequal = isequal(self, other) + isequal = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+yardl/Time.m b/matlab/toolbox/+yardl/Time.m index e00dea4d..533d5de1 100644 --- a/matlab/toolbox/+yardl/Time.m +++ b/matlab/toolbox/+yardl/Time.m @@ -35,12 +35,16 @@ end eq = isa(other, 'yardl.Time') && ... - all([self.value] == [other.value]); + all([self.nanoseconds_since_midnight] == [other.nanoseconds_since_midnight]); end - function ne = new(self, other) + function ne = ne(self, other) ne = ~self.eq(other); end + + function isequal = isequal(self, other) + isequal = all(eq(self, other)); + end end methods (Static) diff --git a/matlab/toolbox/+yardl/Union.m b/matlab/toolbox/+yardl/Union.m index 60b2750a..7079c97b 100644 --- a/matlab/toolbox/+yardl/Union.m +++ b/matlab/toolbox/+yardl/Union.m @@ -19,6 +19,10 @@ function i = index(self) i = self.index_; end + + function isequal = isequal(self, other) + isequal = all(eq(self, other)); + end end methods (Abstract) diff --git a/python/mrd/binary.py b/python/mrd/binary.py index 8ef0b6ed..618b33c7 100644 --- a/python/mrd/binary.py +++ b/python/mrd/binary.py @@ -44,8 +44,8 @@ class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase): """ - def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None: - MrdReaderBase.__init__(self) + def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None: + MrdReaderBase.__init__(self, skip_completed_check) _binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema) def _read_header(self) -> typing.Optional[Header]: @@ -76,8 +76,8 @@ class BinaryMrdNoiseCovarianceReader(_binary.BinaryProtocolReader, MrdNoiseCovar """ - def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None: - MrdNoiseCovarianceReaderBase.__init__(self) + def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None: + MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check) _binary.BinaryProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema) def _read_noise_covariance(self) -> NoiseCovariance: diff --git a/python/mrd/ndjson.py b/python/mrd/ndjson.py index c1656db0..df0a25d3 100644 --- a/python/mrd/ndjson.py +++ b/python/mrd/ndjson.py @@ -3190,8 +3190,8 @@ class NDJsonMrdReader(_ndjson.NDJsonProtocolReader, MrdReaderBase): """ - def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None: - MrdReaderBase.__init__(self) + def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None: + MrdReaderBase.__init__(self, skip_completed_check) _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdReaderBase.schema) def _read_header(self) -> typing.Optional[Header]: @@ -3228,8 +3228,8 @@ class NDJsonMrdNoiseCovarianceReader(_ndjson.NDJsonProtocolReader, MrdNoiseCovar """ - def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None: - MrdNoiseCovarianceReaderBase.__init__(self) + def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None: + MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check) _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema) def _read_noise_covariance(self) -> NoiseCovariance: diff --git a/python/mrd/protocols.py b/python/mrd/protocols.py index e1cd0a92..3e6f5fc0 100644 --- a/python/mrd/protocols.py +++ b/python/mrd/protocols.py @@ -101,12 +101,13 @@ class MrdReaderBase(abc.ABC): """ - def __init__(self) -> None: + def __init__(self, skip_completed_check: bool = False) -> None: + self._skip_completed_check = skip_completed_check self._state = 0 def close(self) -> None: self._close() - if self._state != 4: + if not self._skip_completed_check and self._state != 4: if self._state % 2 == 1: previous_method = self._state_to_method_name(self._state - 1) raise ProtocolError(f"Protocol reader closed before all data was consumed. The iterable returned by '{previous_method}' was not fully consumed.") @@ -250,12 +251,13 @@ class MrdNoiseCovarianceReaderBase(abc.ABC): """ - def __init__(self) -> None: + def __init__(self, skip_completed_check: bool = False) -> None: + self._skip_completed_check = skip_completed_check self._state = 0 def close(self) -> None: self._close() - if self._state != 2: + if not self._skip_completed_check and self._state != 2: if self._state % 2 == 1: previous_method = self._state_to_method_name(self._state - 1) raise ProtocolError(f"Protocol reader closed before all data was consumed. The iterable returned by '{previous_method}' was not fully consumed.") diff --git a/python/mrd/types.py b/python/mrd/types.py index e890b132..242964e4 100644 --- a/python/mrd/types.py +++ b/python/mrd/types.py @@ -135,10 +135,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingCounters(kspaceEncodeStep1={self.kspace_encode_step_1}, kspaceEncodeStep2={self.kspace_encode_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user={self.user})" + return f"EncodingCounters(kspace_encode_step_1={self.kspace_encode_step_1}, kspace_encode_step_2={self.kspace_encode_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user={self.user})" def __repr__(self) -> str: - return f"EncodingCounters(kspaceEncodeStep1={repr(self.kspace_encode_step_1)}, kspaceEncodeStep2={repr(self.kspace_encode_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user={repr(self.user)})" + return f"EncodingCounters(kspace_encode_step_1={repr(self.kspace_encode_step_1)}, kspace_encode_step_2={repr(self.kspace_encode_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user={repr(self.user)})" AcquisitionData = npt.NDArray[np.complex64] @@ -274,10 +274,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AcquisitionHeader(flags={self.flags}, idx={self.idx}, measurementUid={self.measurement_uid}, scanCounter={self.scan_counter}, acquisitionTimeStampNs={self.acquisition_time_stamp_ns}, physiologyTimeStampNs={self.physiology_time_stamp_ns}, channelOrder={self.channel_order}, discardPre={self.discard_pre}, discardPost={self.discard_post}, centerSample={self.center_sample}, encodingSpaceRef={self.encoding_space_ref}, sampleTimeNs={self.sample_time_ns}, position={self.position}, readDir={self.read_dir}, phaseDir={self.phase_dir}, sliceDir={self.slice_dir}, patientTablePosition={self.patient_table_position}, userInt={self.user_int}, userFloat={self.user_float})" + return f"AcquisitionHeader(flags={self.flags}, idx={self.idx}, measurement_uid={self.measurement_uid}, scan_counter={self.scan_counter}, acquisition_time_stamp_ns={self.acquisition_time_stamp_ns}, physiology_time_stamp_ns={self.physiology_time_stamp_ns}, channel_order={self.channel_order}, discard_pre={self.discard_pre}, discard_post={self.discard_post}, center_sample={self.center_sample}, encoding_space_ref={self.encoding_space_ref}, sample_time_ns={self.sample_time_ns}, position={self.position}, read_dir={self.read_dir}, phase_dir={self.phase_dir}, slice_dir={self.slice_dir}, patient_table_position={self.patient_table_position}, user_int={self.user_int}, user_float={self.user_float})" def __repr__(self) -> str: - return f"AcquisitionHeader(flags={repr(self.flags)}, idx={repr(self.idx)}, measurementUid={repr(self.measurement_uid)}, scanCounter={repr(self.scan_counter)}, acquisitionTimeStampNs={repr(self.acquisition_time_stamp_ns)}, physiologyTimeStampNs={repr(self.physiology_time_stamp_ns)}, channelOrder={repr(self.channel_order)}, discardPre={repr(self.discard_pre)}, discardPost={repr(self.discard_post)}, centerSample={repr(self.center_sample)}, encodingSpaceRef={repr(self.encoding_space_ref)}, sampleTimeNs={repr(self.sample_time_ns)}, position={repr(self.position)}, readDir={repr(self.read_dir)}, phaseDir={repr(self.phase_dir)}, sliceDir={repr(self.slice_dir)}, patientTablePosition={repr(self.patient_table_position)}, userInt={repr(self.user_int)}, userFloat={repr(self.user_float)})" + return f"AcquisitionHeader(flags={repr(self.flags)}, idx={repr(self.idx)}, measurement_uid={repr(self.measurement_uid)}, scan_counter={repr(self.scan_counter)}, acquisition_time_stamp_ns={repr(self.acquisition_time_stamp_ns)}, physiology_time_stamp_ns={repr(self.physiology_time_stamp_ns)}, channel_order={repr(self.channel_order)}, discard_pre={repr(self.discard_pre)}, discard_post={repr(self.discard_post)}, center_sample={repr(self.center_sample)}, encoding_space_ref={repr(self.encoding_space_ref)}, sample_time_ns={repr(self.sample_time_ns)}, position={repr(self.position)}, read_dir={repr(self.read_dir)}, phase_dir={repr(self.phase_dir)}, slice_dir={repr(self.slice_dir)}, patient_table_position={repr(self.patient_table_position)}, user_int={repr(self.user_int)}, user_float={repr(self.user_float)})" class Acquisition: @@ -370,10 +370,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SubjectInformationType(patientName={self.patient_name}, patientWeightKg={self.patient_weight_kg}, patientHeightM={self.patient_height_m}, patientID={self.patient_id}, patientBirthdate={self.patient_birthdate}, patientGender={self.patient_gender})" + return f"SubjectInformationType(patient_name={self.patient_name}, patient_weight_kg={self.patient_weight_kg}, patient_height_m={self.patient_height_m}, patient_id={self.patient_id}, patient_birthdate={self.patient_birthdate}, patient_gender={self.patient_gender})" def __repr__(self) -> str: - return f"SubjectInformationType(patientName={repr(self.patient_name)}, patientWeightKg={repr(self.patient_weight_kg)}, patientHeightM={repr(self.patient_height_m)}, patientID={repr(self.patient_id)}, patientBirthdate={repr(self.patient_birthdate)}, patientGender={repr(self.patient_gender)})" + return f"SubjectInformationType(patient_name={repr(self.patient_name)}, patient_weight_kg={repr(self.patient_weight_kg)}, patient_height_m={repr(self.patient_height_m)}, patient_id={repr(self.patient_id)}, patient_birthdate={repr(self.patient_birthdate)}, patient_gender={repr(self.patient_gender)})" class StudyInformationType: @@ -419,10 +419,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"StudyInformationType(studyDate={self.study_date}, studyTime={self.study_time}, studyID={self.study_id}, accessionNumber={self.accession_number}, referringPhysicianName={self.referring_physician_name}, studyDescription={self.study_description}, studyInstanceUID={self.study_instance_uid}, bodyPartExamined={self.body_part_examined})" + return f"StudyInformationType(study_date={self.study_date}, study_time={self.study_time}, study_id={self.study_id}, accession_number={self.accession_number}, referring_physician_name={self.referring_physician_name}, study_description={self.study_description}, study_instance_uid={self.study_instance_uid}, body_part_examined={self.body_part_examined})" def __repr__(self) -> str: - return f"StudyInformationType(studyDate={repr(self.study_date)}, studyTime={repr(self.study_time)}, studyID={repr(self.study_id)}, accessionNumber={repr(self.accession_number)}, referringPhysicianName={repr(self.referring_physician_name)}, studyDescription={repr(self.study_description)}, studyInstanceUID={repr(self.study_instance_uid)}, bodyPartExamined={repr(self.body_part_examined)})" + return f"StudyInformationType(study_date={repr(self.study_date)}, study_time={repr(self.study_time)}, study_id={repr(self.study_id)}, accession_number={repr(self.accession_number)}, referring_physician_name={repr(self.referring_physician_name)}, study_description={repr(self.study_description)}, study_instance_uid={repr(self.study_instance_uid)}, body_part_examined={repr(self.body_part_examined)})" class PatientPosition(yardl.OutOfRangeEnum): @@ -483,10 +483,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MeasurementDependencyType(dependencyType={self.dependency_type}, measurementID={self.measurement_id})" + return f"MeasurementDependencyType(dependency_type={self.dependency_type}, measurement_id={self.measurement_id})" def __repr__(self) -> str: - return f"MeasurementDependencyType(dependencyType={repr(self.dependency_type)}, measurementID={repr(self.measurement_id)})" + return f"MeasurementDependencyType(dependency_type={repr(self.dependency_type)}, measurement_id={repr(self.measurement_id)})" class ReferencedImageSequenceType: @@ -504,10 +504,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ReferencedImageSequenceType(referencedSOPInstanceUID={self.referenced_sop_instance_uid})" + return f"ReferencedImageSequenceType(referenced_sop_instance_uid={self.referenced_sop_instance_uid})" def __repr__(self) -> str: - return f"ReferencedImageSequenceType(referencedSOPInstanceUID={repr(self.referenced_sop_instance_uid)})" + return f"ReferencedImageSequenceType(referenced_sop_instance_uid={repr(self.referenced_sop_instance_uid)})" class MeasurementInformationType: @@ -573,10 +573,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MeasurementInformationType(measurementID={self.measurement_id}, seriesDate={self.series_date}, seriesTime={self.series_time}, patientPosition={self.patient_position}, relativeTablePosition={self.relative_table_position}, initialSeriesNumber={self.initial_series_number}, protocolName={self.protocol_name}, sequenceName={self.sequence_name}, seriesDescription={self.series_description}, measurementDependency={self.measurement_dependency}, seriesInstanceUIDRoot={self.series_instance_uid_root}, frameOfReferenceUID={self.frame_of_reference_uid}, referencedImageSequence={self.referenced_image_sequence})" + return f"MeasurementInformationType(measurement_id={self.measurement_id}, series_date={self.series_date}, series_time={self.series_time}, patient_position={self.patient_position}, relative_table_position={self.relative_table_position}, initial_series_number={self.initial_series_number}, protocol_name={self.protocol_name}, sequence_name={self.sequence_name}, series_description={self.series_description}, measurement_dependency={self.measurement_dependency}, series_instance_uid_root={self.series_instance_uid_root}, frame_of_reference_uid={self.frame_of_reference_uid}, referenced_image_sequence={self.referenced_image_sequence})" def __repr__(self) -> str: - return f"MeasurementInformationType(measurementID={repr(self.measurement_id)}, seriesDate={repr(self.series_date)}, seriesTime={repr(self.series_time)}, patientPosition={repr(self.patient_position)}, relativeTablePosition={repr(self.relative_table_position)}, initialSeriesNumber={repr(self.initial_series_number)}, protocolName={repr(self.protocol_name)}, sequenceName={repr(self.sequence_name)}, seriesDescription={repr(self.series_description)}, measurementDependency={repr(self.measurement_dependency)}, seriesInstanceUIDRoot={repr(self.series_instance_uid_root)}, frameOfReferenceUID={repr(self.frame_of_reference_uid)}, referencedImageSequence={repr(self.referenced_image_sequence)})" + return f"MeasurementInformationType(measurement_id={repr(self.measurement_id)}, series_date={repr(self.series_date)}, series_time={repr(self.series_time)}, patient_position={repr(self.patient_position)}, relative_table_position={repr(self.relative_table_position)}, initial_series_number={repr(self.initial_series_number)}, protocol_name={repr(self.protocol_name)}, sequence_name={repr(self.sequence_name)}, series_description={repr(self.series_description)}, measurement_dependency={repr(self.measurement_dependency)}, series_instance_uid_root={repr(self.series_instance_uid_root)}, frame_of_reference_uid={repr(self.frame_of_reference_uid)}, referenced_image_sequence={repr(self.referenced_image_sequence)})" class CoilLabelType: @@ -598,10 +598,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"CoilLabelType(coilNumber={self.coil_number}, coilName={self.coil_name})" + return f"CoilLabelType(coil_number={self.coil_number}, coil_name={self.coil_name})" def __repr__(self) -> str: - return f"CoilLabelType(coilNumber={repr(self.coil_number)}, coilName={repr(self.coil_name)})" + return f"CoilLabelType(coil_number={repr(self.coil_number)}, coil_name={repr(self.coil_name)})" class AcquisitionSystemInformationType: @@ -655,10 +655,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AcquisitionSystemInformationType(systemVendor={self.system_vendor}, systemModel={self.system_model}, systemFieldStrengthT={self.system_field_strength_t}, relativeReceiverNoiseBandwidth={self.relative_receiver_noise_bandwidth}, receiverChannels={self.receiver_channels}, coilLabel={self.coil_label}, institutionName={self.institution_name}, stationName={self.station_name}, deviceID={self.device_id}, deviceSerialNumber={self.device_serial_number})" + return f"AcquisitionSystemInformationType(system_vendor={self.system_vendor}, system_model={self.system_model}, system_field_strength_t={self.system_field_strength_t}, relative_receiver_noise_bandwidth={self.relative_receiver_noise_bandwidth}, receiver_channels={self.receiver_channels}, coil_label={self.coil_label}, institution_name={self.institution_name}, station_name={self.station_name}, device_id={self.device_id}, device_serial_number={self.device_serial_number})" def __repr__(self) -> str: - return f"AcquisitionSystemInformationType(systemVendor={repr(self.system_vendor)}, systemModel={repr(self.system_model)}, systemFieldStrengthT={repr(self.system_field_strength_t)}, relativeReceiverNoiseBandwidth={repr(self.relative_receiver_noise_bandwidth)}, receiverChannels={repr(self.receiver_channels)}, coilLabel={repr(self.coil_label)}, institutionName={repr(self.institution_name)}, stationName={repr(self.station_name)}, deviceID={repr(self.device_id)}, deviceSerialNumber={repr(self.device_serial_number)})" + return f"AcquisitionSystemInformationType(system_vendor={repr(self.system_vendor)}, system_model={repr(self.system_model)}, system_field_strength_t={repr(self.system_field_strength_t)}, relative_receiver_noise_bandwidth={repr(self.relative_receiver_noise_bandwidth)}, receiver_channels={repr(self.receiver_channels)}, coil_label={repr(self.coil_label)}, institution_name={repr(self.institution_name)}, station_name={repr(self.station_name)}, device_id={repr(self.device_id)}, device_serial_number={repr(self.device_serial_number)})" class ExperimentalConditionsType: @@ -676,10 +676,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ExperimentalConditionsType(h1resonanceFrequencyHz={self.h1resonance_frequency_hz})" + return f"ExperimentalConditionsType(h1resonance_frequency_hz={self.h1resonance_frequency_hz})" def __repr__(self) -> str: - return f"ExperimentalConditionsType(h1resonanceFrequencyHz={repr(self.h1resonance_frequency_hz)})" + return f"ExperimentalConditionsType(h1resonance_frequency_hz={repr(self.h1resonance_frequency_hz)})" class MatrixSizeType: @@ -759,10 +759,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingSpaceType(matrixSize={self.matrix_size}, fieldOfViewMm={self.field_of_view_mm})" + return f"EncodingSpaceType(matrix_size={self.matrix_size}, field_of_view_mm={self.field_of_view_mm})" def __repr__(self) -> str: - return f"EncodingSpaceType(matrixSize={repr(self.matrix_size)}, fieldOfViewMm={repr(self.field_of_view_mm)})" + return f"EncodingSpaceType(matrix_size={repr(self.matrix_size)}, field_of_view_mm={repr(self.field_of_view_mm)})" class LimitType: @@ -877,10 +877,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingLimitsType(kspaceEncodingStep0={self.kspace_encoding_step_0}, kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user0={self.user_0}, user1={self.user_1}, user2={self.user_2}, user3={self.user_3}, user4={self.user_4}, user5={self.user_5}, user6={self.user_6}, user7={self.user_7})" + return f"EncodingLimitsType(kspace_encoding_step_0={self.kspace_encoding_step_0}, kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, segment={self.segment}, user_0={self.user_0}, user_1={self.user_1}, user_2={self.user_2}, user_3={self.user_3}, user_4={self.user_4}, user_5={self.user_5}, user_6={self.user_6}, user_7={self.user_7})" def __repr__(self) -> str: - return f"EncodingLimitsType(kspaceEncodingStep0={repr(self.kspace_encoding_step_0)}, kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user0={repr(self.user_0)}, user1={repr(self.user_1)}, user2={repr(self.user_2)}, user3={repr(self.user_3)}, user4={repr(self.user_4)}, user5={repr(self.user_5)}, user6={repr(self.user_6)}, user7={repr(self.user_7)})" + return f"EncodingLimitsType(kspace_encoding_step_0={repr(self.kspace_encoding_step_0)}, kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, segment={repr(self.segment)}, user_0={repr(self.user_0)}, user_1={repr(self.user_1)}, user_2={repr(self.user_2)}, user_3={repr(self.user_3)}, user_4={repr(self.user_4)}, user_5={repr(self.user_5)}, user_6={repr(self.user_6)}, user_7={repr(self.user_7)})" class Trajectory(yardl.OutOfRangeEnum): @@ -997,10 +997,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"TrajectoryDescriptionType(identifier={self.identifier}, userParameterLong={self.user_parameter_long}, userParameterDouble={self.user_parameter_double}, userParameterString={self.user_parameter_string}, comment={self.comment})" + return f"TrajectoryDescriptionType(identifier={self.identifier}, user_parameter_long={self.user_parameter_long}, user_parameter_double={self.user_parameter_double}, user_parameter_string={self.user_parameter_string}, comment={self.comment})" def __repr__(self) -> str: - return f"TrajectoryDescriptionType(identifier={repr(self.identifier)}, userParameterLong={repr(self.user_parameter_long)}, userParameterDouble={repr(self.user_parameter_double)}, userParameterString={repr(self.user_parameter_string)}, comment={repr(self.comment)})" + return f"TrajectoryDescriptionType(identifier={repr(self.identifier)}, user_parameter_long={repr(self.user_parameter_long)}, user_parameter_double={repr(self.user_parameter_double)}, user_parameter_string={repr(self.user_parameter_string)}, comment={repr(self.comment)})" class AccelerationFactorType: @@ -1022,10 +1022,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"AccelerationFactorType(kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2})" + return f"AccelerationFactorType(kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2})" def __repr__(self) -> str: - return f"AccelerationFactorType(kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)})" + return f"AccelerationFactorType(kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)})" class CalibrationMode(yardl.OutOfRangeEnum): @@ -1058,10 +1058,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MultibandSpacingType(dZ={self.d_z})" + return f"MultibandSpacingType(d_z={self.d_z})" def __repr__(self) -> str: - return f"MultibandSpacingType(dZ={repr(self.d_z)})" + return f"MultibandSpacingType(d_z={repr(self.d_z)})" class Calibration(yardl.OutOfRangeEnum): @@ -1100,10 +1100,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"MultibandType(spacing={self.spacing}, deltaKz={self.delta_kz}, multibandFactor={self.multiband_factor}, calibration={self.calibration}, calibrationEncoding={self.calibration_encoding})" + return f"MultibandType(spacing={self.spacing}, delta_kz={self.delta_kz}, multiband_factor={self.multiband_factor}, calibration={self.calibration}, calibration_encoding={self.calibration_encoding})" def __repr__(self) -> str: - return f"MultibandType(spacing={repr(self.spacing)}, deltaKz={repr(self.delta_kz)}, multibandFactor={repr(self.multiband_factor)}, calibration={repr(self.calibration)}, calibrationEncoding={repr(self.calibration_encoding)})" + return f"MultibandType(spacing={repr(self.spacing)}, delta_kz={repr(self.delta_kz)}, multiband_factor={repr(self.multiband_factor)}, calibration={repr(self.calibration)}, calibration_encoding={repr(self.calibration_encoding)})" class ParallelImagingType: @@ -1133,10 +1133,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ParallelImagingType(accelerationFactor={self.acceleration_factor}, calibrationMode={self.calibration_mode}, interleavingDimension={self.interleaving_dimension}, multiband={self.multiband})" + return f"ParallelImagingType(acceleration_factor={self.acceleration_factor}, calibration_mode={self.calibration_mode}, interleaving_dimension={self.interleaving_dimension}, multiband={self.multiband})" def __repr__(self) -> str: - return f"ParallelImagingType(accelerationFactor={repr(self.acceleration_factor)}, calibrationMode={repr(self.calibration_mode)}, interleavingDimension={repr(self.interleaving_dimension)}, multiband={repr(self.multiband)})" + return f"ParallelImagingType(acceleration_factor={repr(self.acceleration_factor)}, calibration_mode={repr(self.calibration_mode)}, interleaving_dimension={repr(self.interleaving_dimension)}, multiband={repr(self.multiband)})" class EncodingType: @@ -1178,10 +1178,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"EncodingType(encodedSpace={self.encoded_space}, reconSpace={self.recon_space}, encodingLimits={self.encoding_limits}, trajectory={self.trajectory}, trajectoryDescription={self.trajectory_description}, parallelImaging={self.parallel_imaging}, echoTrainLength={self.echo_train_length})" + return f"EncodingType(encoded_space={self.encoded_space}, recon_space={self.recon_space}, encoding_limits={self.encoding_limits}, trajectory={self.trajectory}, trajectory_description={self.trajectory_description}, parallel_imaging={self.parallel_imaging}, echo_train_length={self.echo_train_length})" def __repr__(self) -> str: - return f"EncodingType(encodedSpace={repr(self.encoded_space)}, reconSpace={repr(self.recon_space)}, encodingLimits={repr(self.encoding_limits)}, trajectory={repr(self.trajectory)}, trajectoryDescription={repr(self.trajectory_description)}, parallelImaging={repr(self.parallel_imaging)}, echoTrainLength={repr(self.echo_train_length)})" + return f"EncodingType(encoded_space={repr(self.encoded_space)}, recon_space={repr(self.recon_space)}, encoding_limits={repr(self.encoding_limits)}, trajectory={repr(self.trajectory)}, trajectory_description={repr(self.trajectory_description)}, parallel_imaging={repr(self.parallel_imaging)}, echo_train_length={repr(self.echo_train_length)})" class DiffusionDimension(yardl.OutOfRangeEnum): @@ -1248,10 +1248,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"DiffusionType(gradientDirection={self.gradient_direction}, bvalue={self.bvalue})" + return f"DiffusionType(gradient_direction={self.gradient_direction}, bvalue={self.bvalue})" def __repr__(self) -> str: - return f"DiffusionType(gradientDirection={repr(self.gradient_direction)}, bvalue={repr(self.bvalue)})" + return f"DiffusionType(gradient_direction={repr(self.gradient_direction)}, bvalue={repr(self.bvalue)})" class SequenceParametersType: @@ -1301,10 +1301,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SequenceParametersType(tR={self.t_r}, tE={self.t_e}, tI={self.t_i}, flipAngleDeg={self.flip_angle_deg}, sequenceType={self.sequence_type}, echoSpacing={self.echo_spacing}, diffusionDimension={self.diffusion_dimension}, diffusion={self.diffusion}, diffusionScheme={self.diffusion_scheme})" + return f"SequenceParametersType(t_r={self.t_r}, t_e={self.t_e}, t_i={self.t_i}, flip_angle_deg={self.flip_angle_deg}, sequence_type={self.sequence_type}, echo_spacing={self.echo_spacing}, diffusion_dimension={self.diffusion_dimension}, diffusion={self.diffusion}, diffusion_scheme={self.diffusion_scheme})" def __repr__(self) -> str: - return f"SequenceParametersType(tR={repr(self.t_r)}, tE={repr(self.t_e)}, tI={repr(self.t_i)}, flipAngleDeg={repr(self.flip_angle_deg)}, sequenceType={repr(self.sequence_type)}, echoSpacing={repr(self.echo_spacing)}, diffusionDimension={repr(self.diffusion_dimension)}, diffusion={repr(self.diffusion)}, diffusionScheme={repr(self.diffusion_scheme)})" + return f"SequenceParametersType(t_r={repr(self.t_r)}, t_e={repr(self.t_e)}, t_i={repr(self.t_i)}, flip_angle_deg={repr(self.flip_angle_deg)}, sequence_type={repr(self.sequence_type)}, echo_spacing={repr(self.echo_spacing)}, diffusion_dimension={repr(self.diffusion_dimension)}, diffusion={repr(self.diffusion)}, diffusion_scheme={repr(self.diffusion_scheme)})" class UserParameterBase64Type: @@ -1359,10 +1359,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"UserParametersType(userParameterLong={self.user_parameter_long}, userParameterDouble={self.user_parameter_double}, userParameterString={self.user_parameter_string}, userParameterBase64={self.user_parameter_base64})" + return f"UserParametersType(user_parameter_long={self.user_parameter_long}, user_parameter_double={self.user_parameter_double}, user_parameter_string={self.user_parameter_string}, user_parameter_base64={self.user_parameter_base64})" def __repr__(self) -> str: - return f"UserParametersType(userParameterLong={repr(self.user_parameter_long)}, userParameterDouble={repr(self.user_parameter_double)}, userParameterString={repr(self.user_parameter_string)}, userParameterBase64={repr(self.user_parameter_base64)})" + return f"UserParametersType(user_parameter_long={repr(self.user_parameter_long)}, user_parameter_double={repr(self.user_parameter_double)}, user_parameter_string={repr(self.user_parameter_string)}, user_parameter_base64={repr(self.user_parameter_base64)})" class WaveformType(yardl.OutOfRangeEnum): @@ -1396,10 +1396,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"WaveformInformationType(waveformName={self.waveform_name}, waveformType={self.waveform_type}, userParameters={self.user_parameters})" + return f"WaveformInformationType(waveform_name={self.waveform_name}, waveform_type={self.waveform_type}, user_parameters={self.user_parameters})" def __repr__(self) -> str: - return f"WaveformInformationType(waveformName={repr(self.waveform_name)}, waveformType={repr(self.waveform_type)}, userParameters={repr(self.user_parameters)})" + return f"WaveformInformationType(waveform_name={repr(self.waveform_name)}, waveform_type={repr(self.waveform_type)}, user_parameters={repr(self.user_parameters)})" class Header: @@ -1453,10 +1453,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"Header(version={self.version}, subjectInformation={self.subject_information}, studyInformation={self.study_information}, measurementInformation={self.measurement_information}, acquisitionSystemInformation={self.acquisition_system_information}, experimentalConditions={self.experimental_conditions}, encoding={self.encoding}, sequenceParameters={self.sequence_parameters}, userParameters={self.user_parameters}, waveformInformation={self.waveform_information})" + return f"Header(version={self.version}, subject_information={self.subject_information}, study_information={self.study_information}, measurement_information={self.measurement_information}, acquisition_system_information={self.acquisition_system_information}, experimental_conditions={self.experimental_conditions}, encoding={self.encoding}, sequence_parameters={self.sequence_parameters}, user_parameters={self.user_parameters}, waveform_information={self.waveform_information})" def __repr__(self) -> str: - return f"Header(version={repr(self.version)}, subjectInformation={repr(self.subject_information)}, studyInformation={repr(self.study_information)}, measurementInformation={repr(self.measurement_information)}, acquisitionSystemInformation={repr(self.acquisition_system_information)}, experimentalConditions={repr(self.experimental_conditions)}, encoding={repr(self.encoding)}, sequenceParameters={repr(self.sequence_parameters)}, userParameters={repr(self.user_parameters)}, waveformInformation={repr(self.waveform_information)})" + return f"Header(version={repr(self.version)}, subject_information={repr(self.subject_information)}, study_information={repr(self.study_information)}, measurement_information={repr(self.measurement_information)}, acquisition_system_information={repr(self.acquisition_system_information)}, experimental_conditions={repr(self.experimental_conditions)}, encoding={repr(self.encoding)}, sequence_parameters={repr(self.sequence_parameters)}, user_parameters={repr(self.user_parameters)}, waveform_information={repr(self.waveform_information)})" class ImageFlags(enum.IntFlag): @@ -1639,10 +1639,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"ImageHeader(flags={self.flags}, measurementUid={self.measurement_uid}, fieldOfView={self.field_of_view}, position={self.position}, colDir={self.col_dir}, lineDir={self.line_dir}, sliceDir={self.slice_dir}, patientTablePosition={self.patient_table_position}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, acquisitionTimeStampNs={self.acquisition_time_stamp_ns}, physiologyTimeStampNs={self.physiology_time_stamp_ns}, imageType={self.image_type}, imageIndex={self.image_index}, imageSeriesIndex={self.image_series_index}, userInt={self.user_int}, userFloat={self.user_float})" + return f"ImageHeader(flags={self.flags}, measurement_uid={self.measurement_uid}, field_of_view={self.field_of_view}, position={self.position}, col_dir={self.col_dir}, line_dir={self.line_dir}, slice_dir={self.slice_dir}, patient_table_position={self.patient_table_position}, average={self.average}, slice={self.slice}, contrast={self.contrast}, phase={self.phase}, repetition={self.repetition}, set={self.set}, acquisition_time_stamp_ns={self.acquisition_time_stamp_ns}, physiology_time_stamp_ns={self.physiology_time_stamp_ns}, image_type={self.image_type}, image_index={self.image_index}, image_series_index={self.image_series_index}, user_int={self.user_int}, user_float={self.user_float})" def __repr__(self) -> str: - return f"ImageHeader(flags={repr(self.flags)}, measurementUid={repr(self.measurement_uid)}, fieldOfView={repr(self.field_of_view)}, position={repr(self.position)}, colDir={repr(self.col_dir)}, lineDir={repr(self.line_dir)}, sliceDir={repr(self.slice_dir)}, patientTablePosition={repr(self.patient_table_position)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, acquisitionTimeStampNs={repr(self.acquisition_time_stamp_ns)}, physiologyTimeStampNs={repr(self.physiology_time_stamp_ns)}, imageType={repr(self.image_type)}, imageIndex={repr(self.image_index)}, imageSeriesIndex={repr(self.image_series_index)}, userInt={repr(self.user_int)}, userFloat={repr(self.user_float)})" + return f"ImageHeader(flags={repr(self.flags)}, measurement_uid={repr(self.measurement_uid)}, field_of_view={repr(self.field_of_view)}, position={repr(self.position)}, col_dir={repr(self.col_dir)}, line_dir={repr(self.line_dir)}, slice_dir={repr(self.slice_dir)}, patient_table_position={repr(self.patient_table_position)}, average={repr(self.average)}, slice={repr(self.slice)}, contrast={repr(self.contrast)}, phase={repr(self.phase)}, repetition={repr(self.repetition)}, set={repr(self.set)}, acquisition_time_stamp_ns={repr(self.acquisition_time_stamp_ns)}, physiology_time_stamp_ns={repr(self.physiology_time_stamp_ns)}, image_type={repr(self.image_type)}, image_index={repr(self.image_index)}, image_series_index={repr(self.image_series_index)}, user_int={repr(self.user_int)}, user_float={repr(self.user_float)})" _T = typing.TypeVar('_T') @@ -1789,10 +1789,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"NoiseCovariance(coilLabels={self.coil_labels}, receiverNoiseBandwidth={self.receiver_noise_bandwidth}, noiseDwellTimeNs={self.noise_dwell_time_ns}, sampleCount={self.sample_count}, matrix={self.matrix})" + return f"NoiseCovariance(coil_labels={self.coil_labels}, receiver_noise_bandwidth={self.receiver_noise_bandwidth}, noise_dwell_time_ns={self.noise_dwell_time_ns}, sample_count={self.sample_count}, matrix={self.matrix})" def __repr__(self) -> str: - return f"NoiseCovariance(coilLabels={repr(self.coil_labels)}, receiverNoiseBandwidth={repr(self.receiver_noise_bandwidth)}, noiseDwellTimeNs={repr(self.noise_dwell_time_ns)}, sampleCount={repr(self.sample_count)}, matrix={repr(self.matrix)})" + return f"NoiseCovariance(coil_labels={repr(self.coil_labels)}, receiver_noise_bandwidth={repr(self.receiver_noise_bandwidth)}, noise_dwell_time_ns={repr(self.noise_dwell_time_ns)}, sample_count={repr(self.sample_count)}, matrix={repr(self.matrix)})" WaveformSamples = npt.NDArray[T_NP] @@ -1856,10 +1856,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"Waveform(flags={self.flags}, measurementUid={self.measurement_uid}, scanCounter={self.scan_counter}, timeStampNs={self.time_stamp_ns}, sampleTimeNs={self.sample_time_ns}, waveformId={self.waveform_id}, data={self.data})" + return f"Waveform(flags={self.flags}, measurement_uid={self.measurement_uid}, scan_counter={self.scan_counter}, time_stamp_ns={self.time_stamp_ns}, sample_time_ns={self.sample_time_ns}, waveform_id={self.waveform_id}, data={self.data})" def __repr__(self) -> str: - return f"Waveform(flags={repr(self.flags)}, measurementUid={repr(self.measurement_uid)}, scanCounter={repr(self.scan_counter)}, timeStampNs={repr(self.time_stamp_ns)}, sampleTimeNs={repr(self.sample_time_ns)}, waveformId={repr(self.waveform_id)}, data={repr(self.data)})" + return f"Waveform(flags={repr(self.flags)}, measurement_uid={repr(self.measurement_uid)}, scan_counter={repr(self.scan_counter)}, time_stamp_ns={repr(self.time_stamp_ns)}, sample_time_ns={repr(self.sample_time_ns)}, waveform_id={repr(self.waveform_id)}, data={repr(self.data)})" WaveformUint32 = Waveform[np.uint32] @@ -1926,10 +1926,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SamplingLimits(kspaceEncodingStep0={self.kspace_encoding_step_0}, kspaceEncodingStep1={self.kspace_encoding_step_1}, kspaceEncodingStep2={self.kspace_encoding_step_2})" + return f"SamplingLimits(kspace_encoding_step_0={self.kspace_encoding_step_0}, kspace_encoding_step_1={self.kspace_encoding_step_1}, kspace_encoding_step_2={self.kspace_encoding_step_2})" def __repr__(self) -> str: - return f"SamplingLimits(kspaceEncodingStep0={repr(self.kspace_encoding_step_0)}, kspaceEncodingStep1={repr(self.kspace_encoding_step_1)}, kspaceEncodingStep2={repr(self.kspace_encoding_step_2)})" + return f"SamplingLimits(kspace_encoding_step_0={repr(self.kspace_encoding_step_0)}, kspace_encoding_step_1={repr(self.kspace_encoding_step_1)}, kspace_encoding_step_2={repr(self.kspace_encoding_step_2)})" class SamplingDescription: @@ -1963,10 +1963,10 @@ def __eq__(self, other: object) -> bool: ) def __str__(self) -> str: - return f"SamplingDescription(encodedFOV={self.encoded_fov}, reconFOV={self.recon_fov}, encodedMatrix={self.encoded_matrix}, reconMatrix={self.recon_matrix}, samplingLimits={self.sampling_limits})" + return f"SamplingDescription(encoded_fov={self.encoded_fov}, recon_fov={self.recon_fov}, encoded_matrix={self.encoded_matrix}, recon_matrix={self.recon_matrix}, sampling_limits={self.sampling_limits})" def __repr__(self) -> str: - return f"SamplingDescription(encodedFOV={repr(self.encoded_fov)}, reconFOV={repr(self.recon_fov)}, encodedMatrix={repr(self.encoded_matrix)}, reconMatrix={repr(self.recon_matrix)}, samplingLimits={repr(self.sampling_limits)})" + return f"SamplingDescription(encoded_fov={repr(self.encoded_fov)}, recon_fov={repr(self.recon_fov)}, encoded_matrix={repr(self.encoded_matrix)}, recon_matrix={repr(self.recon_matrix)}, sampling_limits={repr(self.sampling_limits)})" class ReconBuffer: From c184552dc3d3b37e4cb2385bd084e5bafc0170ca Mon Sep 17 00:00:00 2001 From: kekeke21 Date: Tue, 16 Dec 2025 09:05:38 -0500 Subject: [PATCH 3/4] wip NDarray types to describe maps --- model/mrd_image.yml | 10 ---------- model/mrd_intermediate.yml | 31 ++++++++++++++++++++++++++++-- python/mrd/tools/ismrmrd_to_mrd.py | 2 +- python/mrd/tools/mrd_to_ismrmrd.py | 6 +++--- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/model/mrd_image.yml b/model/mrd_image.yml index 30c2ba34..a7c996c8 100644 --- a/model/mrd_image.yml +++ b/model/mrd_image.yml @@ -24,16 +24,6 @@ ImageType: !enum imag: 4 complex: 5 rgbaMap: 6 # a uint32 image in which channel dimension is R, G, B, alpha - spinDensityMap: 7 # in mol/m^3 - t1Map: 8 # in s - t2Map: 9 # in s - t2starMap: 10 # in s - adcMap: 11 # in s/m^2 - b0Map: 12 # in Hz (offset from Image.head.measurementFreq[0]) - b1Map: 13 # in rad/s/V, channel dimension is xmit channels - sensitivityMap: 14 # in Vm^3/mol, channel dimension is rcv channels - gfactorMap: 15 # unaccelerated SNR/(accelerated SNR * sqrt of acceleration factor) - userMap: 16 # custom image type with description at ImageMeta ImageData: !array items: Y diff --git a/model/mrd_intermediate.yml b/model/mrd_intermediate.yml index d6c7d200..f81f52d5 100644 --- a/model/mrd_intermediate.yml +++ b/model/mrd_intermediate.yml @@ -64,8 +64,35 @@ ImageArray: !record meta: ImageMeta[loc, s, n] waveforms: WaveformUint32* +# change to record and data field to array +# Generic header +# ndarray store all data +# any structure call metadata +# nadarray header with speicfied +# string for dimension +# high level description=array type +# user comment as string +# NDarray keep as field +# meta field attachted to all arrays +# computed fields: +ArrayType: !enum + base: uint64 + values: + spinDensityMap: 1 # in mol/m^3 + t1Map: 2 # in s + t2Map: 3 # in s + t2starMap: 4 # in s + adcMap: 5 # in s/m^2 + b0Map: 6 # in Hz (offset from Image.head.measurementFreq[0]) + b1Map: 7 # in rad/s/V, channel dimension is xmit channels + sensitivityMap: 8 # in Vm^3/mol, channel dimension is rcv channels + gfactorMap: 9 # unaccelerated SNR/(accelerated SNR * sqrt of acceleration factor) + userMap: 10 # custom image type with description at ImageMeta -Array: !array - items: T +NDArray: !record + fields: + data: Array + type: ArrayType ArrayComplexFloat: Array + diff --git a/python/mrd/tools/ismrmrd_to_mrd.py b/python/mrd/tools/ismrmrd_to_mrd.py index ecc814ec..da0a8da4 100644 --- a/python/mrd/tools/ismrmrd_to_mrd.py +++ b/python/mrd/tools/ismrmrd_to_mrd.py @@ -513,7 +513,7 @@ def convert_image(ismrmrd_img: ismrmrd.Image) -> mrd.StreamItem: # If parsing fails, skip meta pass - data = ismrmrd_img.data + data = ismrmrd_img.data[:, np.newaxis] # Add singleton frequency dimension as 5th dimension dtype = data.dtype if dtype == np.uint16: img = mrd.Image[np.uint16](head=out_head, data=data.astype(np.uint16), meta=meta) diff --git a/python/mrd/tools/mrd_to_ismrmrd.py b/python/mrd/tools/mrd_to_ismrmrd.py index 030595b1..9eed969b 100644 --- a/python/mrd/tools/mrd_to_ismrmrd.py +++ b/python/mrd/tools/mrd_to_ismrmrd.py @@ -482,7 +482,7 @@ def convert_image(mrd_img) -> ismrmrd.Image: mrd_head = mrd_img.head data = mrd_img.data - # Get dimensions: data is (channels, z, y, x) + # Get dimensions: data is (channels, z, y, x, frequency) drop freq dimension channels = data.shape[0] z = data.shape[1] y = data.shape[2] @@ -585,9 +585,9 @@ def convert_image(mrd_img) -> ismrmrd.Image: # Create ISMRMRD image, resize it, and set header img = ismrmrd.Image() # Note: resize signature is (nc, nz, ny, nx) - same order as MRD! - img.resize(channels, z, y, x) + img.resize(channels, z, y, x, ) img.setHead(head) - img.data[:] = data + img.data[:] = data[:, np.newaxis] # Drop frequency dimension # Set attribute_string if present if attribute_string: From bbdc93e10acd295d8bff48c732e63a525a983c7f Mon Sep 17 00:00:00 2001 From: kekeke21 Date: Sun, 1 Feb 2026 18:50:52 -0500 Subject: [PATCH 4/4] Use NDArray in mrd_intermediate to describe maps instead of mrd_image with ImageType * In our past discussion, we proposed extending ImageType to describe maps (B0, phase, T1-weighted, etc.). Instead, the map s are stored as NDArray in mrd_intermediate.yml * mrd_intermediate.yml specifies arbitrary dimension array with a header for description, ArrayType as enumerator for labeling maps, and ArrayDimension as vector to describe the dimension of the arbitrary array. * ndarray of each datatypes are in mrd_protocol.yml as streamable item --- cpp/mrd/binary/protocols.cc | 365 ++++++++++++++- cpp/mrd/hdf5/protocols.cc | 322 +++++++++++-- cpp/mrd/hdf5/protocols.h | 4 +- cpp/mrd/ndjson/protocols.cc | 439 +++++++++++++++--- cpp/mrd/protocols.cc | 2 +- cpp/mrd/types.h | 97 +++- matlab/toolbox/+mrd/+binary/MrdReader.m | 2 +- matlab/toolbox/+mrd/+binary/MrdWriter.m | 2 +- .../+mrd/+binary/NDArrayHeaderSerializer.m | 26 ++ .../toolbox/+mrd/+binary/NDArraySerializer.m | 25 + matlab/toolbox/+mrd/AnyNDArray.m | 97 ++++ matlab/toolbox/+mrd/ArrayDimension.m | 61 +++ matlab/toolbox/+mrd/ArrayMeta.m | 4 + matlab/toolbox/+mrd/ArrayMetaValue.m | 57 +++ matlab/toolbox/+mrd/ArrayType.m | 49 ++ matlab/toolbox/+mrd/ImageType.m | 30 -- matlab/toolbox/+mrd/MrdWriterBase.m | 2 +- matlab/toolbox/+mrd/NDArray.m | 55 +++ matlab/toolbox/+mrd/NDArrayComplexDouble.m | 4 + matlab/toolbox/+mrd/NDArrayComplexFloat.m | 4 + matlab/toolbox/+mrd/NDArrayDouble.m | 4 + matlab/toolbox/+mrd/NDArrayFloat.m | 4 + matlab/toolbox/+mrd/NDArrayHeader.m | 56 +++ matlab/toolbox/+mrd/NDArrayInt16.m | 4 + matlab/toolbox/+mrd/NDArrayInt32.m | 4 + matlab/toolbox/+mrd/NDArrayUint16.m | 4 + matlab/toolbox/+mrd/NDArrayUint32.m | 4 + matlab/toolbox/+mrd/NoiseCovariance.m | 2 +- matlab/toolbox/+mrd/StreamItem.m | 66 ++- model/mrd_intermediate.yml | 93 ++-- model/mrd_protocol.yml | 39 +- python/mrd/__init__.py | 15 + python/mrd/binary.py | 40 +- python/mrd/ndjson.py | 140 +++++- python/mrd/protocols.py | 2 +- python/mrd/types.py | 206 +++++++- 36 files changed, 2093 insertions(+), 237 deletions(-) create mode 100644 matlab/toolbox/+mrd/+binary/NDArrayHeaderSerializer.m create mode 100644 matlab/toolbox/+mrd/+binary/NDArraySerializer.m create mode 100644 matlab/toolbox/+mrd/AnyNDArray.m create mode 100644 matlab/toolbox/+mrd/ArrayDimension.m create mode 100644 matlab/toolbox/+mrd/ArrayMeta.m create mode 100644 matlab/toolbox/+mrd/ArrayMetaValue.m create mode 100644 matlab/toolbox/+mrd/ArrayType.m create mode 100644 matlab/toolbox/+mrd/NDArray.m create mode 100644 matlab/toolbox/+mrd/NDArrayComplexDouble.m create mode 100644 matlab/toolbox/+mrd/NDArrayComplexFloat.m create mode 100644 matlab/toolbox/+mrd/NDArrayDouble.m create mode 100644 matlab/toolbox/+mrd/NDArrayFloat.m create mode 100644 matlab/toolbox/+mrd/NDArrayHeader.m create mode 100644 matlab/toolbox/+mrd/NDArrayInt16.m create mode 100644 matlab/toolbox/+mrd/NDArrayInt32.m create mode 100644 matlab/toolbox/+mrd/NDArrayUint16.m create mode 100644 matlab/toolbox/+mrd/NDArrayUint32.m diff --git a/cpp/mrd/binary/protocols.cc b/cpp/mrd/binary/protocols.cc index 0c73ba12..27585ddc 100644 --- a/cpp/mrd/binary/protocols.cc +++ b/cpp/mrd/binary/protocols.cc @@ -637,6 +637,29 @@ struct IsTriviallySerializable { offsetof(__T__, data) < offsetof(__T__, headers) && offsetof(__T__, headers) < offsetof(__T__, meta) && offsetof(__T__, meta) < offsetof(__T__, waveforms); }; +template <> +struct IsTriviallySerializable { + using __T__ = mrd::NDArrayHeader; + static constexpr bool value = + std::is_standard_layout_v<__T__> && + IsTriviallySerializable::value && + IsTriviallySerializable::value && + IsTriviallySerializable::value && + (sizeof(__T__) == (sizeof(__T__::dimension_labels) + sizeof(__T__::array_type) + sizeof(__T__::meta))) && + offsetof(__T__, dimension_labels) < offsetof(__T__, array_type) && offsetof(__T__, array_type) < offsetof(__T__, meta); +}; + +template +struct IsTriviallySerializable> { + using __T__ = mrd::NDArray; + static constexpr bool value = + std::is_standard_layout_v<__T__> && + IsTriviallySerializable::value && + IsTriviallySerializable::value && + (sizeof(__T__) == (sizeof(__T__::head) + sizeof(__T__::data))) && + offsetof(__T__, head) < offsetof(__T__, data); +}; + #ifndef _MSC_VER #pragma GCC diagnostic pop // #pragma GCC diagnostic ignored "-Winvalid-offsetof" #endif @@ -798,8 +821,8 @@ void ReadUnion(yardl::binary::CodedInputStream& stream, std::variant WriteT0, typename T1, yardl::binary::Writer WriteT1, typename T2, yardl::binary::Writer WriteT2, typename T3, yardl::binary::Writer WriteT3, typename T4, yardl::binary::Writer WriteT4, typename T5, yardl::binary::Writer WriteT5, typename T6, yardl::binary::Writer WriteT6, typename T7, yardl::binary::Writer WriteT7, typename T8, yardl::binary::Writer WriteT8, typename T9, yardl::binary::Writer WriteT9, typename T10, yardl::binary::Writer WriteT10, typename T11, yardl::binary::Writer WriteT11, typename T12, yardl::binary::Writer WriteT12, typename T13, yardl::binary::Writer WriteT13> -void WriteUnion(yardl::binary::CodedOutputStream& stream, std::variant const& value) { +template WriteT0, typename T1, yardl::binary::Writer WriteT1, typename T2, yardl::binary::Writer WriteT2, typename T3, yardl::binary::Writer WriteT3, typename T4, yardl::binary::Writer WriteT4, typename T5, yardl::binary::Writer WriteT5, typename T6, yardl::binary::Writer WriteT6, typename T7, yardl::binary::Writer WriteT7, typename T8, yardl::binary::Writer WriteT8, typename T9, yardl::binary::Writer WriteT9, typename T10, yardl::binary::Writer WriteT10, typename T11, yardl::binary::Writer WriteT11, typename T12, yardl::binary::Writer WriteT12, typename T13, yardl::binary::Writer WriteT13, typename T14, yardl::binary::Writer WriteT14, typename T15, yardl::binary::Writer WriteT15, typename T16, yardl::binary::Writer WriteT16, typename T17, yardl::binary::Writer WriteT17, typename T18, yardl::binary::Writer WriteT18, typename T19, yardl::binary::Writer WriteT19, typename T20, yardl::binary::Writer WriteT20, typename T21, yardl::binary::Writer WriteT21> +void WriteUnion(yardl::binary::CodedOutputStream& stream, std::variant const& value) { yardl::binary::WriteInteger(stream, value.index()); switch (value.index()) { case 0: { @@ -872,12 +895,52 @@ void WriteUnion(yardl::binary::CodedOutputStream& stream, std::variant(value); + WriteT14(stream, v); + break; + } + case 15: { + T15 const& v = std::get<15>(value); + WriteT15(stream, v); + break; + } + case 16: { + T16 const& v = std::get<16>(value); + WriteT16(stream, v); + break; + } + case 17: { + T17 const& v = std::get<17>(value); + WriteT17(stream, v); + break; + } + case 18: { + T18 const& v = std::get<18>(value); + WriteT18(stream, v); + break; + } + case 19: { + T19 const& v = std::get<19>(value); + WriteT19(stream, v); + break; + } + case 20: { + T20 const& v = std::get<20>(value); + WriteT20(stream, v); + break; + } + case 21: { + T21 const& v = std::get<21>(value); + WriteT21(stream, v); + break; + } default: throw std::runtime_error("Invalid union index."); } } -template ReadT0, typename T1, yardl::binary::Reader ReadT1, typename T2, yardl::binary::Reader ReadT2, typename T3, yardl::binary::Reader ReadT3, typename T4, yardl::binary::Reader ReadT4, typename T5, yardl::binary::Reader ReadT5, typename T6, yardl::binary::Reader ReadT6, typename T7, yardl::binary::Reader ReadT7, typename T8, yardl::binary::Reader ReadT8, typename T9, yardl::binary::Reader ReadT9, typename T10, yardl::binary::Reader ReadT10, typename T11, yardl::binary::Reader ReadT11, typename T12, yardl::binary::Reader ReadT12, typename T13, yardl::binary::Reader ReadT13> -void ReadUnion(yardl::binary::CodedInputStream& stream, std::variant& value) { +template ReadT0, typename T1, yardl::binary::Reader ReadT1, typename T2, yardl::binary::Reader ReadT2, typename T3, yardl::binary::Reader ReadT3, typename T4, yardl::binary::Reader ReadT4, typename T5, yardl::binary::Reader ReadT5, typename T6, yardl::binary::Reader ReadT6, typename T7, yardl::binary::Reader ReadT7, typename T8, yardl::binary::Reader ReadT8, typename T9, yardl::binary::Reader ReadT9, typename T10, yardl::binary::Reader ReadT10, typename T11, yardl::binary::Reader ReadT11, typename T12, yardl::binary::Reader ReadT12, typename T13, yardl::binary::Reader ReadT13, typename T14, yardl::binary::Reader ReadT14, typename T15, yardl::binary::Reader ReadT15, typename T16, yardl::binary::Reader ReadT16, typename T17, yardl::binary::Reader ReadT17, typename T18, yardl::binary::Reader ReadT18, typename T19, yardl::binary::Reader ReadT19, typename T20, yardl::binary::Reader ReadT20, typename T21, yardl::binary::Reader ReadT21> +void ReadUnion(yardl::binary::CodedInputStream& stream, std::variant& value) { size_t index; yardl::binary::ReadInteger(stream, index); switch (index) { @@ -965,6 +1028,54 @@ void ReadUnion(yardl::binary::CodedInputStream& stream, std::variant ReadT> mrd::binary::ReadArray, yardl::binary::ReadFloatingPoint>(stream, value); } +[[maybe_unused]] void WriteArrayMetaValue(yardl::binary::CodedOutputStream& stream, mrd::ArrayMetaValue const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + WriteUnion(stream, value); +} + +[[maybe_unused]] void ReadArrayMetaValue(yardl::binary::CodedInputStream& stream, mrd::ArrayMetaValue& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + ReadUnion(stream, value); +} + +[[maybe_unused]] void WriteArrayMeta(yardl::binary::CodedOutputStream& stream, mrd::ArrayMeta const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + yardl::binary::WriteMap, yardl::binary::WriteString, yardl::binary::WriteVector>(stream, value); +} + +[[maybe_unused]] void ReadArrayMeta(yardl::binary::CodedInputStream& stream, mrd::ArrayMeta& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + yardl::binary::ReadMap, yardl::binary::ReadString, yardl::binary::ReadVector>(stream, value); +} + +[[maybe_unused]] void WriteNDArrayHeader(yardl::binary::CodedOutputStream& stream, mrd::NDArrayHeader const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + yardl::binary::WriteVector>(stream, value.dimension_labels); + yardl::binary::WriteEnum(stream, value.array_type); + mrd::binary::WriteArrayMeta(stream, value.meta); +} + +[[maybe_unused]] void ReadNDArrayHeader(yardl::binary::CodedInputStream& stream, mrd::NDArrayHeader& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + yardl::binary::ReadVector>(stream, value.dimension_labels); + yardl::binary::ReadEnum(stream, value.array_type); + mrd::binary::ReadArrayMeta(stream, value.meta); +} + +template WriteT> +[[maybe_unused]] void WriteNDArray(yardl::binary::CodedOutputStream& stream, mrd::NDArray const& value) { + if constexpr (yardl::binary::IsTriviallySerializable>::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArrayHeader(stream, value.head); + mrd::binary::WriteArray(stream, value.data); +} + +template ReadT> +[[maybe_unused]] void ReadNDArray(yardl::binary::CodedInputStream& stream, mrd::NDArray& value) { + if constexpr (yardl::binary::IsTriviallySerializable>::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArrayHeader(stream, value.head); + mrd::binary::ReadArray(stream, value.data); +} + +[[maybe_unused]] void WriteNDArrayUint16(yardl::binary::CodedOutputStream& stream, mrd::NDArrayUint16 const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayUint16(yardl::binary::CodedInputStream& stream, mrd::NDArrayUint16& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayInt16(yardl::binary::CodedOutputStream& stream, mrd::NDArrayInt16 const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayInt16(yardl::binary::CodedInputStream& stream, mrd::NDArrayInt16& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayUint32(yardl::binary::CodedOutputStream& stream, mrd::NDArrayUint32 const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayUint32(yardl::binary::CodedInputStream& stream, mrd::NDArrayUint32& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayInt32(yardl::binary::CodedOutputStream& stream, mrd::NDArrayInt32 const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayInt32(yardl::binary::CodedInputStream& stream, mrd::NDArrayInt32& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayFloat(yardl::binary::CodedOutputStream& stream, mrd::NDArrayFloat const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayFloat(yardl::binary::CodedInputStream& stream, mrd::NDArrayFloat& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayDouble(yardl::binary::CodedOutputStream& stream, mrd::NDArrayDouble const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray(stream, value); +} + +[[maybe_unused]] void ReadNDArrayDouble(yardl::binary::CodedInputStream& stream, mrd::NDArrayDouble& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray(stream, value); +} + +[[maybe_unused]] void WriteNDArrayComplexFloat(yardl::binary::CodedOutputStream& stream, mrd::NDArrayComplexFloat const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray, yardl::binary::WriteFloatingPoint>(stream, value); +} + +[[maybe_unused]] void ReadNDArrayComplexFloat(yardl::binary::CodedInputStream& stream, mrd::NDArrayComplexFloat& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray, yardl::binary::ReadFloatingPoint>(stream, value); +} + +[[maybe_unused]] void WriteNDArrayComplexDouble(yardl::binary::CodedOutputStream& stream, mrd::NDArrayComplexDouble const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + mrd::binary::WriteNDArray, yardl::binary::WriteFloatingPoint>(stream, value); +} + +[[maybe_unused]] void ReadNDArrayComplexDouble(yardl::binary::CodedInputStream& stream, mrd::NDArrayComplexDouble& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + mrd::binary::ReadNDArray, yardl::binary::ReadFloatingPoint>(stream, value); +} + +[[maybe_unused]] void WriteAnyNDArray(yardl::binary::CodedOutputStream& stream, mrd::AnyNDArray const& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::WriteTriviallySerializable(stream, value); + return; + } + + WriteUnion(stream, value); +} + +[[maybe_unused]] void ReadAnyNDArray(yardl::binary::CodedInputStream& stream, mrd::AnyNDArray& value) { + if constexpr (yardl::binary::IsTriviallySerializable::value) { + yardl::binary::ReadTriviallySerializable(stream, value); + return; + } + + ReadUnion(stream, value); +} + [[maybe_unused]] void WriteStreamItem(yardl::binary::CodedOutputStream& stream, mrd::StreamItem const& value) { if constexpr (yardl::binary::IsTriviallySerializable::value) { yardl::binary::WriteTriviallySerializable(stream, value); return; } - WriteUnion(stream, value); + WriteUnion(stream, value); } [[maybe_unused]] void ReadStreamItem(yardl::binary::CodedInputStream& stream, mrd::StreamItem& value) { @@ -2487,7 +2840,7 @@ template ReadT> return; } - ReadUnion(stream, value); + ReadUnion(stream, value); } } // namespace diff --git a/cpp/mrd/hdf5/protocols.cc b/cpp/mrd/hdf5/protocols.cc index a942a8a9..bab95f98 100644 --- a/cpp/mrd/hdf5/protocols.cc +++ b/cpp/mrd/hdf5/protocols.cc @@ -312,23 +312,23 @@ H5::CompType InnerUnion8Ddl(bool nullable, H5::DataType const& t0, std::string c return rtn; } -template -class InnerUnion14 { +template +class InnerUnion22 { public: - InnerUnion14() : type_index_(-1) {} - InnerUnion14(std::variant const& v) : type_index_(static_cast(v.index())) { + InnerUnion22() : type_index_(-1) {} + InnerUnion22(std::variant const& v) : type_index_(static_cast(v.index())) { Init(v); } - InnerUnion14(std::variant const& v) : type_index_(static_cast(v.index()) - 1) { + InnerUnion22(std::variant const& v) : type_index_(static_cast(v.index()) - 1) { Init(v); } - InnerUnion14(InnerUnion14 const& v) = delete; + InnerUnion22(InnerUnion22 const& v) = delete; - InnerUnion14 operator=(InnerUnion14 const&) = delete; + InnerUnion22 operator=(InnerUnion22 const&) = delete; - ~InnerUnion14() { + ~InnerUnion22() { switch (type_index_) { case 0: value0_.~TInner0(); @@ -372,14 +372,38 @@ class InnerUnion14 { case 13: value13_.~TInner13(); break; + case 14: + value14_.~TInner14(); + break; + case 15: + value15_.~TInner15(); + break; + case 16: + value16_.~TInner16(); + break; + case 17: + value17_.~TInner17(); + break; + case 18: + value18_.~TInner18(); + break; + case 19: + value19_.~TInner19(); + break; + case 20: + value20_.~TInner20(); + break; + case 21: + value21_.~TInner21(); + break; } } - void ToOuter(std::variant& o) const { + void ToOuter(std::variant& o) const { ToOuterImpl(o); } - void ToOuter(std::variant& o) const { + void ToOuter(std::variant& o) const { ToOuterImpl(o); } @@ -440,6 +464,38 @@ class InnerUnion14 { char empty13_[sizeof(TInner13)]{}; TInner13 value13_; }; + union { + char empty14_[sizeof(TInner14)]{}; + TInner14 value14_; + }; + union { + char empty15_[sizeof(TInner15)]{}; + TInner15 value15_; + }; + union { + char empty16_[sizeof(TInner16)]{}; + TInner16 value16_; + }; + union { + char empty17_[sizeof(TInner17)]{}; + TInner17 value17_; + }; + union { + char empty18_[sizeof(TInner18)]{}; + TInner18 value18_; + }; + union { + char empty19_[sizeof(TInner19)]{}; + TInner19 value19_; + }; + union { + char empty20_[sizeof(TInner20)]{}; + TInner20 value20_; + }; + union { + char empty21_[sizeof(TInner21)]{}; + TInner21 value21_; + }; private: template @@ -488,6 +544,30 @@ class InnerUnion14 { case 13: new (&value13_) TInner13(std::get<13 + offset>(v)); return; + case 14: + new (&value14_) TInner14(std::get<14 + offset>(v)); + return; + case 15: + new (&value15_) TInner15(std::get<15 + offset>(v)); + return; + case 16: + new (&value16_) TInner16(std::get<16 + offset>(v)); + return; + case 17: + new (&value17_) TInner17(std::get<17 + offset>(v)); + return; + case 18: + new (&value18_) TInner18(std::get<18 + offset>(v)); + return; + case 19: + new (&value19_) TInner19(std::get<19 + offset>(v)); + return; + case 20: + new (&value20_) TInner20(std::get<20 + offset>(v)); + return; + case 21: + new (&value21_) TInner21(std::get<21 + offset>(v)); + return; } } @@ -556,6 +636,38 @@ class InnerUnion14 { o.template emplace<13 + offset>(); yardl::hdf5::ToOuter(value13_, std::get<13 + offset>(o)); return; + case 14: + o.template emplace<14 + offset>(); + yardl::hdf5::ToOuter(value14_, std::get<14 + offset>(o)); + return; + case 15: + o.template emplace<15 + offset>(); + yardl::hdf5::ToOuter(value15_, std::get<15 + offset>(o)); + return; + case 16: + o.template emplace<16 + offset>(); + yardl::hdf5::ToOuter(value16_, std::get<16 + offset>(o)); + return; + case 17: + o.template emplace<17 + offset>(); + yardl::hdf5::ToOuter(value17_, std::get<17 + offset>(o)); + return; + case 18: + o.template emplace<18 + offset>(); + yardl::hdf5::ToOuter(value18_, std::get<18 + offset>(o)); + return; + case 19: + o.template emplace<19 + offset>(); + yardl::hdf5::ToOuter(value19_, std::get<19 + offset>(o)); + return; + case 20: + o.template emplace<20 + offset>(); + yardl::hdf5::ToOuter(value20_, std::get<20 + offset>(o)); + return; + case 21: + o.template emplace<21 + offset>(); + yardl::hdf5::ToOuter(value21_, std::get<21 + offset>(o)); + return; } throw std::runtime_error("unrecognized type variant type index " + std::to_string(type_index_)); } @@ -570,11 +682,11 @@ class InnerUnion14 { } }; -template -H5::CompType InnerUnion14Ddl(bool nullable, H5::DataType const& t0, std::string const& tag0, H5::DataType const& t1, std::string const& tag1, H5::DataType const& t2, std::string const& tag2, H5::DataType const& t3, std::string const& tag3, H5::DataType const& t4, std::string const& tag4, H5::DataType const& t5, std::string const& tag5, H5::DataType const& t6, std::string const& tag6, H5::DataType const& t7, std::string const& tag7, H5::DataType const& t8, std::string const& tag8, H5::DataType const& t9, std::string const& tag9, H5::DataType const& t10, std::string const& tag10, H5::DataType const& t11, std::string const& tag11, H5::DataType const& t12, std::string const& tag12, H5::DataType const& t13, std::string const& tag13) { - using UnionType = ::InnerUnion14; +template +H5::CompType InnerUnion22Ddl(bool nullable, H5::DataType const& t0, std::string const& tag0, H5::DataType const& t1, std::string const& tag1, H5::DataType const& t2, std::string const& tag2, H5::DataType const& t3, std::string const& tag3, H5::DataType const& t4, std::string const& tag4, H5::DataType const& t5, std::string const& tag5, H5::DataType const& t6, std::string const& tag6, H5::DataType const& t7, std::string const& tag7, H5::DataType const& t8, std::string const& tag8, H5::DataType const& t9, std::string const& tag9, H5::DataType const& t10, std::string const& tag10, H5::DataType const& t11, std::string const& tag11, H5::DataType const& t12, std::string const& tag12, H5::DataType const& t13, std::string const& tag13, H5::DataType const& t14, std::string const& tag14, H5::DataType const& t15, std::string const& tag15, H5::DataType const& t16, std::string const& tag16, H5::DataType const& t17, std::string const& tag17, H5::DataType const& t18, std::string const& tag18, H5::DataType const& t19, std::string const& tag19, H5::DataType const& t20, std::string const& tag20, H5::DataType const& t21, std::string const& tag21) { + using UnionType = ::InnerUnion22; H5::CompType rtn(sizeof(UnionType)); - rtn.insertMember("$type", HOFFSET(UnionType, type_index_), yardl::hdf5::UnionTypeEnumDdl(nullable, tag0, tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10, tag11, tag12, tag13)); + rtn.insertMember("$type", HOFFSET(UnionType, type_index_), yardl::hdf5::UnionTypeEnumDdl(nullable, tag0, tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10, tag11, tag12, tag13, tag14, tag15, tag16, tag17, tag18, tag19, tag20, tag21)); rtn.insertMember(tag0, HOFFSET(UnionType, value0_), t0); rtn.insertMember(tag1, HOFFSET(UnionType, value1_), t1); rtn.insertMember(tag2, HOFFSET(UnionType, value2_), t2); @@ -589,6 +701,14 @@ H5::CompType InnerUnion14Ddl(bool nullable, H5::DataType const& t0, std::string rtn.insertMember(tag11, HOFFSET(UnionType, value11_), t11); rtn.insertMember(tag12, HOFFSET(UnionType, value12_), t12); rtn.insertMember(tag13, HOFFSET(UnionType, value13_), t13); + rtn.insertMember(tag14, HOFFSET(UnionType, value14_), t14); + rtn.insertMember(tag15, HOFFSET(UnionType, value15_), t15); + rtn.insertMember(tag16, HOFFSET(UnionType, value16_), t16); + rtn.insertMember(tag17, HOFFSET(UnionType, value17_), t17); + rtn.insertMember(tag18, HOFFSET(UnionType, value18_), t18); + rtn.insertMember(tag19, HOFFSET(UnionType, value19_), t19); + rtn.insertMember(tag20, HOFFSET(UnionType, value20_), t20); + rtn.insertMember(tag21, HOFFSET(UnionType, value21_), t21); return rtn; } } @@ -751,29 +871,67 @@ namespace { t.insert("complex", &i); i = 6ULL; t.insert("rgbaMap", &i); - i = 7ULL; + return t; +} + +[[maybe_unused]] H5::EnumType GetArrayTypeHdf5Ddl() { + H5::EnumType t(H5::PredType::NATIVE_INT32); + int32_t i = 1; t.insert("spinDensityMap", &i); - i = 8ULL; + i = 2; t.insert("t1Map", &i); - i = 9ULL; + i = 3; t.insert("t2Map", &i); - i = 10ULL; + i = 4; t.insert("t2starMap", &i); - i = 11ULL; + i = 5; t.insert("adcMap", &i); - i = 12ULL; + i = 6; t.insert("b0Map", &i); - i = 13ULL; + i = 7; t.insert("b1Map", &i); - i = 14ULL; + i = 8; t.insert("sensitivityMap", &i); - i = 15ULL; + i = 9; t.insert("gfactorMap", &i); - i = 16ULL; + i = 10; t.insert("userMap", &i); return t; } +[[maybe_unused]] H5::EnumType GetArrayDimensionHdf5Ddl() { + H5::EnumType t(H5::PredType::NATIVE_INT32); + int32_t i = 0; + t.insert("channel", &i); + i = 1; + t.insert("z", &i); + i = 2; + t.insert("y", &i); + i = 3; + t.insert("x", &i); + i = 4; + t.insert("frequency", &i); + i = 5; + t.insert("basis", &i); + i = 6; + t.insert("samples", &i); + i = 7; + t.insert("loc", &i); + i = 8; + t.insert("s", &i); + i = 9; + t.insert("n", &i); + i = 10; + t.insert("e2", &i); + i = 11; + t.insert("e1", &i); + i = 12; + t.insert("e0", &i); + i = 13; + t.insert("time", &i); + return t; +} + struct _Inner_EncodingCounters { _Inner_EncodingCounters() {} _Inner_EncodingCounters(mrd::EncodingCounters const& o) @@ -1709,6 +1867,42 @@ struct _Inner_ImageArray { yardl::hdf5::InnerVlen, mrd::WaveformUint32> waveforms; }; +struct _Inner_NDArrayHeader { + _Inner_NDArrayHeader() {} + _Inner_NDArrayHeader(mrd::NDArrayHeader const& o) + : dimension_labels(o.dimension_labels), + array_type(o.array_type), + meta(o.meta) { + } + + void ToOuter (mrd::NDArrayHeader& o) const { + yardl::hdf5::ToOuter(dimension_labels, o.dimension_labels); + yardl::hdf5::ToOuter(array_type, o.array_type); + yardl::hdf5::ToOuter(meta, o.meta); + } + + yardl::hdf5::InnerVlen dimension_labels; + mrd::ArrayType array_type; + yardl::hdf5::InnerMap, mrd::ArrayMetaValue>, std::vector> meta; +}; + +template +struct _Inner_NDArray { + _Inner_NDArray() {} + _Inner_NDArray(mrd::NDArray const& o) + : head(o.head), + data(o.data) { + } + + void ToOuter (mrd::NDArray& o) const { + yardl::hdf5::ToOuter(head, o.head); + yardl::hdf5::ToOuter(data, o.data); + } + + mrd::hdf5::_Inner_NDArrayHeader head; + yardl::hdf5::InnerDynamicNdArray<_T_Inner, T> data; +}; + [[maybe_unused]] H5::CompType GetEncodingCountersHdf5Ddl() { using RecordType = mrd::hdf5::_Inner_EncodingCounters; H5::CompType t(sizeof(RecordType)); @@ -2206,6 +2400,24 @@ template return t; } +[[maybe_unused]] H5::CompType GetNDArrayHeaderHdf5Ddl() { + using RecordType = mrd::hdf5::_Inner_NDArrayHeader; + H5::CompType t(sizeof(RecordType)); + t.insertMember("dimensionLabels", HOFFSET(RecordType, dimension_labels), yardl::hdf5::InnerVlenDdl(mrd::hdf5::GetArrayDimensionHdf5Ddl())); + t.insertMember("arrayType", HOFFSET(RecordType, array_type), mrd::hdf5::GetArrayTypeHdf5Ddl()); + t.insertMember("meta", HOFFSET(RecordType, meta), yardl::hdf5::InnerMapDdl, mrd::ArrayMetaValue>>(yardl::hdf5::InnerVlenStringDdl(), yardl::hdf5::InnerVlenDdl(::InnerUnion3Ddl(false, yardl::hdf5::InnerVlenStringDdl(), "string", H5::PredType::NATIVE_INT64, "int64", H5::PredType::NATIVE_DOUBLE, "float64")))); + return t; +} + +template +[[maybe_unused]] H5::CompType GetNDArrayHdf5Ddl(H5::DataType const& T_type) { + using RecordType = mrd::hdf5::_Inner_NDArray<_T_Inner, T>; + H5::CompType t(sizeof(RecordType)); + t.insertMember("head", HOFFSET(RecordType, head), mrd::hdf5::GetNDArrayHeaderHdf5Ddl()); + t.insertMember("data", HOFFSET(RecordType, data), yardl::hdf5::DynamicNDArrayDdl<_T_Inner, T>(T_type)); + return t; +} + } // namespace MrdWriter::MrdWriter(std::string path) @@ -2218,7 +2430,7 @@ void MrdWriter::WriteHeaderImpl(std::optional const& value) { void MrdWriter::WriteDataImpl(mrd::StreamItem const& value) { if (!data_dataset_state_) { - data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "Acquisition", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "WaveformUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "ImageUint16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "ImageInt16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "ImageUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "ImageInt32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ImageFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ImageDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "AcquisitionBucket", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "ReconData", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "ImageArray", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant))))); + data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "acquisition", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "waveformUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "imageUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "imageInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "imageUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "imageInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "imageFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "imageDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "acquisitionBucket", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "reconData", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "arrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "imageArray", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT16), "ndArrayUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT16), "ndArrayInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT32), "ndArrayUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT32), "ndArrayInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ndArrayFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ndArrayDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant))))); } std::visit( @@ -2252,6 +2464,22 @@ void MrdWriter::WriteDataImpl(mrd::StreamItem const& value) { data_dataset_state_->Append, std::complex>, mrd::ArrayComplexFloat>(static_cast(value.index()), arg); } else if constexpr (std::is_same_v) { data_dataset_state_->Append(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayUint16>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayInt16>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayUint32>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayInt32>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayFloat>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, mrd::NDArrayDouble>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, std::complex>, mrd::NDArrayComplexFloat>(static_cast(value.index()), arg); + } else if constexpr (std::is_same_v) { + data_dataset_state_->Append, std::complex>, mrd::NDArrayComplexDouble>(static_cast(value.index()), arg); } else { static_assert(yardl::hdf5::always_false_v, "non-exhaustive visitor!"); } @@ -2261,7 +2489,7 @@ void MrdWriter::WriteDataImpl(mrd::StreamItem const& value) { void MrdWriter::EndDataImpl() { if (!data_dataset_state_) { - data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "Acquisition", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "WaveformUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "ImageUint16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "ImageInt16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "ImageUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "ImageInt32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ImageFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ImageDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "AcquisitionBucket", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "ReconData", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "ImageArray", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant))))); + data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "acquisition", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "waveformUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "imageUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "imageInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "imageUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "imageInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "imageFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "imageDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "acquisitionBucket", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "reconData", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "arrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "imageArray", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT16), "ndArrayUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT16), "ndArrayInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT32), "ndArrayUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT32), "ndArrayInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ndArrayFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ndArrayDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant))))); } data_dataset_state_.reset(); @@ -2283,7 +2511,7 @@ void MrdReader::ReadHeaderImpl(std::optional& value) { bool MrdReader::ReadDataImpl(mrd::StreamItem& value) { if (!data_dataset_state_) { - data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "Acquisition", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "WaveformUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "ImageUint16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "ImageInt16", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "ImageUint32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "ImageInt32", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ImageFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ImageDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ImageComplexDouble", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "AcquisitionBucket", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "ReconData", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "ImageArray", static_cast(std::max(sizeof(::InnerUnion14, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray>), sizeof(std::variant))))); + data_dataset_state_ = std::make_unique>(group_, "data", false, std::make_tuple(mrd::hdf5::GetAcquisitionHdf5Ddl(), "acquisition", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetWaveformHdf5Ddl(H5::PredType::NATIVE_UINT32), "waveformUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT16), "imageUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT16), "imageInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_UINT32), "imageUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_INT32), "imageInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_FLOAT), "imageFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "imageDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "imageComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetAcquisitionBucketHdf5Ddl(), "acquisitionBucket", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetReconDataHdf5Ddl(), "reconData", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(yardl::hdf5::DynamicNDArrayDdl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "arrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetImageArrayHdf5Ddl(), "imageArray", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT16), "ndArrayUint16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT16), "ndArrayInt16", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_UINT32), "ndArrayUint32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_INT32), "ndArrayInt32", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_FLOAT), "ndArrayFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl(H5::PredType::NATIVE_DOUBLE), "ndArrayDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexFloat", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant)))), std::make_tuple(mrd::hdf5::GetNDArrayHdf5Ddl, std::complex>(yardl::hdf5::ComplexTypeDdl()), "ndArrayComplexDouble", static_cast(std::max(sizeof(::InnerUnion22, mrd::WaveformUint32, mrd::hdf5::_Inner_Image, mrd::ImageUint16, mrd::hdf5::_Inner_Image, mrd::ImageInt16, mrd::hdf5::_Inner_Image, mrd::ImageUint32, mrd::hdf5::_Inner_Image, mrd::ImageInt32, mrd::hdf5::_Inner_Image, mrd::ImageFloat, mrd::hdf5::_Inner_Image, mrd::ImageDouble, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexFloat, mrd::hdf5::_Inner_Image, std::complex>, mrd::ImageComplexDouble, mrd::hdf5::_Inner_AcquisitionBucket, mrd::AcquisitionBucket, mrd::hdf5::_Inner_ReconData, mrd::ReconData, yardl::hdf5::InnerDynamicNdArray, std::complex>, mrd::ArrayComplexFloat, mrd::hdf5::_Inner_ImageArray, mrd::ImageArray, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt16, mrd::hdf5::_Inner_NDArray, mrd::NDArrayUint32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayInt32, mrd::hdf5::_Inner_NDArray, mrd::NDArrayFloat, mrd::hdf5::_Inner_NDArray, mrd::NDArrayDouble, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexFloat, mrd::hdf5::_Inner_NDArray, std::complex>, mrd::NDArrayComplexDouble>), sizeof(std::variant))))); } auto [has_result, type_index, reader] = data_dataset_state_->ReadIndex(); @@ -2363,6 +2591,46 @@ bool MrdReader::ReadDataImpl(mrd::StreamItem& value) { reader->Read(ref); break; } + case 14: { + mrd::NDArrayUint16& ref = value.emplace<14>(); + reader->Read, mrd::NDArrayUint16>(ref); + break; + } + case 15: { + mrd::NDArrayInt16& ref = value.emplace<15>(); + reader->Read, mrd::NDArrayInt16>(ref); + break; + } + case 16: { + mrd::NDArrayUint32& ref = value.emplace<16>(); + reader->Read, mrd::NDArrayUint32>(ref); + break; + } + case 17: { + mrd::NDArrayInt32& ref = value.emplace<17>(); + reader->Read, mrd::NDArrayInt32>(ref); + break; + } + case 18: { + mrd::NDArrayFloat& ref = value.emplace<18>(); + reader->Read, mrd::NDArrayFloat>(ref); + break; + } + case 19: { + mrd::NDArrayDouble& ref = value.emplace<19>(); + reader->Read, mrd::NDArrayDouble>(ref); + break; + } + case 20: { + mrd::NDArrayComplexFloat& ref = value.emplace<20>(); + reader->Read, std::complex>, mrd::NDArrayComplexFloat>(ref); + break; + } + case 21: { + mrd::NDArrayComplexDouble& ref = value.emplace<21>(); + reader->Read, std::complex>, mrd::NDArrayComplexDouble>(ref); + break; + } } return true; diff --git a/cpp/mrd/hdf5/protocols.h b/cpp/mrd/hdf5/protocols.h index 1822992f..bb64d3fa 100644 --- a/cpp/mrd/hdf5/protocols.h +++ b/cpp/mrd/hdf5/protocols.h @@ -28,7 +28,7 @@ class MrdWriter : public mrd::MrdWriterBase, public yardl::hdf5::Hdf5Writer { void Flush() override; private: - std::unique_ptr> data_dataset_state_; + std::unique_ptr> data_dataset_state_; }; // HDF5 reader for the Mrd protocol. @@ -42,7 +42,7 @@ class MrdReader : public mrd::MrdReaderBase, public yardl::hdf5::Hdf5Reader { bool ReadDataImpl(mrd::StreamItem& value) override; private: - std::unique_ptr> data_dataset_state_; + std::unique_ptr> data_dataset_state_; }; // HDF5 writer for the MrdNoiseCovariance protocol. diff --git a/cpp/mrd/ndjson/protocols.cc b/cpp/mrd/ndjson/protocols.cc index 389cca09..1c877058 100644 --- a/cpp/mrd/ndjson/protocols.cc +++ b/cpp/mrd/ndjson/protocols.cc @@ -175,6 +175,20 @@ void from_json(ordered_json const& j, mrd::ReconData& value); void to_json(ordered_json& j, mrd::ImageArray const& value); void from_json(ordered_json const& j, mrd::ImageArray& value); +void to_json(ordered_json& j, mrd::ArrayType const& value); +void from_json(ordered_json const& j, mrd::ArrayType& value); + +void to_json(ordered_json& j, mrd::ArrayDimension const& value); +void from_json(ordered_json const& j, mrd::ArrayDimension& value); + +void to_json(ordered_json& j, mrd::NDArrayHeader const& value); +void from_json(ordered_json const& j, mrd::NDArrayHeader& value); + +template +void to_json(ordered_json& j, mrd::NDArray const& value); +template +void from_json(ordered_json const& j, mrd::NDArray& value); + } // namespace mrd NLOHMANN_JSON_NAMESPACE_BEGIN @@ -287,115 +301,242 @@ struct adl_serializer, mrd::Image, mr }; template <> -struct adl_serializer, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray>> { - static void to_json(ordered_json& j, std::variant, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray> const& value) { +struct adl_serializer, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>>> { + static void to_json(ordered_json& j, std::variant, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>> const& value) { switch (value.index()) { case 0: - j = ordered_json{ {"Acquisition", std::get(value)} }; + j = ordered_json{ {"NDArrayUint16", std::get>(value)} }; break; case 1: - j = ordered_json{ {"WaveformUint32", std::get>(value)} }; + j = ordered_json{ {"NDArrayInt16", std::get>(value)} }; break; case 2: - j = ordered_json{ {"ImageUint16", std::get>(value)} }; + j = ordered_json{ {"NDArrayUint32", std::get>(value)} }; break; case 3: - j = ordered_json{ {"ImageInt16", std::get>(value)} }; + j = ordered_json{ {"NDArrayInt32", std::get>(value)} }; break; case 4: - j = ordered_json{ {"ImageUint32", std::get>(value)} }; + j = ordered_json{ {"NDArrayFloat", std::get>(value)} }; break; case 5: - j = ordered_json{ {"ImageInt32", std::get>(value)} }; + j = ordered_json{ {"NDArrayDouble", std::get>(value)} }; break; case 6: - j = ordered_json{ {"ImageFloat", std::get>(value)} }; + j = ordered_json{ {"NDArrayComplexFloat", std::get>>(value)} }; break; case 7: - j = ordered_json{ {"ImageDouble", std::get>(value)} }; + j = ordered_json{ {"NDArrayComplexDouble", std::get>>(value)} }; + break; + default: + throw std::runtime_error("Invalid union value"); + } + } + + static void from_json(ordered_json const& j, std::variant, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>>& value) { + auto it = j.begin(); + std::string tag = it.key(); + if (tag == "NDArrayUint16") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayInt16") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayUint32") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayInt32") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayFloat") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayDouble") { + value = it.value().get>(); + return; + } + if (tag == "NDArrayComplexFloat") { + value = it.value().get>>(); + return; + } + if (tag == "NDArrayComplexDouble") { + value = it.value().get>>(); + return; + } + } +}; + +template <> +struct adl_serializer, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>>> { + static void to_json(ordered_json& j, std::variant, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>> const& value) { + switch (value.index()) { + case 0: + j = ordered_json{ {"acquisition", std::get(value)} }; + break; + case 1: + j = ordered_json{ {"waveformUint32", std::get>(value)} }; + break; + case 2: + j = ordered_json{ {"imageUint16", std::get>(value)} }; + break; + case 3: + j = ordered_json{ {"imageInt16", std::get>(value)} }; + break; + case 4: + j = ordered_json{ {"imageUint32", std::get>(value)} }; + break; + case 5: + j = ordered_json{ {"imageInt32", std::get>(value)} }; + break; + case 6: + j = ordered_json{ {"imageFloat", std::get>(value)} }; + break; + case 7: + j = ordered_json{ {"imageDouble", std::get>(value)} }; break; case 8: - j = ordered_json{ {"ImageComplexFloat", std::get>>(value)} }; + j = ordered_json{ {"imageComplexFloat", std::get>>(value)} }; break; case 9: - j = ordered_json{ {"ImageComplexDouble", std::get>>(value)} }; + j = ordered_json{ {"imageComplexDouble", std::get>>(value)} }; break; case 10: - j = ordered_json{ {"AcquisitionBucket", std::get(value)} }; + j = ordered_json{ {"acquisitionBucket", std::get(value)} }; break; case 11: - j = ordered_json{ {"ReconData", std::get(value)} }; + j = ordered_json{ {"reconData", std::get(value)} }; break; case 12: - j = ordered_json{ {"ArrayComplexFloat", std::get>>(value)} }; + j = ordered_json{ {"arrayComplexFloat", std::get>>(value)} }; break; case 13: - j = ordered_json{ {"ImageArray", std::get(value)} }; + j = ordered_json{ {"imageArray", std::get(value)} }; + break; + case 14: + j = ordered_json{ {"ndArrayUint16", std::get>(value)} }; + break; + case 15: + j = ordered_json{ {"ndArrayInt16", std::get>(value)} }; + break; + case 16: + j = ordered_json{ {"ndArrayUint32", std::get>(value)} }; + break; + case 17: + j = ordered_json{ {"ndArrayInt32", std::get>(value)} }; + break; + case 18: + j = ordered_json{ {"ndArrayFloat", std::get>(value)} }; + break; + case 19: + j = ordered_json{ {"ndArrayDouble", std::get>(value)} }; + break; + case 20: + j = ordered_json{ {"ndArrayComplexFloat", std::get>>(value)} }; + break; + case 21: + j = ordered_json{ {"ndArrayComplexDouble", std::get>>(value)} }; break; default: throw std::runtime_error("Invalid union value"); } } - static void from_json(ordered_json const& j, std::variant, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray>& value) { + static void from_json(ordered_json const& j, std::variant, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image, mrd::Image>, mrd::Image>, mrd::AcquisitionBucket, mrd::ReconData, yardl::DynamicNDArray>, mrd::ImageArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray, mrd::NDArray>, mrd::NDArray>>& value) { auto it = j.begin(); std::string tag = it.key(); - if (tag == "Acquisition") { + if (tag == "acquisition") { value = it.value().get(); return; } - if (tag == "WaveformUint32") { + if (tag == "waveformUint32") { value = it.value().get>(); return; } - if (tag == "ImageUint16") { + if (tag == "imageUint16") { value = it.value().get>(); return; } - if (tag == "ImageInt16") { + if (tag == "imageInt16") { value = it.value().get>(); return; } - if (tag == "ImageUint32") { + if (tag == "imageUint32") { value = it.value().get>(); return; } - if (tag == "ImageInt32") { + if (tag == "imageInt32") { value = it.value().get>(); return; } - if (tag == "ImageFloat") { + if (tag == "imageFloat") { value = it.value().get>(); return; } - if (tag == "ImageDouble") { + if (tag == "imageDouble") { value = it.value().get>(); return; } - if (tag == "ImageComplexFloat") { + if (tag == "imageComplexFloat") { value = it.value().get>>(); return; } - if (tag == "ImageComplexDouble") { + if (tag == "imageComplexDouble") { value = it.value().get>>(); return; } - if (tag == "AcquisitionBucket") { + if (tag == "acquisitionBucket") { value = it.value().get(); return; } - if (tag == "ReconData") { + if (tag == "reconData") { value = it.value().get(); return; } - if (tag == "ArrayComplexFloat") { + if (tag == "arrayComplexFloat") { value = it.value().get>>(); return; } - if (tag == "ImageArray") { + if (tag == "imageArray") { value = it.value().get(); return; } + if (tag == "ndArrayUint16") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayInt16") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayUint32") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayInt32") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayFloat") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayDouble") { + value = it.value().get>(); + return; + } + if (tag == "ndArrayComplexFloat") { + value = it.value().get>>(); + return; + } + if (tag == "ndArrayComplexDouble") { + value = it.value().get>>(); + return; + } } }; @@ -2543,16 +2684,6 @@ std::unordered_map const __ImageType_values = { {"imag", mrd::ImageType::kImag}, {"complex", mrd::ImageType::kComplex}, {"rgbaMap", mrd::ImageType::kRgbaMap}, - {"spinDensityMap", mrd::ImageType::kSpinDensityMap}, - {"t1Map", mrd::ImageType::kT1Map}, - {"t2Map", mrd::ImageType::kT2Map}, - {"t2starMap", mrd::ImageType::kT2starMap}, - {"adcMap", mrd::ImageType::kAdcMap}, - {"b0Map", mrd::ImageType::kB0Map}, - {"b1Map", mrd::ImageType::kB1Map}, - {"sensitivityMap", mrd::ImageType::kSensitivityMap}, - {"gfactorMap", mrd::ImageType::kGfactorMap}, - {"userMap", mrd::ImageType::kUserMap}, }; } //namespace @@ -2576,36 +2707,6 @@ void to_json(ordered_json& j, mrd::ImageType const& value) { case mrd::ImageType::kRgbaMap: j = "rgbaMap"; break; - case mrd::ImageType::kSpinDensityMap: - j = "spinDensityMap"; - break; - case mrd::ImageType::kT1Map: - j = "t1Map"; - break; - case mrd::ImageType::kT2Map: - j = "t2Map"; - break; - case mrd::ImageType::kT2starMap: - j = "t2starMap"; - break; - case mrd::ImageType::kAdcMap: - j = "adcMap"; - break; - case mrd::ImageType::kB0Map: - j = "b0Map"; - break; - case mrd::ImageType::kB1Map: - j = "b1Map"; - break; - case mrd::ImageType::kSensitivityMap: - j = "sensitivityMap"; - break; - case mrd::ImageType::kGfactorMap: - j = "gfactorMap"; - break; - case mrd::ImageType::kUserMap: - j = "userMap"; - break; default: using underlying_type = typename std::underlying_type::type; j = static_cast(value); @@ -3073,6 +3174,202 @@ void from_json(ordered_json const& j, mrd::ImageArray& value) { } } +namespace { +std::unordered_map const __ArrayType_values = { + {"spinDensityMap", mrd::ArrayType::kSpinDensityMap}, + {"t1Map", mrd::ArrayType::kT1Map}, + {"t2Map", mrd::ArrayType::kT2Map}, + {"t2starMap", mrd::ArrayType::kT2starMap}, + {"adcMap", mrd::ArrayType::kAdcMap}, + {"b0Map", mrd::ArrayType::kB0Map}, + {"b1Map", mrd::ArrayType::kB1Map}, + {"sensitivityMap", mrd::ArrayType::kSensitivityMap}, + {"gfactorMap", mrd::ArrayType::kGfactorMap}, + {"userMap", mrd::ArrayType::kUserMap}, +}; +} //namespace + +void to_json(ordered_json& j, mrd::ArrayType const& value) { + switch (value) { + case mrd::ArrayType::kSpinDensityMap: + j = "spinDensityMap"; + break; + case mrd::ArrayType::kT1Map: + j = "t1Map"; + break; + case mrd::ArrayType::kT2Map: + j = "t2Map"; + break; + case mrd::ArrayType::kT2starMap: + j = "t2starMap"; + break; + case mrd::ArrayType::kAdcMap: + j = "adcMap"; + break; + case mrd::ArrayType::kB0Map: + j = "b0Map"; + break; + case mrd::ArrayType::kB1Map: + j = "b1Map"; + break; + case mrd::ArrayType::kSensitivityMap: + j = "sensitivityMap"; + break; + case mrd::ArrayType::kGfactorMap: + j = "gfactorMap"; + break; + case mrd::ArrayType::kUserMap: + j = "userMap"; + break; + default: + using underlying_type = typename std::underlying_type::type; + j = static_cast(value); + break; + } +} + +void from_json(ordered_json const& j, mrd::ArrayType& value) { + if (j.is_string()) { + auto symbol = j.get(); + if (auto res = __ArrayType_values.find(symbol); res != __ArrayType_values.end()) { + value = res->second; + return; + } + throw std::runtime_error("Invalid enum value '" + symbol + "' for enum mrd::ArrayType"); + } + using underlying_type = typename std::underlying_type::type; + value = static_cast(j.get()); +} + +namespace { +std::unordered_map const __ArrayDimension_values = { + {"channel", mrd::ArrayDimension::kChannel}, + {"z", mrd::ArrayDimension::kZ}, + {"y", mrd::ArrayDimension::kY}, + {"x", mrd::ArrayDimension::kX}, + {"frequency", mrd::ArrayDimension::kFrequency}, + {"basis", mrd::ArrayDimension::kBasis}, + {"samples", mrd::ArrayDimension::kSamples}, + {"loc", mrd::ArrayDimension::kLoc}, + {"s", mrd::ArrayDimension::kS}, + {"n", mrd::ArrayDimension::kN}, + {"e2", mrd::ArrayDimension::kE2}, + {"e1", mrd::ArrayDimension::kE1}, + {"e0", mrd::ArrayDimension::kE0}, + {"time", mrd::ArrayDimension::kTime}, +}; +} //namespace + +void to_json(ordered_json& j, mrd::ArrayDimension const& value) { + switch (value) { + case mrd::ArrayDimension::kChannel: + j = "channel"; + break; + case mrd::ArrayDimension::kZ: + j = "z"; + break; + case mrd::ArrayDimension::kY: + j = "y"; + break; + case mrd::ArrayDimension::kX: + j = "x"; + break; + case mrd::ArrayDimension::kFrequency: + j = "frequency"; + break; + case mrd::ArrayDimension::kBasis: + j = "basis"; + break; + case mrd::ArrayDimension::kSamples: + j = "samples"; + break; + case mrd::ArrayDimension::kLoc: + j = "loc"; + break; + case mrd::ArrayDimension::kS: + j = "s"; + break; + case mrd::ArrayDimension::kN: + j = "n"; + break; + case mrd::ArrayDimension::kE2: + j = "e2"; + break; + case mrd::ArrayDimension::kE1: + j = "e1"; + break; + case mrd::ArrayDimension::kE0: + j = "e0"; + break; + case mrd::ArrayDimension::kTime: + j = "time"; + break; + default: + using underlying_type = typename std::underlying_type::type; + j = static_cast(value); + break; + } +} + +void from_json(ordered_json const& j, mrd::ArrayDimension& value) { + if (j.is_string()) { + auto symbol = j.get(); + if (auto res = __ArrayDimension_values.find(symbol); res != __ArrayDimension_values.end()) { + value = res->second; + return; + } + throw std::runtime_error("Invalid enum value '" + symbol + "' for enum mrd::ArrayDimension"); + } + using underlying_type = typename std::underlying_type::type; + value = static_cast(j.get()); +} + +void to_json(ordered_json& j, mrd::NDArrayHeader const& value) { + j = ordered_json::object(); + if (yardl::ndjson::ShouldSerializeFieldValue(value.dimension_labels)) { + j.push_back({"dimensionLabels", value.dimension_labels}); + } + if (yardl::ndjson::ShouldSerializeFieldValue(value.array_type)) { + j.push_back({"arrayType", value.array_type}); + } + if (yardl::ndjson::ShouldSerializeFieldValue(value.meta)) { + j.push_back({"meta", value.meta}); + } +} + +void from_json(ordered_json const& j, mrd::NDArrayHeader& value) { + if (auto it = j.find("dimensionLabels"); it != j.end()) { + it->get_to(value.dimension_labels); + } + if (auto it = j.find("arrayType"); it != j.end()) { + it->get_to(value.array_type); + } + if (auto it = j.find("meta"); it != j.end()) { + it->get_to(value.meta); + } +} + +template +void to_json(ordered_json& j, mrd::NDArray const& value) { + j = ordered_json::object(); + if (yardl::ndjson::ShouldSerializeFieldValue(value.head)) { + j.push_back({"head", value.head}); + } + if (yardl::ndjson::ShouldSerializeFieldValue(value.data)) { + j.push_back({"data", value.data}); + } +} + +template +void from_json(ordered_json const& j, mrd::NDArray& value) { + if (auto it = j.find("head"); it != j.end()) { + it->get_to(value.head); + } + if (auto it = j.find("data"); it != j.end()) { + it->get_to(value.data); + } +} + } // namespace mrd namespace mrd::ndjson { diff --git a/cpp/mrd/protocols.cc b/cpp/mrd/protocols.cc index 5397ee28..110980da 100644 --- a/cpp/mrd/protocols.cc +++ b/cpp/mrd/protocols.cc @@ -39,7 +39,7 @@ void MrdReaderBaseInvalidState(uint8_t attempted, uint8_t current) { } // namespace -std::string MrdWriterBase::schema_ = R"({"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]})"; +std::string MrdWriterBase::schema_ = R"({"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"ArrayDimension","values":[{"symbol":"channel","value":0},{"symbol":"z","value":1},{"symbol":"y","value":2},{"symbol":"x","value":3},{"symbol":"frequency","value":4},{"symbol":"basis","value":5},{"symbol":"samples","value":6},{"symbol":"loc","value":7},{"symbol":"s","value":8},{"symbol":"n","value":9},{"symbol":"e2","value":10},{"symbol":"e1","value":11},{"symbol":"e0","value":12},{"symbol":"time","value":13}]},{"name":"ArrayMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ArrayMetaValue"}}}}},{"name":"ArrayMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ArrayType","values":[{"symbol":"spinDensityMap","value":1},{"symbol":"t1Map","value":2},{"symbol":"t2Map","value":3},{"symbol":"t2starMap","value":4},{"symbol":"adcMap","value":5},{"symbol":"b0Map","value":6},{"symbol":"b1Map","value":7},{"symbol":"sensitivityMap","value":8},{"symbol":"gfactorMap","value":9},{"symbol":"userMap","value":10}]},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"NDArray","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.NDArrayHeader"},{"name":"data","type":{"name":"Mrd.Array","typeArguments":["T"]}}]},{"name":"NDArrayComplexDouble","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat64"]}},{"name":"NDArrayComplexFloat","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat32"]}},{"name":"NDArrayDouble","type":{"name":"Mrd.NDArray","typeArguments":["float64"]}},{"name":"NDArrayFloat","type":{"name":"Mrd.NDArray","typeArguments":["float32"]}},{"name":"NDArrayHeader","fields":[{"name":"dimensionLabels","type":{"vector":{"items":"Mrd.ArrayDimension"}}},{"name":"arrayType","type":"Mrd.ArrayType"},{"name":"meta","type":"Mrd.ArrayMeta"}]},{"name":"NDArrayInt16","type":{"name":"Mrd.NDArray","typeArguments":["int16"]}},{"name":"NDArrayInt32","type":{"name":"Mrd.NDArray","typeArguments":["int32"]}},{"name":"NDArrayUint16","type":{"name":"Mrd.NDArray","typeArguments":["uint16"]}},{"name":"NDArrayUint32","type":{"name":"Mrd.NDArray","typeArguments":["uint32"]}},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"acquisition","explicitTag":true,"type":"Mrd.Acquisition"},{"tag":"waveformUint32","explicitTag":true,"type":"Mrd.WaveformUint32"},{"tag":"imageUint16","explicitTag":true,"type":"Mrd.ImageUint16"},{"tag":"imageInt16","explicitTag":true,"type":"Mrd.ImageInt16"},{"tag":"imageUint32","explicitTag":true,"type":"Mrd.ImageUint32"},{"tag":"imageInt32","explicitTag":true,"type":"Mrd.ImageInt32"},{"tag":"imageFloat","explicitTag":true,"type":"Mrd.ImageFloat"},{"tag":"imageDouble","explicitTag":true,"type":"Mrd.ImageDouble"},{"tag":"imageComplexFloat","explicitTag":true,"type":"Mrd.ImageComplexFloat"},{"tag":"imageComplexDouble","explicitTag":true,"type":"Mrd.ImageComplexDouble"},{"tag":"acquisitionBucket","explicitTag":true,"type":"Mrd.AcquisitionBucket"},{"tag":"reconData","explicitTag":true,"type":"Mrd.ReconData"},{"tag":"arrayComplexFloat","explicitTag":true,"type":"Mrd.ArrayComplexFloat"},{"tag":"imageArray","explicitTag":true,"type":"Mrd.ImageArray"},{"tag":"ndArrayUint16","explicitTag":true,"type":"Mrd.NDArrayUint16"},{"tag":"ndArrayInt16","explicitTag":true,"type":"Mrd.NDArrayInt16"},{"tag":"ndArrayUint32","explicitTag":true,"type":"Mrd.NDArrayUint32"},{"tag":"ndArrayInt32","explicitTag":true,"type":"Mrd.NDArrayInt32"},{"tag":"ndArrayFloat","explicitTag":true,"type":"Mrd.NDArrayFloat"},{"tag":"ndArrayDouble","explicitTag":true,"type":"Mrd.NDArrayDouble"},{"tag":"ndArrayComplexFloat","explicitTag":true,"type":"Mrd.NDArrayComplexFloat"},{"tag":"ndArrayComplexDouble","explicitTag":true,"type":"Mrd.NDArrayComplexDouble"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]})"; std::vector MrdWriterBase::previous_schemas_ = { }; diff --git a/cpp/mrd/types.h b/cpp/mrd/types.h index 756e2fcf..0ac09b0e 100644 --- a/cpp/mrd/types.h +++ b/cpp/mrd/types.h @@ -873,16 +873,6 @@ enum class ImageType : uint64_t { kImag = 4ULL, kComplex = 5ULL, kRgbaMap = 6ULL, - kSpinDensityMap = 7ULL, - kT1Map = 8ULL, - kT2Map = 9ULL, - kT2starMap = 10ULL, - kAdcMap = 11ULL, - kB0Map = 12ULL, - kB1Map = 13ULL, - kSensitivityMap = 14ULL, - kGfactorMap = 15ULL, - kUserMap = 16ULL, }; template @@ -1025,7 +1015,7 @@ struct NoiseCovariance { std::vector coil_labels{}; // Comes from Header.acquisitionSystemInformation.relativeReceiverNoiseBandwidth float receiver_noise_bandwidth{}; - // Comes from Acquisition.sampleTimeNs + // Comes from Acquisition.sampleTimeUs uint64_t noise_dwell_time_ns{}; // Number of samples used to compute matrix yardl::Size sample_count{}; @@ -1221,8 +1211,91 @@ using Array = yardl::DynamicNDArray; using ArrayComplexFloat = mrd::Array>; +enum class ArrayType { + kSpinDensityMap = 1, + kT1Map = 2, + kT2Map = 3, + kT2starMap = 4, + kAdcMap = 5, + kB0Map = 6, + kB1Map = 7, + kSensitivityMap = 8, + kGfactorMap = 9, + kUserMap = 10, +}; + +using ArrayMetaValue = std::variant; + +using ArrayMeta = std::unordered_map>; + +enum class ArrayDimension { + kChannel = 0, + kZ = 1, + kY = 2, + kX = 3, + kFrequency = 4, + kBasis = 5, + kSamples = 6, + kLoc = 7, + kS = 8, + kN = 9, + kE2 = 10, + kE1 = 11, + kE0 = 12, + kTime = 13, +}; + +struct NDArrayHeader { + std::vector dimension_labels{}; + mrd::ArrayType array_type{}; + mrd::ArrayMeta meta{}; + + bool operator==(const NDArrayHeader& other) const { + return dimension_labels == other.dimension_labels && + array_type == other.array_type && + meta == other.meta; + } + + bool operator!=(const NDArrayHeader& other) const { + return !(*this == other); + } +}; + +template +struct NDArray { + mrd::NDArrayHeader head{}; + mrd::Array data{}; + + bool operator==(const NDArray& other) const { + return head == other.head && + data == other.data; + } + + bool operator!=(const NDArray& other) const { + return !(*this == other); + } +}; + +using NDArrayUint16 = mrd::NDArray; + +using NDArrayInt16 = mrd::NDArray; + +using NDArrayUint32 = mrd::NDArray; + +using NDArrayInt32 = mrd::NDArray; + +using NDArrayFloat = mrd::NDArray; + +using NDArrayDouble = mrd::NDArray; + +using NDArrayComplexFloat = mrd::NDArray>; + +using NDArrayComplexDouble = mrd::NDArray>; + +using AnyNDArray = std::variant; + // Union of all primary types that can be streamed in the MRD Protocol -using StreamItem = std::variant; +using StreamItem = std::variant; } // namespace mrd diff --git a/matlab/toolbox/+mrd/+binary/MrdReader.m b/matlab/toolbox/+mrd/+binary/MrdReader.m index 83e7fd1d..8e8fcd9e 100644 --- a/matlab/toolbox/+mrd/+binary/MrdReader.m +++ b/matlab/toolbox/+mrd/+binary/MrdReader.m @@ -17,7 +17,7 @@ self@mrd.MrdReaderBase(skip_completed_check=options.skip_completed_check); self@yardl.binary.BinaryProtocolReader(filename, mrd.MrdReaderBase.schema); self.header_serializer = yardl.binary.OptionalSerializer(mrd.binary.HeaderSerializer()); - self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer()}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray})); + self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer(), mrd.binary.NDArraySerializer(yardl.binary.Uint16Serializer), mrd.binary.NDArraySerializer(yardl.binary.Int16Serializer), mrd.binary.NDArraySerializer(yardl.binary.Uint32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Int32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Float32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Float64Serializer), mrd.binary.NDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Complexfloat64Serializer)}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray, @mrd.StreamItem.NdArrayUint16, @mrd.StreamItem.NdArrayInt16, @mrd.StreamItem.NdArrayUint32, @mrd.StreamItem.NdArrayInt32, @mrd.StreamItem.NdArrayFloat, @mrd.StreamItem.NdArrayDouble, @mrd.StreamItem.NdArrayComplexFloat, @mrd.StreamItem.NdArrayComplexDouble})); end end diff --git a/matlab/toolbox/+mrd/+binary/MrdWriter.m b/matlab/toolbox/+mrd/+binary/MrdWriter.m index 311e22a7..7a604dc5 100644 --- a/matlab/toolbox/+mrd/+binary/MrdWriter.m +++ b/matlab/toolbox/+mrd/+binary/MrdWriter.m @@ -13,7 +13,7 @@ self@mrd.MrdWriterBase(); self@yardl.binary.BinaryProtocolWriter(filename, mrd.MrdWriterBase.schema); self.header_serializer = yardl.binary.OptionalSerializer(mrd.binary.HeaderSerializer()); - self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer()}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray})); + self.data_serializer = yardl.binary.StreamSerializer(yardl.binary.UnionSerializer('mrd.StreamItem', {mrd.binary.AcquisitionSerializer(), mrd.binary.WaveformSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint16Serializer), mrd.binary.ImageSerializer(yardl.binary.Int16Serializer), mrd.binary.ImageSerializer(yardl.binary.Uint32Serializer), mrd.binary.ImageSerializer(yardl.binary.Int32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float32Serializer), mrd.binary.ImageSerializer(yardl.binary.Float64Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageSerializer(yardl.binary.Complexfloat64Serializer), mrd.binary.AcquisitionBucketSerializer(), mrd.binary.ReconDataSerializer(), yardl.binary.DynamicNDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.ImageArraySerializer(), mrd.binary.NDArraySerializer(yardl.binary.Uint16Serializer), mrd.binary.NDArraySerializer(yardl.binary.Int16Serializer), mrd.binary.NDArraySerializer(yardl.binary.Uint32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Int32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Float32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Float64Serializer), mrd.binary.NDArraySerializer(yardl.binary.Complexfloat32Serializer), mrd.binary.NDArraySerializer(yardl.binary.Complexfloat64Serializer)}, {@mrd.StreamItem.Acquisition, @mrd.StreamItem.WaveformUint32, @mrd.StreamItem.ImageUint16, @mrd.StreamItem.ImageInt16, @mrd.StreamItem.ImageUint32, @mrd.StreamItem.ImageInt32, @mrd.StreamItem.ImageFloat, @mrd.StreamItem.ImageDouble, @mrd.StreamItem.ImageComplexFloat, @mrd.StreamItem.ImageComplexDouble, @mrd.StreamItem.AcquisitionBucket, @mrd.StreamItem.ReconData, @mrd.StreamItem.ArrayComplexFloat, @mrd.StreamItem.ImageArray, @mrd.StreamItem.NdArrayUint16, @mrd.StreamItem.NdArrayInt16, @mrd.StreamItem.NdArrayUint32, @mrd.StreamItem.NdArrayInt32, @mrd.StreamItem.NdArrayFloat, @mrd.StreamItem.NdArrayDouble, @mrd.StreamItem.NdArrayComplexFloat, @mrd.StreamItem.NdArrayComplexDouble})); end end diff --git a/matlab/toolbox/+mrd/+binary/NDArrayHeaderSerializer.m b/matlab/toolbox/+mrd/+binary/NDArrayHeaderSerializer.m new file mode 100644 index 00000000..1f8385ed --- /dev/null +++ b/matlab/toolbox/+mrd/+binary/NDArrayHeaderSerializer.m @@ -0,0 +1,26 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayHeaderSerializer < yardl.binary.RecordSerializer + methods + function self = NDArrayHeaderSerializer() + field_serializers{1} = yardl.binary.VectorSerializer(yardl.binary.EnumSerializer('mrd.ArrayDimension', @mrd.ArrayDimension, yardl.binary.Int32Serializer)); + field_serializers{2} = yardl.binary.EnumSerializer('mrd.ArrayType', @mrd.ArrayType, yardl.binary.Int32Serializer); + field_serializers{3} = yardl.binary.MapSerializer(yardl.binary.StringSerializer, yardl.binary.VectorSerializer(yardl.binary.UnionSerializer('mrd.ArrayMetaValue', {yardl.binary.StringSerializer, yardl.binary.Int64Serializer, yardl.binary.Float64Serializer}, {@mrd.ArrayMetaValue.String, @mrd.ArrayMetaValue.Int64, @mrd.ArrayMetaValue.Float64}))); + self@yardl.binary.RecordSerializer('mrd.NDArrayHeader', field_serializers); + end + + function write(self, outstream, value) + arguments + self + outstream (1,1) yardl.binary.CodedOutputStream + value (1,1) mrd.NDArrayHeader + end + self.write_(outstream, value.dimension_labels, value.array_type, value.meta); + end + + function value = read(self, instream) + fields = self.read_(instream); + value = mrd.NDArrayHeader(dimension_labels=fields{1}, array_type=fields{2}, meta=fields{3}); + end + end +end diff --git a/matlab/toolbox/+mrd/+binary/NDArraySerializer.m b/matlab/toolbox/+mrd/+binary/NDArraySerializer.m new file mode 100644 index 00000000..63af5b6e --- /dev/null +++ b/matlab/toolbox/+mrd/+binary/NDArraySerializer.m @@ -0,0 +1,25 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArraySerializer < yardl.binary.RecordSerializer + methods + function self = NDArraySerializer(t_serializer) + field_serializers{1} = mrd.binary.NDArrayHeaderSerializer(); + field_serializers{2} = yardl.binary.DynamicNDArraySerializer(t_serializer); + self@yardl.binary.RecordSerializer('mrd.NDArray', field_serializers); + end + + function write(self, outstream, value) + arguments + self + outstream (1,1) yardl.binary.CodedOutputStream + value (1,1) mrd.NDArray + end + self.write_(outstream, value.head, value.data); + end + + function value = read(self, instream) + fields = self.read_(instream); + value = mrd.NDArray(head=fields{1}, data=fields{2}); + end + end +end diff --git a/matlab/toolbox/+mrd/AnyNDArray.m b/matlab/toolbox/+mrd/AnyNDArray.m new file mode 100644 index 00000000..6bdebb91 --- /dev/null +++ b/matlab/toolbox/+mrd/AnyNDArray.m @@ -0,0 +1,97 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef AnyNDArray < yardl.Union + methods (Static) + function res = NDArrayUint16(value) + res = mrd.AnyNDArray(1, value); + end + + function res = NDArrayInt16(value) + res = mrd.AnyNDArray(2, value); + end + + function res = NDArrayUint32(value) + res = mrd.AnyNDArray(3, value); + end + + function res = NDArrayInt32(value) + res = mrd.AnyNDArray(4, value); + end + + function res = NDArrayFloat(value) + res = mrd.AnyNDArray(5, value); + end + + function res = NDArrayDouble(value) + res = mrd.AnyNDArray(6, value); + end + + function res = NDArrayComplexFloat(value) + res = mrd.AnyNDArray(7, value); + end + + function res = NDArrayComplexDouble(value) + res = mrd.AnyNDArray(8, value); + end + + function z = zeros(varargin) + elem = mrd.AnyNDArray(0, yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end + + methods + function res = isNDArrayUint16(self) + res = self.index == 1; + end + + function res = isNDArrayInt16(self) + res = self.index == 2; + end + + function res = isNDArrayUint32(self) + res = self.index == 3; + end + + function res = isNDArrayInt32(self) + res = self.index == 4; + end + + function res = isNDArrayFloat(self) + res = self.index == 5; + end + + function res = isNDArrayDouble(self) + res = self.index == 6; + end + + function res = isNDArrayComplexFloat(self) + res = self.index == 7; + end + + function res = isNDArrayComplexDouble(self) + res = self.index == 8; + end + + function eq = eq(self, other) + eq = isa(other, "mrd.AnyNDArray") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); + end + + function ne = ne(self, other) + ne = ~self.eq(other); + end + + function t = tag(self) + tags_ = ["NDArrayUint16", "NDArrayInt16", "NDArrayUint32", "NDArrayInt32", "NDArrayFloat", "NDArrayDouble", "NDArrayComplexFloat", "NDArrayComplexDouble"]; + t = tags_(self.index_); + end + end +end diff --git a/matlab/toolbox/+mrd/ArrayDimension.m b/matlab/toolbox/+mrd/ArrayDimension.m new file mode 100644 index 00000000..09ffd8af --- /dev/null +++ b/matlab/toolbox/+mrd/ArrayDimension.m @@ -0,0 +1,61 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef ArrayDimension < uint64 + methods (Static) + function v = CHANNEL + v = mrd.ArrayDimension(0); + end + function v = Z + v = mrd.ArrayDimension(1); + end + function v = Y + v = mrd.ArrayDimension(2); + end + function v = X + v = mrd.ArrayDimension(3); + end + function v = FREQUENCY + v = mrd.ArrayDimension(4); + end + function v = BASIS + v = mrd.ArrayDimension(5); + end + function v = SAMPLES + v = mrd.ArrayDimension(6); + end + function v = LOC + v = mrd.ArrayDimension(7); + end + function v = S + v = mrd.ArrayDimension(8); + end + function v = N + v = mrd.ArrayDimension(9); + end + function v = E2 + v = mrd.ArrayDimension(10); + end + function v = E1 + v = mrd.ArrayDimension(11); + end + function v = E0 + v = mrd.ArrayDimension(12); + end + function v = TIME + v = mrd.ArrayDimension(13); + end + + function z = zeros(varargin) + elem = mrd.ArrayDimension(0); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end +end diff --git a/matlab/toolbox/+mrd/ArrayMeta.m b/matlab/toolbox/+mrd/ArrayMeta.m new file mode 100644 index 00000000..f09ee2b1 --- /dev/null +++ b/matlab/toolbox/+mrd/ArrayMeta.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef ArrayMeta < yardl.Map +end diff --git a/matlab/toolbox/+mrd/ArrayMetaValue.m b/matlab/toolbox/+mrd/ArrayMetaValue.m new file mode 100644 index 00000000..a72e2963 --- /dev/null +++ b/matlab/toolbox/+mrd/ArrayMetaValue.m @@ -0,0 +1,57 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef ArrayMetaValue < yardl.Union + methods (Static) + function res = String(value) + res = mrd.ArrayMetaValue(1, value); + end + + function res = Int64(value) + res = mrd.ArrayMetaValue(2, value); + end + + function res = Float64(value) + res = mrd.ArrayMetaValue(3, value); + end + + function z = zeros(varargin) + elem = mrd.ArrayMetaValue(0, yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end + + methods + function res = isString(self) + res = self.index == 1; + end + + function res = isInt64(self) + res = self.index == 2; + end + + function res = isFloat64(self) + res = self.index == 3; + end + + function eq = eq(self, other) + eq = isa(other, "mrd.ArrayMetaValue") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); + end + + function ne = ne(self, other) + ne = ~self.eq(other); + end + + function t = tag(self) + tags_ = ["String", "Int64", "Float64"]; + t = tags_(self.index_); + end + end +end diff --git a/matlab/toolbox/+mrd/ArrayType.m b/matlab/toolbox/+mrd/ArrayType.m new file mode 100644 index 00000000..b1aff624 --- /dev/null +++ b/matlab/toolbox/+mrd/ArrayType.m @@ -0,0 +1,49 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef ArrayType < uint64 + methods (Static) + function v = SPIN_DENSITY_MAP + v = mrd.ArrayType(1); + end + function v = T1_MAP + v = mrd.ArrayType(2); + end + function v = T2_MAP + v = mrd.ArrayType(3); + end + function v = T2STAR_MAP + v = mrd.ArrayType(4); + end + function v = ADC_MAP + v = mrd.ArrayType(5); + end + function v = B0_MAP + v = mrd.ArrayType(6); + end + function v = B1_MAP + v = mrd.ArrayType(7); + end + function v = SENSITIVITY_MAP + v = mrd.ArrayType(8); + end + function v = GFACTOR_MAP + v = mrd.ArrayType(9); + end + function v = USER_MAP + v = mrd.ArrayType(10); + end + + function z = zeros(varargin) + elem = mrd.ArrayType(0); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end +end diff --git a/matlab/toolbox/+mrd/ImageType.m b/matlab/toolbox/+mrd/ImageType.m index 5d82f69b..5a467745 100644 --- a/matlab/toolbox/+mrd/ImageType.m +++ b/matlab/toolbox/+mrd/ImageType.m @@ -20,36 +20,6 @@ function v = RGBA_MAP v = mrd.ImageType(6); end - function v = SPIN_DENSITY_MAP - v = mrd.ImageType(7); - end - function v = T1_MAP - v = mrd.ImageType(8); - end - function v = T2_MAP - v = mrd.ImageType(9); - end - function v = T2STAR_MAP - v = mrd.ImageType(10); - end - function v = ADC_MAP - v = mrd.ImageType(11); - end - function v = B0_MAP - v = mrd.ImageType(12); - end - function v = B1_MAP - v = mrd.ImageType(13); - end - function v = SENSITIVITY_MAP - v = mrd.ImageType(14); - end - function v = GFACTOR_MAP - v = mrd.ImageType(15); - end - function v = USER_MAP - v = mrd.ImageType(16); - end function z = zeros(varargin) elem = mrd.ImageType(0); diff --git a/matlab/toolbox/+mrd/MrdWriterBase.m b/matlab/toolbox/+mrd/MrdWriterBase.m index 32aeebbb..47394bf7 100644 --- a/matlab/toolbox/+mrd/MrdWriterBase.m +++ b/matlab/toolbox/+mrd/MrdWriterBase.m @@ -51,7 +51,7 @@ function end_data(self) methods (Static) function res = schema() - res = string('{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}'); + res = string('{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"ArrayDimension","values":[{"symbol":"channel","value":0},{"symbol":"z","value":1},{"symbol":"y","value":2},{"symbol":"x","value":3},{"symbol":"frequency","value":4},{"symbol":"basis","value":5},{"symbol":"samples","value":6},{"symbol":"loc","value":7},{"symbol":"s","value":8},{"symbol":"n","value":9},{"symbol":"e2","value":10},{"symbol":"e1","value":11},{"symbol":"e0","value":12},{"symbol":"time","value":13}]},{"name":"ArrayMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ArrayMetaValue"}}}}},{"name":"ArrayMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ArrayType","values":[{"symbol":"spinDensityMap","value":1},{"symbol":"t1Map","value":2},{"symbol":"t2Map","value":3},{"symbol":"t2starMap","value":4},{"symbol":"adcMap","value":5},{"symbol":"b0Map","value":6},{"symbol":"b1Map","value":7},{"symbol":"sensitivityMap","value":8},{"symbol":"gfactorMap","value":9},{"symbol":"userMap","value":10}]},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"NDArray","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.NDArrayHeader"},{"name":"data","type":{"name":"Mrd.Array","typeArguments":["T"]}}]},{"name":"NDArrayComplexDouble","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat64"]}},{"name":"NDArrayComplexFloat","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat32"]}},{"name":"NDArrayDouble","type":{"name":"Mrd.NDArray","typeArguments":["float64"]}},{"name":"NDArrayFloat","type":{"name":"Mrd.NDArray","typeArguments":["float32"]}},{"name":"NDArrayHeader","fields":[{"name":"dimensionLabels","type":{"vector":{"items":"Mrd.ArrayDimension"}}},{"name":"arrayType","type":"Mrd.ArrayType"},{"name":"meta","type":"Mrd.ArrayMeta"}]},{"name":"NDArrayInt16","type":{"name":"Mrd.NDArray","typeArguments":["int16"]}},{"name":"NDArrayInt32","type":{"name":"Mrd.NDArray","typeArguments":["int32"]}},{"name":"NDArrayUint16","type":{"name":"Mrd.NDArray","typeArguments":["uint16"]}},{"name":"NDArrayUint32","type":{"name":"Mrd.NDArray","typeArguments":["uint32"]}},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"acquisition","explicitTag":true,"type":"Mrd.Acquisition"},{"tag":"waveformUint32","explicitTag":true,"type":"Mrd.WaveformUint32"},{"tag":"imageUint16","explicitTag":true,"type":"Mrd.ImageUint16"},{"tag":"imageInt16","explicitTag":true,"type":"Mrd.ImageInt16"},{"tag":"imageUint32","explicitTag":true,"type":"Mrd.ImageUint32"},{"tag":"imageInt32","explicitTag":true,"type":"Mrd.ImageInt32"},{"tag":"imageFloat","explicitTag":true,"type":"Mrd.ImageFloat"},{"tag":"imageDouble","explicitTag":true,"type":"Mrd.ImageDouble"},{"tag":"imageComplexFloat","explicitTag":true,"type":"Mrd.ImageComplexFloat"},{"tag":"imageComplexDouble","explicitTag":true,"type":"Mrd.ImageComplexDouble"},{"tag":"acquisitionBucket","explicitTag":true,"type":"Mrd.AcquisitionBucket"},{"tag":"reconData","explicitTag":true,"type":"Mrd.ReconData"},{"tag":"arrayComplexFloat","explicitTag":true,"type":"Mrd.ArrayComplexFloat"},{"tag":"imageArray","explicitTag":true,"type":"Mrd.ImageArray"},{"tag":"ndArrayUint16","explicitTag":true,"type":"Mrd.NDArrayUint16"},{"tag":"ndArrayInt16","explicitTag":true,"type":"Mrd.NDArrayInt16"},{"tag":"ndArrayUint32","explicitTag":true,"type":"Mrd.NDArrayUint32"},{"tag":"ndArrayInt32","explicitTag":true,"type":"Mrd.NDArrayInt32"},{"tag":"ndArrayFloat","explicitTag":true,"type":"Mrd.NDArrayFloat"},{"tag":"ndArrayDouble","explicitTag":true,"type":"Mrd.NDArrayDouble"},{"tag":"ndArrayComplexFloat","explicitTag":true,"type":"Mrd.NDArrayComplexFloat"},{"tag":"ndArrayComplexDouble","explicitTag":true,"type":"Mrd.NDArrayComplexDouble"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}'); end end diff --git a/matlab/toolbox/+mrd/NDArray.m b/matlab/toolbox/+mrd/NDArray.m new file mode 100644 index 00000000..da1fd8cf --- /dev/null +++ b/matlab/toolbox/+mrd/NDArray.m @@ -0,0 +1,55 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArray < handle + properties + head + data + end + + methods + function self = NDArray(kwargs) + arguments + kwargs.head; + kwargs.data; + end + if ~isfield(kwargs, "head") + throw(yardl.TypeError("Missing required keyword argument 'head'")) + end + self.head = kwargs.head; + if ~isfield(kwargs, "data") + throw(yardl.TypeError("Missing required keyword argument 'data'")) + end + self.data = kwargs.data; + end + + function res = eq(self, other) + res = ... + isa(other, "mrd.NDArray") && ... + isequal({self.head}, {other.head}) && ... + isequal({self.data}, {other.data}); + end + + function res = ne(self, other) + res = ~self.eq(other); + end + + function res = isequal(self, other) + res = all(eq(self, other)); + end + end + + methods (Static) + function z = zeros(varargin) + elem = mrd.NDArray(head=yardl.None, data=yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end +end diff --git a/matlab/toolbox/+mrd/NDArrayComplexDouble.m b/matlab/toolbox/+mrd/NDArrayComplexDouble.m new file mode 100644 index 00000000..f86a675f --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayComplexDouble.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayComplexDouble < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayComplexFloat.m b/matlab/toolbox/+mrd/NDArrayComplexFloat.m new file mode 100644 index 00000000..91d89071 --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayComplexFloat.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayComplexFloat < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayDouble.m b/matlab/toolbox/+mrd/NDArrayDouble.m new file mode 100644 index 00000000..a20a97f3 --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayDouble.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayDouble < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayFloat.m b/matlab/toolbox/+mrd/NDArrayFloat.m new file mode 100644 index 00000000..232e4b25 --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayFloat.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayFloat < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayHeader.m b/matlab/toolbox/+mrd/NDArrayHeader.m new file mode 100644 index 00000000..5667434d --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayHeader.m @@ -0,0 +1,56 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayHeader < handle + properties + dimension_labels + array_type + meta + end + + methods + function self = NDArrayHeader(kwargs) + arguments + kwargs.dimension_labels = mrd.ArrayDimension.empty(); + kwargs.array_type; + kwargs.meta = yardl.Map; + end + self.dimension_labels = kwargs.dimension_labels; + if ~isfield(kwargs, "array_type") + throw(yardl.TypeError("Missing required keyword argument 'array_type'")) + end + self.array_type = kwargs.array_type; + self.meta = kwargs.meta; + end + + function res = eq(self, other) + res = ... + isa(other, "mrd.NDArrayHeader") && ... + isequal({self.dimension_labels}, {other.dimension_labels}) && ... + isequal({self.array_type}, {other.array_type}) && ... + isequal({self.meta}, {other.meta}); + end + + function res = ne(self, other) + res = ~self.eq(other); + end + + function res = isequal(self, other) + res = all(eq(self, other)); + end + end + + methods (Static) + function z = zeros(varargin) + elem = mrd.NDArrayHeader(array_type=yardl.None); + if nargin == 0 + z = elem; + return; + end + sz = [varargin{:}]; + if isscalar(sz) + sz = [sz, sz]; + end + z = reshape(repelem(elem, prod(sz)), sz); + end + end +end diff --git a/matlab/toolbox/+mrd/NDArrayInt16.m b/matlab/toolbox/+mrd/NDArrayInt16.m new file mode 100644 index 00000000..74d238a3 --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayInt16.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayInt16 < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayInt32.m b/matlab/toolbox/+mrd/NDArrayInt32.m new file mode 100644 index 00000000..03b4836e --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayInt32.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayInt32 < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayUint16.m b/matlab/toolbox/+mrd/NDArrayUint16.m new file mode 100644 index 00000000..7b15610c --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayUint16.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayUint16 < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NDArrayUint32.m b/matlab/toolbox/+mrd/NDArrayUint32.m new file mode 100644 index 00000000..0b1bb6c0 --- /dev/null +++ b/matlab/toolbox/+mrd/NDArrayUint32.m @@ -0,0 +1,4 @@ +% This file was generated by the "yardl" tool. DO NOT EDIT. + +classdef NDArrayUint32 < mrd.NDArray +end diff --git a/matlab/toolbox/+mrd/NoiseCovariance.m b/matlab/toolbox/+mrd/NoiseCovariance.m index e081df3a..183b2c6f 100644 --- a/matlab/toolbox/+mrd/NoiseCovariance.m +++ b/matlab/toolbox/+mrd/NoiseCovariance.m @@ -6,7 +6,7 @@ coil_labels % Comes from Header.acquisitionSystemInformation.relativeReceiverNoiseBandwidth receiver_noise_bandwidth - % Comes from Acquisition.sampleTimeNs + % Comes from Acquisition.sampleTimeUs noise_dwell_time_ns % Number of samples used to compute matrix sample_count diff --git a/matlab/toolbox/+mrd/StreamItem.m b/matlab/toolbox/+mrd/StreamItem.m index b803e8d8..ce276e36 100644 --- a/matlab/toolbox/+mrd/StreamItem.m +++ b/matlab/toolbox/+mrd/StreamItem.m @@ -58,6 +58,38 @@ res = mrd.StreamItem(14, value); end + function res = NdArrayUint16(value) + res = mrd.StreamItem(15, value); + end + + function res = NdArrayInt16(value) + res = mrd.StreamItem(16, value); + end + + function res = NdArrayUint32(value) + res = mrd.StreamItem(17, value); + end + + function res = NdArrayInt32(value) + res = mrd.StreamItem(18, value); + end + + function res = NdArrayFloat(value) + res = mrd.StreamItem(19, value); + end + + function res = NdArrayDouble(value) + res = mrd.StreamItem(20, value); + end + + function res = NdArrayComplexFloat(value) + res = mrd.StreamItem(21, value); + end + + function res = NdArrayComplexDouble(value) + res = mrd.StreamItem(22, value); + end + function z = zeros(varargin) elem = mrd.StreamItem(0, yardl.None); if nargin == 0 @@ -129,6 +161,38 @@ res = self.index == 14; end + function res = isNdArrayUint16(self) + res = self.index == 15; + end + + function res = isNdArrayInt16(self) + res = self.index == 16; + end + + function res = isNdArrayUint32(self) + res = self.index == 17; + end + + function res = isNdArrayInt32(self) + res = self.index == 18; + end + + function res = isNdArrayFloat(self) + res = self.index == 19; + end + + function res = isNdArrayDouble(self) + res = self.index == 20; + end + + function res = isNdArrayComplexFloat(self) + res = self.index == 21; + end + + function res = isNdArrayComplexDouble(self) + res = self.index == 22; + end + function eq = eq(self, other) eq = isa(other, "mrd.StreamItem") && all([self.index_] == [other.index_], 'all') && all([self.value] == [other.value], 'all'); end @@ -138,7 +202,7 @@ end function t = tag(self) - tags_ = ["Acquisition", "WaveformUint32", "ImageUint16", "ImageInt16", "ImageUint32", "ImageInt32", "ImageFloat", "ImageDouble", "ImageComplexFloat", "ImageComplexDouble", "AcquisitionBucket", "ReconData", "ArrayComplexFloat", "ImageArray"]; + tags_ = ["Acquisition", "WaveformUint32", "ImageUint16", "ImageInt16", "ImageUint32", "ImageInt32", "ImageFloat", "ImageDouble", "ImageComplexFloat", "ImageComplexDouble", "AcquisitionBucket", "ReconData", "ArrayComplexFloat", "ImageArray", "NdArrayUint16", "NdArrayInt16", "NdArrayUint32", "NdArrayInt32", "NdArrayFloat", "NdArrayDouble", "NdArrayComplexFloat", "NdArrayComplexDouble"]; t = tags_(self.index_); end end diff --git a/model/mrd_intermediate.yml b/model/mrd_intermediate.yml index f81f52d5..0aebeedf 100644 --- a/model/mrd_intermediate.yml +++ b/model/mrd_intermediate.yml @@ -4,7 +4,7 @@ NoiseCovariance: !record coilLabels: CoilLabelType* # Comes from Header.acquisitionSystemInformation.relativeReceiverNoiseBandwidth receiverNoiseBandwidth: float - # Comes from Acquisition.sampleTimeNs + # Comes from Acquisition.sampleTimeUs noiseDwellTimeNs: uint64 # Number of samples used to compute matrix sampleCount: size @@ -64,35 +64,74 @@ ImageArray: !record meta: ImageMeta[loc, s, n] waveforms: WaveformUint32* -# change to record and data field to array -# Generic header -# ndarray store all data -# any structure call metadata -# nadarray header with speicfied -# string for dimension -# high level description=array type -# user comment as string -# NDarray keep as field -# meta field attachted to all arrays -# computed fields: + +Array: !array + items: T + +ArrayComplexFloat: Array + +# Added generic NDarray with header + ArrayType: !enum - base: uint64 values: - spinDensityMap: 1 # in mol/m^3 - t1Map: 2 # in s - t2Map: 3 # in s - t2starMap: 4 # in s - adcMap: 5 # in s/m^2 - b0Map: 6 # in Hz (offset from Image.head.measurementFreq[0]) - b1Map: 7 # in rad/s/V, channel dimension is xmit channels - sensitivityMap: 8 # in Vm^3/mol, channel dimension is rcv channels - gfactorMap: 9 # unaccelerated SNR/(accelerated SNR * sqrt of acceleration factor) - userMap: 10 # custom image type with description at ImageMeta - -NDArray: !record + spinDensityMap: 1 # in mol/m^3 + t1Map: 2 # in s + t2Map: 3 # in s + t2starMap: 4 # in s + adcMap: 5 # in s/m^2 + b0Map: 6 # in Hz (offset from Image.head.measurementFreq[0]) + b1Map: 7 # in rad/s/V, channel dimension is xmit channels + sensitivityMap: 8 # in Vm^3/mol, channel dimension is rcv channels + gfactorMap: 9 # unaccelerated SNR/(accelerated SNR * sqrt of acceleration factor) + userMap: 10 # custom image type with description at ImageMeta + +ArrayMetaValue: [string, long, double] + +ArrayMeta: string->ArrayMetaValue* # string label and value as list of string, long, or double + +ArrayDimension: !enum + values: + channel: 0 + z: 1 + y: 2 + x: 3 + frequency: 4 + basis: 5 + samples: 6 + loc: 7 + s: 8 + n: 9 + e2: 10 + e1: 11 + e0: 12 + time: 13 + +NDArrayHeader: !record fields: + dimensionLabels: ArrayDimension* # optional ordered vector of enum labels + arrayType: ArrayType # mandatory type of array + meta: ArrayMeta + +NDArray: !record # no computed fields as the dimension is not labeled in build time + fields: + head: NDArrayHeader data: Array - type: ArrayType -ArrayComplexFloat: Array +NDArrayUint16: NDArray +NDArrayInt16: NDArray +NDArrayUint32: NDArray +NDArrayInt32: NDArray +NDArrayFloat: NDArray +NDArrayDouble: NDArray +NDArrayComplexFloat: NDArray +NDArrayComplexDouble: NDArray +AnyNDArray: + - NDArrayUint16 + - NDArrayInt16 + - NDArrayUint32 + - NDArrayInt32 + - NDArrayFloat + - NDArrayDouble + - NDArrayComplexFloat + - NDArrayComplexDouble \ No newline at end of file diff --git a/model/mrd_protocol.yml b/model/mrd_protocol.yml index d185d883..52bd6cb0 100644 --- a/model/mrd_protocol.yml +++ b/model/mrd_protocol.yml @@ -1,20 +1,27 @@ # Union of all primary types that can be streamed in the MRD Protocol -StreamItem: - - Acquisition - - WaveformUint32 - - ImageUint16 - - ImageInt16 - - ImageUint32 - - ImageInt32 - - ImageFloat - - ImageDouble - - ImageComplexFloat - - ImageComplexDouble - - AcquisitionBucket - - ReconData - - ArrayComplexFloat - - ImageArray - +StreamItem: !union + acquisition: Acquisition + waveformUint32: WaveformUint32 + imageUint16: ImageUint16 + imageInt16: ImageInt16 + imageUint32: ImageUint32 + imageInt32: ImageInt32 + imageFloat: ImageFloat + imageDouble: ImageDouble + imageComplexFloat: ImageComplexFloat + imageComplexDouble: ImageComplexDouble + acquisitionBucket: AcquisitionBucket + reconData: ReconData + arrayComplexFloat: ArrayComplexFloat + imageArray: ImageArray + ndArrayUint16: NDArrayUint16 # stream NDArray types unlike noise + ndArrayInt16: NDArrayInt16 + ndArrayUint32: NDArrayUint32 + ndArrayInt32: NDArrayInt32 + ndArrayFloat: NDArrayFloat + ndArrayDouble: NDArrayDouble + ndArrayComplexFloat: NDArrayComplexFloat + ndArrayComplexDouble: NDArrayComplexDouble # The MRD Protocol Mrd: !protocol diff --git a/python/mrd/__init__.py b/python/mrd/__init__.py index 52e0c64d..46d55adc 100644 --- a/python/mrd/__init__.py +++ b/python/mrd/__init__.py @@ -28,8 +28,13 @@ def _parse_version(version: str) -> _Tuple[int, ...]: AcquisitionHeader, AcquisitionSystemInformationType, AnyImage, + AnyNDArray, Array, ArrayComplexFloat, + ArrayDimension, + ArrayMeta, + ArrayMetaValue, + ArrayType, Calibration, CalibrationMode, CoilLabelType, @@ -66,6 +71,16 @@ def _parse_version(version: str) -> _Tuple[int, ...]: MeasurementInformationType, MultibandSpacingType, MultibandType, + NDArray, + NDArrayComplexDouble, + NDArrayComplexFloat, + NDArrayDouble, + NDArrayFloat, + NDArrayHeader, + NDArrayInt16, + NDArrayInt32, + NDArrayUint16, + NDArrayUint32, NoiseCovariance, ParallelImagingType, PatientGender, diff --git a/python/mrd/binary.py b/python/mrd/binary.py index 618b33c7..88f70a7a 100644 --- a/python/mrd/binary.py +++ b/python/mrd/binary.py @@ -34,7 +34,7 @@ def _write_header(self, value: typing.Optional[Header]) -> None: _binary.OptionalSerializer(HeaderSerializer()).write(self._stream, value) def _write_data(self, value: collections.abc.Iterable[StreamItem]) -> None: - _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint32, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt32, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer)), (StreamItem.AcquisitionBucket, AcquisitionBucketSerializer()), (StreamItem.ReconData, ReconDataSerializer()), (StreamItem.ArrayComplexFloat, _binary.DynamicNDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageArray, ImageArraySerializer())])).write(self._stream, value) + _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint32, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt32, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer)), (StreamItem.AcquisitionBucket, AcquisitionBucketSerializer()), (StreamItem.ReconData, ReconDataSerializer()), (StreamItem.ArrayComplexFloat, _binary.DynamicNDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageArray, ImageArraySerializer()), (StreamItem.NdArrayUint16, NDArraySerializer(_binary.uint16_serializer)), (StreamItem.NdArrayInt16, NDArraySerializer(_binary.int16_serializer)), (StreamItem.NdArrayUint32, NDArraySerializer(_binary.uint32_serializer)), (StreamItem.NdArrayInt32, NDArraySerializer(_binary.int32_serializer)), (StreamItem.NdArrayFloat, NDArraySerializer(_binary.float32_serializer)), (StreamItem.NdArrayDouble, NDArraySerializer(_binary.float64_serializer)), (StreamItem.NdArrayComplexFloat, NDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.NdArrayComplexDouble, NDArraySerializer(_binary.complexfloat64_serializer))])).write(self._stream, value) class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase): @@ -52,7 +52,7 @@ def _read_header(self) -> typing.Optional[Header]: return _binary.OptionalSerializer(HeaderSerializer()).read(self._stream) def _read_data(self) -> collections.abc.Iterable[StreamItem]: - return _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint32, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt32, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer)), (StreamItem.AcquisitionBucket, AcquisitionBucketSerializer()), (StreamItem.ReconData, ReconDataSerializer()), (StreamItem.ArrayComplexFloat, _binary.DynamicNDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageArray, ImageArraySerializer())])).read(self._stream) + return _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint32, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt32, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer)), (StreamItem.AcquisitionBucket, AcquisitionBucketSerializer()), (StreamItem.ReconData, ReconDataSerializer()), (StreamItem.ArrayComplexFloat, _binary.DynamicNDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageArray, ImageArraySerializer()), (StreamItem.NdArrayUint16, NDArraySerializer(_binary.uint16_serializer)), (StreamItem.NdArrayInt16, NDArraySerializer(_binary.int16_serializer)), (StreamItem.NdArrayUint32, NDArraySerializer(_binary.uint32_serializer)), (StreamItem.NdArrayInt32, NDArraySerializer(_binary.int32_serializer)), (StreamItem.NdArrayFloat, NDArraySerializer(_binary.float32_serializer)), (StreamItem.NdArrayDouble, NDArraySerializer(_binary.float64_serializer)), (StreamItem.NdArrayComplexFloat, NDArraySerializer(_binary.complexfloat32_serializer)), (StreamItem.NdArrayComplexDouble, NDArraySerializer(_binary.complexfloat64_serializer))])).read(self._stream) class BinaryMrdNoiseCovarianceWriter(_binary.BinaryProtocolWriter, MrdNoiseCovarianceWriterBase): """Binary writer for the MrdNoiseCovariance protocol. @@ -875,3 +875,39 @@ def read(self, stream: _binary.CodedInputStream) -> ImageArray: return ImageArray(data=field_values[0], headers=field_values[1], meta=field_values[2], waveforms=field_values[3]) +class NDArrayHeaderSerializer(_binary.RecordSerializer[NDArrayHeader]): + def __init__(self) -> None: + super().__init__([("dimension_labels", _binary.VectorSerializer(_binary.EnumSerializer(_binary.int32_serializer, ArrayDimension))), ("array_type", _binary.EnumSerializer(_binary.int32_serializer, ArrayType)), ("meta", _binary.MapSerializer(_binary.string_serializer, _binary.VectorSerializer(_binary.UnionSerializer(ArrayMetaValue, [(ArrayMetaValue.String, _binary.string_serializer), (ArrayMetaValue.Int64, _binary.int64_serializer), (ArrayMetaValue.Float64, _binary.float64_serializer)]))))]) + + def write(self, stream: _binary.CodedOutputStream, value: NDArrayHeader) -> None: + if isinstance(value, np.void): + self.write_numpy(stream, value) + return + self._write(stream, value.dimension_labels, value.array_type, value.meta) + + def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None: + self._write(stream, value['dimension_labels'], value['array_type'], value['meta']) + + def read(self, stream: _binary.CodedInputStream) -> NDArrayHeader: + field_values = self._read(stream) + return NDArrayHeader(dimension_labels=field_values[0], array_type=field_values[1], meta=field_values[2]) + + +class NDArraySerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[NDArray[T_NP]]): + def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None: + super().__init__([("head", NDArrayHeaderSerializer()), ("data", _binary.DynamicNDArraySerializer(t_serializer))]) + + def write(self, stream: _binary.CodedOutputStream, value: NDArray[T_NP]) -> None: + if isinstance(value, np.void): + self.write_numpy(stream, value) + return + self._write(stream, value.head, value.data) + + def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None: + self._write(stream, value['head'], value['data']) + + def read(self, stream: _binary.CodedInputStream) -> NDArray[T_NP]: + field_values = self._read(stream) + return NDArray[T_NP](head=field_values[0], data=field_values[1]) + + diff --git a/python/mrd/ndjson.py b/python/mrd/ndjson.py index df0a25d3..a02777cf 100644 --- a/python/mrd/ndjson.py +++ b/python/mrd/ndjson.py @@ -2407,16 +2407,6 @@ def from_json_to_numpy(self, json_object: object) -> np.void: "imag": ImageType.IMAG, "complex": ImageType.COMPLEX, "rgbaMap": ImageType.RGBA_MAP, - "spinDensityMap": ImageType.SPIN_DENSITY_MAP, - "t1Map": ImageType.T1_MAP, - "t2Map": ImageType.T2_MAP, - "t2starMap": ImageType.T2STAR_MAP, - "adcMap": ImageType.ADC_MAP, - "b0Map": ImageType.B0_MAP, - "b1Map": ImageType.B1_MAP, - "sensitivityMap": ImageType.SENSITIVITY_MAP, - "gfactorMap": ImageType.GFACTOR_MAP, - "userMap": ImageType.USER_MAP, } image_type_value_to_name_map = {v: n for n, v in image_type_name_to_value_map.items()} @@ -3160,6 +3150,132 @@ def from_json_to_numpy(self, json_object: object) -> np.void: ) # type:ignore +array_type_name_to_value_map = { + "spinDensityMap": ArrayType.SPIN_DENSITY_MAP, + "t1Map": ArrayType.T1_MAP, + "t2Map": ArrayType.T2_MAP, + "t2starMap": ArrayType.T2STAR_MAP, + "adcMap": ArrayType.ADC_MAP, + "b0Map": ArrayType.B0_MAP, + "b1Map": ArrayType.B1_MAP, + "sensitivityMap": ArrayType.SENSITIVITY_MAP, + "gfactorMap": ArrayType.GFACTOR_MAP, + "userMap": ArrayType.USER_MAP, +} +array_type_value_to_name_map = {v: n for n, v in array_type_name_to_value_map.items()} + +array_dimension_name_to_value_map = { + "channel": ArrayDimension.CHANNEL, + "z": ArrayDimension.Z, + "y": ArrayDimension.Y, + "x": ArrayDimension.X, + "frequency": ArrayDimension.FREQUENCY, + "basis": ArrayDimension.BASIS, + "samples": ArrayDimension.SAMPLES, + "loc": ArrayDimension.LOC, + "s": ArrayDimension.S, + "n": ArrayDimension.N, + "e2": ArrayDimension.E2, + "e1": ArrayDimension.E1, + "e0": ArrayDimension.E0, + "time": ArrayDimension.TIME, +} +array_dimension_value_to_name_map = {v: n for n, v in array_dimension_name_to_value_map.items()} + +class NDArrayHeaderConverter(_ndjson.JsonConverter[NDArrayHeader, np.void]): + def __init__(self) -> None: + self._dimension_labels_converter = _ndjson.VectorConverter(_ndjson.EnumConverter(ArrayDimension, np.int32, array_dimension_name_to_value_map, array_dimension_value_to_name_map)) + self._array_type_converter = _ndjson.EnumConverter(ArrayType, np.int32, array_type_name_to_value_map, array_type_value_to_name_map) + self._meta_converter = _ndjson.MapConverter(_ndjson.string_converter, _ndjson.VectorConverter(_ndjson.UnionConverter(ArrayMetaValue, [(ArrayMetaValue.String, _ndjson.string_converter, [str]), (ArrayMetaValue.Int64, _ndjson.int64_converter, [int, float]), (ArrayMetaValue.Float64, _ndjson.float64_converter, [int, float])], False))) + super().__init__(np.dtype([ + ("dimension_labels", self._dimension_labels_converter.overall_dtype()), + ("array_type", self._array_type_converter.overall_dtype()), + ("meta", self._meta_converter.overall_dtype()), + ])) + + def to_json(self, value: NDArrayHeader) -> object: + if not isinstance(value, NDArrayHeader): # pyright: ignore [reportUnnecessaryIsInstance] + raise TypeError("Expected 'NDArrayHeader' instance") + json_object = {} + + json_object["dimensionLabels"] = self._dimension_labels_converter.to_json(value.dimension_labels) + json_object["arrayType"] = self._array_type_converter.to_json(value.array_type) + json_object["meta"] = self._meta_converter.to_json(value.meta) + return json_object + + def numpy_to_json(self, value: np.void) -> object: + if not isinstance(value, np.void): # pyright: ignore [reportUnnecessaryIsInstance] + raise TypeError("Expected 'np.void' instance") + json_object = {} + + json_object["dimensionLabels"] = self._dimension_labels_converter.numpy_to_json(value["dimension_labels"]) + json_object["arrayType"] = self._array_type_converter.numpy_to_json(value["array_type"]) + json_object["meta"] = self._meta_converter.numpy_to_json(value["meta"]) + return json_object + + def from_json(self, json_object: object) -> NDArrayHeader: + if not isinstance(json_object, dict): + raise TypeError("Expected 'dict' instance") + return NDArrayHeader( + dimension_labels=self._dimension_labels_converter.from_json(json_object["dimensionLabels"],), + array_type=self._array_type_converter.from_json(json_object["arrayType"],), + meta=self._meta_converter.from_json(json_object["meta"],), + ) + + def from_json_to_numpy(self, json_object: object) -> np.void: + if not isinstance(json_object, dict): + raise TypeError("Expected 'dict' instance") + return ( + self._dimension_labels_converter.from_json_to_numpy(json_object["dimensionLabels"]), + self._array_type_converter.from_json_to_numpy(json_object["arrayType"]), + self._meta_converter.from_json_to_numpy(json_object["meta"]), + ) # type:ignore + + +class NDArrayConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[NDArray[T_NP], np.void]): + def __init__(self, t_converter: _ndjson.JsonConverter[T, T_NP]) -> None: + self._head_converter = NDArrayHeaderConverter() + self._data_converter = _ndjson.DynamicNDArrayConverter(t_converter) + super().__init__(np.dtype([ + ("head", self._head_converter.overall_dtype()), + ("data", self._data_converter.overall_dtype()), + ])) + + def to_json(self, value: NDArray[T_NP]) -> object: + if not isinstance(value, NDArray): # pyright: ignore [reportUnnecessaryIsInstance] + raise TypeError("Expected 'NDArray[T_NP]' instance") + json_object = {} + + json_object["head"] = self._head_converter.to_json(value.head) + json_object["data"] = self._data_converter.to_json(value.data) + return json_object + + def numpy_to_json(self, value: np.void) -> object: + if not isinstance(value, np.void): # pyright: ignore [reportUnnecessaryIsInstance] + raise TypeError("Expected 'np.void' instance") + json_object = {} + + json_object["head"] = self._head_converter.numpy_to_json(value["head"]) + json_object["data"] = self._data_converter.numpy_to_json(value["data"]) + return json_object + + def from_json(self, json_object: object) -> NDArray[T_NP]: + if not isinstance(json_object, dict): + raise TypeError("Expected 'dict' instance") + return NDArray[T_NP]( + head=self._head_converter.from_json(json_object["head"],), + data=self._data_converter.from_json(json_object["data"],), + ) + + def from_json_to_numpy(self, json_object: object) -> np.void: + if not isinstance(json_object, dict): + raise TypeError("Expected 'dict' instance") + return ( + self._head_converter.from_json_to_numpy(json_object["head"]), + self._data_converter.from_json_to_numpy(json_object["data"]), + ) # type:ignore + + class NDJsonMrdWriter(_ndjson.NDJsonProtocolWriter, MrdWriterBase): """NDJson writer for the Mrd protocol. @@ -3177,7 +3293,7 @@ def _write_header(self, value: typing.Optional[Header]) -> None: self._write_json_line({"header": json_value}) def _write_data(self, value: collections.abc.Iterable[StreamItem]) -> None: - converter = _ndjson.UnionConverter(StreamItem, [(StreamItem.Acquisition, AcquisitionConverter(), [dict]), (StreamItem.WaveformUint32, WaveformConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageUint16, ImageConverter(_ndjson.uint16_converter), [dict]), (StreamItem.ImageInt16, ImageConverter(_ndjson.int16_converter), [dict]), (StreamItem.ImageUint32, ImageConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageInt32, ImageConverter(_ndjson.int32_converter), [dict]), (StreamItem.ImageFloat, ImageConverter(_ndjson.float32_converter), [dict]), (StreamItem.ImageDouble, ImageConverter(_ndjson.float64_converter), [dict]), (StreamItem.ImageComplexFloat, ImageConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageComplexDouble, ImageConverter(_ndjson.complexfloat64_converter), [dict]), (StreamItem.AcquisitionBucket, AcquisitionBucketConverter(), [dict]), (StreamItem.ReconData, ReconDataConverter(), [dict]), (StreamItem.ArrayComplexFloat, _ndjson.DynamicNDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageArray, ImageArrayConverter(), [dict])], False) + converter = _ndjson.UnionConverter(StreamItem, [(StreamItem.Acquisition, AcquisitionConverter(), [dict]), (StreamItem.WaveformUint32, WaveformConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageUint16, ImageConverter(_ndjson.uint16_converter), [dict]), (StreamItem.ImageInt16, ImageConverter(_ndjson.int16_converter), [dict]), (StreamItem.ImageUint32, ImageConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageInt32, ImageConverter(_ndjson.int32_converter), [dict]), (StreamItem.ImageFloat, ImageConverter(_ndjson.float32_converter), [dict]), (StreamItem.ImageDouble, ImageConverter(_ndjson.float64_converter), [dict]), (StreamItem.ImageComplexFloat, ImageConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageComplexDouble, ImageConverter(_ndjson.complexfloat64_converter), [dict]), (StreamItem.AcquisitionBucket, AcquisitionBucketConverter(), [dict]), (StreamItem.ReconData, ReconDataConverter(), [dict]), (StreamItem.ArrayComplexFloat, _ndjson.DynamicNDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageArray, ImageArrayConverter(), [dict]), (StreamItem.NdArrayUint16, NDArrayConverter(_ndjson.uint16_converter), [dict]), (StreamItem.NdArrayInt16, NDArrayConverter(_ndjson.int16_converter), [dict]), (StreamItem.NdArrayUint32, NDArrayConverter(_ndjson.uint32_converter), [dict]), (StreamItem.NdArrayInt32, NDArrayConverter(_ndjson.int32_converter), [dict]), (StreamItem.NdArrayFloat, NDArrayConverter(_ndjson.float32_converter), [dict]), (StreamItem.NdArrayDouble, NDArrayConverter(_ndjson.float64_converter), [dict]), (StreamItem.NdArrayComplexFloat, NDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.NdArrayComplexDouble, NDArrayConverter(_ndjson.complexfloat64_converter), [dict])], False) for item in value: json_item = converter.to_json(item) self._write_json_line({"data": json_item}) @@ -3200,7 +3316,7 @@ def _read_header(self) -> typing.Optional[Header]: return converter.from_json(json_object) def _read_data(self) -> collections.abc.Iterable[StreamItem]: - converter = _ndjson.UnionConverter(StreamItem, [(StreamItem.Acquisition, AcquisitionConverter(), [dict]), (StreamItem.WaveformUint32, WaveformConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageUint16, ImageConverter(_ndjson.uint16_converter), [dict]), (StreamItem.ImageInt16, ImageConverter(_ndjson.int16_converter), [dict]), (StreamItem.ImageUint32, ImageConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageInt32, ImageConverter(_ndjson.int32_converter), [dict]), (StreamItem.ImageFloat, ImageConverter(_ndjson.float32_converter), [dict]), (StreamItem.ImageDouble, ImageConverter(_ndjson.float64_converter), [dict]), (StreamItem.ImageComplexFloat, ImageConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageComplexDouble, ImageConverter(_ndjson.complexfloat64_converter), [dict]), (StreamItem.AcquisitionBucket, AcquisitionBucketConverter(), [dict]), (StreamItem.ReconData, ReconDataConverter(), [dict]), (StreamItem.ArrayComplexFloat, _ndjson.DynamicNDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageArray, ImageArrayConverter(), [dict])], False) + converter = _ndjson.UnionConverter(StreamItem, [(StreamItem.Acquisition, AcquisitionConverter(), [dict]), (StreamItem.WaveformUint32, WaveformConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageUint16, ImageConverter(_ndjson.uint16_converter), [dict]), (StreamItem.ImageInt16, ImageConverter(_ndjson.int16_converter), [dict]), (StreamItem.ImageUint32, ImageConverter(_ndjson.uint32_converter), [dict]), (StreamItem.ImageInt32, ImageConverter(_ndjson.int32_converter), [dict]), (StreamItem.ImageFloat, ImageConverter(_ndjson.float32_converter), [dict]), (StreamItem.ImageDouble, ImageConverter(_ndjson.float64_converter), [dict]), (StreamItem.ImageComplexFloat, ImageConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageComplexDouble, ImageConverter(_ndjson.complexfloat64_converter), [dict]), (StreamItem.AcquisitionBucket, AcquisitionBucketConverter(), [dict]), (StreamItem.ReconData, ReconDataConverter(), [dict]), (StreamItem.ArrayComplexFloat, _ndjson.DynamicNDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.ImageArray, ImageArrayConverter(), [dict]), (StreamItem.NdArrayUint16, NDArrayConverter(_ndjson.uint16_converter), [dict]), (StreamItem.NdArrayInt16, NDArrayConverter(_ndjson.int16_converter), [dict]), (StreamItem.NdArrayUint32, NDArrayConverter(_ndjson.uint32_converter), [dict]), (StreamItem.NdArrayInt32, NDArrayConverter(_ndjson.int32_converter), [dict]), (StreamItem.NdArrayFloat, NDArrayConverter(_ndjson.float32_converter), [dict]), (StreamItem.NdArrayDouble, NDArrayConverter(_ndjson.float64_converter), [dict]), (StreamItem.NdArrayComplexFloat, NDArrayConverter(_ndjson.complexfloat32_converter), [dict]), (StreamItem.NdArrayComplexDouble, NDArrayConverter(_ndjson.complexfloat64_converter), [dict])], False) while (json_object := self._read_json_line("data", False)) is not _ndjson.MISSING_SENTINEL: yield converter.from_json(json_object) diff --git a/python/mrd/protocols.py b/python/mrd/protocols.py index 3e6f5fc0..4a0730d5 100644 --- a/python/mrd/protocols.py +++ b/python/mrd/protocols.py @@ -24,7 +24,7 @@ class MrdWriterBase(abc.ABC): def __init__(self) -> None: self._state = 0 - schema = r"""{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6},{"symbol":"spinDensityMap","value":7},{"symbol":"t1Map","value":8},{"symbol":"t2Map","value":9},{"symbol":"t2starMap","value":10},{"symbol":"adcMap","value":11},{"symbol":"b0Map","value":12},{"symbol":"b1Map","value":13},{"symbol":"sensitivityMap","value":14},{"symbol":"gfactorMap","value":15},{"symbol":"userMap","value":16}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"Acquisition","type":"Mrd.Acquisition"},{"tag":"WaveformUint32","type":"Mrd.WaveformUint32"},{"tag":"ImageUint16","type":"Mrd.ImageUint16"},{"tag":"ImageInt16","type":"Mrd.ImageInt16"},{"tag":"ImageUint32","type":"Mrd.ImageUint32"},{"tag":"ImageInt32","type":"Mrd.ImageInt32"},{"tag":"ImageFloat","type":"Mrd.ImageFloat"},{"tag":"ImageDouble","type":"Mrd.ImageDouble"},{"tag":"ImageComplexFloat","type":"Mrd.ImageComplexFloat"},{"tag":"ImageComplexDouble","type":"Mrd.ImageComplexDouble"},{"tag":"AcquisitionBucket","type":"Mrd.AcquisitionBucket"},{"tag":"ReconData","type":"Mrd.ReconData"},{"tag":"ArrayComplexFloat","type":"Mrd.ArrayComplexFloat"},{"tag":"ImageArray","type":"Mrd.ImageArray"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}""" + schema = r"""{"protocol":{"name":"Mrd","sequence":[{"name":"header","type":[null,"Mrd.Header"]},{"name":"data","type":{"stream":{"items":"Mrd.StreamItem"}}}]},"types":[{"name":"AccelerationFactorType","fields":[{"name":"kspaceEncodingStep1","type":"uint32"},{"name":"kspaceEncodingStep2","type":"uint32"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"Acquisition","fields":[{"name":"head","type":"Mrd.AcquisitionHeader"},{"name":"data","type":"Mrd.AcquisitionData"},{"name":"trajectory","type":"Mrd.TrajectoryData"}]},{"name":"AcquisitionBucket","fields":[{"name":"data","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"ref","type":{"vector":{"items":"Mrd.Acquisition"}}},{"name":"datastats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"refstats","type":{"vector":{"items":"Mrd.EncodingLimitsType"}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"AcquisitionData","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"coils"},{"name":"samples"}]}}},{"name":"AcquisitionFlags","base":"uint64","values":[{"symbol":"firstInEncodeStep1","value":1},{"symbol":"lastInEncodeStep1","value":2},{"symbol":"firstInEncodeStep2","value":4},{"symbol":"lastInEncodeStep2","value":8},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768},{"symbol":"firstInSegment","value":65536},{"symbol":"lastInSegment","value":131072},{"symbol":"isNoiseMeasurement","value":262144},{"symbol":"isParallelCalibration","value":524288},{"symbol":"isParallelCalibrationAndImaging","value":1048576},{"symbol":"isReverse","value":2097152},{"symbol":"isNavigationData","value":4194304},{"symbol":"isPhasecorrData","value":8388608},{"symbol":"lastInMeasurement","value":16777216},{"symbol":"isHpfeedbackData","value":33554432},{"symbol":"isDummyscanData","value":67108864},{"symbol":"isRtfeedbackData","value":134217728},{"symbol":"isSurfacecoilcorrectionscanData","value":268435456},{"symbol":"isPhaseStabilizationReference","value":536870912},{"symbol":"isPhaseStabilization","value":1073741824}]},{"name":"AcquisitionHeader","fields":[{"name":"flags","type":"Mrd.AcquisitionFlags"},{"name":"idx","type":"Mrd.EncodingCounters"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"channelOrder","type":{"vector":{"items":"uint32"}}},{"name":"discardPre","type":[null,"uint32"]},{"name":"discardPost","type":[null,"uint32"]},{"name":"centerSample","type":[null,"uint32"]},{"name":"encodingSpaceRef","type":[null,"uint32"]},{"name":"sampleTimeNs","type":[null,"uint64"]},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"readDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"phaseDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"AcquisitionSystemInformationType","fields":[{"name":"systemVendor","type":[null,"string"]},{"name":"systemModel","type":[null,"string"]},{"name":"systemFieldStrengthT","type":[null,"float32"]},{"name":"relativeReceiverNoiseBandwidth","type":[null,"float32"]},{"name":"receiverChannels","type":[null,"uint32"]},{"name":"coilLabel","type":{"vector":{"items":"Mrd.CoilLabelType"}}},{"name":"institutionName","type":[null,"string"]},{"name":"stationName","type":[null,"string"]},{"name":"deviceID","type":[null,"string"]},{"name":"deviceSerialNumber","type":[null,"string"]}]},{"name":"Array","typeParameters":["T"],"type":{"array":{"items":"T"}}},{"name":"ArrayComplexFloat","type":{"name":"Mrd.Array","typeArguments":["complexfloat32"]}},{"name":"ArrayDimension","values":[{"symbol":"channel","value":0},{"symbol":"z","value":1},{"symbol":"y","value":2},{"symbol":"x","value":3},{"symbol":"frequency","value":4},{"symbol":"basis","value":5},{"symbol":"samples","value":6},{"symbol":"loc","value":7},{"symbol":"s","value":8},{"symbol":"n","value":9},{"symbol":"e2","value":10},{"symbol":"e1","value":11},{"symbol":"e0","value":12},{"symbol":"time","value":13}]},{"name":"ArrayMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ArrayMetaValue"}}}}},{"name":"ArrayMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ArrayType","values":[{"symbol":"spinDensityMap","value":1},{"symbol":"t1Map","value":2},{"symbol":"t2Map","value":3},{"symbol":"t2starMap","value":4},{"symbol":"adcMap","value":5},{"symbol":"b0Map","value":6},{"symbol":"b1Map","value":7},{"symbol":"sensitivityMap","value":8},{"symbol":"gfactorMap","value":9},{"symbol":"userMap","value":10}]},{"name":"Calibration","values":[{"symbol":"separable2D","value":0},{"symbol":"full3D","value":1},{"symbol":"other","value":2}]},{"name":"CalibrationMode","values":[{"symbol":"noacceleration","value":0},{"symbol":"embedded","value":1},{"symbol":"interleaved","value":2},{"symbol":"separate","value":3},{"symbol":"external","value":4},{"symbol":"other","value":5}]},{"name":"CoilLabelType","fields":[{"name":"coilNumber","type":"uint32"},{"name":"coilName","type":"string"}]},{"name":"DiffusionDimension","values":[{"symbol":"average","value":0},{"symbol":"contrast","value":1},{"symbol":"phase","value":2},{"symbol":"repetition","value":3},{"symbol":"set","value":4},{"symbol":"segment","value":5},{"symbol":"user0","value":6},{"symbol":"user1","value":7},{"symbol":"user2","value":8},{"symbol":"user3","value":9},{"symbol":"user4","value":10},{"symbol":"user5","value":11},{"symbol":"user6","value":12},{"symbol":"user7","value":13}]},{"name":"DiffusionType","fields":[{"name":"gradientDirection","type":"Mrd.GradientDirectionType"},{"name":"bvalue","type":"float32"}]},{"name":"EncodingCounters","fields":[{"name":"kspaceEncodeStep1","type":[null,"uint32"]},{"name":"kspaceEncodeStep2","type":[null,"uint32"]},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"segment","type":[null,"uint32"]},{"name":"user","type":{"vector":{"items":"uint32"}}}]},{"name":"EncodingLimitsType","fields":[{"name":"kspaceEncodingStep0","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep1","type":[null,"Mrd.LimitType"]},{"name":"kspaceEncodingStep2","type":[null,"Mrd.LimitType"]},{"name":"average","type":[null,"Mrd.LimitType"]},{"name":"slice","type":[null,"Mrd.LimitType"]},{"name":"contrast","type":[null,"Mrd.LimitType"]},{"name":"phase","type":[null,"Mrd.LimitType"]},{"name":"repetition","type":[null,"Mrd.LimitType"]},{"name":"set","type":[null,"Mrd.LimitType"]},{"name":"segment","type":[null,"Mrd.LimitType"]},{"name":"user0","type":[null,"Mrd.LimitType"]},{"name":"user1","type":[null,"Mrd.LimitType"]},{"name":"user2","type":[null,"Mrd.LimitType"]},{"name":"user3","type":[null,"Mrd.LimitType"]},{"name":"user4","type":[null,"Mrd.LimitType"]},{"name":"user5","type":[null,"Mrd.LimitType"]},{"name":"user6","type":[null,"Mrd.LimitType"]},{"name":"user7","type":[null,"Mrd.LimitType"]}]},{"name":"EncodingSpaceType","fields":[{"name":"matrixSize","type":"Mrd.MatrixSizeType"},{"name":"fieldOfViewMm","type":"Mrd.FieldOfViewMm"}]},{"name":"EncodingType","fields":[{"name":"encodedSpace","type":"Mrd.EncodingSpaceType"},{"name":"reconSpace","type":"Mrd.EncodingSpaceType"},{"name":"encodingLimits","type":"Mrd.EncodingLimitsType"},{"name":"trajectory","type":"Mrd.Trajectory"},{"name":"trajectoryDescription","type":[null,"Mrd.TrajectoryDescriptionType"]},{"name":"parallelImaging","type":[null,"Mrd.ParallelImagingType"]},{"name":"echoTrainLength","type":[null,"int64"]}]},{"name":"ExperimentalConditionsType","fields":[{"name":"h1resonanceFrequencyHz","type":"int64"}]},{"name":"FieldOfViewMm","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"GradientDirectionType","fields":[{"name":"rl","type":"float32"},{"name":"ap","type":"float32"},{"name":"fh","type":"float32"}]},{"name":"Header","fields":[{"name":"version","type":[null,"int64"]},{"name":"subjectInformation","type":[null,"Mrd.SubjectInformationType"]},{"name":"studyInformation","type":[null,"Mrd.StudyInformationType"]},{"name":"measurementInformation","type":[null,"Mrd.MeasurementInformationType"]},{"name":"acquisitionSystemInformation","type":[null,"Mrd.AcquisitionSystemInformationType"]},{"name":"experimentalConditions","type":"Mrd.ExperimentalConditionsType"},{"name":"encoding","type":{"vector":{"items":"Mrd.EncodingType"}}},{"name":"sequenceParameters","type":[null,"Mrd.SequenceParametersType"]},{"name":"userParameters","type":[null,"Mrd.UserParametersType"]},{"name":"waveformInformation","type":{"vector":{"items":"Mrd.WaveformInformationType"}}}]},{"name":"Image","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.ImageHeader"},{"name":"data","type":{"name":"Mrd.ImageData","typeArguments":["T"]}},{"name":"meta","type":"Mrd.ImageMeta"}]},{"name":"ImageArray","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"headers","type":{"array":{"items":"Mrd.ImageHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"meta","type":{"array":{"items":"Mrd.ImageMeta","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"}]}}},{"name":"waveforms","type":{"vector":{"items":"Mrd.WaveformUint32"}}}]},{"name":"ImageComplexDouble","type":{"name":"Mrd.Image","typeArguments":["complexfloat64"]}},{"name":"ImageComplexFloat","type":{"name":"Mrd.Image","typeArguments":["complexfloat32"]}},{"name":"ImageData","typeParameters":["Y"],"type":{"array":{"items":"Y","dimensions":[{"name":"channel"},{"name":"z"},{"name":"y"},{"name":"x"}]}}},{"name":"ImageDouble","type":{"name":"Mrd.Image","typeArguments":["float64"]}},{"name":"ImageFlags","base":"uint64","values":[{"symbol":"isNavigationData","value":1},{"symbol":"firstInAverage","value":16},{"symbol":"lastInAverage","value":32},{"symbol":"firstInSlice","value":64},{"symbol":"lastInSlice","value":128},{"symbol":"firstInContrast","value":256},{"symbol":"lastInContrast","value":512},{"symbol":"firstInPhase","value":1024},{"symbol":"lastInPhase","value":2048},{"symbol":"firstInRepetition","value":4096},{"symbol":"lastInRepetition","value":8192},{"symbol":"firstInSet","value":16384},{"symbol":"lastInSet","value":32768}]},{"name":"ImageFloat","type":{"name":"Mrd.Image","typeArguments":["float32"]}},{"name":"ImageHeader","fields":[{"name":"flags","type":"Mrd.ImageFlags"},{"name":"measurementUid","type":"uint32"},{"name":"fieldOfView","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"position","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"colDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"lineDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"sliceDir","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"patientTablePosition","type":{"array":{"items":"float32","dimensions":[{"length":3}]}}},{"name":"average","type":[null,"uint32"]},{"name":"slice","type":[null,"uint32"]},{"name":"contrast","type":[null,"uint32"]},{"name":"phase","type":[null,"uint32"]},{"name":"repetition","type":[null,"uint32"]},{"name":"set","type":[null,"uint32"]},{"name":"acquisitionTimeStampNs","type":[null,"uint64"]},{"name":"physiologyTimeStampNs","type":{"vector":{"items":"uint64"}}},{"name":"imageType","type":"Mrd.ImageType"},{"name":"imageIndex","type":[null,"uint32"]},{"name":"imageSeriesIndex","type":[null,"uint32"]},{"name":"userInt","type":{"vector":{"items":"int32"}}},{"name":"userFloat","type":{"vector":{"items":"float32"}}}]},{"name":"ImageInt16","type":{"name":"Mrd.Image","typeArguments":["int16"]}},{"name":"ImageInt32","type":{"name":"Mrd.Image","typeArguments":["int32"]}},{"name":"ImageMeta","type":{"map":{"keys":"string","values":{"vector":{"items":"Mrd.ImageMetaValue"}}}}},{"name":"ImageMetaValue","type":[{"tag":"string","type":"string"},{"tag":"int64","type":"int64"},{"tag":"float64","type":"float64"}]},{"name":"ImageType","base":"uint64","values":[{"symbol":"magnitude","value":1},{"symbol":"phase","value":2},{"symbol":"real","value":3},{"symbol":"imag","value":4},{"symbol":"complex","value":5},{"symbol":"rgbaMap","value":6}]},{"name":"ImageUint16","type":{"name":"Mrd.Image","typeArguments":["uint16"]}},{"name":"ImageUint32","type":{"name":"Mrd.Image","typeArguments":["uint32"]}},{"name":"InterleavingDimension","values":[{"symbol":"phase","value":0},{"symbol":"repetition","value":1},{"symbol":"contrast","value":2},{"symbol":"average","value":3},{"symbol":"other","value":4}]},{"name":"LimitType","fields":[{"name":"minimum","type":"uint32"},{"name":"maximum","type":"uint32"},{"name":"center","type":"uint32"}]},{"name":"MatrixSizeType","fields":[{"name":"x","type":"uint32"},{"name":"y","type":"uint32"},{"name":"z","type":"uint32"}]},{"name":"MeasurementDependencyType","fields":[{"name":"dependencyType","type":"string"},{"name":"measurementID","type":"string"}]},{"name":"MeasurementInformationType","fields":[{"name":"measurementID","type":[null,"string"]},{"name":"seriesDate","type":[null,"date"]},{"name":"seriesTime","type":[null,"time"]},{"name":"patientPosition","type":"Mrd.PatientPosition"},{"name":"relativeTablePosition","type":[null,"Mrd.ThreeDimensionalFloat"]},{"name":"initialSeriesNumber","type":[null,"int64"]},{"name":"protocolName","type":[null,"string"]},{"name":"sequenceName","type":[null,"string"]},{"name":"seriesDescription","type":[null,"string"]},{"name":"measurementDependency","type":{"vector":{"items":"Mrd.MeasurementDependencyType"}}},{"name":"seriesInstanceUIDRoot","type":[null,"string"]},{"name":"frameOfReferenceUID","type":[null,"string"]},{"name":"referencedImageSequence","type":[null,"Mrd.ReferencedImageSequenceType"]}]},{"name":"MultibandSpacingType","fields":[{"name":"dZ","type":{"vector":{"items":"float32"}}}]},{"name":"MultibandType","fields":[{"name":"spacing","type":{"vector":{"items":"Mrd.MultibandSpacingType"}}},{"name":"deltaKz","type":"float32"},{"name":"multibandFactor","type":"uint32"},{"name":"calibration","type":"Mrd.Calibration"},{"name":"calibrationEncoding","type":"uint64"}]},{"name":"NDArray","typeParameters":["T"],"fields":[{"name":"head","type":"Mrd.NDArrayHeader"},{"name":"data","type":{"name":"Mrd.Array","typeArguments":["T"]}}]},{"name":"NDArrayComplexDouble","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat64"]}},{"name":"NDArrayComplexFloat","type":{"name":"Mrd.NDArray","typeArguments":["complexfloat32"]}},{"name":"NDArrayDouble","type":{"name":"Mrd.NDArray","typeArguments":["float64"]}},{"name":"NDArrayFloat","type":{"name":"Mrd.NDArray","typeArguments":["float32"]}},{"name":"NDArrayHeader","fields":[{"name":"dimensionLabels","type":{"vector":{"items":"Mrd.ArrayDimension"}}},{"name":"arrayType","type":"Mrd.ArrayType"},{"name":"meta","type":"Mrd.ArrayMeta"}]},{"name":"NDArrayInt16","type":{"name":"Mrd.NDArray","typeArguments":["int16"]}},{"name":"NDArrayInt32","type":{"name":"Mrd.NDArray","typeArguments":["int32"]}},{"name":"NDArrayUint16","type":{"name":"Mrd.NDArray","typeArguments":["uint16"]}},{"name":"NDArrayUint32","type":{"name":"Mrd.NDArray","typeArguments":["uint32"]}},{"name":"ParallelImagingType","fields":[{"name":"accelerationFactor","type":"Mrd.AccelerationFactorType"},{"name":"calibrationMode","type":[null,"Mrd.CalibrationMode"]},{"name":"interleavingDimension","type":[null,"Mrd.InterleavingDimension"]},{"name":"multiband","type":[null,"Mrd.MultibandType"]}]},{"name":"PatientGender","values":[{"symbol":"m","value":0},{"symbol":"f","value":1},{"symbol":"o","value":2}]},{"name":"PatientPosition","values":[{"symbol":"hFP","value":0},{"symbol":"hFS","value":1},{"symbol":"hFDR","value":2},{"symbol":"hFDL","value":3},{"symbol":"fFP","value":4},{"symbol":"fFS","value":5},{"symbol":"fFDR","value":6},{"symbol":"fFDL","value":7}]},{"name":"ReconAssembly","fields":[{"name":"data","type":"Mrd.ReconBuffer"},{"name":"ref","type":[null,"Mrd.ReconBuffer"]}]},{"name":"ReconBuffer","fields":[{"name":"data","type":{"array":{"items":"complexfloat32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"chan"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}},{"name":"trajectory","type":{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"basis"},{"name":"samples"}]}}},{"name":"density","type":[null,{"array":{"items":"float32","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"},{"name":"e0"}]}}]},{"name":"headers","type":{"array":{"items":"Mrd.AcquisitionHeader","dimensions":[{"name":"loc"},{"name":"s"},{"name":"n"},{"name":"e2"},{"name":"e1"}]}}},{"name":"sampling","type":"Mrd.SamplingDescription"}]},{"name":"ReconData","fields":[{"name":"buffers","type":{"vector":{"items":"Mrd.ReconAssembly"}}}]},{"name":"ReferencedImageSequenceType","fields":[{"name":"referencedSOPInstanceUID","type":{"vector":{"items":"string"}}}]},{"name":"SamplingDescription","fields":[{"name":"encodedFOV","type":"Mrd.FieldOfViewMm"},{"name":"reconFOV","type":"Mrd.FieldOfViewMm"},{"name":"encodedMatrix","type":"Mrd.MatrixSizeType"},{"name":"reconMatrix","type":"Mrd.MatrixSizeType"},{"name":"samplingLimits","type":"Mrd.SamplingLimits"}]},{"name":"SamplingLimits","fields":[{"name":"kspaceEncodingStep0","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep1","type":"Mrd.LimitType"},{"name":"kspaceEncodingStep2","type":"Mrd.LimitType"}]},{"name":"SequenceParametersType","fields":[{"name":"tR","type":{"vector":{"items":"float32"}}},{"name":"tE","type":{"vector":{"items":"float32"}}},{"name":"tI","type":{"vector":{"items":"float32"}}},{"name":"flipAngleDeg","type":{"vector":{"items":"float32"}}},{"name":"sequenceType","type":[null,"string"]},{"name":"echoSpacing","type":{"vector":{"items":"float32"}}},{"name":"diffusionDimension","type":[null,"Mrd.DiffusionDimension"]},{"name":"diffusion","type":{"vector":{"items":"Mrd.DiffusionType"}}},{"name":"diffusionScheme","type":[null,"string"]}]},{"name":"StreamItem","type":[{"tag":"acquisition","explicitTag":true,"type":"Mrd.Acquisition"},{"tag":"waveformUint32","explicitTag":true,"type":"Mrd.WaveformUint32"},{"tag":"imageUint16","explicitTag":true,"type":"Mrd.ImageUint16"},{"tag":"imageInt16","explicitTag":true,"type":"Mrd.ImageInt16"},{"tag":"imageUint32","explicitTag":true,"type":"Mrd.ImageUint32"},{"tag":"imageInt32","explicitTag":true,"type":"Mrd.ImageInt32"},{"tag":"imageFloat","explicitTag":true,"type":"Mrd.ImageFloat"},{"tag":"imageDouble","explicitTag":true,"type":"Mrd.ImageDouble"},{"tag":"imageComplexFloat","explicitTag":true,"type":"Mrd.ImageComplexFloat"},{"tag":"imageComplexDouble","explicitTag":true,"type":"Mrd.ImageComplexDouble"},{"tag":"acquisitionBucket","explicitTag":true,"type":"Mrd.AcquisitionBucket"},{"tag":"reconData","explicitTag":true,"type":"Mrd.ReconData"},{"tag":"arrayComplexFloat","explicitTag":true,"type":"Mrd.ArrayComplexFloat"},{"tag":"imageArray","explicitTag":true,"type":"Mrd.ImageArray"},{"tag":"ndArrayUint16","explicitTag":true,"type":"Mrd.NDArrayUint16"},{"tag":"ndArrayInt16","explicitTag":true,"type":"Mrd.NDArrayInt16"},{"tag":"ndArrayUint32","explicitTag":true,"type":"Mrd.NDArrayUint32"},{"tag":"ndArrayInt32","explicitTag":true,"type":"Mrd.NDArrayInt32"},{"tag":"ndArrayFloat","explicitTag":true,"type":"Mrd.NDArrayFloat"},{"tag":"ndArrayDouble","explicitTag":true,"type":"Mrd.NDArrayDouble"},{"tag":"ndArrayComplexFloat","explicitTag":true,"type":"Mrd.NDArrayComplexFloat"},{"tag":"ndArrayComplexDouble","explicitTag":true,"type":"Mrd.NDArrayComplexDouble"}]},{"name":"StudyInformationType","fields":[{"name":"studyDate","type":[null,"date"]},{"name":"studyTime","type":[null,"time"]},{"name":"studyID","type":[null,"string"]},{"name":"accessionNumber","type":[null,"int64"]},{"name":"referringPhysicianName","type":[null,"string"]},{"name":"studyDescription","type":[null,"string"]},{"name":"studyInstanceUID","type":[null,"string"]},{"name":"bodyPartExamined","type":[null,"string"]}]},{"name":"SubjectInformationType","fields":[{"name":"patientName","type":[null,"string"]},{"name":"patientWeightKg","type":[null,"float32"]},{"name":"patientHeightM","type":[null,"float32"]},{"name":"patientID","type":[null,"string"]},{"name":"patientBirthdate","type":[null,"date"]},{"name":"patientGender","type":[null,"Mrd.PatientGender"]}]},{"name":"ThreeDimensionalFloat","fields":[{"name":"x","type":"float32"},{"name":"y","type":"float32"},{"name":"z","type":"float32"}]},{"name":"Trajectory","values":[{"symbol":"cartesian","value":0},{"symbol":"epi","value":1},{"symbol":"radial","value":2},{"symbol":"goldenangle","value":3},{"symbol":"spiral","value":4},{"symbol":"other","value":5}]},{"name":"TrajectoryData","type":{"array":{"items":"float32","dimensions":[{"name":"basis"},{"name":"samples"}]}}},{"name":"TrajectoryDescriptionType","fields":[{"name":"identifier","type":"string"},{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"comment","type":[null,"string"]}]},{"name":"UserParameterBase64Type","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParameterDoubleType","fields":[{"name":"name","type":"string"},{"name":"value","type":"float64"}]},{"name":"UserParameterLongType","fields":[{"name":"name","type":"string"},{"name":"value","type":"int64"}]},{"name":"UserParameterStringType","fields":[{"name":"name","type":"string"},{"name":"value","type":"string"}]},{"name":"UserParametersType","fields":[{"name":"userParameterLong","type":{"vector":{"items":"Mrd.UserParameterLongType"}}},{"name":"userParameterDouble","type":{"vector":{"items":"Mrd.UserParameterDoubleType"}}},{"name":"userParameterString","type":{"vector":{"items":"Mrd.UserParameterStringType"}}},{"name":"userParameterBase64","type":{"vector":{"items":"Mrd.UserParameterBase64Type"}}}]},{"name":"Waveform","typeParameters":["T"],"fields":[{"name":"flags","type":"uint64"},{"name":"measurementUid","type":"uint32"},{"name":"scanCounter","type":"uint32"},{"name":"timeStampNs","type":"uint64"},{"name":"sampleTimeNs","type":"uint64"},{"name":"waveformId","type":"uint32"},{"name":"data","type":{"name":"Mrd.WaveformSamples","typeArguments":["T"]}}]},{"name":"WaveformInformationType","fields":[{"name":"waveformName","type":"string"},{"name":"waveformType","type":"Mrd.WaveformType"},{"name":"userParameters","type":"Mrd.UserParametersType"}]},{"name":"WaveformSamples","typeParameters":["T"],"type":{"array":{"items":"T","dimensions":[{"name":"channels"},{"name":"samples"}]}}},{"name":"WaveformType","values":[{"symbol":"ecg","value":0},{"symbol":"pulse","value":1},{"symbol":"respiratory","value":2},{"symbol":"trigger","value":3},{"symbol":"gradientwaveform","value":4},{"symbol":"other","value":5}]},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}},{"name":"WaveformUint32","type":{"name":"Mrd.Waveform","typeArguments":["uint32"]}}]}""" def close(self) -> None: if self._state == 3: diff --git a/python/mrd/types.py b/python/mrd/types.py index 242964e4..9543b81b 100644 --- a/python/mrd/types.py +++ b/python/mrd/types.py @@ -1489,16 +1489,6 @@ class ImageType(yardl.OutOfRangeEnum): IMAG = 4 COMPLEX = 5 RGBA_MAP = 6 - SPIN_DENSITY_MAP = 7 - T1_MAP = 8 - T2_MAP = 9 - T2STAR_MAP = 10 - ADC_MAP = 11 - B0_MAP = 12 - B1_MAP = 13 - SENSITIVITY_MAP = 14 - GFACTOR_MAP = 15 - USER_MAP = 16 ImageData = npt.NDArray[Y_NP] @@ -1756,7 +1746,7 @@ class NoiseCovariance: """Comes from Header.acquisitionSystemInformation.relativeReceiverNoiseBandwidth""" noise_dwell_time_ns: yardl.UInt64 - """Comes from Acquisition.sampleTimeNs""" + """Comes from Acquisition.sampleTimeUs""" sample_count: yardl.Size """Number of samples used to compute matrix""" @@ -2099,6 +2089,142 @@ def __repr__(self) -> str: ArrayComplexFloat = Array[np.complex64] +class ArrayType(yardl.OutOfRangeEnum): + SPIN_DENSITY_MAP = 1 + T1_MAP = 2 + T2_MAP = 3 + T2STAR_MAP = 4 + ADC_MAP = 5 + B0_MAP = 6 + B1_MAP = 7 + SENSITIVITY_MAP = 8 + GFACTOR_MAP = 9 + USER_MAP = 10 + +class ArrayMetaValue: + String: typing.ClassVar[type["ArrayMetaValueUnionCase[str]"]] + Int64: typing.ClassVar[type["ArrayMetaValueUnionCase[yardl.Int64]"]] + Float64: typing.ClassVar[type["ArrayMetaValueUnionCase[yardl.Float64]"]] + +class ArrayMetaValueUnionCase(ArrayMetaValue, yardl.UnionCase[_T]): + pass + +ArrayMetaValue.String = type("ArrayMetaValue.String", (ArrayMetaValueUnionCase,), {"index": 0, "tag": "string"}) +ArrayMetaValue.Int64 = type("ArrayMetaValue.Int64", (ArrayMetaValueUnionCase,), {"index": 1, "tag": "int64"}) +ArrayMetaValue.Float64 = type("ArrayMetaValue.Float64", (ArrayMetaValueUnionCase,), {"index": 2, "tag": "float64"}) +del ArrayMetaValueUnionCase + +ArrayMeta = dict[str, list[ArrayMetaValue]] + +class ArrayDimension(yardl.OutOfRangeEnum): + CHANNEL = 0 + Z = 1 + Y = 2 + X = 3 + FREQUENCY = 4 + BASIS = 5 + SAMPLES = 6 + LOC = 7 + S = 8 + N = 9 + E2 = 10 + E1 = 11 + E0 = 12 + TIME = 13 + +class NDArrayHeader: + dimension_labels: list[ArrayDimension] + array_type: ArrayType + meta: ArrayMeta + + def __init__(self, *, + dimension_labels: typing.Optional[list[ArrayDimension]] = None, + array_type: ArrayType, + meta: typing.Optional[ArrayMeta] = None, + ): + self.dimension_labels = dimension_labels if dimension_labels is not None else [] + self.array_type = array_type + self.meta = meta if meta is not None else {} + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, NDArrayHeader) + and self.dimension_labels == other.dimension_labels + and self.array_type == other.array_type + and self.meta == other.meta + ) + + def __str__(self) -> str: + return f"NDArrayHeader(dimension_labels={self.dimension_labels}, array_type={self.array_type}, meta={self.meta})" + + def __repr__(self) -> str: + return f"NDArrayHeader(dimension_labels={repr(self.dimension_labels)}, array_type={repr(self.array_type)}, meta={repr(self.meta)})" + + +class NDArray(typing.Generic[T_NP]): + head: NDArrayHeader + data: Array[T_NP] + + def __init__(self, *, + head: NDArrayHeader, + data: Array[T_NP], + ): + self.head = head + self.data = data + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, NDArray) + and self.head == other.head + and yardl.structural_equal(self.data, other.data) + ) + + def __str__(self) -> str: + return f"NDArray(head={self.head}, data={self.data})" + + def __repr__(self) -> str: + return f"NDArray(head={repr(self.head)}, data={repr(self.data)})" + + +NDArrayUint16 = NDArray[np.uint16] + +NDArrayInt16 = NDArray[np.int16] + +NDArrayUint32 = NDArray[np.uint32] + +NDArrayInt32 = NDArray[np.int32] + +NDArrayFloat = NDArray[np.float32] + +NDArrayDouble = NDArray[np.float64] + +NDArrayComplexFloat = NDArray[np.complex64] + +NDArrayComplexDouble = NDArray[np.complex128] + +class AnyNDArray: + NDArrayUint16: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayUint16]"]] + NDArrayInt16: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayInt16]"]] + NDArrayUint32: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayUint32]"]] + NDArrayInt32: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayInt32]"]] + NDArrayFloat: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayFloat]"]] + NDArrayDouble: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayDouble]"]] + NDArrayComplexFloat: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayComplexFloat]"]] + NDArrayComplexDouble: typing.ClassVar[type["AnyNDArrayUnionCase[NDArrayComplexDouble]"]] + +class AnyNDArrayUnionCase(AnyNDArray, yardl.UnionCase[_T]): + pass + +AnyNDArray.NDArrayUint16 = type("AnyNDArray.NDArrayUint16", (AnyNDArrayUnionCase,), {"index": 0, "tag": "NDArrayUint16"}) +AnyNDArray.NDArrayInt16 = type("AnyNDArray.NDArrayInt16", (AnyNDArrayUnionCase,), {"index": 1, "tag": "NDArrayInt16"}) +AnyNDArray.NDArrayUint32 = type("AnyNDArray.NDArrayUint32", (AnyNDArrayUnionCase,), {"index": 2, "tag": "NDArrayUint32"}) +AnyNDArray.NDArrayInt32 = type("AnyNDArray.NDArrayInt32", (AnyNDArrayUnionCase,), {"index": 3, "tag": "NDArrayInt32"}) +AnyNDArray.NDArrayFloat = type("AnyNDArray.NDArrayFloat", (AnyNDArrayUnionCase,), {"index": 4, "tag": "NDArrayFloat"}) +AnyNDArray.NDArrayDouble = type("AnyNDArray.NDArrayDouble", (AnyNDArrayUnionCase,), {"index": 5, "tag": "NDArrayDouble"}) +AnyNDArray.NDArrayComplexFloat = type("AnyNDArray.NDArrayComplexFloat", (AnyNDArrayUnionCase,), {"index": 6, "tag": "NDArrayComplexFloat"}) +AnyNDArray.NDArrayComplexDouble = type("AnyNDArray.NDArrayComplexDouble", (AnyNDArrayUnionCase,), {"index": 7, "tag": "NDArrayComplexDouble"}) +del AnyNDArrayUnionCase + class StreamItem: Acquisition: typing.ClassVar[type["StreamItemUnionCase[Acquisition]"]] WaveformUint32: typing.ClassVar[type["StreamItemUnionCase[WaveformUint32]"]] @@ -2114,24 +2240,40 @@ class StreamItem: ReconData: typing.ClassVar[type["StreamItemUnionCase[ReconData]"]] ArrayComplexFloat: typing.ClassVar[type["StreamItemUnionCase[ArrayComplexFloat]"]] ImageArray: typing.ClassVar[type["StreamItemUnionCase[ImageArray]"]] + NdArrayUint16: typing.ClassVar[type["StreamItemUnionCase[NDArrayUint16]"]] + NdArrayInt16: typing.ClassVar[type["StreamItemUnionCase[NDArrayInt16]"]] + NdArrayUint32: typing.ClassVar[type["StreamItemUnionCase[NDArrayUint32]"]] + NdArrayInt32: typing.ClassVar[type["StreamItemUnionCase[NDArrayInt32]"]] + NdArrayFloat: typing.ClassVar[type["StreamItemUnionCase[NDArrayFloat]"]] + NdArrayDouble: typing.ClassVar[type["StreamItemUnionCase[NDArrayDouble]"]] + NdArrayComplexFloat: typing.ClassVar[type["StreamItemUnionCase[NDArrayComplexFloat]"]] + NdArrayComplexDouble: typing.ClassVar[type["StreamItemUnionCase[NDArrayComplexDouble]"]] class StreamItemUnionCase(StreamItem, yardl.UnionCase[_T]): pass -StreamItem.Acquisition = type("StreamItem.Acquisition", (StreamItemUnionCase,), {"index": 0, "tag": "Acquisition"}) -StreamItem.WaveformUint32 = type("StreamItem.WaveformUint32", (StreamItemUnionCase,), {"index": 1, "tag": "WaveformUint32"}) -StreamItem.ImageUint16 = type("StreamItem.ImageUint16", (StreamItemUnionCase,), {"index": 2, "tag": "ImageUint16"}) -StreamItem.ImageInt16 = type("StreamItem.ImageInt16", (StreamItemUnionCase,), {"index": 3, "tag": "ImageInt16"}) -StreamItem.ImageUint32 = type("StreamItem.ImageUint32", (StreamItemUnionCase,), {"index": 4, "tag": "ImageUint32"}) -StreamItem.ImageInt32 = type("StreamItem.ImageInt32", (StreamItemUnionCase,), {"index": 5, "tag": "ImageInt32"}) -StreamItem.ImageFloat = type("StreamItem.ImageFloat", (StreamItemUnionCase,), {"index": 6, "tag": "ImageFloat"}) -StreamItem.ImageDouble = type("StreamItem.ImageDouble", (StreamItemUnionCase,), {"index": 7, "tag": "ImageDouble"}) -StreamItem.ImageComplexFloat = type("StreamItem.ImageComplexFloat", (StreamItemUnionCase,), {"index": 8, "tag": "ImageComplexFloat"}) -StreamItem.ImageComplexDouble = type("StreamItem.ImageComplexDouble", (StreamItemUnionCase,), {"index": 9, "tag": "ImageComplexDouble"}) -StreamItem.AcquisitionBucket = type("StreamItem.AcquisitionBucket", (StreamItemUnionCase,), {"index": 10, "tag": "AcquisitionBucket"}) -StreamItem.ReconData = type("StreamItem.ReconData", (StreamItemUnionCase,), {"index": 11, "tag": "ReconData"}) -StreamItem.ArrayComplexFloat = type("StreamItem.ArrayComplexFloat", (StreamItemUnionCase,), {"index": 12, "tag": "ArrayComplexFloat"}) -StreamItem.ImageArray = type("StreamItem.ImageArray", (StreamItemUnionCase,), {"index": 13, "tag": "ImageArray"}) +StreamItem.Acquisition = type("StreamItem.Acquisition", (StreamItemUnionCase,), {"index": 0, "tag": "acquisition"}) +StreamItem.WaveformUint32 = type("StreamItem.WaveformUint32", (StreamItemUnionCase,), {"index": 1, "tag": "waveformUint32"}) +StreamItem.ImageUint16 = type("StreamItem.ImageUint16", (StreamItemUnionCase,), {"index": 2, "tag": "imageUint16"}) +StreamItem.ImageInt16 = type("StreamItem.ImageInt16", (StreamItemUnionCase,), {"index": 3, "tag": "imageInt16"}) +StreamItem.ImageUint32 = type("StreamItem.ImageUint32", (StreamItemUnionCase,), {"index": 4, "tag": "imageUint32"}) +StreamItem.ImageInt32 = type("StreamItem.ImageInt32", (StreamItemUnionCase,), {"index": 5, "tag": "imageInt32"}) +StreamItem.ImageFloat = type("StreamItem.ImageFloat", (StreamItemUnionCase,), {"index": 6, "tag": "imageFloat"}) +StreamItem.ImageDouble = type("StreamItem.ImageDouble", (StreamItemUnionCase,), {"index": 7, "tag": "imageDouble"}) +StreamItem.ImageComplexFloat = type("StreamItem.ImageComplexFloat", (StreamItemUnionCase,), {"index": 8, "tag": "imageComplexFloat"}) +StreamItem.ImageComplexDouble = type("StreamItem.ImageComplexDouble", (StreamItemUnionCase,), {"index": 9, "tag": "imageComplexDouble"}) +StreamItem.AcquisitionBucket = type("StreamItem.AcquisitionBucket", (StreamItemUnionCase,), {"index": 10, "tag": "acquisitionBucket"}) +StreamItem.ReconData = type("StreamItem.ReconData", (StreamItemUnionCase,), {"index": 11, "tag": "reconData"}) +StreamItem.ArrayComplexFloat = type("StreamItem.ArrayComplexFloat", (StreamItemUnionCase,), {"index": 12, "tag": "arrayComplexFloat"}) +StreamItem.ImageArray = type("StreamItem.ImageArray", (StreamItemUnionCase,), {"index": 13, "tag": "imageArray"}) +StreamItem.NdArrayUint16 = type("StreamItem.NdArrayUint16", (StreamItemUnionCase,), {"index": 14, "tag": "ndArrayUint16"}) +StreamItem.NdArrayInt16 = type("StreamItem.NdArrayInt16", (StreamItemUnionCase,), {"index": 15, "tag": "ndArrayInt16"}) +StreamItem.NdArrayUint32 = type("StreamItem.NdArrayUint32", (StreamItemUnionCase,), {"index": 16, "tag": "ndArrayUint32"}) +StreamItem.NdArrayInt32 = type("StreamItem.NdArrayInt32", (StreamItemUnionCase,), {"index": 17, "tag": "ndArrayInt32"}) +StreamItem.NdArrayFloat = type("StreamItem.NdArrayFloat", (StreamItemUnionCase,), {"index": 18, "tag": "ndArrayFloat"}) +StreamItem.NdArrayDouble = type("StreamItem.NdArrayDouble", (StreamItemUnionCase,), {"index": 19, "tag": "ndArrayDouble"}) +StreamItem.NdArrayComplexFloat = type("StreamItem.NdArrayComplexFloat", (StreamItemUnionCase,), {"index": 20, "tag": "ndArrayComplexFloat"}) +StreamItem.NdArrayComplexDouble = type("StreamItem.NdArrayComplexDouble", (StreamItemUnionCase,), {"index": 21, "tag": "ndArrayComplexDouble"}) del StreamItemUnionCase def _mk_get_dtype(): @@ -2204,6 +2346,20 @@ def _mk_get_dtype(): dtype_map.setdefault(ReconAssembly, np.dtype([('data', get_dtype(ReconBuffer)), ('ref', np.dtype([('has_value', np.dtype(np.bool_)), ('value', get_dtype(ReconBuffer))], align=True))], align=True)) dtype_map.setdefault(ReconData, np.dtype([('buffers', np.dtype(np.object_))], align=True)) dtype_map.setdefault(ImageArray, np.dtype([('data', np.dtype(np.object_)), ('headers', np.dtype(np.object_)), ('meta', np.dtype(np.object_)), ('waveforms', np.dtype(np.object_))], align=True)) + dtype_map.setdefault(ArrayType, np.dtype(np.int32)) + dtype_map.setdefault(ArrayMetaValue, np.dtype(np.object_)) + dtype_map.setdefault(ArrayDimension, np.dtype(np.int32)) + dtype_map.setdefault(NDArrayHeader, np.dtype([('dimension_labels', np.dtype(np.object_)), ('array_type', get_dtype(ArrayType)), ('meta', np.dtype(np.object_))], align=True)) + dtype_map.setdefault(NDArray, lambda type_args: np.dtype([('head', get_dtype(NDArrayHeader)), ('data', np.dtype(np.object_))], align=True)) + dtype_map.setdefault(NDArrayUint16, get_dtype(types.GenericAlias(NDArray, (yardl.UInt16,)))) + dtype_map.setdefault(NDArrayInt16, get_dtype(types.GenericAlias(NDArray, (yardl.Int16,)))) + dtype_map.setdefault(NDArrayUint32, get_dtype(types.GenericAlias(NDArray, (yardl.UInt32,)))) + dtype_map.setdefault(NDArrayInt32, get_dtype(types.GenericAlias(NDArray, (yardl.Int32,)))) + dtype_map.setdefault(NDArrayFloat, get_dtype(types.GenericAlias(NDArray, (yardl.Float32,)))) + dtype_map.setdefault(NDArrayDouble, get_dtype(types.GenericAlias(NDArray, (yardl.Float64,)))) + dtype_map.setdefault(NDArrayComplexFloat, get_dtype(types.GenericAlias(NDArray, (yardl.ComplexFloat,)))) + dtype_map.setdefault(NDArrayComplexDouble, get_dtype(types.GenericAlias(NDArray, (yardl.ComplexDouble,)))) + dtype_map.setdefault(AnyNDArray, np.dtype(np.object_)) dtype_map.setdefault(StreamItem, np.dtype(np.object_)) return get_dtype