这部分一些关键的名词可以参考第2部分的内容
3.1.文件总体结构
一个FITS文件应该由下面几个 FITS结构 组成(担心翻译有偏差,把部分英文附带上):
- primary header and data unit(HDU)基本头单元与数据单元
- Conforming Extensions(optional)可选的扩展
- 其他特别的记录(可选,有限制)
有基础的HDU组成的FITS文件通常被称为基础FITS文件(Basic FITS file),或者单图像FITS文件(Single Image FITS,SIF).在基础HDU后面跟随一个或者多个扩展文件被称为多扩展文件(Multi-Extension FITS,MEF).
每一个 FITS结构 一般由整数个FITS块组成。每个FITS块有2880字节(23040位)。primary HDU是以FITS文件中的第一个FITS块开始。之后的所有FITS结构 的第一个FITS块都会紧跟前面一个FITS结构的最后一个FITS块。(感觉有点废话)
标准并未强加限制FITS文件的大小和HDU的大小(后面会提到HDU可以有可选部分,因此大小会有变化)。而根据标准用来读写数据的软件可以对文件的大小做出限制。特别的,一些历史上遗留的软件仅仅支持大小为231字节。
3.2.单独的FITS结构
基本HDU和每个扩展HDU均有一个或者多个2880字节header block或者跟随可选的2880字节data block的序列。
(注释:因为HDU不一定有data unit,所以data block 是可选的。现在你应该知道HDU的样子了)
header block应该只包含ASCII字符中限制的部分字符,从32到126号字符(十六进制下是20-7E)。ASCII控制字符(十进制下数值小于32)和删除字符(十进制127或者十六进制7F)是一定不可以出现在header的任何位置。
3.3Pimary header and data unit(基本头单元和数据单元,HDU)
HDU包括primary header和可能有的primary data序列。如果primary data序列没有长度,(其实就是没有这个结构),那么HDU就不包括data blocks。
译者注:HDU的结构如下表
- header unit
- header block(2880字节)
- header block
- data unit
- data block(2880字节)
- data block
3.3.1 Primary header
HDU的头文件有一个或者多个 header block组成,每个header block包含一系列的由80个字符组成的关键词记录组成。这些字符之前提到过时受限制的部分ASCII字符。每个2880字节的header block包含36个关键词记录(译者注:36=2880/80)。最后一个header block一定要包含END关键词,因为这个关键词标志着头单元逻辑上的结束(译者注:因为物理上后面的存储单元可以不用)。如果关键词记录没有解释信息(比如:END关键词后),那么需要用ASCII字符中的空格(十进制32或十六进制20)填充。
(译者注:header unit 的结构:
header unit
- header block
- Keyword(关键词,80字节最多可以有36个记录)
- header block
- Keyword(最后一个必须是END)
- END
3.3.2 Primary data array
primary data array(数据单元序列)可以由一个维数从1到999的data array构成。维数由关键词NAXIS指定(译者注:就是在上一节中的头文件中的关键词)。primary data array中的random group转换是更为复杂的问题,在以后的章节中会涉及。整个数据序列的值是有连续的比特流构成(译者注:说的很抽象,实际上就是连续的比特序列)。每一个数值所占用的比特位数是由关键词BITPIX指定。超过一维的数据序列是由一组排列构成,第一维变化的最快,接着维度2变化较快,最后一维变化最慢,可以从图1中看出。
(译者注:此处指出了存放高维数组为一维比特流的方法。读者可以结合下图仔细思考过程,先让第一维的位置变化取相应值,取完后接着使第二维变化,重新从第一维开始取)
图1:超过一维data array的存储形式
在除了第一维的每个维度变化时,数值之间是没有空格或者特殊字符的。除了第一个元素的位置,序列的结构是不依赖与FITS block的结构。这种存储形式和Fortran语言存储数组类似。每个维度的索引由1开始直至关键词NAXISn的值。
如果data array没有完全覆盖最后一个data block,剩下的部分会被每个比特置为0.每个值在存储是按照大端法的顺序以便权重较大的值在FITS文件的前面。
译者注:稍微介绍一下大端法:一般我们书写时将权重较大的放在最前面,如果地址从左向右变大,我们其实一直使用的大端法记录数据。但是现在大端法除了在Internet上传递数据,电脑存储已经被Intel的x86架构的小端法统治了。
data unit
- data block
- 连续的比特
- header block
- 连续的比特 若没有填满,后续比特置0