#------------------------------------------------------------------------------
# $File: nifty,v 1.1 2022/02/14 16:51:15 christos Exp $
# file(1) magic for the NIfTI file format

# Type: NIfTI, Neuroimaging file format
# URL:  https://nifti.nimh.nih.gov/
# From: Yann Leprince <[email protected]>, 2022

344     string          n+1\0           NIfTI-1 neuroimaging data,
!:mime  image/x.nifti
!:ext   nii
>0      use             nifti1
344     string          ni1\0           NIfTI-1 neuroimaging data header,
!:mime  image/x.nifti
!:ext   hdr
>0      use             nifti1

4       string          n+2\0\r\n\032\n NIfTI-2 neuroimaging data,
!:mime  image/x.nifti
!:ext   nii
>0      use             nifti2
4       string          ni2\0\r\n\032\n NIfTI-2 neuroimaging data header,
!:mime  image/x.nifti
!:ext   hdr
>0      use             nifti2

# Main subroutine for NIfTI-1
0       name            nifti1
>0      clear           x
>0      lelong          =348            little endian
>>70    use             nifti-datatype-le
>>112   lefloat !0              with scaling
>>0     use             nifti1-dim-le
>>252   leshort >0              \b, with qform
>>>252  use             xform-code-nifti1-le
>>254   leshort >0              \b, with sform
>>>254  use             xform-code-nifti1-le
>>136   string          >\0             \b, description: %s
>0      belong          =348            big endian
>>70    use             \^nifti-datatype-le
>>112   befloat !0              with scaling
>>0     use             \^nifti1-dim-le
>>252   beshort >0              \b, with qform
>>>252  use             \^xform-code-nifti1-le
>>254   beshort >0              \b, with sform
>>>254  use             \^xform-code-nifti1-le
>>136   string          >\0             \b, description: %s
>0      default x
>>0     long            x               invalid sizeof_hdr=%d

# Main subroutine for NIfTI-2
0       name            nifti2
>0      clear           x
>0      lelong          =540            little endian
>>12    use             nifti-datatype-le
>>176   lefloat !0              with scaling
>>0     use             nifti2-dim-le
>>344   lelong          >0              \b, with qform
>>>344  use             xform-code-nifti2-le
>>348   lelong          >0              \b, with sform
>>>348  use             xform-code-nifti2-le
>>240   string          >\0             \b, description: %s
>0      belong          =540            big endian
>>12    use             \^nifti-datatype-le
>>176   befloat !0              with scaling
>>0     use             \^nifti2-dim-le
>>344   lelong          >0              \b, with qform
>>>344  use             \^xform-code-nifti2-le
>>348   lelong          >0              \b, with sform
>>>348  use             \^xform-code-nifti2-le
>>240   string          >\0             \b, description: %s
>0      default x
>>0     long            x               invalid sizeof_hdr=%d


# Other subroutines for details of NIfTI files

0       name            nifti-datatype-le
>0      clear           x
>0      leshort =1              \b, binary datatype
>0      leshort =2              \b, uint8 datatype
>0      leshort =4              \b, int16 datatype
>0      leshort =8              \b, int32 datatype
>0      leshort =16             \b, float32 datatype
>0      leshort =32             \b, complex64 datatype
>0      leshort =64             \b, float64 datatype
>0      leshort =128            \b, RGB24 datatype
>0      leshort =256            \b, int8 datatype
>0      leshort =512            \b, uint16 datatype
>0      leshort =768            \b, uint32 datatype
>0      leshort =1024           \b, int64 datatype
>0      leshort =1280           \b, uint64 datatype
>0      leshort =1536           \b, float128 datatype
>0      leshort =1792           \b, complex128 datatype
>0      leshort =2048           \b, complex256 datatype
>0      leshort =2304           \b, RGBA32 datatype
>0      default x
>>0     leshort x               \b, unknown datatype 0x%x
>>2     leshort x               (%d bits/pixel)

0       name            nifti1-dim-le
>0      clear           x
>40     leshort <0              \b, INVALID dim[0]=%d
>40     leshort >7              \b, INVALID dim[0]=%d
>0      default x
>>40    leshort x               \b, %d-dimensional (size
>>42    leshort x               %d
>>40    leshort >1
>>>44   leshort x               \bx%d
>>40    leshort >2
>>>46   leshort x               \bx%d
>>40    leshort >3
>>>48   leshort x               \bx%d
>>40    leshort >4
>>>50   leshort x               \bx%d
>>40    leshort >5
>>>52   leshort x               \bx%d
>>40    leshort >6
>>>54   leshort x               \bx%d
>>80    lefloat x               \b, voxel size %f
>>40    leshort >1
>>>84   lefloat x               x %f
>>40    leshort >2
>>>88   lefloat x               x %f
>>123   use             nifti1-xyz-unit
>>40    leshort >3
>>>92   lefloat x               x %f
>>>123  use             nifti1-t-unit
>>40    leshort x               \b)

0       name            nifti2-dim-le
>0      clear           x
>16     lequad          <0              \b, INVALID dim[0]=%lld
>16     lequad          >7              \b, INVALID dim[0]=%lld
>0      default x
>>16    lequad          x               \b, %lld-dimensional (size
>>24    lequad          x               %lld
>>16    lequad          >1
>>>32   lequad          x               \bx%lld
>>16    lequad          >2
>>>40   lequad          x               \bx%lld
>>16    lequad          >3
>>>48   lequad          x               \bx%lld
>>16    lequad          >4
>>>56   lequad          x               \bx%lld
>>16    lequad          >5
>>>64   lequad          x               \bx%lld
>>16    lequad          >6
>>>72   lequad          x               \bx%lld,
>>112   ledouble        x               \b, voxel size %f
>>16    lequad          >1
>>>120  ledouble        x               x %f
>>16    lequad          >2
>>>128  ledouble        x               x %f
>>500   use             nifti2-xyz-unit
>>16    lequad          >3
>>>136  ledouble        x               x %f
>>>500  use             nifti2-t-unit
>>16    lequad          x               \b)

0       name            xform-code-nifti1-le
>0      leshort =1              to scanner-based coordinates
>0      leshort =2              to aligned coordinates
>0      leshort =3              to Talairach coordinates
>0      leshort =4              to MNI152 coordinates
>0      leshort =5              to template coordinates

0       name            xform-code-nifti2-le
>0      lelong          =1              to scanner-based coordinates
>0      lelong          =2              to aligned coordinates
>0      lelong          =3              to Talairach coordinates
>0      lelong          =4              to MNI152 coordinates
>0      lelong          =5              to template coordinates

0       name            nifti1-xyz-unit
>0      byte            &0x01
>>0     byte            ^0x02           m
>>0     byte            &0x02           micron
>0      byte            ^0x01
>>0     byte            &0x02           mm

0       name            nifti1-t-unit
>0      byte            &0x08
>>0     byte            ^0x10           s
>>0     byte            &0x10           ms
>0      byte            ^0x08
>>0     byte            &0x10           microsecond

0       name            nifti2-xyz-unit
>0      lelong          &0x01
>>0     lelong          ^0x02           m
>>0     lelong          &0x02           micron
>0      lelong          ^0x01
>>0     lelong          &0x02           mm

0       name            nifti2-t-unit
>0      lelong          &0x08
>>0     lelong          ^0x10           s
>>0     lelong          &0x10           ms
>0      lelong          ^0x08
>>0     lelong          &0x10           microsecond