26 typedef __int16 int16_t;
27 typedef unsigned __int16 uint16_t;
28 typedef __int32 int32_t;
29 typedef unsigned __int32 uint32_t;
30 typedef __int64 int64_t;
31 typedef unsigned __int64 uint64_t;
41 typedef std::complex<float> complex_float_t;
42 typedef std::complex<double> complex_double_t;
45 typedef struct complex_float_t{
49 typedef struct complex_double_t{
55 typedef float complex complex_float_t;
56 typedef double complex complex_double_t;
62 #if defined (_MSC_VER) && (_MSC_VER < 1800)
77 #include "ismrmrd/export.h"
90 ISMRMRD_USER_INTS = 8,
91 ISMRMRD_USER_FLOATS = 8,
92 ISMRMRD_PHYS_STAMPS = 3,
93 ISMRMRD_CHANNEL_MASKS = 16,
94 ISMRMRD_NDARRAY_MAXDIM = 7,
95 ISMRMRD_POSITION_LENGTH = 3,
96 ISMRMRD_DIRECTION_LENGTH = 3
104 ISMRMRD_BEGINERROR=-1,
109 ISMRMRD_RUNTIMEERROR,
129 EXPORTISMRMRD
size_t ismrmrd_sizeof_data_type(
int data_type);
135 ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP1 = 1,
136 ISMRMRD_ACQ_LAST_IN_ENCODE_STEP1 = 2,
137 ISMRMRD_ACQ_FIRST_IN_ENCODE_STEP2 = 3,
138 ISMRMRD_ACQ_LAST_IN_ENCODE_STEP2 = 4,
139 ISMRMRD_ACQ_FIRST_IN_AVERAGE = 5,
140 ISMRMRD_ACQ_LAST_IN_AVERAGE = 6,
141 ISMRMRD_ACQ_FIRST_IN_SLICE = 7,
142 ISMRMRD_ACQ_LAST_IN_SLICE = 8,
143 ISMRMRD_ACQ_FIRST_IN_CONTRAST = 9,
144 ISMRMRD_ACQ_LAST_IN_CONTRAST = 10,
145 ISMRMRD_ACQ_FIRST_IN_PHASE = 11,
146 ISMRMRD_ACQ_LAST_IN_PHASE = 12,
147 ISMRMRD_ACQ_FIRST_IN_REPETITION = 13,
148 ISMRMRD_ACQ_LAST_IN_REPETITION = 14,
149 ISMRMRD_ACQ_FIRST_IN_SET = 15,
150 ISMRMRD_ACQ_LAST_IN_SET = 16,
151 ISMRMRD_ACQ_FIRST_IN_SEGMENT = 17,
152 ISMRMRD_ACQ_LAST_IN_SEGMENT = 18,
153 ISMRMRD_ACQ_IS_NOISE_MEASUREMENT = 19,
154 ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION = 20,
155 ISMRMRD_ACQ_IS_PARALLEL_CALIBRATION_AND_IMAGING = 21,
156 ISMRMRD_ACQ_IS_REVERSE = 22,
157 ISMRMRD_ACQ_IS_NAVIGATION_DATA = 23,
158 ISMRMRD_ACQ_IS_PHASECORR_DATA = 24,
159 ISMRMRD_ACQ_LAST_IN_MEASUREMENT = 25,
160 ISMRMRD_ACQ_IS_HPFEEDBACK_DATA = 26,
161 ISMRMRD_ACQ_IS_DUMMYSCAN_DATA = 27,
162 ISMRMRD_ACQ_IS_RTFEEDBACK_DATA = 28,
163 ISMRMRD_ACQ_IS_SURFACECOILCORRECTIONSCAN_DATA = 29,
164 ISMRMRD_ACQ_IS_PHASE_STABILIZATION_REFERENCE = 30,
165 ISMRMRD_ACQ_IS_PHASE_STABILIZATION = 31,
168 ISMRMRD_ACQ_COMPRESSION1 = 53,
169 ISMRMRD_ACQ_COMPRESSION2 = 54,
170 ISMRMRD_ACQ_COMPRESSION3 = 55,
171 ISMRMRD_ACQ_COMPRESSION4 = 56,
172 ISMRMRD_ACQ_USER1 = 57,
173 ISMRMRD_ACQ_USER2 = 58,
174 ISMRMRD_ACQ_USER3 = 59,
175 ISMRMRD_ACQ_USER4 = 60,
176 ISMRMRD_ACQ_USER5 = 61,
177 ISMRMRD_ACQ_USER6 = 62,
178 ISMRMRD_ACQ_USER7 = 63,
179 ISMRMRD_ACQ_USER8 = 64
186 ISMRMRD_IMTYPE_MAGNITUDE = 1,
187 ISMRMRD_IMTYPE_PHASE = 2,
188 ISMRMRD_IMTYPE_REAL = 3,
189 ISMRMRD_IMTYPE_IMAG = 4,
190 ISMRMRD_IMTYPE_COMPLEX = 5
197 ISMRMRD_IMAGE_IS_NAVIGATION_DATA = 1,
198 ISMRMRD_IMAGE_USER1 = 57,
199 ISMRMRD_IMAGE_USER2 = 58,
200 ISMRMRD_IMAGE_USER3 = 59,
201 ISMRMRD_IMAGE_USER4 = 60,
202 ISMRMRD_IMAGE_USER5 = 61,
203 ISMRMRD_IMAGE_USER6 = 62,
204 ISMRMRD_IMAGE_USER7 = 63,
205 ISMRMRD_IMAGE_USER8 = 64
221 uint16_t
user[ISMRMRD_USER_INTS];
222 } ISMRMRD_EncodingCounters;
252 } ISMRMRD_AcquisitionHeader;
265 complex_float_t *data;
266 } ISMRMRD_Acquisition;
271 EXPORTISMRMRD ISMRMRD_Acquisition * ismrmrd_create_acquisition();
272 EXPORTISMRMRD
int ismrmrd_free_acquisition(ISMRMRD_Acquisition *acq);
273 EXPORTISMRMRD
int ismrmrd_init_acquisition(ISMRMRD_Acquisition *acq);
274 EXPORTISMRMRD
int ismrmrd_cleanup_acquisition(ISMRMRD_Acquisition *acq);
275 EXPORTISMRMRD
int ismrmrd_copy_acquisition(ISMRMRD_Acquisition *acqdest,
const ISMRMRD_Acquisition *acqsource);
276 EXPORTISMRMRD
int ismrmrd_make_consistent_acquisition(ISMRMRD_Acquisition *acq);
277 EXPORTISMRMRD
size_t ismrmrd_size_of_acquisition_traj(
const ISMRMRD_Acquisition *acq);
278 EXPORTISMRMRD
size_t ismrmrd_size_of_acquisition_data(
const ISMRMRD_Acquisition *acq);
315 } ISMRMRD_ImageHeader;
318 EXPORTISMRMRD
int ismrmrd_init_image_header(ISMRMRD_ImageHeader *hdr);
326 char *attribute_string;
339 EXPORTISMRMRD
int ismrmrd_make_consistent_image(
ISMRMRD_Image *im);
340 EXPORTISMRMRD
size_t ismrmrd_size_of_image_attribute_string(
const ISMRMRD_Image *im);
341 EXPORTISMRMRD
size_t ismrmrd_size_of_image_data(
const ISMRMRD_Image *im);
355 size_t dims[ISMRMRD_NDARRAY_MAXDIM];
362 EXPORTISMRMRD ISMRMRD_NDArray * ismrmrd_create_ndarray();
363 EXPORTISMRMRD
int ismrmrd_free_ndarray(ISMRMRD_NDArray *arr);
364 EXPORTISMRMRD
int ismrmrd_init_ndarray(ISMRMRD_NDArray *arr);
365 EXPORTISMRMRD
int ismrmrd_cleanup_ndarray(ISMRMRD_NDArray *arr);
366 EXPORTISMRMRD
int ismrmrd_copy_ndarray(ISMRMRD_NDArray *arrdest,
const ISMRMRD_NDArray *arrsource);
367 EXPORTISMRMRD
int ismrmrd_make_consistent_ndarray(ISMRMRD_NDArray *arr);
368 EXPORTISMRMRD
size_t ismrmrd_size_of_ndarray_data(
const ISMRMRD_NDArray *arr);
377 EXPORTISMRMRD
bool ismrmrd_is_flag_set(
const uint64_t flags,
const uint64_t val);
378 EXPORTISMRMRD
int ismrmrd_set_flag(uint64_t *flags,
const uint64_t val);
379 EXPORTISMRMRD
int ismrmrd_set_flags(uint64_t *flags,
const uint64_t val);
380 EXPORTISMRMRD
int ismrmrd_clear_flag(uint64_t *flags,
const uint64_t val);
381 EXPORTISMRMRD
int ismrmrd_clear_all_flags(uint64_t *flags);
390 EXPORTISMRMRD
bool ismrmrd_is_channel_on(
const uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
391 EXPORTISMRMRD
int ismrmrd_set_channel_on(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
392 EXPORTISMRMRD
int ismrmrd_set_channel_off(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS],
const uint16_t chan);
393 EXPORTISMRMRD
int ismrmrd_set_all_channels_off(uint64_t channel_mask[ISMRMRD_CHANNEL_MASKS]);
402 typedef void (*ismrmrd_error_handler_t)(
const char *file,
int line,
403 const char *
function,
int code,
const char *msg);
404 #define ISMRMRD_PUSH_ERR(code, msg) ismrmrd_push_error(__FILE__, __LINE__, \
405 __func__, (code), (msg))
407 const int code,
const char *msg);
416 bool ismrmrd_pop_error(
char **file,
int *line,
char **func,
417 int *code,
char **msg);
468 bitmask_ = (bitmask_ << (b-1));
472 bool isSet(
const uint64_t& m)
const {
473 return ((m & bitmask_)>0);
493 void clearAllFlags();
496 bool isChannelActive(uint16_t channel_id)
const;
497 void setChannelActive(uint16_t channel_id);
498 void setChannelNotActive(uint16_t channel_id);
499 void setAllChannelsNotActive();
509 Acquisition(uint16_t num_samples, uint16_t active_channels=1, uint16_t trajectory_dimensions=0);
515 const uint16_t &version();
516 const uint64_t &flags();
517 uint32_t &measurement_uid();
518 uint32_t &scan_counter();
519 uint32_t &acquisition_time_stamp();
520 uint32_t (&physiology_time_stamp())[ISMRMRD_PHYS_STAMPS];
521 const uint16_t &number_of_samples();
522 uint16_t &available_channels();
523 const uint16_t &active_channels();
524 const uint64_t (&channel_mask())[ISMRMRD_CHANNEL_MASKS];
525 uint16_t &discard_pre();
526 uint16_t &discard_post();
527 uint16_t ¢er_sample();
528 uint16_t &encoding_space_ref();
529 const uint16_t &trajectory_dimensions();
530 float &sample_time_us();
531 float (&position())[3];
532 float (&read_dir())[3];
533 float (&phase_dir())[3];
534 float (&slice_dir())[3];
535 float (&patient_table_position())[3];
537 int32_t (&user_int())[ISMRMRD_USER_INTS];
538 float (&user_float())[ISMRMRD_USER_FLOATS];
541 void resize(uint16_t num_samples, uint16_t active_channels=1, uint16_t trajectory_dimensions=0);
542 size_t getNumberOfDataElements()
const;
543 size_t getNumberOfTrajElements()
const;
544 size_t getDataSize()
const;
545 size_t getTrajSize()
const;
554 const complex_float_t * getDataPtr()
const;
555 complex_float_t * getDataPtr();
560 complex_float_t & data(uint16_t sample, uint16_t channel);
565 void setData(complex_float_t * data);
570 complex_float_t * data_begin()
const;
575 complex_float_t * data_end()
const;
580 const float * getTrajPtr()
const;
581 float * getTrajPtr();
586 float & traj(uint16_t dimension, uint16_t sample);
591 void setTraj(
float * traj);
596 float * traj_begin()
const;
601 float * traj_end()
const;
604 bool isFlagSet(
const uint64_t val);
605 void setFlag(
const uint64_t val);
606 void clearFlag(
const uint64_t val);
607 void clearAllFlags();
609 bool isFlagSet(
const FlagBit &val) {
return isFlagSet(val.bitmask_); }
610 void setFlag(
const FlagBit &val) { setFlag(val.bitmask_); }
611 void clearFlag(
const FlagBit &val) { clearFlag(val.bitmask_); }
614 bool isChannelActive(uint16_t channel_id);
615 void setChannelActive(uint16_t channel_id);
616 void setChannelNotActive(uint16_t channel_id);
617 void setAllChannelsNotActive();
630 bool isFlagSet(
const uint64_t val);
631 void setFlag(
const uint64_t val);
632 void clearFlag(
const uint64_t val);
633 void clearAllFlags();
638 template <
typename T>
class EXPORTISMRMRD
Image {
642 Image(uint16_t matrix_size_x = 0, uint16_t matrix_size_y = 1,
643 uint16_t matrix_size_z = 1, uint16_t channels = 1);
649 void resize(uint16_t matrix_size_x, uint16_t matrix_size_y, uint16_t matrix_size_z, uint16_t channels);
650 uint16_t getMatrixSizeX()
const;
651 void setMatrixSizeX(uint16_t matrix_size_x);
652 uint16_t getMatrixSizeY()
const;
653 void setMatrixSizeY(uint16_t matrix_size_y);
654 uint16_t getMatrixSizeZ()
const;
655 void setMatrixSizeZ(uint16_t matrix_size_z);
656 uint16_t getNumberOfChannels()
const;
657 void setNumberOfChannels(uint16_t channels);
660 void setFieldOfView(
float fov_x,
float fov_y,
float fov_z);
661 float getFieldOfViewX()
const;
662 void setFieldOfViewX(
float f);
663 float getFieldOfViewY()
const;
664 void setFieldOfViewY(
float f);
665 float getFieldOfViewZ()
const;
666 void setFieldOfViewZ(
float f);
669 void setPosition(
float x,
float y,
float z);
670 float getPositionX()
const;
671 void setPositionX(
float x);
672 float getPositionY()
const;
673 void setPositionY(
float y);
674 float getPositionZ()
const;
675 void setPositionZ(
float z);
677 void setReadDirection(
float x,
float y,
float z);
678 float getReadDirectionX()
const;
679 void setReadDirectionX(
float x);
680 float getReadDirectionY()
const;
681 void setReadDirectionY(
float y);
682 float getReadDirectionZ()
const;
683 void setReadDirectionZ(
float z);
685 void setPhaseDirection(
float x,
float y,
float z);
686 float getPhaseDirectionX()
const;
687 void setPhaseDirectionX(
float x);
688 float getPhaseDirectionY()
const;
689 void setPhaseDirectionY(
float y);
690 float getPhaseDirectionZ()
const;
691 void setPhaseDirectionZ(
float z);
693 void setSliceDirection(
float x,
float y,
float z);
694 float getSliceDirectionX()
const;
695 void setSliceDirectionX(
float x);
696 float getSliceDirectionY()
const;
697 void setSliceDirectionY(
float y);
698 float getSliceDirectionZ()
const;
699 void setSliceDirectionZ(
float z);
701 void setPatientTablePosition(
float x,
float y,
float z);
702 float getPatientTablePositionX()
const;
703 void setPatientTablePositionX(
float x);
704 float getPatientTablePositionY()
const;
705 void setPatientTablePositionY(
float y);
706 float getPatientTablePositionZ()
const;
707 void setPatientTablePositionZ(
float z);
711 uint16_t getVersion()
const;
715 uint32_t getMeasurementUid()
const;
716 void setMeasurementUid(uint32_t measurement_uid);
718 uint16_t getAverage()
const;
719 void setAverage(uint16_t average);
721 uint16_t getSlice()
const;
722 void setSlice(uint16_t slice);
724 uint16_t getContrast()
const;
725 void setContrast(uint16_t contrast);
727 uint16_t getPhase()
const;
728 void setPhase(uint16_t phase);
730 uint16_t getRepetition()
const;
731 void setRepetition(uint16_t repetition);
733 uint16_t getSet()
const;
734 void setSet(uint16_t set);
736 uint32_t getAcquisitionTimeStamp()
const;
737 void setAcquisitionTimeStamp(uint32_t acquisition_time_stamp);
739 uint32_t getPhysiologyTimeStamp(
unsigned int stamp_id)
const;
740 void setPhysiologyTimeStamp(
unsigned int stamp_id, uint32_t value);
742 uint16_t getImageType()
const;
743 void setImageType(uint16_t image_type);
745 uint16_t getImageIndex()
const;
746 void setImageIndex(uint16_t image_index);
748 uint16_t getImageSeriesIndex()
const;
749 void setImageSeriesIndex(uint16_t image_series_index);
752 float getUserFloat(
unsigned int index)
const;
753 void setUserFloat(
unsigned int index,
float value);
755 int32_t getUserInt(
unsigned int index)
const;
756 void setUserInt(
unsigned int index, int32_t value);
759 uint64_t getFlags()
const;
760 void setFlags(
const uint64_t flags);
761 bool isFlagSet(
const uint64_t val)
const;
762 void setFlag(
const uint64_t val);
763 void clearFlag(
const uint64_t val);
764 void clearAllFlags();
772 void getAttributeString(std::string &attr)
const;
773 const char *getAttributeString()
const;
774 void setAttributeString(
const std::string &attr);
775 void setAttributeString(
const char *attr);
776 size_t getAttributeStringLength()
const;
780 const T * getDataPtr()
const;
782 size_t getNumberOfDataElements()
const;
784 size_t getDataSize()
const;
793 T & operator () (uint16_t x, uint16_t y=0, uint16_t z=0 , uint16_t channel =0);
800 template <
typename T>
class EXPORTISMRMRD
NDArray {
805 NDArray(
const std::vector<size_t> dimvec);
811 uint16_t getVersion()
const;
813 uint16_t getNDim()
const;
814 const size_t (&getDims())[ISMRMRD_NDARRAY_MAXDIM];
815 size_t getDataSize()
const;
816 void resize(
const std::vector<size_t> dimvec);
817 size_t getNumberOfElements()
const;
819 const T * getDataPtr()
const;
828 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:504
Definition: dataset.h:161
Convenience class for flags.
Definition: ismrmrd.h:461
MR Image type.
Definition: ismrmrd.h:638
N-Dimensional array type.
Definition: ismrmrd.h:800
EXPORTISMRMRD char * ismrmrd_strerror(int code)
Definition: ismrmrd.c:749
EXPORTISMRMRD void ismrmrd_set_error_handler(ismrmrd_error_handler_t)
Definition: ismrmrd.c:745
EXPORTISMRMRD int ismrmrd_init_acquisition_header(ISMRMRD_AcquisitionHeader *hdr)
Definition: ismrmrd.c:42
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:589
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:663
int ismrmrd_push_error(const char *file, const int line, const char *func, const int code, const char *msg)
Definition: ismrmrd.c:684
EXPORTISMRMRD int ismrmrd_sign_of_directions(float const read_dir[3], float const phase_dir[3], float const slice_dir[3])
Definition: ismrmrd.c:573
struct ISMRMRD::ISMRMRD_Image ISMRMRD_Image
EXPORTISMRMRD ISMRMRD_DataTypes get_data_type()
Allowed data types for Images and NDArrays.
ISMRMRD_ImageFlags
Definition: ismrmrd.h:196
ISMRMRD_ErrorCodes
Definition: ismrmrd.h:103
std::string build_exception_string(void)
ISMRMRD C++ Interface.
Definition: ismrmrd.cpp:1240
ISMRMRD_AcquisitionFlags
Definition: ismrmrd.h:134
ISMRMRD_Constants
Definition: ismrmrd.h:89
ISMRMRD_DataTypes
Definition: ismrmrd.h:117
@ ISMRMRD_INT
Definition: ismrmrd.h:121
@ ISMRMRD_DOUBLE
Definition: ismrmrd.h:123
@ ISMRMRD_CXDOUBLE
Definition: ismrmrd.h:125
@ ISMRMRD_UINT
Definition: ismrmrd.h:120
@ ISMRMRD_CXFLOAT
Definition: ismrmrd.h:124
@ ISMRMRD_FLOAT
Definition: ismrmrd.h:122
@ ISMRMRD_USHORT
Definition: ismrmrd.h:118
@ ISMRMRD_SHORT
Definition: ismrmrd.h:119
ISMRMRD_ImageTypes
Definition: ismrmrd.h:185
Definition: ismrmrd.h:262
ISMRMRD_AcquisitionHeader head
Definition: ismrmrd.h:263
Definition: ismrmrd.h:211
uint16_t average
Definition: ismrmrd.h:214
uint16_t repetition
Definition: ismrmrd.h:218
uint16_t segment
Definition: ismrmrd.h:220
uint16_t kspace_encode_step_1
Definition: ismrmrd.h:212
uint16_t kspace_encode_step_2
Definition: ismrmrd.h:213
uint16_t phase
Definition: ismrmrd.h:217
uint16_t user[ISMRMRD_USER_INTS]
Definition: ismrmrd.h:221
uint16_t set
Definition: ismrmrd.h:219
uint16_t contrast
Definition: ismrmrd.h:216
uint16_t slice
Definition: ismrmrd.h:215
Definition: ismrmrd.h:324
Definition: ismrmrd.h:351
size_t dims[ISMRMRD_NDARRAY_MAXDIM]
Definition: ismrmrd.h:355
uint16_t version
Definition: ismrmrd.h:352
void * data
Definition: ismrmrd.h:356
uint16_t ndim
Definition: ismrmrd.h:354
uint16_t data_type
Definition: ismrmrd.h:353