diff --git a/fsl/data/constants.py b/fsl/data/constants.py index 127ec638ef8e85001d430055da38d89e2d9b6baf..8e56778bcaec7b285b261c32a6128c0e580b7609 100644 --- a/fsl/data/constants.py +++ b/fsl/data/constants.py @@ -79,3 +79,61 @@ NIFTI_XFORM_TALAIRACH = 3 NIFTI_XFORM_MNI_152 = 4 """MNI 152 normalized coordinates.""" + + +# NIFTI file intent codes +NIFTI_INTENT_NONE = 0 +NIFTI_INTENT_CORREL = 2 +NIFTI_INTENT_TTEST = 3 +NIFTI_INTENT_FTEST = 4 +NIFTI_INTENT_ZSCORE = 5 +NIFTI_INTENT_CHISQ = 6 +NIFTI_INTENT_BETA = 7 +NIFTI_INTENT_BINOM = 8 +NIFTI_INTENT_GAMMA = 9 +NIFTI_INTENT_POISSON = 10 +NIFTI_INTENT_NORMAL = 11 +NIFTI_INTENT_FTEST_NONC = 12 +NIFTI_INTENT_CHISQ_NONC = 13 +NIFTI_INTENT_LOGISTIC = 14 +NIFTI_INTENT_LAPLACE = 15 +NIFTI_INTENT_UNIFORM = 16 +NIFTI_INTENT_TTEST_NONC = 17 +NIFTI_INTENT_WEIBULL = 18 +NIFTI_INTENT_CHI = 19 +NIFTI_INTENT_INVGAUSS = 20 +NIFTI_INTENT_EXTVAL = 21 +NIFTI_INTENT_PVAL = 22 +NIFTI_INTENT_LOGPVAL = 23 +NIFTI_INTENT_LOG10PVAL = 24 +NIFTI_FIRST_STATCODE = 2 +NIFTI_LAST_STATCODE = 24 +NIFTI_INTENT_ESTIMATE = 1001 +NIFTI_INTENT_LABEL = 1002 +NIFTI_INTENT_NEURONAME = 1003 +NIFTI_INTENT_GENMATRIX = 1004 +NIFTI_INTENT_SYMMATRIX = 1005 +NIFTI_INTENT_DISPVECT = 1006 +NIFTI_INTENT_VECTOR = 1007 +NIFTI_INTENT_POINTSET = 1008 +NIFTI_INTENT_TRIANGLE = 1009 +NIFTI_INTENT_QUATERNION = 1010 +NIFTI_INTENT_DIMLESS = 1011 +NIFTI_INTENT_TIME_SERIES = 2001 +NIFTI_INTENT_NODE_INDEX = 2002 +NIFTI_INTENT_RGB_VECTOR = 2003 +NIFTI_INTENT_RGBA_VECTOR = 2004 +NIFTI_INTENT_SHAPE = 2005 + +# FSL-specific intent codes + +# FNIRT +FSL_FNIRT_DISPLACEMENT_FIELD = 2006 +FSL_CUBIC_SPLINE_COEFFICIENTS = 2007 +FSL_DCT_COEFFICIENTS = 2008 +FSL_QUADRATIC_SPLINE_COEFFICIENTS = 2009 + +# TOPUP +FSL_TOPUP_CUBIC_SPLINE_COEFFICIENTS = 2016 +FSL_TOPUP_QUADRATIC_SPLINE_COEFFICIENTS = 2017 +FSL_TOPUP_FIELD = 2018 diff --git a/fsl/data/image.py b/fsl/data/image.py index 9ad5aa2e285e2ca3e70949e84290877afd1a8567..8128ce808ba8db49777b5a2ee05e98a1ecdab5e1 100644 --- a/fsl/data/image.py +++ b/fsl/data/image.py @@ -73,6 +73,7 @@ class Nifti1(object): ``worldToVoxMat`` A 4*4 array specifying the affine transformation for transforming real world coordinates into voxel coordinates. + ``intent`` The NIFTI intent code specified in the header. ================= ==================================================== @@ -100,6 +101,8 @@ class Nifti1(object): self.header = header self.shape = shape + self.intent = header.get('intent_code', + constants.NIFTI_INTENT_NONE) self.__origShape = origShape self.pixdim = pixdim self.voxToWorldMat = voxToWorldMat @@ -115,11 +118,12 @@ class Nifti1(object): # We have to treat FSL/FNIRT images # specially, as FNIRT clobbers the # sform section of the NIFTI header - # to store other data. The hard coded - # numbers here are the intent codes - # output by FNIRT. + # to store other data. intent = header.get('intent_code', -1) - if intent in (2006, 2007, 2008, 2009): + if intent in (constants.FSL_FNIRT_DISPLACEMENT_FIELD, + constants.FSL_CUBIC_SPLINE_COEFFICIENTS, + constants.FSL_DCT_COEFFICIENTS, + constants.FSL_QUADRATIC_SPLINE_COEFFICIENTS): log.debug('FNIRT output image detected - using qform matrix') voxToWorldMat = np.array(header.get_qform())