;#> makeecsvhead.dc2 ; Identifier makeecsvhead ; ; Purpose Create a real FITS header for data stored in an ECSV ; IDL structure ; ; Synopsis status = makeecsvhead( header, data ) ; ; Arguments Name I/O Type Description ; ----------------------------------------------------- ; header O String header ; data I any structure/array; ; Returns Status giving header length or fail code (-1) as ; integer ; ;#< FUNCTION makeecsvhead, head, data=data ; Headers present in all ecsv files get_date, dte ecsv_base = $ ['SIMPLE = T / Standard FITS format',$ 'BITPIX = 8 / number of bits per data pixel',$ 'NAXIS = 0 / number of data axes',$ 'EXTEND = T / FITS dataset may contain extension',$ 'ORIGIN = ''SSC/SIRTF I&T '' / Data written by MAKEYAAARHEAD',$ 'COMMENT SIRTF ECSV',$ 'FILENAME= '' '' / File name in ISO archive',$ 'DATE = '''+dte +''' / Date of writing: DD/MM/YY',$ 'FILEVERS= '' '' / Version ID in ISO archive',$ 'DEC = 0.00000 / Declination',$ 'TELESCOP= ''OSTL '' / Data acquisition telescope',$ 'INSTRUME= '' '' / Data acquisition instrument',$ 'OBSERVER= '' '' / Observer name/identification',$ 'TMIN1 = 0.00000 / Minimum SCET in file',$ 'TMAX1 = 0.00000 / Maximum SCET in file',$ 'CATEGORY= '' '' / Category of data',$ 'DATE-OBS= '' '' / Date of data acquisition: DD/MM/YY',$ 'END'] ecsv_base2=['XTENSION= ''BINTABLE'' / Binary table FITS extension',$ 'BITPIX = 8 / 8 BITS character format',$ 'NAXIS = 2 / Tables are 2-d character array',$ 'NAXIS1 = 52 / Characters in a row',$ 'NAXIS2 = 0 / Number of rows in a table',$ 'PCOUNT = 0 / Parameter count always 0',$ 'GCOUNT = 1 / Group count always 1',$ 'TFIELDS = 14 / No of columns in table',$ 'TFORM1 = ''1E '' /',$ 'TTYPE1 = ''SCET '' / spacecraft event time',$ 'TUNIT1 = '' '' /',$ 'TFORM2 = ''1J '' /',$ 'TTYPE2 = ''SECS '' / seconds of SCET',$ 'TUNIT2 = ''SEC '' /',$ 'TFORM3 = ''1E '' /',$ 'TTYPE3 = ''CHAN '' / CTD channel',$ 'TUNIT3 = '' '' /',$ 'TFORM4 = ''1J '' /',$ 'TTYPE4 = ''CHTITLE '' / channel title',$ 'TUNIT4 = '' '' /',$ 'TFORM5 = ''1J '' /',$ 'TTYPE5 = ''DNVAL '' / channel value in DN',$ 'TUNIT5 = '' '' /',$ 'TFORM6 = ''1J '' /',$ 'TTYPE6 = ''EUVAL '' / channel value in EU',$ 'TFORM7 = ''1J '' /',$ 'TTYPE7 = ''SCLK '' / spacecraft clock time key',$ 'TFORM8 = ''2B '' /',$ 'TTYPE8 = ''CHTYPE '' / channel type',$ 'TUNIT8 = '' '' /',$ 'TFORM9 = ''1J '' / ',$ 'TTYPE9 = ''REDTYPE '' / red alarm type',$ 'TFORM10 = ''1J '' /',$ 'TTYPE10 = ''REDLOW '' / red low limit',$ 'TUNIT10 = '' '' /',$ 'TFORM11 = ''1J '' /',$ 'TTYPE11 = ''REDHIGH '' / red high limit',$ 'TUNIT11 = '' '' /',$ 'TFORM12 = ''1J '' /',$ 'TTYPE12 = ''ERT '' / earth receive time',$ 'TUNIT12 = '' '' /',$ 'END'] ; copy base keywords from primary and secondary headers over head='' ;zero head for i = 0, n_elements(ecsv_base) - 1 do begin line = ecsv_base(i) + string(replicate(32b,80)) ; pad with zero's head = head + strmid(line,0,80) ; truncate to 80 characters endfor missing = 36 - (strlen(head)/80 mod 36) head = head + string(replicate(32b,missing*80)) ; ensure block of 2880 for i = 0, n_elements(ecsv_base2) - 1 do begin line = ecsv_base2(i) + string(replicate(32b,80)) ; pad with zero's head = head + strmid(line,0,80) ; truncate to 80 characters endfor missing = 36 - (strlen(head)/80 mod 36) head = head + string(replicate(32b,missing*80)) ; ensure block of 2880 status = strlen( head ) return, status END