FITS formát začal vznikať na konci 70. rokov kvôli potrebe výmeny astronomických obrazových dát medzi počítačmi rôznych architektúr. Toho času PC neexistovalo. Prvý oficiálny návrh je z roku 1981. V roku 1989 sa FITS formát dočkal revízie. FITS formát získal podporu pre veľké množstvo dátových štruktúr, aby vyhovel požiadavkám nových dát z nových prístrojov. Obrázky, spektrá, textové tabulky, binárne tabulky, to všetko je formátom FITS podporované.FITS formát sa stal nesmierne populárny a široko používaný štandart, hlavne v astronomickej komunite. Väčšina astronomického softvéru priamo podporuje tento formát, nie len na načítavanie dát, ale aj ako vlastnú dátovú štruktúru. Isté nedostatky formátu, ako napr. keď je zaplnený alokovaný priestor záznamov hlavičky a chceme zapísať novú hlavičku, je nutné prepísať všetky nasledujúce dáta, sú vyvážené náramnými zlepšeniami v efektívnosti CPU a I/O operácií moderných PC.
V roku 1987 NASA vytvorila plán urobiť jednotný sytém pre astrofyzikálne dáta. Rozhodla, ze všetky dáta z misií NASA budú uverejňované komunite vo formáte FITS. Popri NOST (NASA/Science Office of standarts and Technology) vznikol úrad podpory pre FITS formát. Do roku 1998 vzniklo šesť revizií formátu, posledná NOST 100-2.0, obsahuje všetky rozšírenia a zmeny. Bola vytvorená IAU-FWG (FITS Working Group popri IAU). Formát FITS sa naďalej rozširuje podľa potreby, ale posledné slovo pri pridávaní nových vlastností má IAU-FWG, aby bola zachovaná kompatibilita.
Formát FITS nie je rozšírený len u astronómov, ale našiel uplatnenie aj v programoch, ktore používajú geofyzici (na zobrazovanie geomagnetického poľa), alebo aj biológovia (napríklad VisAD).
Súbor FITS pozostáva z HDU (Header and Data Unit), t.j. z hlavičky (Header), ktorá obsahuje rôzne kľúčové slová (Keywords), za ktorou nasledujú dáta. Za HDU môžu nasledovať volitelné rozšírenia a iné špeciálne záznamy. Štruktúra FITS súboru by mala pozostávat z celočíselného počtu logických záznamov. Veľkosť logického záznamu má byť 23040 bitov, čo je 2880 bytov (z historického dôvodu nemožnosti zapísať menší záznam na páskovu jednotku).
Primárna HDU má pozostávať z celočíselného počtu hlavičkových záznamov, ktoré pozostávaju z ASCII textu, a potom z celočíselného počtu binárnych dátových záznamov. Medzi záznamom v hlavičke a dátami nie je nič, nasledujú hneď za sebou. Hlavička by mala pozostávať z 36 záznamov, obsahujúc iba znaky ASCII. Prázdny záznam by mal byť vyplnený prázdnym ASCII znakom (hex20). Primárne dátove pole môže pozostávať z dátového poľa o 0 až 999 dimenziách. Hodnoty majú byť zapísané za sebou bez medzery resp. oddeľovača. Viacrozmerné polia majú pozostávať z postupnosti dát tak, že záznam podľa prvej osi (dimenzie) sa mení najintenzívnejšie, podľa druhej osi ako druhý najintenzívnejšie atd. a posledný najmenej intenzívne. Elementy poľa A(x1,x2,...,xm) majú byť v poradí, ako ukazuje nasledujúca tabuľka.
A(1, 1, ..., 1), |
A(2, 1, ..., 1), |
..., |
A(NAXIS1, 1, ..., 1), |
A(1, 2, ..., 1), |
A(2, 2, ..., 1), |
..., |
A(NAXIS1, 2, ..., 1), |
..., |
A(1, NAXIS2, ..., NAXISm), |
..., |
A(NAXIS1, NAXIS2, ..., NAXISm) |
Rozšírenia (Extensions)
Každé rozšírenie musí mať jedičné pomenovanie, špecifikované v hlavičke a spĺnať syntax. Aby nevznikali konflikty v názvoch, rozšírenia musia byť registrované IAUFWG. Veľkosť dát rozšírenia má byť specifikovaná v hlavičke. Žiadne rozšírenie nesmie narušiť konzistenciu FITS súboru.
Štandartné rozšírenia
Spĺňajú štandart FITS z roku 1998. Každé štandartné rozšírenie má mať jedinečné meno dané hodnotou kľúčového slova XTENSION. Rozšírenie môže nasledovať po primárnej HDU alebo po inom rozšírení. Na poradí nezáleží.
Špeciálne záznamy
Prvých 8 bytov špeciálneho záznamu nesmie obsahovať reťazec "XTENSION" alebo "SIMPLE " (za písmenom E je ešte medzera). Záznam musí mať štandartnú dĺžku 23040 bitov.
Hlavička
Pozostáva z kľúčového slova, indikátora hodnoty, hodnoty (nepovinné) a komentára (nepovinné). Poradie kľúčových slov je ľubovoľne až na výnimky spomenuté nižšie.
Kľúčové slovo (1. az 8. byte) má byť zarovnané vľavo, má obsahovať iba číslice 0 až 9 (hex30 až hex39) a veľké písmená latinky (hex41 až hex5A). Povolené sú ešte znaky "-" (hex2D) a "_" (hex5F). Žiadne iné písmená nie sú povolené.
Ak indikátor hodnoty (9. až 10. byte) obsahuje "= ", značí to prítomnosť hodnoty kľúčového slova. Ak nie, môže ďalej nasledovať ľubovoľný ASCII text.
Hodnota alebo komentar (11. až 80. byte) obsahuje hodnotu kľúčového slova podľa typu premennej, resp. ľubovoľný komentár. Komentár , napr. za hodnotou, má začínať znakom "/" (hex2F). Medzera medzi hodnotou a "/" je nutná. Hodnota je pre niektoré typy premenných pevne stanovená. Pevne stanovená hodnota začína (11. byte) a konci (pred/alebo 80. byte) úvodzovkami " " " (bez medzier hex27) a pozostáva výhradne z ASCII znakov. Ak hodnota obsahuje úvodzovky, zapíše sa to ako dve úvodzovky za sebou takto: zápis "O"B" znamená O"B. Počiatočné prázdne znaky (medzera, tabulátor apod.) sa berú do úvahy, koncové nie. Pre nie pevne stanovené hodnoty platia rovnaké pravidlá, akurát, že úvodzovky " " " (bez medzier hex27) nemusia byť na 11. mieste. Príklady:
KEYWORD1= "" | /kľúčové slovo je prázdny reťazec |
KEYWORD2= " " | /kľúčové slovo je prázny znak |
KEYWORD3= | /kľúčové slovo nie je definované |
Ak je hodnota pevne daná logická konštanta, na 30. mieste by sa malo objaviť písmeno "T" alebo "F" (T ako True, F ako False). Pre nie pevný formát je predpisané, aby T resp. F bolo prvým neprázdnym znakom na ľubovoľnom mieste (ale nie pred 11. bytom).
Celé číslo sa uvádza vo formáte "+" (hex 2B, nepovinné) resp. "-" (hex 2D) a cifry. Číslo sa chápe ako dekadické. Zarovnáva sa vpravo.
Reálne číslo s desatinnou čiarkou sa uvádza ako dekadické číslo, za ktorým nasleduje nepovinný exponent. Zarovnáva sa vpravo. Číslo začína znakom "+" (nepovinné) alebo "-" a nasledujú cifry, medzi ktorými sa môže vyskytnúť bodka "." ako desatinná čiarka. Ak je uvedená iba mantisa, číslo musí začínať bodkou. Exponent (nepovinné) má začínať veľkým písmenom "E" alebo "D" a nasleduje číslo v dekadickom tvare. Úplná presnosť 64bitových hodnôt nemôže byť vyjadrená v tomto predpísanom tvare.
Komplexné čísla sa uvádzajú v rovnakom tvare ako celé čísla, resp. reálne, akurát sa uzatvoria do zátvoriek "[", "]" a oddeľujú sa čiarkou ",".
Všetky jednotky, až na uhlové miery, majú spĺňať doporučenie IAU Style Manual (McNally 1988). Pre uhlovú mieru je doporučený stupeň ("deg").
Povinné kľúčové slová
Tie sú povinné pre každú HDU. Nesmú byť pozmenené a musia sa uvádzať v predpísanom tvare.
Hlavička by mala vždy obsahovať tieto kľúčové slová v uvedenom poradí:
SIMPLE
BITPIX
NAXIS
NAXISn, n = 1, ...,NAXIS
...
END /ako posledné
Kľúčové slovo SIMPLE je potrebné uviesť ako prvé kľúčové slovo v primárnej hlavičke súboru FITS. Nie je povolené ho uvádzať v rozširujúcich hlavičkách. Jeho hodnota môže byť "T", ak súbor spĺňa štandart, alebo "F", ak nie.
BITPIX udáva akú číselnú presnosť majú dáta. Povolené hodnoty tohto kľúčového slova udáva nasledujúca tabuľka.
Hodnota | dáta sú reprezentované ako: |
8 | znak alebo binary integer)* bez znamienka |
16 | 16-bit two-complement binary integer |
32 | 32-bit two-complement binary integer |
-32 | IEEE)** single precision floating point |
-64 | IEEE double precision floating point |
)* Výrazy typu integer a floating point je zbytočné prekladať, pretože, kto rozumie danej problematike, tak to chápe a preklad by bol zbytočne mätúci.
)** Institute of Electrical and Electronic Engineers
NAXIS udava počet ôs (dimenzií) v dátovom poli. Povolené hodnoty sú 0 až 999.
NAXISn udáva počet hodnôt v danej osi dátového poľa pre každú os n = 1, ..., NAXIS a žiadnu ďalšiu. Ak je niektorá hodnota pre hociktorú os 0, znamená to, že za hlavičkou nenásledujú žiadne dáta v HDU. Ak hodnota NAXIS je 0, potom sa nemusi uvádzať kľúčové slovo NAXISn.
END stojí na konci hlavičky a nemá žiadnu hodnotu. Byty 9 až 80 majú byť vyplnené prázdnymi znakmi.
Povolené rozšírenia
Všetky povolené rozšírenia by mali obsahovať povinne nasledujúce kľúčové slová v poradí uvedenom v nasledujúcej tabuľke.
XTENSION |
BITPIX |
NAXIS |
NAXISn, n = 1, ..., NAXIS |
... |
(rôzne kľúčové slová) |
... |
PCOUNT |
GCOUNT |
... |
END /posledné kľúčové slovo |
Žiadne iné kľúčové slová nie sú povolené medzi XTENSION a NAXISn.
Počet bitov N v dátovom poli rozšírenia, ktoré budú zaberať dáta, sa vypočíta ako :
N = |BITPIX| * GCOUNT * (PCOUNT + NAXIS1 * NAXIS2 * ...* NAXISm. | (1) |
XTENSION je povinné kľúčové slovo pre hlavičku rozšírenia a nesmie sa uvádzať v primárnej hlavičke. Jeho hodnota je znakový reťazec, ktorý pomenúva dané rozšírenie. Pomenovanie nesmie byť zhodné s iným, už schváleným pomenovaním.
PCOUNT určuje dátovú štruktúru konzistentne s rovnicou (1). Hodnota je celé číslo.
GCOUNT určuje dátovú štruktúru konzistentne s rovnicou (1). Hodnota je celé číslo.
EXTEND Ak hlavička obsahuje toto kľúčové slovo a jeho hodnota je "T", tak daný FITS súbor môže, ale nemusí obsahovať rozšírenia. Toto kľúčové slovo musí nasledovať hneď za NAXISn. Ak hlavička neobsahuje slovo NAXISn, tak hneď za NAXIS.
Ďalšie rezervované kľúčové slová
Nie je ich málo, uvedieme si len niektoré zaujímavé. Môžte si pozrieť príklad na konci stránky, kde je skoro u každého kľúčového slova v komentári uvedený jeho význam.
DATE obsahuje dátum vytvorenia FITS súboru v tvare RRRR-MM-DDThh:mm:ss[.ddd]. V zátvorkach je nepovinná časť. (R ako rok, M ako mesiac, D ako deň, T je oddeľovač, h ako hodina, m ako minúta, s ako sekunda, d ako desatiny sekundy.)
OBSERVER obsahuje v znakovom reťazci meno pozorovateľa.
COMMENT je v podstate komentár. Nemá predpísanú hodnotu. 9. až 80. byte môže obsahovať ľubovoľný ASCII text.
BSCALE sa musí uvádzať vždy spolu s BZERO. Hodnota v dátovom poli FITS súboru väčšinou nekorešponduje s fyzikálnou veličinou. Hodnota BSCALE sa uvádza ako desatinné číslo a umožní nám previesť hodnoty v dátovom poli na fyzikálne hodnoty pomocou rovnice (2). Implicitná hodnota pre toto kľúčové slovo je "1.0".
Fyzikálna hodnota = BZERO + BSCALE * hodnota_v_dátovom_poli (2)
BZERO sa musí uvádzať vždy spolu s BSCALE. Hodnota BZERO sa uvádza ako desatinné číslo a určuje nám reálnu hodnotu fyzikálnej veličiny pri nulovej hodnote v dátovom poli, ako je uvedené v rovnici (2). Implicitná hodnota pre toto kľúčové slovo je "0.0".
BUNIT Hodnotou je znakový reťazec, ktorý určuje v akých fyzikálnych jednotkách sú čísla uvedené v BSCALE a BZERO. Mali by spĺnať štandart spomenutý v odstavci Jednotky.
R. J. Hanisch, A. Farris, E. W. Greisen, W. D. Pence, B. M.
Schlesinger, P. J. Teuben, R. W. Thompson and A. Warnock III
Definition
of the Flexible Image Transport System (FITS)
Astronomy &
Astrophysics 376, 359-380 (2001)
O samotnom formáte
Užitočné programy pre prácu, ktoré podporujú formát FITS
V nasledujúcej tabuľke si môžte pozrieť ako vyzerá
hlavička súboru FITS, konkrétne sa jedná o spektrum hviezdy.
Súbor si môžte stiahnuť tu.
SIMPLE = T / Fits standard BITPIX = -32 / Bits per pixel NAXIS = 1 / Number of axes NAXIS1 = 1997 / Axis length ORIGIN = 'NOAO-IRAF FITS Image Kernel July 1999' / FITS file originator IRAF-TLM= '13:32:07 (26/01/2004)' / Time of last modification EXTEND = F / File may contain extensions OBJECT = 'SZ Cam ' / Title of observation DATE = '2004-01-26T12:32:07'/ Date FITS file was generated SYSVER = 'BIAS-headers' / Thu Nov 13 11:17:54 CET 2003 OBSERVAT= 'ONDREJOV' / Name of observatory (IRAF style) LATITUDE= 49.910555 / Telescope latitude (degrees), +49:54:38.0 LONGITUD= 14.783611 / Telescope longitud (degrees), +14:47:01.0 HEIGHT = 0528 / Height above sea level [m]. OBSERVER= 'lf, Lenka, Zasche ' / Observers IMAGETYP= 'object' / Type of observation, eg. FLAT FILENAME= 'na220017.fit' / BIAS filename TELESCOP= 'ZEISS-2m' / 2m Ondrejov observatory telescope TELSYST = 'COUDE' / Telescope setup - COUDE or CASSegrain EXPTIME = 2400.000 / Length of observation excluding pauses DARKTIME= 2400.000 / Length of observation including pauses EXPVAL = 0.000 / Exposure value in photon counts [Mcounts] DATE-OBS= '2004-01-22' / UTC date start of observation TM_START= 66633 / 18:30:33 TM_END = 69062 / 19:11:02 COMMENT = / COMMENT1= / UT = '18:30:33' / UTC of start of observation !UTMIDDL= / UTC of middle of observation - effective INSTRUME= 'COUDE700' / Coude spectrograph setup - 1400/700mm focus CAMERA = 'BROR' / Camera head name DETECTOR= 'SITe 2000x800' / Name of the detector CHIPID = 'SITe005 800x2000' / Name of CCD chip BUNIT = 'ADU' / Unit of the array of image data GAINM = 'HIGH' / Gain mode AMPLM = 'A ' / Amplifier A,B or AB MPP = T / Multiphase pinned mode (T/F) PREFLASH= 0 / Length of preflash in seconds GAIN = 1.07 / Electrons per ADU READNOIS= 7.00 / Readout noise in electrons per pix CCDTEMP = 0.0 / Detector temperature LN2TEMP = 0.0 / CCDXSIZE= 2030 / X Size in pixels of digitised frame CCDYSIZE= 800 / Y Size in pixels of digitised frame CCDXIMSI= 2030 / X Size of useful imaging area CCDYIMSI= 800 / Y Size of useful imaging area CCDXIMST= 1 / X Start pixel of useful imaging area CCDYIMST= 1 / Y Start pixel of useful imaging area CCDXPIXE= 15 / Size in microns of the pixels, in X CCDYPIXE= 15 / Size in microns of the pixels, in Y CCDXBIN = 1 / Binning factor, in X CCDYBIN = 1 / Binning factor, in Y XOVERSC = 0 / YOVERSC = 0 / !AOVERSC= 0 / !CCDSEC = '[00:0000,00:0000]' / Orientation to full frame !DATASEC= '[00:0000,00:0000]' / Image portion of frame !ORIGSEC= '[00:0000,00:0000]' / Original size full frame CCDSUM = '1 1' / CCD binning in both axes GRATNAME= '3' / Grating name - ID GRATANG = 30.25 / 30:15 GRATPOS = 10889 / Grating angle in increments GRATCWAV= / Central Wavelength in A DICHMIR = 1 / Dichroic mirror number SPECFILT= 1 / Spectral filter SLITTYPE= 'BLADE' / Type of slit - blade or image slicers SLITWID = 0.20 / Slit width in mm SLITHEIG= 16.5 / Slit hight in mm COLIMAT = 'OPEN' / Collimator mask status CAMFOCUS= / Camera focus position FLATTYPE= 'PROJECT' / Flat type (Projector/Dome) COMPLAMP= 'ThAr-BS/15mA' / Comparison arc setup COMPMIDA= / CCD line at the middle of comp aperture SEEING = / Estimate of FWHM of seeing disk in arcsec AUTOGUID= 'NO' / Status of autoguider system COMMENT3= / HISTORY1 RA = '4:08:14.6' / 4.137389 DEC = '62:20:30.4' / 62.341778 EQUINOX = 2004.057495 / Equinox of RA and DEC EPOCH = 2004.057495 / Same as EQUINOX - for back compat. !MJD-OBS= / Modified Julian Date of midtime of observation !JD = / Julian Date of midtime of observation ST = '3:51:13.5' / Local sidereal time at start of observation AZIMUTH = 175.7 / Mean azimuth of observation (degrees) ZD = 12.6 / Mean horizon-distance of observation (degrees) TELFOCUS= -14.00 / Telescope focus (milimeters) DOMEAZ = 234.9 / Mean dome azimuth during observation AIRPRESS= 961 / Atmospheric preasure in (hPa) AIRHUMEX= 248.9 / Air humidity outside the dome AIRHUMIN= 69.1 / Air humidity inside the dome OUTTEMP = 193.1 / Temperature outside of the dome DOMETEMP= -8.2 / Temperature inside the dome SPECTEMP= 24.4 / Temperature in spectrograph room CAT-NAME= / Target input-catalogue name CAT-RA = / Target Right Ascension CAT-DEC = / Target Declination CAT-EQUI= / Equinox of target coordinates CAT-EPOC= 2000.00 / Target epoch of proper motions HISTORY2 WCSDIM = 1 LTM1_1 = 1. WAT0_001= 'system=equispec' WAT1_001= 'wtype=linear label=Wavelength units=angstroms' TRIM = 'Jan 23 3:01 Trim data section is [16:2012,430:570]' OVERSCAN= 'Jan 23 3:01 Overscan section is [6:12,1:800] with mean=628.0942' ZEROCOR = 'Jan 23 3:01 Zero level correction image is Zero' FLATCOR = 'Jan 23 3:01 Flat field image is Flat30.25.fit with scale=19537.26' CCDSEC = '[16:2012,430:570]' CCDPROC = 'Jan 23 3:01 CCD processing done' JD = 2453027.28510421 LJD = 2453027. AIRMASS = 1.024402 UTMIDDLE= '18:50:33.0' BANDID1 = 'spectrum - background none, weights variance, clean yes' APNUM1 = '1 1 14.75 63.23' CTYPE1 = 'LINEAR ' CRVAL1 = 6258.22572842875 CRPIX1 = 1. CDELT1 = 0.256658782204344 CD1_1 = 0.256658782204344 DC-FLAG = 0 DCLOG1 = 'REFSPEC1 = na220017na220016.ms 0.4436231' DCLOG2 = 'REFSPEC2 = na220017na220018.ms 0.55637687' DISPCOR = 0 HJD = 2453027.28795303 VHELIO = -17.2080914960978 VLSR = -15.3853550815844 VSUN = ' 20. 18. 30. 1900.' END