Last changed 21 January 2004 by jeffh @ naic.edu
Spectral line observing the WAPP produces binary FITS files using SDFITS keywords. This document describes what FITS options are chosen and in place at this time. SDFITS defines the minimal conventional keywords. The goal here was to create a simple standard data file that is complex enough to meet our needs yet simple enough for observers to understand without a huge investment of time.
Here is the place you can get the FITS standard documents
The fits file as written has the following segments:
SIMPLE = T / file does conform to FITS standard BITPIX = 8 / number of bits per data pixel NAXIS = 0 / number of data axes EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365. COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. DATE = '2003-08-27T14:11:17' / file creation date (YYYY-MM-DDThh:mm:ss UTC) TELESCOP= 'ARECIBO 305m' HISTORY Single-Dish FITS WAPP data, jeffh@naic.edu END
Important keywords include:
The table entries are of the form:
TTYPE1 = ... TFORM1 = ... TUNIT1 = ... ... TTYPE8 = 'crval2 ' / RA TFORM8 = '1D ' / TUNIT8 = 'deg ' /
The "type" field is the field name. The "form" field is the data type. The "unit" field describes the associated units of this value.
The way to find the end of this header is the next 2880 byte boundary after the END keyword is found.
TTYPE1 = 'DATA ' / Field 1: Actual Data TFORM1 = 'PE(16384)' / Max data size TUNIT1 = ' ' / physical unit of fieldThe PE(16384) means that this is an 8 byte entry in the table holding an offset to the data in the heap and an integer length. The 'E' means that its 4 byte floating point. The 16384 means that is the largest value of length possible. The offset is relative to the start of the heap. The length is in units of 'E' - 4 byte floats.
Here is a drawing showing the file structure of a binary fits file with the varaible length array extension.
Here is one place you can find the definition of SDFITS.
The SDFITS and AO keywords as they exist today in the WAPP software are defined below. These are mostly the ones Mike Nolan uses in his interim correlator to fits data converter. I intend this as a starting point for discussion and not an imposition. The was a ridiculous requirement of AIPS++ that all entries are in double. I stopped following this. FITS readers that follow the FITS standard can read this file.
All entries are now in CAPS. At the end of the table, there is now a complete description of the state of the IFLO system. Every controlable switch (that I know about) is specified here.
SIMPLE = T / file does conform to FITS standard BITPIX = 8 / number of bits per data pixel NAXIS = 0 / number of data axes EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format defined in Astronomy and COMMENT Astrophysics Supplement Series v44/p363, v44/p371, v73/p359, v73/p365.COMMENT Contact the NASA Science Office of Standards and Technology for the COMMENT FITS Definition document #100 and other FITS information. DATE = '2004-01-15T13:50:58' / file creation date (YYYY-MM-DDThh:mm:ss UTC) TELESCOP= 'ARECIBO 305m' HISTORY Single-Dish FITS WAPP data, jeffh@naic.edu END ... to 2880 byte boundary XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / 8-bit bytes NAXIS = 2 / 2-dimensional binary table NAXIS1 = 488 / width of table in bytes NAXIS2 = 2 / number of rows in table PCOUNT = 8013168 / file byte offset to start of heap GCOUNT = 1 / one data group (required keyword) TFIELDS = 86 / number of fields in each row DATE-OBS= '2004-01-15T13:50:58'/ Date and Time of File Start ID = 'a9999 ' / Experiment Project ID string NMATRIX = 1 / Required SD keyword EXTNAME = 'SDFITS ' / single dish fits STIME = 20 / [ns] Correlator Sampling Interval OBSMODE = 'LINE ' / This file containes spectra TELESCOP= 'ARECIBO 305m' / Telescope name SITELAT = 18.3435001 / Latitude (Geodetic, VLBI) SITELONG= -66.7533035 / Longidude (Geodetic, VLBI) SITEELEV= 496 / Altitude above MSL STARTON = 0 / Start on 0,1, or 10 sec tick TTYPE1 = 'DATA ' / Field 1: Actual Data TFORM1 = 'PE(16384)' / Max data size TUNIT1 = ' ' / physical unit of field TTYPE2 = 'OBJECT ' / Name of source observed TFORM2 = '16A ' / TUNIT2 = ' ' / TDISP2 = '16A ' / TTYPE3 = 'CTYPE1 ' / Axis type and Doppler Correction TFORM3 = '8A ' / TUNIT3 = ' ' / TDISP3 = '8A ' / TTYPE4 = 'CRVAL1 ' / Center Frequency TFORM4 = '1D ' / TUNIT4 = 'Hz ' / TDISP4 = 'F12.1 ' / TTYPE5 = 'CDELT1 ' / Frequency Interval TFORM5 = '1D ' / TUNIT5 = 'Hz ' / TDISP5 = 'F8.1 ' / TTYPE6 = 'CRPIX1 ' / Pixel of Center Frequency TFORM6 = '1D ' / TUNIT6 = ' ' / TDISP6 = 'F7.1 ' / TTYPE7 = 'CRVAL2 ' / requested source RA TFORM7 = '1D ' / TUNIT7 = 'deg ' / TDISP7 = 'F10.6 ' / TTYPE8 = 'CRVAL3 ' / requested source DEC TFORM8 = '1D ' / TUNIT8 = 'deg ' / TDISP8 = 'F11.6 ' / TTYPE9 = 'CRVAL4 ' / Polarization (neg -> Pol, Pos -> Stokes) TFORM9 = '1D ' / TUNIT9 = ' ' / TDISP9 = 'F3.0 ' / TTYPE10 = 'CRVAL5 ' / hours since midnight from obsdate TFORM10 = '1D ' / TUNIT10 = 'h ' / TDISP10 = 'F6.0 ' / TTYPE11 = 'OBSDATE ' / yyyymmdd start of this obs TFORM11 = '8A ' / TUNIT11 = ' ' / TDISP11 = 'A8 ' / TTYPE12 = 'TSYS ' / last computed Tsys TFORM12 = '1D ' / TUNIT12 = 'K ' / TDISP12 = 'F6.1 ' / TTYPE13 = 'BANDWID ' / Overall Bandwidth of spectrum TFORM13 = '1D ' / TUNIT13 = 'Hz ' / TDISP13 = 'F8.0 ' / TTYPE14 = 'RESTFREQ' / Rest freq at band center TFORM14 = '1D ' / TUNIT14 = 'Hz ' / TDISP14 = 'F11.0 ' / TTYPE15 = 'VELOCITY' / Requested Velocity TFORM15 = '1D ' / TUNIT15 = 'km/s ' / TDISP15 = 'F6.1 ' / TTYPE16 = 'JD ' / Julian Day Number at Exposure Start TFORM16 = '1D ' / TUNIT16 = 'day ' / TDISP16 = 'F13.5 ' / TTYPE17 = 'LST ' / Local Mean Siderial Time TFORM17 = '1D ' / TUNIT17 = 'hours ' / TDISP17 = 'F9.3 ' / TTYPE18 = 'EXPOSURE' / Exposure TFORM18 = '1D ' / TUNIT18 = 's ' / TDISP18 = 'F7.0 ' / TTYPE19 = 'ENC_AZIMUTH' / Encoder Azimuth on sky (not feed) TFORM19 = '1D ' / TUNIT19 = 'deg ' / TDISP19 = 'F7.3 ' / TTYPE20 = 'ENC_ELEVATIO' / Encoder Elevation TFORM20 = '1D ' / TUNIT20 = 'deg ' / TDISP20 = 'F6.3 ' / TTYPE21 = 'ENC_ALTEL' / Encoder Elevation of other Carriage House TFORM21 = '1D ' / TUNIT21 = 'deg ' / TDISP21 = 'F6.3 ' / TTYPE22 = 'OFF_RA ' / Ra offset applied at req_time TFORM22 = '1D ' / TUNIT22 = 'deg ' / TDISP22 = 'F13.5 ' / TTYPE23 = 'OFF_DEC ' / Dec offset applied at req_time TFORM23 = '1D ' / TUNIT23 = 'deg ' / TDISP23 = 'F13.5 ' / TTYPE24 = 'OFF_CS ' / Coordinate system of offs TFORM24 = '8A ' / TUNIT24 = ' ' / TDISP24 = 'A8 ' / TTYPE25 = 'OFF_TIME' / seconds from midnight ast TFORM25 = '1D ' / TUNIT25 = 's ' / TDISP25 = 'F13.5 ' / TTYPE26 = 'RATE_RA ' / rate of change of ra TFORM26 = '1D ' / TUNIT26 = 'deg/sec ' / TDISP26 = 'F13.5 ' / TTYPE27 = 'RATE_DEC' / rate of change of dec TFORM27 = '1D ' / TUNIT27 = 'deg/sec ' / TDISP27 = 'F13.5 ' / TTYPE28 = 'RATE_CS ' / Coordinate system of rates TFORM28 = '8A ' / TUNIT28 = ' ' / TDISP28 = 'A8 ' / TTYPE29 = 'RATE_DUR' / How long has rate been applied TFORM29 = '1D ' / TUNIT29 = 's ' / TDISP29 = 'F13.5 ' / TTYPE30 = 'RATE_TIME' / from midnight ast TFORM30 = '1D ' / TUNIT30 = 's ' / TDISP30 = 'seconds ' / TTYPE31 = 'CUR_TOL ' / computed great circle tolerance TFORM31 = '1D ' / TUNIT31 = 's ' / TDISP31 = 'F13.5 ' / TTYPE32 = 'REQ_TOL ' / requested tolerance TFORM32 = '1D ' / TUNIT32 = 's ' / TDISP32 = 'F13.5 ' / TTYPE33 = 'RAJ ' / Ra J2000 back computed from az,za TFORM33 = '1D ' / TUNIT33 = 'deg ' / TDISP33 = 'F13.5 ' / TTYPE34 = 'DECJ ' / Dec J2000 back computed from az, za TFORM34 = '1D ' / TUNIT34 = 'deg ' / TDISP34 = 'F13.5 ' / TTYPE35 = 'PATTERN_NAME' / Name of pattern ONOFF CAL OFFON DRIFT ON OFF TFORM35 = '8A ' / TUNIT35 = ' ' / TDISP35 = '8A ' / TTYPE36 = 'OBS_NAME' / Name of lowest obs ON OFF CALON CALOFF DRIFT TFORM36 = '8A ' / TUNIT36 = ' ' / TDISP36 = '8A ' / TTYPE37 = 'PATTERN_SCAN' / unique number for pattern YDDDnnnnn TFORM37 = '1J ' / TUNIT37 = ' ' / TDISP37 = 'J9 ' / TTYPE38 = 'OBS_SCAN' / unique num for low-level observation YDDDnnnnn TFORM38 = '1J ' / TUNIT38 = ' ' / TDISP38 = 'J9 ' / TTYPE39 = 'OBS_NUM ' / sequential observation number of obs_scans TFORM39 = '1J ' / TUNIT39 = ' ' / TDISP39 = 'J8 ' / TTYPE40 = 'OBS_TOT ' / total number of obs_nums TFORM40 = '1J ' / TUNIT40 = ' ' / TDISP40 = 'J8 ' / TTYPE41 = 'ENC_TIME' / Time when enc_AZ and enc_ZA measured TFORM41 = '1J ' / TUNIT41 = 'msec ' / TDISP41 = 'J8 ' / TTYPE42 = 'LAGS_IN ' / number of Lags - same as bytes of data/4 TFORM42 = '1J ' / TUNIT42 = ' ' / TDISP42 = 'F6.0 ' / TTYPE43 = 'CORRMODE' / Correlator Mode TFORM43 = '24A ' / TUNIT43 = ' ' / TDISP43 = 'A8 ' / TTYPE44 = 'CALTYPE ' / Cal type TFORM44 = '8A ' / TUNIT44 = ' ' / TDISP44 = 'A8 ' / TTYPE45 = 'FRONTEND' / Receiver name TFORM45 = '8A ' / TUNIT45 = ' ' / TDISP45 = 'A8 ' / TTYPE46 = 'PLAT_POWER' / Power from platform meter TFORM46 = '1D ' / TUNIT46 = ' ' / TDISP46 = 'G10.3 ' / TTYPE47 = 'CNTRL_POWER' / Power from control room meter TFORM47 = '1D ' / TUNIT47 = ' ' / TDISP47 = 'G10.3 ' / TTYPE48 = 'TOT_POWER' / Scaled Power in zero-lag TFORM48 = '1D ' / TUNIT48 = ' ' / TDISP48 = 'F10.7 ' / TTYPE49 = 'TCAL ' / data TFORM49 = '1D ' / TUNIT49 = 'add ' / TDISP49 = 'iflo ' / TTYPE50 = 'SYN1 ' / platform synthesizer TFORM50 = '1D ' / TUNIT50 = 'Hz ' / TDISP50 = 'F10.7 ' / TTYPE51 = 'SYNFRQ ' / control room synthesizers TFORM51 = '4D ' / TUNIT51 = 'Hz ' / TDISP51 = 'F10.7 ' / TTYPE52 = 'NIFS ' / number of ifs in this observation TFORM52 = '1B ' / TUNIT52 = ' ' / TDISP52 = 'B1 ' / TTYPE53 = 'IFVAL ' / which polarization, 0-1 or 0-3 for stokes TFORM53 = '1B ' / TUNIT53 = ' ' / TDISP53 = 'B1 ' / TTYPE54 = 'ATTN_COR' / Correlator attenuator 0-15 TFORM54 = '1B ' / TUNIT54 = ' ' / TDISP54 = 'B1 ' / TTYPE55 = 'FLIP ' / True if spectrum flipped TFORM55 = '1B ' / TUNIT55 = ' ' / TDISP55 = 'B1 ' / TTYPE56 = 'WAPPNO ' / WAPP number 0-3 or 0-7 for ALFA TFORM56 = '1B ' / TUNIT56 = ' ' / TDISP56 = 'B1 ' / TTYPE57 = 'MASTER ' / 0 greg 1 carriage house TFORM57 = '1B ' / TUNIT57 = ' ' / TDISP57 = 'B1 ' / TTYPE58 = 'ONSOURCE' / if onsource at enc_time TFORM58 = '1B ' / TUNIT58 = ' ' / TDISP58 = 'B1 ' / TTYPE59 = 'BLANKING' / Blanking turned on TFORM59 = '1B ' / TUNIT59 = ' ' / TDISP59 = 'B1 ' / TTYPE60 = 'LBWHYB ' / LBandWide Hybrid is in (for circular pol) TFORM60 = '1B ' / TUNIT60 = ' ' / TDISP60 = 'B1 ' / TTYPE61 = 'SHCL ' / true if receiver shutter closed TFORM61 = '1B ' / TUNIT61 = ' ' / TDISP61 = 'B1 ' / TTYPE62 = 'SBSHCL ' / true if Sband receiver shutter closed TFORM62 = '1B ' / TUNIT62 = ' ' / TDISP62 = 'B1 ' / TTYPE63 = 'RFNUM ' / platform position of the receiver selectror TFORM63 = '1B ' / TUNIT63 = ' ' / TDISP63 = 'B1 ' / TTYPE64 = 'ZMNORMAL' / platform transfer switch to reverse channels, t TFORM64 = '1B ' / TUNIT64 = ' ' / TDISP64 = 'B1 ' / TTYPE65 = 'RFATTN ' / platform attenuator position TFORM65 = '2B ' / TUNIT65 = ' ' / TDISP65 = 'B1 ' / TTYPE66 = 'IFNUM ' / platform if selector, 1/300 2/750, 3/1500, 4/10 TFORM66 = '1B ' / TUNIT66 = ' ' / TDISP66 = 'B1 ' / TTYPE67 = 'IFATTN ' / platform IF attenuator positions TFORM67 = '2B ' / TUNIT67 = ' ' / TDISP67 = 'B1 ' / TTYPE68 = 'FIBER ' / true if platform fiber is chosen (always the caTFORM68 = '1B ' / TUNIT68 = ' ' / TDISP68 = 'B1 ' / TTYPE69 = 'AC2SW ' / platform ac power to various instruments and ot TFORM69 = '1B ' / TUNIT69 = ' ' / TDISP69 = 'B1 ' / TTYPE70 = 'PHBSIG ' / platform converter combiner signal phase adjust TFORM70 = '1B ' / TUNIT70 = ' ' / TDISP70 = 'B1 ' / TTYPE71 = 'HYBRID ' / platform converter combiner hybrid TFORM71 = '1B ' / TUNIT71 = ' ' / TDISP71 = 'B1 ' / TTYPE72 = 'PHBLO ' / settings TFORM72 = '1B ' / TUNIT72 = 'control ' / TDISP72 = 'room ' / TTYPE73 = 'XFNORMAL' / control room transfer switch true = deflt TFORM73 = '1B ' / TUNIT73 = ' ' / TDISP73 = 'B1 ' / TTYPE74 = 'NOISE ' / control room noise on TFORM74 = '1B ' / TUNIT74 = ' ' / TDISP74 = 'B1 ' / TTYPE75 = 'GAIN ' / gain of control room amps TFORM75 = '2B ' / TUNIT75 = ' ' / TDISP75 = 'B1 ' / TTYPE76 = 'INPFRQ ' / control room input distributor position TFORM76 = '1B ' / TUNIT76 = ' ' / TDISP76 = 'B1 ' / TTYPE77 = 'MIXER ' / control room mixer source switches TFORM77 = '4B ' / TUNIT77 = ' ' / TDISP77 = 'B1 ' / TTYPE78 = 'VLBAINP ' / control room vlba input switch position TFORM78 = '1B ' / TUNIT78 = ' ' / TDISP78 = 'B1 ' / TTYPE79 = 'AMPINP ' / control room amplifier input source switches TFORM79 = '4B ' / TUNIT79 = ' ' / TDISP79 = 'B1 ' / TTYPE80 = 'EXTINP ' / control room external input selector switches TFORM80 = '4B ' / TUNIT80 = ' ' / TDISP80 = 'B1 ' / TTYPE81 = 'SYNDEST ' / control room synthesizer destinations TFORM81 = '4B ' / TUNIT81 = ' ' / TDISP81 = 'B1 ' / TTYPE82 = 'CALSRC ' / control room cal source bit TFORM82 = '1B ' / TUNIT82 = ' ' / TDISP82 = 'B1 ' / TTYPE83 = 'VIS30MHZ' / control room greg 1 ch 0 TFORM83 = '1B ' / TUNIT83 = ' ' / TDISP83 = 'B1 ' / TTYPE84 = 'PWRMET ' / control room power meter input switch TFORM84 = '1B ' / TUNIT84 = ' ' / TDISP84 = 'B1 ' / TTYPE85 = 'BLANK430' / control room 430 blanking on TFORM85 = '1B ' / TUNIT85 = ' ' / TDISP85 = 'B1 ' / TTYPE86 = 'FILL ' / fill TFORM86 = '7B ' / TUNIT86 = ' ' / TDISP86 = 'B1 ' / THEAP = 7997760 / byte off to strt of heap from btable strt END