InterFile 3.3

来源:互联网 发布:tensorflow支持显卡 编辑:程序博客网 时间:2024/06/07 02:15

一、简介

InterFile 3.3医学图像格式(MedCon), 该文件由两部分组成, the administrative data in ASCII and the binary image data. 可以将这两个文件放在一个文件中,但是我们更倾向于将数据分成两个文件。The administrative data in a file with extension ‘.h33’ and the binary data in a file with extension ‘.i33’。

这里写图片描述

二、文件格式

1、ADMINISTRATIVE DATA

a)  The administrative data are only composed of key-value pairs and exist in the form of ASCII text. The administrative data should be terminated with a <Ctrl-Z).b)  All administrative data are to be supplied in the form of key-value pairs in ASCII with delimiters. A ‘key’ is the name of a parameter taking a specific ‘value’, an example being:patient name := Elvis Presley <cr><lf>c)  The maximum permitted number of characters for a key or a value or a comment is 255 characters.d)  Neither keys nor values are to be treated as case sensitive. The characters <space> <tab> <underscore> <!> may all be treated as white space and ignored.e)  All relevant keys should be included in the intermediate file. A null value is permitted which will invoke the default where specified. The required keys are preceded by an exclamation mark.f)  A hole line or key-value pairs may have comments appended to them by preceding the comment with a semicolon <;>.g)  A required key ("name of data file") is included to point to the image data file, even if the binary data is in the same file of the administrative data.h)  The two alternate keys ("data starting block") or ("data offset in bytes") are used to indicate the offset of the binary data in the file as specified by the key ("name of data file"). The ("data starting block") represents the offset in number of blocks or 2048 bytes. The use of the key ("data offset in bytes") permits the offset to the binary data to be freely specified.

2、 IMAGE DATA

a)  The order of the pixel data shall increment by column from left to right, and then by row, from top to bottom.b)  Image data shall be in either bit, signed or unsigned integer format, IEEE floating point format (float or double) or ASCII. When the data pixels are written in ASCII, the text line must not exceed 255 characters.c)  The default value for the key ("imagedata byte order") is BIGENDIAN, but LITTLEENDIAN is allowed. The byte order must be respected for integer and floating point numbers.d)  Bit data will stored in a single byte, representing 8 pixel values and ordered such that the most significant bit corresponds to the leftmost pixel.

三、文件内容

1、!INTERFILE

!INTERFILE  := <NULL>;to indicate that this is an Interfile file!imaging modality := <ASCII> nucmed;only nucmed is defined for the purpose of this document!originating system := <ASCII>;eg.GAMMA-11, MDS, ADAC, etc.!version of keys := <Numeric> 3.3;future versions shall incrementdate of keys := <DateFormat> 1996:09:26;date of version 3.3 in date formatconversion program := <ASCII>;name of program usedprogram author := <ASCII>;your chance of fame and fortuneprogram version := <Numeric>;to keep track of conversion programsprogram date := <DateFormat>;date of program

2、!GENERAL DATA

!GENERAL DATA := <NULL>;required but can be treated as commentoriginal institution := <ASCII>;name of hospital etc.contact person := <ASCII>;another chance of fame (and fortune?)data description := <ASCII>;whatever you want!data starting block := <Numeric> 0;the value is the offset in blocks of 2048 bytes in either the;administrative or the data file depending on the key value for;name of data file (see below)|      ;OR!data offset in bytes:= <Numeric> 0;as above but the offset may be specified freely in bytes!name of data file := <ASCII> <NULL>;<NULL> if no image data exists;key is a name of the file where the data are present, either when;in a separate binary data file, or when in a combined;administrative/binary data filepatient name := <ASCII>;last name, first name (recommended)!patient ID := <ASCII>;as used in your hospitalpatient dob := <DateFormat>;date of birthpatient sex := <ASCIIlist> Unknown M|F|Unknown;default is Unknown!!study ID := <ASCII>;as local conditions dictateexam type := <ASCII>;description of procedure as abovedata compression := <ASCII> none;name of algorithm if present- e.g. JPEG, etc.data encode := <ASCII> none;name of method of encoding if present- e.g. uuencode etc.organ := <ASCII> none;ENLF: for mapping with DICOM tag (0018,0015) BodyPartExaminedisotope := <ASCII> | <ASCII>/<ASCII> none;ENLF: for mapping with DICOM radionuclide/radiopharmaceutical entries.dose := <Numeric> 0;ENLF: for mapping with DICOM tag (0018,1074) RadionuclideTotalDose [MBq]

