From e97ef5157573603f17ba8a7b2fd7c06c1340000c Mon Sep 17 00:00:00 2001 From: kekeke21 Date: Wed, 10 Dec 2025 23:08:00 +0000 Subject: [PATCH 1/3] - 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/3] 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/3] 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: