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 #define FSL_INCONSISTENT 0
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 FslSetIntensityScaling(FSLIO *fslio, float slope, float intercept);
00214 void FslSetIntent(FSLIO *fslio, short intent_code, float p1, float p2, float p3);
00215 short FslGetIntent(FSLIO *fslio, short *intent_code, float *p1, float *p2,
00216 float *p3);
00217
00218
00219 short FslGetStdXform(FSLIO *fslio, mat44 *stdmat);
00220 void FslSetStdXform(FSLIO *fslio, short sform_code, mat44 stdmat);
00221 void FslGetMMCoord(mat44 stdmat, float voxx, float voxy, float voxz,
00222 float *mmx, float *mmy, float *mmz);
00223
00224 void FslGetVoxCoord(mat44 stdmat, float mmx, float mmy, float mmz,
00225 float *voxx, float *voxy, float *voxz);
00226 short FslGetRigidXform(FSLIO *fslio, mat44 *rigidmat);
00227 void FslSetRigidXform(FSLIO *fslio, short qform_code, mat44 rigidmat);
00228 int FslGetLeftRightOrder(FSLIO *fslio);
00229 short FslGetVox2mmMatrix(FSLIO *fslio, mat44 *vox2mm);
00230
00231 int FslGetLeftRightOrder2(int sform_code, mat44 sform44,
00232 int qform_code, mat44 qform44);
00233 short FslGetVox2mmMatrix2(mat44 *vox2mm, int sform_code, mat44 sform44,
00234 int qform_code, mat44 qform44,
00235 float dx, float dy, float dz);
00236
00237
00238
00239 void FslSetAnalyzeSform(FSLIO *fslio, const short *orig,
00240 float dx, float dy, float dz);
00241 void FslGetAnalyzeOrigin(FSLIO *fslio, short orig[5]);
00242
00243
00244
00245 size_t FslReadSliceSeries(FSLIO *fslio, void *buffer,short slice, size_t nvols);
00246 size_t FslReadRowSeries(FSLIO *fslio, void *buffer, short row, short slice, size_t nvols);
00247 size_t FslReadTimeSeries(FSLIO *fslio, void *buffer, short xVox, short yVox, short zVox, size_t nvols);
00248
00249
00250
00251 mat33 mat44_to_mat33(mat44 x);
00252
00253
00254
00255
00256 typedef unsigned char THIS_UINT8;
00257 typedef char THIS_INT8;
00258 typedef unsigned short THIS_UINT16;
00259 typedef short THIS_INT16;
00260 typedef unsigned int THIS_UINT32;
00261 typedef int THIS_INT32;
00262 typedef unsigned long THIS_UINT64;
00263 typedef long THIS_INT64;
00264 typedef float THIS_FLOAT32;
00265 typedef double THIS_FLOAT64;
00266
00267 FSLIO * FslReadHeader(char *fname);
00268 double ****FslGetBufferAsScaledDouble(FSLIO *fslio);
00269 double ***FslGetVolumeAsScaledDouble(FSLIO *fslio, int vol);
00270 int convertBufferToScaledDouble(double *outbuf, void *inbuf, long len, float slope, float inter, int nifti_datatype ) ;
00271 double ****d4matrix(int th, int zh, int yh, int xh);
00272 double ***d3matrix(int zh, int yh, int xh);
00273
00274
00275 #ifdef __cplusplus
00276 }
00277 #endif
00278
00279 #endif
00280
00281
00282