3、!GENERAL IMAGE DATA

!GENERAL IMAGE DATA := <NULL>;again required but treated as comment!type of data := <ASCIIlist>  Other   Static|Dynamic|Gated|Tomographic|Curve|ROI|GSPECT|Other;important - this key is used for many conditionals!total number of images := <Numeric>;how many images are there altogether in total in the associated;data file (for all windows etc.). This overrides any other way of;calculating the total number of images.study date := <DateFormat>;date of the first image included in the data filestudy time := <TimeFormat>;time for the start of first image specifiedimagedata byte order := <ASCIIlist> BIGENDIAN        BIGENDIAN|LITTLEENDIAN;BIGENDIAN is the default if unspecifiedprocess label := <ASCII> none;ENLF: for mapping with DICOM tag (0008,103E) SeriesDescriptionquantification units := +1.696265e-05;ENLF: global scale factor for mediman dialectNUD/rescale slope := +1.696265e-05;ENLF: global scale factor for NUD systemsNUD/rescale intercept := +0.000000e+00;ENLF: global scale intercept for NUD systemsnumber of energy windows := <Numeric> 1;defaulted to one if unspecified

4、

for ( number of energy windows, energy window){      energy window[<energy window>] := <ASCII>      ;ASCII text- for example "Tc99m"      ;this starts as "energy window [1]" and then increments to      ;energy window[2]:= <ASCII>      ;and then on to      ;energy window[3]:= <ASCII>      ;etc. etc.      energy window lower level [<energy window>] := <Numeric>      ;value of lower energy level in keV for the corresponding window      ;starts off as "energy window lower level [1]"      ;and continues [2],[3] .. as above      energy window upper level [<energy window>] := <Numeric>      ;value of upper energy level in keV for the corresponding window      ;starts off as "energy window upper level [1]"      ;and continues [2],[3] .. as above      flood corrected := <ASCIIlist> Y Y|N      ;corrected if unspecified      decay corrected := <ASCIIlist> N Y|N      ;not corrected if unspecified

5、type of data = “Static”|”ROI”

if( type of data = "Static"|"ROI")      {      !STATIC STUDY (General) := <NULL>      ;label to indicate that this is the static definition      number of images/energy window := <Numeric> 1      ;number of images in THIS energy window      for ( number of images/energy window )      {            !Static Study (each frame) := <NULL>            ;included at the beginning of the definition of            ;each new static frame            !image number := <Numeric>            ;starting from 1 [see above]            ;- must be specified!!            ;starts from 1 and increments though all            ;windows to its maximum value which equals the            ;total number of images in the file!!            !matrix size [1] :=< Numeric>            ;matrix size across (number of columns)- previously x            ;32, 64, 128 etc. but not necessarily powers of 2            !matrix size [2] := <Numeric>            ;matrix size down (number of rows)- previously y            ;32, 64, 128 etc. but not necessarily powers of 2            !number format := <ASCIIlist> unsigned integer                signed integer|unsigned integer                |long float|short float|bit|ASCII            ;as specified            !number of bytes per pixel := <Numeric>            ;e.g. 1|2|4.. [this key ignored for bit data]            scaling factor (mm/pixel) [1]:= <Numeric>            ;size of pixel across- previously x            scaling factor (mm/pixel) [2] := <Numeric>            ;size of pixel down- previously y            image duration (sec) := <Numeric>            ;eg. 120.0  i.e. normally a float, for each image            image start time := <TimeFormat>            ;time for each image            label := <ASCII>            ;eg Anterior            maximum pixel count := <Numeric>            ;for scaling purposes, for each image            total counts := <Numeric>            ;either an integer or a float, for each image            }            ;End of frame loop -Repeat for each subsequent frame        }        ;End of static definitions

6、type of data = “Dynamic”

if( type of data = "Dynamic")        {            !DYNAMIC STUDY (general) := <NULL>            ;label to indicate that this is a dynamic study            !number of frame groups := <Numeric> 1            ;defaults to 1            for( number of frame groups, frame group number)            {                  !Dynamic Study (each frame group) := <NULL>                  ;Repeated for each group of frames as                  ;indication of  the start of the                  ;definition of the new group                  !frame group number := <Numeric>                  ;numbering starts from 1 (must be specified)                  !matrix size [1] := <Numeric>                  ;matrix size across (number of columns)                  ;-previously matrix size x                  ;32, 64, 128 etc. but not necessarily powers of 2                  !matrix size [2] := <Numeric>                  ;matrix size down (number of rows)- previously y                  ;32, 64, 128 etc. but not necessarily powers of 2                  !number format := <ASCIIlist> unsigned integer                     signed integer|unsigned integer|                     long float|short float|bit|ASCII                  ;as specified                  !number of bytes per pixel := <Numeric>                  ;e.g. 1|2|4.. [this key ignored for bit data]                  scaling factor (mm/pixel) [1]:= <Numeric>                  ;size of pixel across- previously x                  scaling factor (mm/pixel) [2] := <Numeric>                  ;size of pixel down- previously y                  !number of images this frame group := <Numeric>                  ;for each frame group                  ;(for each energy window)                  !image duration (sec) := <Numeric>                  ;eg 0.2, for each frame group                  ;(for each energy window)                  pause between images (sec) := <Numeric> 0.0                  ;eg 0.0, default is 0.0                  pause between frame groups (sec) := <Numeric> 0.0                  ;eg 5.0 default 0.0, time between last                  ;frame group (or start of study) and this frame group                  !maximum pixel count in group := <Numeric>                  ;eg 1234 (for scaling purposes)                  ;maximum pixel for all frames in this                  ;group and this window!!            }            ;Repeat for each subsequent frame group        }        ; End of dynamic definitions

7、type of data = “Gated”

 if( type of data = "Gated")        {        !GATED STUDY (general) := <NULL>        ;again a flag to indicate a gated study        !matrix size [1] := <Numeric>        ;matrix size across (number of columns)- previously x        ;32, 64, 128 etc. but not necessarily powers of 2        !matrix size [2] := <Numeric>        ;matrix size down (number of rows)- previously y        ;32, 64, 128 etc. but not necessarily powers of 2        !number format := <ASCIIlist> unsigned integer           signed integer|unsigned integer|           long float|short float|bit|ASCII        ;as specified        !number of bytes per pixel := <Numeric>        ;e.g. 1|2|4|..> [this key ignored for bit data]        scaling factor (mm/pixel) [1]:= <Numeric>        ;size of pixel across- previously x        scaling factor (mm/pixel) [2] := <Numeric>        ;size of pixel down- previously y        study duration (elapsed) sec := <Numeric>        ;eg 300, total elapsed time for whole study        number of cardiac cycles (observed) := <Numeric>        ;total number of cycles if known, for this        ;energy window        number of time windows := <Numeric> 1        ;defaults to 1 if unspecified- number of different        ;sets of time intervals        for ( number of time windows, time window number)        {            !Gated Study (each time window) := <NULL>            !time window number := <Numeric>            ;starting from 1            !number of images in time window := <Numeric>            ;eg 24            !image duration (sec) := <Numeric>            ;eg 0.04  for each frame in THIS time window            framing method := <ASCIIlist> Forward                    Forward|Backward|Mixed|Other            ;default is forward            time window lower limit (sec) := <Numeric>            ;float normally expected, for THIS time window            time window upper limit (sec) := <Numeric>            ;float normally expected            % R-R cycles acquired this window := <Numeric>            ;if known            number of cardiac cycles (acquired) := <Numeric>            ;eg 356 , if known            study duration (acquired) sec := <Numeric>            ;total  acquisition time duration for            ;this window only (if it can be computed!!) as            ;opposed to total acquisition time (when different)            !maximum pixel count := <Numeric>            ;for scaling purposes for all images in this            ;time window (and energy window) only            R-R histogram := <ASCIIlist> N Y|N            ;flag to indicate that one exists!!            }            ;Repeat for each subsequent time window.        }        ;end of gated definitions

8、type of data = “Tomographic”

 if( type of data = "Tomographic")        {        !SPECT STUDY (general) := <NULL>        ;flag to indicate tomographic data with no effect as such        number of detector heads := <Numeric> 1        ;default=1 if unspecified        for ( number of detector heads )        {            !number of images/energy window := <Numeric>            ;total number of images (for all heads) for            ;THIS energy window!!            !process status := Reconstructed Acquired|Reconstructed            ;used below in conditional- MUST be defined            !matrix size [1] := <Numeric>            ;matrix size across (number of columns)- previously x            ;32, 64, 128 etc. but not necessarily powers of 2            !matrix size [2] := <Numeric>            ;matrix size down (number of rows)- previously y            ;32, 64, 128 etc. but not necessarily powers of 2            !number format := <ASCIIlist> unsigned integer               signed integer|unsigned integer|               long float|short float|bit|ASCII            ;as specified            !number of bytes per pixel := <Numeric>            ;e.g. 1|2|4|.. [this key ignored for bit data]            scaling factor (mm/pixel) [1]:= <Numeric>            ;size of pixel across- previously x            scaling factor (mm/pixel) [2] := <Numeric>            ;size of pixel down- previously y            !number of projections := <Numeric>            ;for example- 64            ;note this is the actual number of images per            ;head per energy window if            ;the data are acquired, but NOT if the data are            ;reconstructed where the number of images is            ;specified separately as number of slices            !extent of rotation := <Numeric>            ;e.g 180, 360            !time per projection (sec) := <Numeric>            ;important for Acquired data            study duration (sec) := <Numeric>            ;eg 1280.0, for acquired data should be equal            ;to the product of number of projections and            ;time per projection, but could be different!!            !maximum pixel count := <Numeric>            ;for scaling- in THIS image series( this head            ;and this energy window)            patient orientation := <ASCIIlist> head_in                 head_in|feet_in|other            patient rotation :=  <ASCIIlist> supine                 prone|supine|other            if( process status = "acquired")            {               !SPECT STUDY (acquired data):= <NULL>               !direction of rotation := <ASCIIlist> CW CW|CCW               ;CW = clockwise, CCW = counter clockwise               start angle := <Numeric>               ;0 is top-dead-centre, in degrees               ;in orientation as specified above               first projection angle in data set := <Numeric>               ;in degrees expressed with respect to               ;anterior-  angles in direction as               ;specified CW or CCW               acquisition mode := <ASCIIlist> stepped               stepped|continuous               Centre_of_rotation :=  <ASCIIlist> Corrected               Corrected|Single_value|For_every_angle               ;default is "Corrected"               ;"Corrected" corresponds to a null centre of rotation               ;correction, as previous required by Interfile, that               ;is, no centre of rotation information is to be               ;passed. The key "Single value" indicates the               ;conventional definition of the centre of rotation               ;offset to be a single value specified for all angles,               ;specified for each head given a multiple head               ;acquisition.               ;The key "For_every_angle" indicates that the centre               ;of rotation offset will be  specified for each head               ;and every angle. This is not currently implemented in               ;this Interfile definition, but will be introduced in               ;V4.               ;The mathematical centre of rotation is assumed to be               ;in the exact middle of the projection for example at               ;x= 32.5 y=32.5 for a 64x64 image where the count               ;starts from 1. Note that the choice of coordinates               ;does not matter, the only constraint being the               ;assumption that all projections have a length which               ;is an even number of pixels. The centre of rotation               ;is specified as the offset from that position to the               ;perpendicular dropped from a point on the axis of               ;rotation onto the head.           if( Centre_of_rotation = "Single_value" )           {               !X_offset := <Numeric>               ;x offset for all angles in mm.               ;x_offset is the x offset between the perpendicular               ;dropped from the centre of rotation and the dead               ;centre of the matrix,               ;The positive direction for the offset is considered               ;to be that of the increasing projection index, e.g.               ;for a projection with pixels of size 6mm, which               ;should be centred at 32.5, an offset of +6mm               ;indicates that the centre of rotation is at 33.5               ;Note that since offset is specified in mm, the pixel               ;size must be known.               Y_offset := <Numeric>               ;y offset for all angles in mm               ;y_offset is the y offset between that perpendicular               ;dropped from the centre of rotation from that point               ;on the axis of rotation where the y_offset is               ;considered to be zero, and the centre of the camera’s               ;field of view. Thus y_offset is the RELATIVE shift of               ;the y-axis with respect to some arbitrary position,               ;normally that from the centre of the filed of view of               ;the first at the top dead centre position. Thus for               ;a single head, this value would normally be expected               ;to be equal to zero.               Radius := <Numeric>               ;radial distance to centre of rotation in mm,               ;for this head.               }               ;end of centre of rotation specification               orbit := <ASCIIlist> Circular Circular|non-circular               preprocessed := <ASCII>               ;preprocessing method            }            ; end of process status acquired            if( process status = "reconstructed")            {               !SPECT STUDY (reconstructed data) := <NULL>               method of reconstruction := <ASCII>               !number of slices := <Numeric>               ;i.e. number of images in this set for this               ;head and this energy window               number of reference frame := <Numeric> 0               ;if unspecified the frame number               ;originally used for defining slice positions               ;0=default [Note- not a very useful key]               slice orientation := <ASCIIlist> Transverse                   Transverse|Coronal|Sagittal|Other               ;default is transverse if unspecified               slice thickness (pixels) := <Numeric> 1               ;if unspecified 1=default               centre-centre slice separation (pixels):=<Numeric> 1               ;e.g.1,2,3,4...  as distinct from slice thickness               ;the word centre can also be spelt as center               filter name :=  <ASCII>               ;e.g. Hann, Hamming, Butterworth               filter parameters := <ASCII>               ;Nyquist freq etc.               z-axis filter := <ASCII>               ;method [1,2,1] etc.               attenuation correction coefficient/cm := <Numeric> 0.0               ;default 0 means not done if unspecified               method of attenuation correction :=  <ASCII>  none               scatter corrected := <ASCIIlist> N Y|N               method of scatter correction := <ASCII> none               oblique reconstruction := <ASCIIlist> N Y|N               oblique orientation := <ASCII>               ;free text [Note ACR-NEMA convention preferred]            }            ;end of reconstructed tomo       }      ;End of tomo

9、type of data = “GSPECT”

*      if( type of data = "GSPECT")       {*      !GATED SPECT STUDY (general) := <NULL>       ;again a flag to indicate a gated SPECT study       ;MIXTURE OF GATED & TOMO       !matrix size [1] := <Numeric>       ;matrix size across (number of columns)- previously x       ;32, 64, 128 etc. but not necessarily powers of 2       !matrix size [2] := <Numeric>       ;matrix size down (number of rows)- previously y       ;32, 64, 128 etc. but not necessarily powers of 2       !number format := <ASCIIlist> unsigned integer        signed integer|unsigned integer|        long float|short float|bit|ASCII       ;as specified       !number of bytes per pixel := <Numeric>       ;e.g. 1|2|4|..> [this key ignored for bit data]       !Gated SPECT nesting outer level := SPECT|Gated  Gated       ; key to indictae order of images, if SPECT is outer level       ; order is, for every angle give each gated image, if       ; gated is outer level, then order is, for every gated       ; time value, vie set of tomographic images       scaling factor (mm/pixel) [1]:= <Numeric>       ;size of pixel across- previously x       scaling factor (mm/pixel) [2] := <Numeric>       ;size of pixel down- previously y       study duration (elapsed) sec := <Numeric>       ;eg 300, total elapsed time for whole study       number of cardiac cycles (observed) := <Numeric>       ;total number of cycles if known, for this       ;energy window       number of time windows := <Numeric> 1       ;defaults to 1 if unspecified- number of different       ;sets of time intervals       for ( number of time windows, time window number)       {            !Gated Study (each time window) := <NULL>            !time window number := <Numeric>            ;starting from 1*           !number of images in time window := <Numeric>            ;eg 24 NOTE that here in gated SPECT is means images/angle            !image duration (sec) := <Numeric>            ;eg 0.04  for each frame in THIS time window            framing method := <ASCIIlist> Forward                    Forward|Backward|Mixed|Other            ;default is forward            time window lower limit (sec) := <Numeric>            ;float normally expected, for THIS time window            time window upper limit (sec) := <Numeric>            ;float normally expected            % R-R cycles acquired this window := <Numeric>            ;if known            number of cardiac cycles (acquired) := <Numeric>            ;eg 356 , if known            study duration (acquired) sec := <Numeric>            ;total  acquisition time duration for            ;this window only (if it can be computed!!) as            ;opposed to total acquisition time (when different)            !maximum pixel count := <Numeric>            ;for scaling purposes for all images in this            ;time window (and energy window) only            R-R histogram := <ASCIIlist> N Y|N            ;flag to indicate that one exists!!        }        ;Repeat for each subsequent time window.        ;start of tomographic keys        number of detector heads := <Numeric> 1        ;default=1 if unspecified        for ( number of detector heads )        {            !number of images/energy window := <Numeric>            ;total number of images (for all heads) for            ;THIS energy window!!            !process status := Reconstructed Acquired|Reconstructed            ;used below in conditional- MUST be defined            !number of projections := <Numeric>            ;for example- 64            ;note this is the actual number of images per            ;head per energy window if            ;the data are acquired, but NOT if the data are            ;reconstructed where the number of images is            ;specified separately as number of slices            !extent of rotation := <Numeric>            ;e.g 180, 360            !time per projection (sec) := <Numeric>            ;important for Acquired data            patient orientation := <ASCIIlist> head_in                   head_in|feet_in|other            patient rotation :=  <ASCIIlist> supine                   prone|supine|other            if( process status = "acquired")            {               !SPECT STUDY (acquired data):= <NULL>               !direction of rotation := <ASCIIlist> CW CW|CCW               ;CW = clockwise, CCW = counter clockwise               start angle := <Numeric>               ;0 is top-dead-centre, in degrees               ;in orientation as specified above               first projection angle in data set := <Numeric>               ;in degrees expressed with respect to               ;anterior-  angles in direction as               ;specified CW or CCW               acquisition mode := <ASCIIlist> stepped                    stepped|continuous              Centre_of_rotation :=  <ASCIIlist> Corrected                   Corrected|Single_value|For_every_angle              ;default is "Corrected"              ;"Corrected" corresponds to a null centre of rotation              ;correction, as previous required by Interfile, that              ;is, no centre of rotation information is to be              ;passed. The key "Single value" indicates the              ;conventional definition of the centre of rotation              ;offset to be a single value specified for all angles,              ;specified for each head given a multiple head              ;acquisition.              ;The key "For_every_angle" indicates that the centre              ;of rotation offset will be  specified for each head              ;and every angle. This is not currently implemented in              ;this Interfile definition, but will be introduced in              ;V4.              ;The mathematical centre of rotation is assumed to be              ;in the exact middle of the projection for example at              ;x= 32.5 y=32.5 for a 64x64 image where the count              ;starts from 1. Note that the choice of coordinates              ;does not matter, the only constraint being the              ;assumption that all projections have a length which              ;is an even number of pixels. The centre of rotation              ;is specified as the offset from that position to the              ;perpendicular dropped from a point on the axis of              ;rotation onto the head.              if( Centre_of_rotation = "Single_value" )              {               !X_offset := <Numeric>               ;x offset for all angles in mm.              ;x_offset is the x offset between the perpendicular              ;dropped from the centre of rotation and the dead              ;centre of the matrix,              ;The positive direction for the offset is considered              ;to be that of the increasing projection index, e.g.              ;for a projection with pixels of size 6mm, which              ;should be centred at 32.5, an offset of +6mm              ;indicates that the centre of rotation is at 33.5              ;Note that since offset is specified in mm, the pixel              ;size must be known.               Y_offset := <Numeric>               ;y offset for all angles in mm              ;y_offset is the y offset between that perpendicular              ;dropped from the centre of rotation from that point              ;on the axis of rotation where the y_offset is              ;considered to be zero, and the centre of the camera’s              ;field of view. Thus y_offset is the RELATIVE shift of              ;the y-axis with respect to some arbitrary position,              ;normally that from the centre of the filed of view of              ;the first at the top dead centre position. Thus for              ;a single head, this value would normally be expected              ;to be equal to zero.               Radius := <Numeric>               ;radial distance to centre of rotation in mm,              ;for this head.               }              ;end of centre of rotation specification               orbit := <ASCIIlist> Circular Circular|non-circular               preprocessed := <ASCII>               ;preprocessing method            }            ; end of process status acquired            if( process status = "reconstructed")            {               !SPECT STUDY (reconstructed data) := <NULL>               method of reconstruction := <ASCII>               !number of slices := <Numeric>               ;i.e. number of images in this set for this               ;head and this energy window               number of reference frame := <Numeric> 0               ;if unspecified the frame number               ;originally used for defining slice positions               ;0=default [Note- not a very useful key]               slice orientation := <ASCIIlist> Transverse                   Transverse|Coronal|Sagittal|Other               ;default is transverse if unspecified               slice thickness (pixels) := <Numeric> 1               ;if unspecified 1=default               centre-centre slice separation (pixels):=<Numeric> 1               ;e.g.1,2,3,4...  as distinct from slice thickness               ;the word centre can also be spelt as center               filter name :=  <ASCII>               ;e.g. Hann, Hamming, Butterworth               filter parameters := <ASCII>               ;Nyquist freq etc.               z-axis filter := <ASCII>               ;method [1,2,1] etc.               attenuation correction coefficient/cm := <Numeric> 0.0               ;default 0 means not done if unspecified               method of attenuation correction :=  <ASCII>  none               scatter corrected := <ASCIIlist> N Y|N               method of scatter correction := <ASCII> none               oblique reconstruction := <ASCIIlist> N Y|N               oblique orientation := <ASCII>               ;free text [Note ACR-NEMA convention preferred]            }            ;end of reconstructed tomo       }      ;End of GATED SPECT};end of loop for energy windows

10、type of data = “Curve”

if( type of data = "Curve")      {       !CURVE DATA := <NULL>       ;label to indicate that this is the curve definition       ;curves should always be kept in separate data files       ;and not together with the administrative data       Curve_dimensions := <Numeric> 2       ;how many dimensions- ONLY 2 is permitted in V3.3.       ;Even if a single vector of values is required       ;both matrix size[1] and [2] must be defined       ;although one of them should take the value 1.       ;A set of x,y values is 2 dimensional with normally       ;matrix size[1] or matrix size[2] equal to 2.       ;and the other matrix size specifying       ;the number of PAIRS of values present (see Fig 1).       ;Matrix sizes greater than 2 for BOTH dimensions are not       ;recommended.       !matrix size[1] := <Numeric>       ;matrix size across (number of columns)       !matrix size[2] := <Numeric>       ;matrix size down (number of rows)       !number format := <ASCIIlist> unsigned integer           signed integer|unsigned integer|           long float|short float|bit|ASCII       !number of bytes per pixel := <Numeric>       ;e.g. 1|2|4|.. [this key ignored for bit data]       Type_of_curve :=  <ASCII>       ;what kind of curve is it, for example time activity curve       ;ROI indicates that this is a list       ;of vectors corresponding to an ROI.       for( Curve_dimensions, dimension)       {          ;When matrix size[1] or matrix size[2] equals 2 (the normal          ;case) such that the data comprise pairs of values,          ;then Label[1],  Units[1] etc. refers to the set of first          ;values for each pair, and Label[2] etc. refers the set of          ;second values for each pair.          Label[<dimension>] :=  <ASCII>          ;a text label for the corresponding axis  e.g. "counts"          Units[<dimension>] := <ASCII>          ;units of measurement for the corresponding axis          ;e.g. "units[1]:=counts/sec"          Min[<dimension>] := <Numeric>          ;Minimum of set of values as indicated in units as defined,          ;optional          Max[<dimension>] := <Numeric>          ;Maximum value as above, optional      }     ;End of loop for curve dimensions}!END OF INTERFILE := <NULL>