9 #ifndef OINTERFILEIO_HH 10 #define OINTERFILEIO_HH 1 13 #include "sScannerManager.hh" 14 #include "vDataFile.hh" 34 #define INTF_BIG_ENDIAN 0 36 #define INTF_LITTLE_ENDIAN 1 47 #define INTF_IMG_STATIC 0 49 #define INTF_IMG_DYNAMIC 1 51 #define INTF_IMG_PET 2 53 #define INTF_IMG_SPECT 3 55 #define INTF_IMG_GATED 4 57 #define INTF_IMG_GSPECT 5 59 #define INTF_IMG_UNKNOWN 6 75 #define INTF_LERP_DISABLED false 77 #define INTF_LERP_ENABLED true 92 #define UINT32_str "unsigned integer" 94 #define INT32_str "signed integer" 96 #define FLT32_str "short float" 97 #define FLT32_str2 "float" 99 #define FLT64_str "long float" 101 #define LONGDOUBLE_str "long long float" 103 #define ASCII_str "ASCII" 115 #define INTF_SUPINE_HEADIN_TRANSAXIAL 0 117 #define INTF_SUPINE_HEADIN_SAGITTAL 1 119 #define INTF_SUPINE_HEADIN_CORONAL 2 121 #define INTF_SUPINE_FEETIN_TRANSAXIAL 3 123 #define INTF_SUPINE_FEETIN_SAGITTAL 4 125 #define INTF_SUPINE_FEETIN_CORONAL 5 127 #define INTF_PRONE_HEADIN_TRANSAXIAL 6 129 #define INTF_PRONE_HEADIN_SAGITTAL 7 131 #define INTF_PRONE_HEADIN_CORONAL 8 133 #define INTF_PRONE_FEETIN_TRANSAXIAL 9 135 #define INTF_PRONE_FEETIN_SAGITTAL 10 137 #define INTF_PRONE_FEETIN_CORONAL 11 151 #define INTF_TRANSVERSE 0 153 #define INTF_CORONAL 1 155 #define INTF_SAGITTAL 2 171 #define INTF_SUPINE 0 187 #define INTF_HEADIN 0 189 #define INTF_FEETIN 1 220 string path_to_image;
223 string originating_system;
229 uint32_t data_offset;
238 uint32_t mtx_size[7];
250 FLTNB slice_thickness_mm ;
253 int nb_bed_positions;
254 FLTNB bed_relative_position;
255 bool bed_position_provided;
257 uint16_t ctr_to_ctr_separation;
260 uint16_t nb_time_frames ;
263 uint16_t nb_resp_gates ;
266 uint16_t nb_card_gates ;
269 uint32_t nb_total_imgs;
272 uint8_t nb_bytes_pixel;
275 int8_t slice_orientation;
283 int8_t pat_orientation;
293 FLTNB rescale_intercept;
296 uint32_t cmtx_size[3];
302 FLTNB cvox_offset[3];
306 bool is_mtx_size_different;
314 FLTNB study_duration;
317 vector<FLTNB> image_duration;
321 vector<FLTNB> image_start_time;
325 uint32_t nb_time_windows;
330 string process_status;
335 uint32_t nb_img_in_frame_groups;
345 vector<FLTNB> frame_group_pause;
349 uint16_t nb_detector_heads;
352 uint32_t nb_energy_windows;
355 uint16_t nb_projections;
359 FLTNB extent_rotation;
362 string direction_rotation;
369 string projection_angles;
379 #include "gVariables.hh" 380 #include "sOutputManager.hh" 381 #include "gOptions.hh" 398 template <
typename T>
int IntfKeyGetValueFromFile(
const string& a_pathToHeader,
const string& a_key, T* ap_return,
int a_nbElts,
int a_mandatoryFlag);
414 template <
typename T>
int IntfKeyGetRecurringValueFromFile(
const string& a_pathToHeader,
const string& a_key, T* ap_return,
int a_nbElts,
int a_mandatoryFlag, uint16_t a_nbOccurrences);
502 FLTNB**** a4p_ImgMatrix,
517 FLTNB* ap_DataMatrix,
518 int64_t a_matrixSize,
535 FLTNB** a2p_ImgMatrix,
576 FLTNB* ap_outImgMatrix,
577 FLTNB* ap_inImgMatrix,
602 FLTNB* ap_outImgMatrix,
603 FLTNB* ap_inImgMatrix,
624 const uint32_t ap_iDimVox[3],
const uint32_t ap_oDimVox[3],
625 const FLTNB ap_iSizeVox[3],
const FLTNB ap_oSizeVox[3],
626 const FLTNB ap_iOffVox[3],
const FLTNB ap_oOffVox[3] );
736 int IntfWriteImage(
const string& a_pathToImg,
FLTNB* ap_outImgMtx, uint32_t a_dim,
int vb);
748 int IntfWriteImage(vector<string> ap_pathToImgs,
FLTNB** a2p_outImgMtx, uint32_t ap_dim[2],
int vb);
760 int IntfWriteImage(vector<string> ap_pathToImgs,
FLTNB**** a4p_outImgMtx, uint32_t ap_dim[4],
int vb);
800 int IntfIsMHD(
string a_pathToFile, vector<string> &ap_lPathToImgs);
1055 template <
class Type>
void SwapBytes(Type *ap_type);
int IntfReadImgDynCoeffFile(const string &a_pathToHeaderFile, FLTNB **a2p_ImgMatrix, oImageDimensionsAndQuantification *ap_ID, int a_nbFbases, int vb, bool a_lerpFlag)
Function dedicated to Interfile image reading for dynamic coefficients images.
int IntfWriteImageFromIntfFields(const string &a_pathToImg, FLTNB *ap_ImgMatrix, Intf_fields Img_fields, int vb)
int IntfCheckConsistency(Intf_fields *ap_IF, oImageDimensionsAndQuantification *ap_ID, int vb, int a_lerpFlag)
Check if the mandatory fields have been initialize in the ap_IF structure, and check consistencies wi...
int IntfKeyGetMaxArrayKey(Intf_key ap_Key)
Return the maximum value from an array key (key value contains brackets '{,,}' )
int IntfReadData(Intf_fields a_IF, ifstream *ap_iFile, FLTNB *ap_outImgMatrix, FLTNB *ap_inImgMatrix, uint32_t *a_offset, int64_t a_nbVox, int vb, T *bytes)
Templated function which read an image voxel by voxel and store it in the ap_outImgMtx image matrix...
int IntfWriteData(ofstream *ap_oFile, FLTNB *ap_outImgMatrix, int a_nbVox, int vb)
Write the content of the image matrix in the file pointed by ofstream.
string IntfKeyGetModalityStr(int a_modalityIdx)
Convert the integer provided in parameter to the string related to the corresponding modality as de...
int ImageInterpolation(FLTNB *ap_iImg, FLTNB *ap_oImg, const uint32_t ap_iDimVox[3], const uint32_t ap_oDimVox[3], const FLTNB ap_iSizeVox[3], const FLTNB ap_oSizeVox[3], const FLTNB ap_iOffVox[3], const FLTNB ap_oOffVox[3])
string IntfKeyGetPatientNameTag()
Recover datafile name(s) stored in sOutputManager in one string.
int IntfReadAdditionalData(const string &a_pathToHeaderFile, FLTNB *ap_DataMatrix, int64_t a_matrixSize, int vb)
Main function dedicated to Interfile 3D additional data loading.
void IntfKeyInitFields(Intf_fields *ap_IF)
Init the file of an Interfile fields structure passed in parameter to their default values...
void SwapBytes(Type *ap_type)
void IntfEraseSpaces(string *input_str)
Erase space, blank characters ((t,r,n)), and '!' before and after the characters in the string passed...
int IntfReadProjectionImage(const string &a_pathToHeaderFile, FLTNB *ap_ImgMatrix, Intf_fields *ap_IF, int vb, bool a_lerpFlag)
Main function which reads a projection Interfile 3D projection image and store its content in the pro...
string IntfKeyGetPixTypeStr()
Return the string corresponding to the nb of bytes in the type FLTNB.
int IntfKeyGetOutputImgDataType(oImageDimensionsAndQuantification *ap_ID)
int IntfKeyGetArrayNbElts(Intf_key ap_Key)
Return the number of elts in an Interfile array Key.
void IntfAllocInterpImg(FLTNB **a2p_img, Intf_fields a_IF)
Allocate memory for an image matrix to recover an image to interpolate.
int IntfIsMHD(string a_pathToFile, vector< string > &ap_lPathToImgs)
Check if the string in argument contains the path to a Interfile metaheader.
int IntfRecoverKey(Intf_key *ap_Key, const string &a_line)
Process the line passed in parameter and write the key information in the ap_Key Intf_key member stru...
void IntfKeySetFieldsOutput(Intf_fields *ap_IF, oImageDimensionsAndQuantification *ap_ID)
Init the keys of the Interfile header of an image to be written on disk.
int IntfGetVoxIdxSHTOrientation(Intf_fields a_IF, int a_voxId)
Compute a voxel index corresponding to the default orientation (Sup/Hin/Trans) from the orientation...
int IntfWriteImgDynCoeffFile(const string &a_pathToImg, FLTNB **a2p_ImgMatrix, oImageDimensionsAndQuantification *ap_ID, int a_nbParImgs, int vb, bool a_mergeDynImgFlag=false)
int IntfCheckDimensionsConsistency(Intf_fields ImgFields1, Intf_fields ImgFields2)
int IntfGetPixelTypeAndReadData(Intf_fields a_IF, ifstream *ap_iFile, FLTNB *ap_outImgMatrix, FLTNB *ap_inImgMatrix, uint32_t *a_offset, int64_t a_nbVox, int vb)
The purpose of this function is to call the templated ReadData() function with the data type correspo...
int IntfWriteHeaderMainData(const string &a_path, const Intf_fields &ap_IntfF, int vb)
int IntfKeyGetRecurringValueFromFile(const string &a_pathToHeader, const string &a_key, T *ap_return, int a_nbElts, int a_mandatoryFlag, uint16_t a_nbOccurrences)
void GetUserEndianness()
Check user/host computer endianness and write it to the global variable User_Endianness.
int IntfReadHeader(const string &a_pathToHeaderFile, Intf_fields *ap_IntfFields, int vb)
Read an Interfile header.
int IntfWriteImgFile(const string &a_pathToImg, FLTNB *ap_ImgMatrix, const Intf_fields &ap_IntfF, int vb)
Main function dedicated to Interfile 3D image writing. Recover image information from a provided In...
FLTNB * IntfLoadImageFromScratch(const string &a_pathToHeaderFile, Intf_fields *ap_ImgFields, int vb)
int IntfKeyGetValueFromFile(const string &a_pathToHeader, const string &a_key, T *ap_return, int a_nbElts, int a_mandatoryFlag)
Look for "a_nbElts" elts in the "a_pathToHeader" interfile header matching the "a_keyword" key passed...
void IntfKeyPrintFields(Intf_fields a_IF)
Print all the keys of the Intf_fields structure passed in parameter, as well as their values for debu...
int IntfWriteWholeDynBasisCoeffImgFile(const string &a_pathToImg, FLTNB ****a4p_ImgMatrix, oImageDimensionsAndQuantification *ap_ID, int vb)
Main function dedicated to Interfile 6D (dynamic dims + 3D ) image writing of basis function coeffici...
void IntfToLowerCase(string *ap_str)
Set all characters of the string passed in parameter to lower case.
int IntfWriteHeaderImgData(ofstream &ap_ofile, const Intf_fields &ap_IntfF, int vb)
int IntfWriteProjFile(const string &a_pathToImg, FLTNB **a2p_ImgMatrix, oImageDimensionsAndQuantification *ap_ID, Intf_fields a_Imgfields, int vb)
Function dedicated to Interfile image writing for projected data.
Interfile key elements. This structure is used to recover and process the elements of an Interfile ...
int IntfWriteContentOfInputDataHeaderIntoInterfileHeader(ofstream &ap_ofile, int vb)
int IntfKeyIsArray(Intf_key ap_Key)
Check if the key passed in parameter is an array (contains brackets '{' and '}' ) ...
int IntfKeyGetPatOrientation(Intf_fields ap_IF)
Get the complete patient orientation from an Intf_fields structure according to the values of keys 's...
int IntfWriteMHD(const string &a_pathToMhd, const vector< string > &ap_lPathToImgs, Intf_fields a_IntfF, oImageDimensionsAndQuantification *ap_ID, int vb)
Write an Interfile meta header at the path provided in parameter, using the field stack provided in p...
Interfile fields. This structure contains all the Interfile keys currently managed by CASToR Decl...
int IntfWriteImage(const string &a_pathToImg, FLTNB *ap_outImgMtx, uint32_t a_dim, int vb)
Write Interfile raw data whose path is provided in parameter, using image matrix provided in paramete...
int IntfKeyGetInputImgDataType(const string &a_str)
Get the image data type corresponding to the image metadata passed in parameter.
int IntfKeyGetArrayElts(Intf_key a_Key, T *ap_return)
Get all the elements in an array key in a templated array passed in parameter. It assumes the retur...
This class is designed to manage all dimensions and quantification related stuff. ...
int IntfCheckKeyMatch(Intf_key a_Key, const string &a_field)
Check if the key matches the string passed in parameter.
int IntfReadImage(const string &a_pathToHeaderFile, FLTNB *ap_ImgMatrix, oImageDimensionsAndQuantification *ap_ID, int vb, bool a_lerpFlag)
Main function dedicated to Interfile 3D image loading.
string IntfKeyGetEndianStr(int a_val)
return the endian string corresponding to the value passed in parameter (see module INTF_ENDIANNESS)...
Declaration of class oImageDimensionsAndQuantification.