29#if __cplusplus > 199711L
34#if defined(_MSC_VER) && __cplusplus > 199711L
35#define ISMRMRD_UNALIGNED __unaligned
37#define ISMRMRD_UNALIGNED
43typedef std::complex<float> complex_float_t;
44typedef std::complex<double> complex_double_t;
47typedef struct complex_float_t{
51typedef struct complex_double_t{
57typedef float complex complex_float_t;
58typedef double complex complex_double_t;
64#if defined (_MSC_VER) && (_MSC_VER < 1800)
80#include "ismrmrd/export.h"
93 ISMRMRD_USER_INTS = 8,
94 ISMRMRD_USER_FLOATS = 8,
95 ISMRMRD_PHYS_STAMPS = 3,
96 ISMRMRD_CHANNEL_MASKS = 16,
97 ISMRMRD_NDARRAY_MAXDIM = 7,
98 ISMRMRD_POSITION_LENGTH = 3,
99 ISMRMRD_DIRECTION_LENGTH = 3
107 ISMRMRD_BEGINERROR=-1,
112 ISMRMRD_RUNTIMEERROR,
132EXPORTISMRMRD
size_t ismrmrd_sizeof_data_type(
int data_type);
138 ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP1 = 1,
139 ISMRMRD_ACQ_LAST_IN_ENCODE_STEP1 = 2,
140 ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP2 = 3,
141 ISMRMRD_ACQ_LAST_IN_ENCODE_STEP2 = 4,
142 ISMRMRD_ACQ_FIRST_IN_AVERAGE = 5,
143 ISMRMRD_ACQ_LAST_IN_AVERAGE = 6,
144 ISMRMRD_ACQ_FIRST_IN_SLICE = 7,
145 ISMRMRD_ACQ_LAST_IN_SLICE = 8,
146 ISMRMRD_ACQ_FIRST_IN_CONTRAST = 9,
147 ISMRMRD_ACQ_LAST_IN_CONTRAST = 10,
148 ISMRMRD_ACQ_FIRST_IN_PHASE = 11,
149 ISMRMRD_ACQ_LAST_IN_PHASE = 12,
150 ISMRMRD_ACQ_FIRST_IN_REPETITION = 13,
151 ISMRMRD_ACQ_LAST_IN_REPETITION = 14,
152 ISMRMRD_ACQ_FIRST_IN_SET = 15,
153 ISMRMRD_ACQ_LAST_IN_SET = 16,
154 ISMRMRD_ACQ_FIRST_IN_SEGMENT = 17,
155 ISMRMRD_ACQ_LAST_IN_SEGMENT = 18,
156 ISMRMRD_ACQ_IS_NOISE_MEASUREMENT = 19,
157 ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION = 20,
158 ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION_AND_IMAGING = 21,
159 ISMRMRD_ACQ_IS_REVERSE = 22,
160 ISMRMRD_ACQ_IS_NAVIGATION_DATA = 23,
161 ISMRMRD_ACQ_IS_PHASECORR_DATA = 24,
162 ISMRMRD_ACQ_LAST_IN_MEASUREMENT = 25,
163 ISMRMRD_ACQ_IS_HPFEEDBACK_DATA = 26,
164 ISMRMRD_ACQ_IS_DUMMYSCAN_DATA = 27,
165 ISMRMRD_ACQ_IS_RTFEEDBACK_DATA = 28,
166 ISMRMRD_ACQ_IS_SURFACECOILCORRECTIONSCAN_DATA = 29,
167 ISMRMRD_ACQ_IS_PHASE_STABILIZATION_REFERENCE = 30,
168 ISMRMRD_ACQ_IS_PHASE_STABILIZATION = 31,
171 ISMRMRD_ACQ_COMPRESSION1 = 53,
172 ISMRMRD_ACQ_COMPRESSION2 = 54,
173 ISMRMRD_ACQ_COMPRESSION3 = 55,
174 ISMRMRD_ACQ_COMPRESSION4 = 56,
175 ISMRMRD_ACQ_USER1 = 57,
176 ISMRMRD_ACQ_USER2 = 58,
177 ISMRMRD_ACQ_USER3 = 59,
178 ISMRMRD_ACQ_USER4 = 60,
179 ISMRMRD_ACQ_USER5 = 61,
180 ISMRMRD_ACQ_USER6 = 62,
181 ISMRMRD_ACQ_USER7 = 63,
182 ISMRMRD_ACQ_USER8 = 64
189 ISMRMRD_IMTYPE_MAGNITUDE = 1,
190 ISMRMRD_IMTYPE_PHASE = 2,
191 ISMRMRD_IMTYPE_REAL = 3,
192 ISMRMRD_IMTYPE_IMAG = 4,
193 ISMRMRD_IMTYPE_COMPLEX = 5
200 ISMRMRD_IMAGE_IS_NAVIGATION_DATA = 1,
201 ISMRMRD_IMAGE_FIRST_IN_AVERAGE = 5,
202 ISMRMRD_IMAGE_LAST_IN_AVERAGE = 6,
203 ISMRMRD_IMAGE_FIRST_IN_SLICE = 7,
204 ISMRMRD_IMAGE_LAST_IN_SLICE = 8,
205 ISMRMRD_IMAGE_FIRST_IN_CONTRAST = 9,
206 ISMRMRD_IMAGE_LAST_IN_CONTRAST = 10,
207 ISMRMRD_IMAGE_FIRST_IN_PHASE = 11,
208 ISMRMRD_IMAGE_LAST_IN_PHASE = 12,
209 ISMRMRD_IMAGE_FIRST_IN_REPETITION = 13,
210 ISMRMRD_IMAGE_LAST_IN_REPETITION = 14,
211 ISMRMRD_IMAGE_FIRST_IN_SET = 15,
212 ISMRMRD_IMAGE_LAST_IN_SET = 16,
213 ISMRMRD_IMAGE_USER1 = 57,
214 ISMRMRD_IMAGE_USER2 = 58,
215 ISMRMRD_IMAGE_USER3 = 59,
216 ISMRMRD_IMAGE_USER4 = 60,
217 ISMRMRD_IMAGE_USER5 = 61,
218 ISMRMRD_IMAGE_USER6 = 62,
219 ISMRMRD_IMAGE_USER7 = 63,
220 ISMRMRD_IMAGE_USER8 = 64
236 uint16_t
user[ISMRMRD_USER_INTS];
237} ISMRMRD_EncodingCounters;
239#if __cplusplus > 199711L
241static_assert(std::is_standard_layout<ISMRMRD_EncodingCounters>::value,
"ISMRMRD_EncodingCounters is not a standard layout type");
243static_assert(
sizeof(ISMRMRD_EncodingCounters) == 34,
"ISMRMRD_EncodingCounters is not the expected size");
244static_assert(offsetof(ISMRMRD_EncodingCounters, kspace_encode_step_1) == 0,
"kspace_encode_step_1 is not at the expected offset");
245static_assert(offsetof(ISMRMRD_EncodingCounters, kspace_encode_step_2) == 2,
"kspace_encode_step_2 is not at the expected offset");
246static_assert(offsetof(ISMRMRD_EncodingCounters, average) == 4,
"average is not at the expected offset");
247static_assert(offsetof(ISMRMRD_EncodingCounters, slice) == 6,
"slice is not at the expected offset");
248static_assert(offsetof(ISMRMRD_EncodingCounters, contrast) == 8,
"contrast is not at the expected offset");
249static_assert(offsetof(ISMRMRD_EncodingCounters, phase) == 10,
"phase is not at the expected offset");
250static_assert(offsetof(ISMRMRD_EncodingCounters, repetition) == 12,
"repetition is not at the expected offset");
251static_assert(offsetof(ISMRMRD_EncodingCounters, set) == 14,
"set is not at the expected offset");
252static_assert(offsetof(ISMRMRD_EncodingCounters, segment) == 16,
"segment is not at the expected offset");
253static_assert(offsetof(ISMRMRD_EncodingCounters, user) == 18,
"user is not at the expected offset");
284} ISMRMRD_AcquisitionHeader;
286#if __cplusplus > 199711L
288static_assert(std::is_standard_layout<ISMRMRD_AcquisitionHeader>::value,
"ISMRMRD_AcquisitionHeader is not a standard layout type");
290static_assert(
sizeof(ISMRMRD_AcquisitionHeader) == 340,
"ISMRMRD_AcquisitionHeader is not the expected size");
291static_assert(offsetof(ISMRMRD_AcquisitionHeader, version) == 0,
"version is not at the expected offset");
292static_assert(offsetof(ISMRMRD_AcquisitionHeader, flags) == 2,
"flags is not at the expected offset");
293static_assert(offsetof(ISMRMRD_AcquisitionHeader, measurement_uid) == 10,
"measurement_uid is not at the expected offset");
294static_assert(offsetof(ISMRMRD_AcquisitionHeader, scan_counter) == 14,
"scan_counter is not at the expected offset");
295static_assert(offsetof(ISMRMRD_AcquisitionHeader, acquisition_time_stamp) == 18,
"acquisition_time_stamp is not at the expected offset");
296static_assert(offsetof(ISMRMRD_AcquisitionHeader, physiology_time_stamp) == 22,
"physiology_time_stamp is not at the expected offset");
297static_assert(offsetof(ISMRMRD_AcquisitionHeader, number_of_samples) == 34,
"number_of_samples is not at the expected offset");
298static_assert(offsetof(ISMRMRD_AcquisitionHeader, available_channels) == 36,
"available_channels is not at the expected offset");
299static_assert(offsetof(ISMRMRD_AcquisitionHeader, active_channels) == 38,
"active_channels is not at the expected offset");
300static_assert(offsetof(ISMRMRD_AcquisitionHeader, channel_mask) == 40,
"channel_mask is not at the expected offset");
301static_assert(offsetof(ISMRMRD_AcquisitionHeader, discard_pre) == 168,
"discard_pre is not at the expected offset");
302static_assert(offsetof(ISMRMRD_AcquisitionHeader, discard_post) == 170,
"discard_post is not at the expected offset");
303static_assert(offsetof(ISMRMRD_AcquisitionHeader, center_sample) == 172,
"center_sample is not at the expected offset");
304static_assert(offsetof(ISMRMRD_AcquisitionHeader, encoding_space_ref) == 174,
"encoding_space_ref is not at the expected offset");
305static_assert(offsetof(ISMRMRD_AcquisitionHeader, trajectory_dimensions) == 176,
"trajectory_dimensions is not at the expected offset");
306static_assert(offsetof(ISMRMRD_AcquisitionHeader, sample_time_us) == 178,
"sample_time_us is not at the expected offset");
307static_assert(offsetof(ISMRMRD_AcquisitionHeader, position) == 182,
"position is not at the expected offset");
308static_assert(offsetof(ISMRMRD_AcquisitionHeader, read_dir) == 194,
"read_dir is not at the expected offset");
309static_assert(offsetof(ISMRMRD_AcquisitionHeader, phase_dir) == 206,
"phase_dir is not at the expected offset");
310static_assert(offsetof(ISMRMRD_AcquisitionHeader, slice_dir) == 218,
"slice_dir is not at the expected offset");
311static_assert(offsetof(ISMRMRD_AcquisitionHeader, patient_table_position) == 230,
"patient_table_position is not at the expected offset");
312static_assert(offsetof(ISMRMRD_AcquisitionHeader, idx) == 242,
"idx is not at the expected offset");
313static_assert(offsetof(ISMRMRD_AcquisitionHeader, user_int) == 276,
"user_int is not at the expected offset");
314static_assert(offsetof(ISMRMRD_AcquisitionHeader, user_float) == 308,
"user_float is not at the expected offset");
328 complex_float_t *data;
329} ISMRMRD_Acquisition;
334EXPORTISMRMRD ISMRMRD_Acquisition * ismrmrd_create_acquisition();
335EXPORTISMRMRD
int ismrmrd_free_acquisition(ISMRMRD_Acquisition *acq);
336EXPORTISMRMRD
int ismrmrd_init_acquisition(ISMRMRD_Acquisition *acq);
337EXPORTISMRMRD
int ismrmrd_cleanup_acquisition(ISMRMRD_Acquisition *acq);
338EXPORTISMRMRD
int ismrmrd_copy_acquisition(ISMRMRD_Acquisition *acqdest,
const ISMRMRD_Acquisition *acqsource);
339EXPORTISMRMRD
int ismrmrd_make_consistent_acquisition(ISMRMRD_Acquisition *acq);
340EXPORTISMRMRD
size_t ismrmrd_size_of_acquisition_traj(
const ISMRMRD_Acquisition *acq);
341EXPORTISMRMRD
size_t ismrmrd_size_of_acquisition_data(
const ISMRMRD_Acquisition *acq);
378} ISMRMRD_ImageHeader;
380#if __cplusplus > 199711L
382static_assert(std::is_standard_layout<ISMRMRD_ImageHeader>::value,
"ISMRMRD_ImageHeader is not a standard layout type");
384static_assert(
sizeof(ISMRMRD_ImageHeader) == 198,
"ISMRMRD_ImageHeader is not the expected size");
385static_assert(offsetof(ISMRMRD_ImageHeader, version) == 0,
"version is not at the expected offset");
386static_assert(offsetof(ISMRMRD_ImageHeader, data_type) == 2,
"data_type is not at the expected offset");
387static_assert(offsetof(ISMRMRD_ImageHeader, flags) == 4,
"flags is not at the expected offset");
388static_assert(offsetof(ISMRMRD_ImageHeader, measurement_uid) == 12,
"measurement_uid is not at the expected offset");
389static_assert(offsetof(ISMRMRD_ImageHeader, matrix_size) == 16,
"matrix_size is not at the expected offset");
390static_assert(offsetof(ISMRMRD_ImageHeader, field_of_view) == 22,
"field_of_view is not at the expected offset");
391static_assert(offsetof(ISMRMRD_ImageHeader, channels) == 34,
"channels is not at the expected offset");
392static_assert(offsetof(ISMRMRD_ImageHeader, position) == 36,
"position is not at the expected offset");
393static_assert(offsetof(ISMRMRD_ImageHeader, read_dir) == 48,
"read_dir is not at the expected offset");
394static_assert(offsetof(ISMRMRD_ImageHeader, phase_dir) == 60,
"phase_dir is not at the expected offset");
395static_assert(offsetof(ISMRMRD_ImageHeader, slice_dir) == 72,
"slice_dir is not at the expected offset");
396static_assert(offsetof(ISMRMRD_ImageHeader, patient_table_position) == 84,
"patient_table_position is not at the expected offset");
397static_assert(offsetof(ISMRMRD_ImageHeader, average) == 96,
"average is not at the expected offset");
398static_assert(offsetof(ISMRMRD_ImageHeader, slice) == 98,
"slice is not at the expected offset");
399static_assert(offsetof(ISMRMRD_ImageHeader, contrast) == 100,
"contrast is not at the expected offset");
400static_assert(offsetof(ISMRMRD_ImageHeader, phase) == 102,
"phase is not at the expected offset");
401static_assert(offsetof(ISMRMRD_ImageHeader, repetition) == 104,
"repetition is not at the expected offset");
402static_assert(offsetof(ISMRMRD_ImageHeader, set) == 106,
"set is not at the expected offset");
403static_assert(offsetof(ISMRMRD_ImageHeader, acquisition_time_stamp) == 108,
"acquisition_time_stamp is not at the expected offset");
404static_assert(offsetof(ISMRMRD_ImageHeader, physiology_time_stamp) == 112,
"physiology_time_stamp is not at the expected offset");
405static_assert(offsetof(ISMRMRD_ImageHeader, image_type) == 124,
"image_type is not at the expected offset");
406static_assert(offsetof(ISMRMRD_ImageHeader, image_index) == 126,
"image_index is not at the expected offset");
407static_assert(offsetof(ISMRMRD_ImageHeader, image_series_index) == 128,
"image_series_index is not at the expected offset");
408static_assert(offsetof(ISMRMRD_ImageHeader, user_int) == 130,
"user_int is not at the expected offset");
409static_assert(offsetof(ISMRMRD_ImageHeader, user_float) == 162,
"user_float is not at the expected offset");
410static_assert(offsetof(ISMRMRD_ImageHeader, attribute_string_len) == 194,
"attribute_string_len is not at the expected offset");
414EXPORTISMRMRD
int ismrmrd_init_image_header(ISMRMRD_ImageHeader *hdr);
422 char *attribute_string;
435EXPORTISMRMRD
int ismrmrd_make_consistent_image(
ISMRMRD_Image *im);
436EXPORTISMRMRD
size_t ismrmrd_size_of_image_attribute_string(
const ISMRMRD_Image *im);
437EXPORTISMRMRD
size_t ismrmrd_size_of_image_data(
const ISMRMRD_Image *im);
451 size_t dims[ISMRMRD_NDARRAY_MAXDIM];
458EXPORTISMRMRD ISMRMRD_NDArray * ismrmrd_create_ndarray();
459EXPORTISMRMRD
int ismrmrd_free_ndarray(ISMRMRD_NDArray *arr);
460EXPORTISMRMRD
int ismrmrd_init_ndarray(ISMRMRD_NDArray *arr);
461EXPORTISMRMRD
int ismrmrd_cleanup_ndarray(ISMRMRD_NDArray *arr);
462EXPORTISMRMRD
int ismrmrd_copy_ndarray(ISMRMRD_NDArray *arrdest,
const ISMRMRD_NDArray *arrsource);
463EXPORTISMRMRD
int ismrmrd_make_consistent_ndarray(ISMRMRD_NDArray *arr);
464EXPORTISMRMRD
size_t ismrmrd_size_of_ndarray_data(
const ISMRMRD_NDArray *arr);
473EXPORTISMRMRD
bool ismrmrd_is_flag_set(
const uint64_t flags,
const uint64_t val);
474EXPORTISMRMRD
int ismrmrd_set_flag(ISMRMRD_UNALIGNED uint64_t *flags,
const uint64_t val);
475EXPORTISMRMRD
int ismrmrd_set_flags(ISMRMRD_UNALIGNED uint64_t *flags,
const uint64_t val);
476EXPORTISMRMRD
int ismrmrd_clear_flag(ISMRMRD_UNALIGNED uint64_t *flags,
const uint64_t val);
477EXPORTISMRMRD
int ismrmrd_clear_all_flags(ISMRMRD_UNALIGNED uint64_t *flags);
486EXPORTISMRMRD
bool ismrmrd_is_channel_on(
const uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
487EXPORTISMRMRD
int ismrmrd_set_channel_on(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
488EXPORTISMRMRD
int ismrmrd_set_channel_off(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
489EXPORTISMRMRD
int ismrmrd_set_all_channels_off(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS]);
498typedef void (*ismrmrd_error_handler_t)(
const char *file,
int line,
499 const char *function,
int code,
const char *msg);
500#define ISMRMRD_PUSH_ERR(code, msg) ismrmrd_push_error(__FILE__, __LINE__, \
501 __func__, (code), (msg))
503 const int code,
const char *msg);
512bool ismrmrd_pop_error(
char **file,
int *line,
char **func,
513 int *code,
char **msg);
564 bitmask_ = (bitmask_ << (b-1));
568 bool isSet(
const uint64_t& m)
const {
569 return ((m & bitmask_)>0);
589 void clearAllFlags();
592 bool isChannelActive(uint16_t channel_id)
const;
593 void setChannelActive(uint16_t channel_id);
594 void setChannelNotActive(uint16_t channel_id);
595 void setAllChannelsNotActive();
599#if __cplusplus > 199711L
601static_assert(std::is_standard_layout<AcquisitionHeader>::value,
"AcquisitionHeader is not a standard layout type");
610 Acquisition(uint16_t num_samples, uint16_t active_channels=1, uint16_t trajectory_dimensions=0);
616 uint16_t version()
const;
617 uint64_t flags()
const;
618 uint32_t &measurement_uid();
619 uint32_t &scan_counter();
620 uint32_t &acquisition_time_stamp();
621 uint32_t (&physiology_time_stamp())[ISMRMRD_PHYS_STAMPS];
622 const uint16_t &number_of_samples();
623 uint16_t &available_channels();
624 const uint16_t &active_channels();
625 const uint64_t (&channel_mask())[ISMRMRD_CHANNEL_MASKS];
626 uint16_t &discard_pre();
627 uint16_t &discard_post();
628 uint16_t ¢er_sample();
629 uint16_t &encoding_space_ref();
630 const uint16_t &trajectory_dimensions();
631 float &sample_time_us();
632 float (&position())[3];
633 float (&read_dir())[3];
634 float (&phase_dir())[3];
635 float (&slice_dir())[3];
636 float (&patient_table_position())[3];
638 int32_t (&user_int())[ISMRMRD_USER_INTS];
639 float (&user_float())[ISMRMRD_USER_FLOATS];
642 uint32_t measurement_uid()
const;
643 uint32_t scan_counter()
const;
644 uint32_t acquisition_time_stamp()
const;
645 const uint32_t (&physiology_time_stamp()
const )[ISMRMRD_PHYS_STAMPS];
646 uint16_t number_of_samples()
const;
647 uint16_t available_channels()
const;
648 uint16_t active_channels()
const;
649 const uint64_t (&channel_mask()
const)[ISMRMRD_CHANNEL_MASKS];
650 uint16_t discard_pre()
const;
651 uint16_t discard_post()
const;
652 uint16_t center_sample()
const;
653 uint16_t encoding_space_ref()
const;
654 uint16_t trajectory_dimensions()
const;
655 float sample_time_us()
const;
656 const float (&position()
const)[3];
657 const float (&read_dir()
const)[3];
658 const float (&phase_dir()
const)[3];
659 const float (&slice_dir()
const)[3];
660 const float (&patient_table_position()
const)[3];
662 const int32_t (&user_int()
const)[ISMRMRD_USER_INTS];
663 const float (&user_float()
const)[ISMRMRD_USER_FLOATS];
666 void resize(uint16_t num_samples, uint16_t active_channels=1, uint16_t trajectory_dimensions=0);
667 size_t getNumberOfDataElements()
const;
668 size_t getNumberOfTrajElements()
const;
669 size_t getDataSize()
const;
670 size_t getTrajSize()
const;
679 const complex_float_t * getDataPtr()
const;
680 complex_float_t * getDataPtr();
685 complex_float_t & data(uint16_t sample, uint16_t channel);
690 void setData(complex_float_t * data);
695 complex_float_t * data_begin();
696 const complex_float_t * data_begin()
const;
701 complex_float_t * data_end();
702 const complex_float_t * data_end()
const;
707 const float * getTrajPtr()
const;
708 float * getTrajPtr();
713 float & traj(uint16_t dimension, uint16_t sample);
718 void setTraj(
float * traj);
723 float * traj_begin();
724 const float * traj_begin()
const;
730 const float * traj_end()
const;
733 bool isFlagSet(
const uint64_t val)
const;
734 void setFlag(
const uint64_t val);
735 void clearFlag(
const uint64_t val);
736 void clearAllFlags();
738 bool isFlagSet(
const FlagBit &val)
const {
return isFlagSet(val.bitmask_); }
739 void setFlag(
const FlagBit &val) { setFlag(val.bitmask_); }
740 void clearFlag(
const FlagBit &val) { clearFlag(val.bitmask_); }
743 bool isChannelActive(uint16_t channel_id)
const;
744 void setChannelActive(uint16_t channel_id);
745 void setChannelNotActive(uint16_t channel_id);
746 void setAllChannelsNotActive();
759 bool isFlagSet(
const uint64_t val)
const;
760 void setFlag(
const uint64_t val);
761 void clearFlag(
const uint64_t val);
762 void clearAllFlags();
766#if __cplusplus > 199711L
768static_assert(std::is_standard_layout<ImageHeader>::value,
"ImageHeader is not a standard layout type");
772template <
typename T>
class EXPORTISMRMRD
Image {
776 Image(uint16_t matrix_size_x = 0, uint16_t matrix_size_y = 1,
777 uint16_t matrix_size_z = 1, uint16_t channels = 1);
783 void resize(uint16_t matrix_size_x, uint16_t matrix_size_y, uint16_t matrix_size_z, uint16_t channels);
784 uint16_t getMatrixSizeX()
const;
785 void setMatrixSizeX(uint16_t matrix_size_x);
786 uint16_t getMatrixSizeY()
const;
787 void setMatrixSizeY(uint16_t matrix_size_y);
788 uint16_t getMatrixSizeZ()
const;
789 void setMatrixSizeZ(uint16_t matrix_size_z);
790 uint16_t getNumberOfChannels()
const;
791 void setNumberOfChannels(uint16_t channels);
794 void setFieldOfView(
float fov_x,
float fov_y,
float fov_z);
795 float getFieldOfViewX()
const;
796 void setFieldOfViewX(
float f);
797 float getFieldOfViewY()
const;
798 void setFieldOfViewY(
float f);
799 float getFieldOfViewZ()
const;
800 void setFieldOfViewZ(
float f);
803 void setPosition(
float x,
float y,
float z);
804 float getPositionX()
const;
805 void setPositionX(
float x);
806 float getPositionY()
const;
807 void setPositionY(
float y);
808 float getPositionZ()
const;
809 void setPositionZ(
float z);
811 void setReadDirection(
float x,
float y,
float z);
812 float getReadDirectionX()
const;
813 void setReadDirectionX(
float x);
814 float getReadDirectionY()
const;
815 void setReadDirectionY(
float y);
816 float getReadDirectionZ()
const;
817 void setReadDirectionZ(
float z);
819 void setPhaseDirection(
float x,
float y,
float z);
820 float getPhaseDirectionX()
const;
821 void setPhaseDirectionX(
float x);
822 float getPhaseDirectionY()
const;
823 void setPhaseDirectionY(
float y);
824 float getPhaseDirectionZ()
const;
825 void setPhaseDirectionZ(
float z);
827 void setSliceDirection(
float x,
float y,
float z);
828 float getSliceDirectionX()
const;
829 void setSliceDirectionX(
float x);
830 float getSliceDirectionY()
const;
831 void setSliceDirectionY(
float y);
832 float getSliceDirectionZ()
const;
833 void setSliceDirectionZ(
float z);
835 void setPatientTablePosition(
float x,
float y,
float z);
836 float getPatientTablePositionX()
const;
837 void setPatientTablePositionX(
float x);
838 float getPatientTablePositionY()
const;
839 void setPatientTablePositionY(
float y);
840 float getPatientTablePositionZ()
const;
841 void setPatientTablePositionZ(
float z);
845 uint16_t getVersion()
const;
849 uint32_t getMeasurementUid()
const;
850 void setMeasurementUid(uint32_t measurement_uid);
852 uint16_t getAverage()
const;
853 void setAverage(uint16_t average);
855 uint16_t getSlice()
const;
856 void setSlice(uint16_t slice);
858 uint16_t getContrast()
const;
859 void setContrast(uint16_t contrast);
861 uint16_t getPhase()
const;
862 void setPhase(uint16_t phase);
864 uint16_t getRepetition()
const;
865 void setRepetition(uint16_t repetition);
867 uint16_t getSet()
const;
868 void setSet(uint16_t set);
870 uint32_t getAcquisitionTimeStamp()
const;
871 void setAcquisitionTimeStamp(uint32_t acquisition_time_stamp);
873 uint32_t getPhysiologyTimeStamp(
unsigned int stamp_id)
const;
874 void setPhysiologyTimeStamp(
unsigned int stamp_id, uint32_t value);
876 uint16_t getImageType()
const;
877 void setImageType(uint16_t image_type);
879 uint16_t getImageIndex()
const;
880 void setImageIndex(uint16_t image_index);
882 uint16_t getImageSeriesIndex()
const;
883 void setImageSeriesIndex(uint16_t image_series_index);
886 float getUserFloat(
unsigned int index)
const;
887 void setUserFloat(
unsigned int index,
float value);
889 int32_t getUserInt(
unsigned int index)
const;
890 void setUserInt(
unsigned int index, int32_t value);
893 uint64_t getFlags()
const;
894 void setFlags(
const uint64_t flags);
895 bool isFlagSet(
const uint64_t val)
const;
896 void setFlag(
const uint64_t val);
897 void clearFlag(
const uint64_t val);
898 void clearAllFlags();
906 void getAttributeString(std::string &attr)
const;
907 const char *getAttributeString()
const;
908 void setAttributeString(
const std::string &attr);
909 void setAttributeString(
const char *attr);
910 size_t getAttributeStringLength()
const;
914 const T * getDataPtr()
const;
916 size_t getNumberOfDataElements()
const;
918 size_t getDataSize()
const;
927 T & operator () (uint16_t x, uint16_t y=0, uint16_t z=0 , uint16_t channel =0);
934template <
typename T>
class EXPORTISMRMRD
NDArray {
939 NDArray(
const std::vector<size_t> dimvec);
946 uint16_t getVersion()
const;
947 uint16_t getNDim()
const;
948 const size_t (&getDims()
const)[ISMRMRD_NDARRAY_MAXDIM];
949 size_t getDataSize()
const;
950 void resize(
const std::vector<size_t> dimvec);
951 size_t getNumberOfElements()
const;
953 const T * getDataPtr()
const;
962 T & operator () (uint16_t x, uint16_t y=0, uint16_t z=0, uint16_t w=0, uint16_t n=0, uint16_t m=0, uint16_t l=0);
MR Acquisition type.
Definition ismrmrd.h:605
Convenience class for flags.
Definition ismrmrd.h:557
MR Image type.
Definition ismrmrd.h:772
N-Dimensional array type.
Definition ismrmrd.h:934
EXPORTISMRMRD void ismrmrd_set_error_handler(ismrmrd_error_handler_t)
Definition ismrmrd.c:750
EXPORTISMRMRD int ismrmrd_init_acquisition_header(ISMRMRD_AcquisitionHeader *hdr)
Definition ismrmrd.c:42
EXPORTISMRMRD const char * ismrmrd_strerror(int code)
Definition ismrmrd.c:754
EXPORTISMRMRD void ismrmrd_directions_to_quaternion(float const read_dir[3], float const phase_dir[3], float const slice_dir[3], float quat[4])
Definition ismrmrd.c:594
EXPORTISMRMRD void ismrmrd_quaternion_to_directions(float const quat[4], float read_dir[3], float phase_dir[3], float slice_dir[3])
Definition ismrmrd.c:668
int ismrmrd_push_error(const char *file, const int line, const char *func, const int code, const char *msg)
Definition ismrmrd.c:689
EXPORTISMRMRD int ismrmrd_sign_of_directions(float const read_dir[3], float const phase_dir[3], float const slice_dir[3])
Definition ismrmrd.c:578
struct ISMRMRD::ISMRMRD_Image ISMRMRD_Image
EXPORTISMRMRD ISMRMRD_DataTypes get_data_type()
Allowed data types for Images and NDArrays.
ISMRMRD_ImageFlags
Definition ismrmrd.h:199
ISMRMRD_ErrorCodes
Definition ismrmrd.h:106
std::string build_exception_string(void)
ISMRMRD C++ Interface.
Definition ismrmrd.cpp:1341
ISMRMRD_AcquisitionFlags
Definition ismrmrd.h:137
ISMRMRD_Constants
Definition ismrmrd.h:92
ISMRMRD_DataTypes
Definition ismrmrd.h:120
@ ISMRMRD_INT
Definition ismrmrd.h:124
@ ISMRMRD_DOUBLE
Definition ismrmrd.h:126
@ ISMRMRD_CXDOUBLE
Definition ismrmrd.h:128
@ ISMRMRD_UINT
Definition ismrmrd.h:123
@ ISMRMRD_CXFLOAT
Definition ismrmrd.h:127
@ ISMRMRD_FLOAT
Definition ismrmrd.h:125
@ ISMRMRD_USHORT
Definition ismrmrd.h:121
@ ISMRMRD_SHORT
Definition ismrmrd.h:122
ISMRMRD_ImageTypes
Definition ismrmrd.h:188
ISMRMRD_AcquisitionHeader head
Definition ismrmrd.h:326
uint16_t average
Definition ismrmrd.h:229
uint16_t repetition
Definition ismrmrd.h:233
uint16_t segment
Definition ismrmrd.h:235
uint16_t kspace_encode_step_1
Definition ismrmrd.h:227
uint16_t kspace_encode_step_2
Definition ismrmrd.h:228
uint16_t phase
Definition ismrmrd.h:232
uint16_t user[ISMRMRD_USER_INTS]
Definition ismrmrd.h:236
uint16_t set
Definition ismrmrd.h:234
uint16_t contrast
Definition ismrmrd.h:231
uint16_t slice
Definition ismrmrd.h:230
size_t dims[ISMRMRD_NDARRAY_MAXDIM]
Definition ismrmrd.h:451
uint16_t version
Definition ismrmrd.h:448
void * data
Definition ismrmrd.h:452
uint16_t ndim
Definition ismrmrd.h:450
uint16_t data_type
Definition ismrmrd.h:449