00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if !defined(__FSLIO_H)
00025 #define __FSLIO_H
00026
00027 #include <stdio.h>
00028 #include <nifti1_io.h>
00029 #include <znzlib.h>
00030 #include "dbh.h"
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00104 #define FSL_TYPE_ANALYZE 0
00105 #define FSL_TYPE_NIFTI 1
00106 #define FSL_TYPE_NIFTI_PAIR 2
00107 #define FSL_TYPE_MINC 4
00108 #define FSL_TYPE_ANALYZE_GZ 100
00109 #define FSL_TYPE_NIFTI_GZ 101
00110 #define FSL_TYPE_NIFTI_PAIR_GZ 102
00111 #define FSL_TYPE_MINC_GZ 104
00112
00113
00114 #define FSL_RADIOLOGICAL -1
00115 #define FSL_NEUROLOGICAL 1
00116
00117
00123 typedef struct
00124 {
00125 znzFile fileptr;
00126 nifti_image *niftiptr;
00127 #ifdef USE_MINC
00128 minc_image *mincptr;
00129 #else
00130 void *mincptr;
00131 #endif
00132 int file_mode;
00133 int write_mode;
00134 int written_hdr;
00135 } FSLIO;
00136
00137
00138
00139
00140 FSLIO *FslOpen(const char *filename, const char *opts);
00141 FSLIO *FslXOpen(const char *filename, const char *opts, int filetype);
00142 int FslSeekVolume(FSLIO *fslio, size_t vols);
00143 int FslClose(FSLIO *fslio);
00144
00145
00146
00147 void* FslReadAllVolumes(FSLIO* fslio, char* filename);
00148 void FslWriteAllVolumes(FSLIO *fslio, const void *buffer);
00149
00150 size_t FslReadVolumes(FSLIO *fslio, void *buffer, size_t nvols);
00151 size_t FslWriteVolumes(FSLIO *fslio, const void *buffer, size_t nvols);
00152
00153 void FslWriteHeader(FSLIO *fslio);
00154
00155
00156
00157 int FslFileExists(const char *filename);
00158 char *FslMakeBaseName(const char *fname);
00159 int FslCheckForMultipleFileNames(const char* filename);
00160 int FslGetEnvOutputType(void);
00161
00162 void FslSetIgnoreMFQ(int flag);
00163 int FslGetIgnoreMFQ(void);
00164 void FslSetOverrideOutputType(int type);
00165 int FslGetOverrideOutputType(void);
00166
00167
00168 int FslGetFileType(const FSLIO *fslio);
00169 void FslSetFileType(FSLIO *fslio, int filetype);
00170 int FslIsSingleFileType(int filetype);
00171 int FslIsCompressedFileType(int filetype);
00172 int FslBaseFileType(int filetype);
00173 char* FslFileTypeString(int filetype);
00174
00175 int FslGetWriteMode(const FSLIO *fslio);
00176 void FslSetWriteMode(FSLIO *fslio, int mode);
00177
00178 void AvwSwapHeader(struct dsr *avw);
00179 int FslReadRawHeader(void *buffer, const char* filename);
00180
00181
00182
00183
00184 FSLIO *FslInit(void);
00185 void FslInitHeader(FSLIO *fslio, short t,
00186 size_t x, size_t y, size_t z, size_t v,
00187 float vx, float vy, float vz, float tr,
00188 size_t dim,
00189 const char* units);
00190 void FslSetInit(FSLIO* fslio);
00191 void FslCloneHeader(FSLIO *dest, const FSLIO *src);
00192
00193
00194
00195
00196 size_t FslGetVolSize(FSLIO *fslio);
00197
00198 void FslSetDim(FSLIO *fslio, short x, short y, short z, short v);
00199 void FslGetDim(FSLIO *fslio, short *x, short *y, short *z, short *v);
00200 void FslSetDimensionality(FSLIO *fslio, size_t dim);
00201 void FslGetDimensionality(FSLIO *fslio, size_t *dim);
00202 void FslSetVoxDim(FSLIO *fslio, float x, float y, float z, float tr);
00203 void FslGetVoxDim(FSLIO *fslio, float *x, float *y, float *z, float *tr);
00204 void FslGetCalMinMax(FSLIO *fslio, float *min, float *max);
00205 void FslSetCalMinMax(FSLIO *fslio, float min, float max);
00206 void FslGetAuxFile(FSLIO *fslio,char *aux_file);
00207 void FslSetAuxFile(FSLIO *fslio,const char *aux_file);
00208 void FslSetTimeUnits(FSLIO *fslio, const char *units);
00209 void FslGetTimeUnits(FSLIO *fslio, char *units);
00210 void FslSetDataType(FSLIO *fslio, short t);
00211 size_t FslGetDataType(FSLIO *fslio, short *t);
00212 int FslGetIntensityScaling(FSLIO *fslio, float *slope, float *intercept);
00213 void FslSetIntent(FSLIO *fslio, short intent_code, float p1, float p2, float p3);
00214 short FslGetIntent(FSLIO *fslio, short *intent_code, float *p1, float *p2,
00215 float *p3);
00216
00217
00218 short FslGetStdXform(FSLIO *fslio, mat44 *stdmat);
00219 void FslSetStdXform(FSLIO *fslio, short sform_code, mat44 stdmat);
00220 void FslGetMMCoord(mat44 stdmat, float voxx, float voxy, float voxz,
00221 float *mmx, float *mmy, float *mmz);
00222
00223 void FslGetVoxCoord(mat44 stdmat, float mmx, float mmy, float mmz,
00224 float *voxx, float *voxy, float *voxz);
00225 short FslGetRigidXform(FSLIO *fslio, mat44 *rigidmat);
00226 void FslSetRigidXform(FSLIO *fslio, short qform_code, mat44 rigidmat);
00227 int FslGetLeftRightOrder(FSLIO *fslio);
00228
00229
00230
00231 void FslSetAnalyzeSform(FSLIO *fslio, const short *orig,
00232 float dx, float dy, float dz);
00233 void FslGetAnalyzeOrigin(FSLIO *fslio, short orig[5]);
00234
00235
00236
00237 size_t FslReadSliceSeries(FSLIO *fslio, void *buffer,short slice, size_t nvols);
00238 size_t FslReadRowSeries(FSLIO *fslio, void *buffer, short row, short slice, size_t nvols);
00239 size_t FslReadTimeSeries(FSLIO *fslio, void *buffer, short xVox, short yVox, short zVox, size_t nvols);
00240
00241
00242
00243 mat33 mat44_to_mat33(mat44 x);
00244
00245
00246
00247
00248 typedef unsigned char THIS_UINT8;
00249 typedef char THIS_INT8;
00250 typedef unsigned short THIS_UINT16;
00251 typedef short THIS_INT16;
00252 typedef unsigned int THIS_UINT32;
00253 typedef int THIS_INT32;
00254 typedef unsigned long THIS_UINT64;
00255 typedef long THIS_INT64;
00256 typedef float THIS_FLOAT32;
00257 typedef double THIS_FLOAT64;
00258
00259 FSLIO * FslReadHeader(char *fname);
00260 double ****FslGetBufferAsScaledDouble(FSLIO *fslio);
00261 double ***FslGetVolumeAsScaledDouble(FSLIO *fslio, int vol);
00262 int convertBufferToScaledDouble(double *outbuf, void *inbuf, long len, float slope, float inter, int nifti_datatype ) ;
00263 double ****d4matrix(int th, int zh, int yh, int xh);
00264 double ***d3matrix(int zh, int yh, int xh);
00265
00266
00267 #ifdef __cplusplus
00268 }
00269 #endif
00270
00271 #endif
00272
00273
00274