#------------------------------------------------------------------------------
# $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 <yann.leprince@cea.fr>, 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