pro nis_fits_format, file, indir, outdir, modes, verbose ; STANDALONE program or SUB-PROGRAM of nis_proc ; ; ABSTRACT ; Preformat a header and data space for calibrated NIS data in FITS ; format, midified from the original HDF to FITS product. ; ; INPUT ; file - NIS data file created by SDC in original FITS format ; indir - directory where input files are located ; outdir - output directory. If not '', it is assumed that ; output file is to be saved in directory hosting the ; IDL process. ; modes - calibration modes from NISCAL. dummy values of 0 used if ; none are supplied ; verbose - Toggle verbose output ; ; ; OUTPUT ; NIS data file with modified header and body to ; accomodate all calibration, spice, and other ; processing information. Filename = input filename with .000 ; extension ; ; USES ; readfits ; sxaddpar ; fxaddpar ; sxdelpar ; writefits ; sstrr ; ; HISTORY ; Created by Noam Izenberg, June 10, 1998 ; Modified from nis_hdf_fits.pro and NIS_FITS_Header.pro by ; Switala and Bell, 1996 ; 08/12/98 Quotation mark bug fixed. Proper number formats. ; 10/28/98 Add sequence definition from Uncal file. ; 11/11/98 Fix single spectrum glitch ; 02/06/00 v3.7 fix some out of date comments and a scan mirror variable ; typo. ; 05/04/00 (NRI) v4.1 Saturation Check at .rfd step. Keyword NIS-023 ; changed in nis_fits_format to indicate number of ; saturated channels (replacing "s/c scan pattern ; (APL Doc nn-nnnn) 0=none" ; 06/19/00 (NRI) v4.2 replace motor move indicator (NIS-113) with ; placeholder for heater event indicator ; 04/05/01 (NRI) v5.0 Archive Ready CNISF with additions: ; ; NOTES ; The uncalibrated FITS file is the July 1998 revision, created by Tammy ; Kolarik (APL), Noam Izenberg (APL) and Jim Bell (Cornell) ;------------------------------------------------------------------------------ ; Main ;On_Error, 2 if n_elements(file) eq 0 then begin print print,"Usage is:" print,"nis_fits_format, file, indir, outdir, verbose" print print," file: 'name.FIT' Input file " print," indir: '/dir/' Input file directory, '' = current dir" print," outdir: '/dir/' Output directory. '' = current dir" print," verbose: 0-1 Toggle detailed summary of actions" return endif if n_elements(verbose) eq 0 then verbose = 0 if n_elements(outdir) eq 0 then outdir='' if n_elements(indir) eq 0 then indir='' if n_elements(modes) eq 0 then modes=[0,0,0,0] ; slit mode is defunct filein=file CNFF_flag=0 sl=strlen(filein) if strmid(filein,sl-3,3) eq '000' then begin fileout=filein outdir=indir CNFF_flag = 1 goto, skip endif else fileout=filein+'.000' dat=readfits(indir+filein,h) ; dat is the original nis data: 108 columns of header and spectra. ; h is the uncalibrated NIS FITS header, revised in July, 1998 by TK, NI, and JB ;------------------------------------------------------------------------------- ;rgsz is the new FITS header ; Not long enough, but sxaddpar() will expand it ;datsz is the size of the input nis data array ;------------------------------------------------ rgsz = StrArr(36) ; size of comment range datsz = size(dat) ; size of spectral data file (2D, 108x#spectra) hsz=size(h) ; Header size (1D - ~138 lines) h2=strarr(hsz(1)) ; new header init val=strarr(hsz(1)) ; values in header txt=strarr(hsz(1)) ; text in header com=strarr(hsz(1)) ; comment in header ;extract portions of original header ; h2 is the whole line ; val is the value + some text ; com is comment after the value for sloop=0,hsz(1)-1 do begin h2(sloop)=strmid(h(sloop),10,70) val(sloop)=strmid(h(sloop),10,20) tx1=str_sep(strmid(h(sloop),10,20),"'") sztx=size(tx1) if sztx(1) ne 1 then txt(sloop) = tx1(1) else txt(sloop) = $ strcompress(tx1,/remove_all) com(sloop)=strmid(h(sloop),32,48) endfor ;make text bar a single string variable to clean up the program ;-------------------------------------------------------------- bar='*********************************************************************' ; There must be an END line so sxaddpar() can navigate the array ;--------------------------------------------------------------- rgsz(0) = 'END'+String(Replicate(32b,77)) ; Standard FITS keywords sxaddpar, rgsz, 'SIMPLE ', txt(0),com(0) sxaddpar, rgsz, 'BITPIX ', -32, ' IEEE single precision floating point' sxaddpar, rgsz, 'NAXIS ', 2, ' This is a 2-D spectral data file' sxaddpar, rgsz, 'NAXIS1 ', 259, ' x-axis: 51 hdr words+ 64 channels+ 64 ch. noise' ;!!!!!!!! if datsz(0) eq 1 then $ sxaddpar, rgsz, 'NAXIS2 ', 1, ' y-axis: number of spectra' else $ sxaddpar, rgsz, 'NAXIS2 ', datsz(2), ' y-axis: number of spectra' sxaddpar, rgsz, 'ORIGIN ', 'NEAR-7', ' Originator: Near Science Team' sxaddpar, rgsz, 'DATE-OBS', txt(6),com(6) sxaddpar, rgsz, 'TIME-OBS', txt(7),com(7) sxaddpar, rgsz, 'DOY-OBS ', txt(8),com(8) sxaddpar, rgsz, 'INSTRUME', txt(9),com(9) sxaddpar, rgsz, 'AUTHOR ','Noam Izenberg',' Contact point for this data' sxaddpar, rgsz, 'BUNIT ', txt(11),com(11) sxaddpar, rgsz, 'BSCALE ',1,' Scale factor applied to DN' sxaddpar, rgsz, 'BZERO ',0,' Offset applied to DN' ; ; NEAR generic keywords ; Only some of them can be filled in now; fill in rest later ; We don't know NEAR-001 until we've finished writing this header! ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', $ ' NEAR-SPECIFIC KEYWORDS Taken from Original FITS header' fxaddpar, rgsz, 'COMMENT ', bar fxaddpar, rgsz, 'COMMENT ', ' Data file information' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NEAR-002', '02.00', ' Version of this file format' date1=sstrr( bin_date(systime(0))) date_now=date1(0)+'/'+date1(1)+'/'+date1(2) sxaddpar, rgsz, 'NEAR-003', filein+'.000','Name of this file' sxaddpar, rgsz, 'NEAR-004', date_now, ' Day file was created/updated' sxaddpar, rgsz, 'NEAR-005', 'NIS_FITS_fmt.5.01',' Product ID' sxaddpar, rgsz, 'NEAR-006', 'nis_fits_format.pro', $ ' Program name that produced this file' sxaddpar, rgsz, 'NEAR-007', '05.01',' Version # of above program' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT', $ ' Keyword vals NEAR-008 - 047 refer to 1st spectrum in sequence' fxaddpar, rgsz, 'COMMENT', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NEAR-008', txt(21),com(21) ;DQI sxaddpar, rgsz, 'NEAR-017', long(val(22)),com(22) ;Start MET sxaddpar, rgsz, 'NEAR-019', double(val(23)),com(23),format='(f21.18)' ;Quaternions sxaddpar, rgsz, 'NEAR-020', double(val(24)),com(24),format='(f21.18)' sxaddpar, rgsz, 'NEAR-021', double(val(25)),com(25),format='(f21.18)' sxaddpar, rgsz, 'NEAR-022', double(val(26)),com(26),format='(f21.18)' sxaddpar, rgsz, 'NEAR-023', double(val(27)),com(27),format='(f17.5)' ;J2000 s/c sxaddpar, rgsz, 'NEAR-024', double(val(28)),com(28),format='(f17.5)' sxaddpar, rgsz, 'NEAR-025', double(val(29)),com(29),format='(f17.5)' sxaddpar, rgsz, 'NEAR-026', long(val(30)),com(30) ;Ref frame sxaddpar, rgsz, 'NEAR-027', double(val(31)),com(31),format='(f17.5)' ;J2000 target sxaddpar, rgsz, 'NEAR-028', double(val(32)),com(32),format='(f17.5)' sxaddpar, rgsz, 'NEAR-029', double(val(33)),com(33),format='(f17.5)' sxaddpar, rgsz, 'NEAR-030', double(val(34)),com(34),format='(f17.5)' ;Range sxaddpar, rgsz, 'NEAR-031', double(val(35)),com(35),format='(f17.5)' ;J2000 Sun sxaddpar, rgsz, 'NEAR-032', double(val(36)),com(36),format='(f17.5)' sxaddpar, rgsz, 'NEAR-033', double(val(37)),com(37),format='(f17.5)' sxaddpar, rgsz, 'NEAR-039', long(val(38)),com(38) ;Transmission ch sxaddpar, rgsz, 'NEAR-046', long(val(39)),com(39) ;Target Spice ID sxaddpar, rgsz, 'NEAR-047', txt(40),com(40) ;Target Spice Name ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', $ ' NIS-SPECIFIC KEYWORDS - NIS-XXX' fxaddpar, rgsz, 'COMMENT ', bar fxaddpar, rgsz, 'COMMENT ', $ ' Observational and sequence information = NIS-001 - 023' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-001 ', long(val(41)),com(41) ;MET Hi sxaddpar, rgsz, 'NIS-002 ', long(val(42)),com(42) ;MET Lo sxaddpar, rgsz, 'NIS-003 ', txt(43),com(43) ;Power sxaddpar, rgsz, 'NIS-004 ', txt(44),com(44) ;sc mirr drive sxaddpar, rgsz, 'NIS-005 ', txt(45),com(45) ;shutter drive sxaddpar, rgsz, 'NIS-006 ', txt(46),com(46) ;slit drive sxaddpar, rgsz, 'NIS-007 ', txt(47),com(47) ;slit/shutter sxaddpar, rgsz, 'NIS-008 ', txt(48),com(48) ;dark interleave? sxaddpar, rgsz, 'NIS-009 ', txt(49),com(49) ;Ge gain sxaddpar, rgsz, 'NIS-010 ', txt(50),com(50) ;mirr @ nadir? sxaddpar, rgsz, 'NIS-011 ', txt(51),com(51) ;mirr @ start? sxaddpar, rgsz, 'NIS-012 ', txt(52),com(52) ;cover open? sxaddpar, rgsz, 'NIS-013 ', txt(53),com(53) ;motor move V sxaddpar, rgsz, 'NIS-014 ', txt(54),com(54) ;mirror lost? sxaddpar, rgsz, 'NIS-015 ', txt(55),com(55) ;seq abort? sxaddpar, rgsz, 'NIS-016 ', long(val(56)),com(56) ;mirrpos (cmd) sxaddpar, rgsz, 'NIS-017 ', long(val(57)),com(57) ;mirrpos (act) sxaddpar, rgsz, 'NIS-018 ', long(val(58)),com(58) ;spec integ time ;------------------------------------------------------------------------------ ; Next several fields will read a seires of other information relevant to the ; NIS calibrated product. ; NIS-019-022 define and describe the sequence ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-019 ', txt(75) , com(75) ;Sequence Definition Params 0-4 sxaddpar, rgsz, 'NIS-020 ', txt(76) , com(76) ;Sequence Definition Params 5-9 sxaddpar, rgsz, 'NIS-021 ', txt(77) , com(77) ;Sequence Description 1 sxaddpar, rgsz, 'NIS-022 ', txt(78) , com(78) ;Sequence Description 2 cm=sstrr(modes) modestring=cm(0)+' '+cm(1)+' '+cm(2)+' '+cm(3)+' 00' sxaddpar, rgsz, 'NIS-025 ', modestring, ' CAL modes cal/dk/noiz/rd/slt(defunct)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', $ ' Refer to sequence definition parameters and the short sequence' fxaddpar, rgsz, 'COMMENT ', $ ' definitions for the basics of how this data was gathered. Check' fxaddpar, rgsz, 'COMMENT ', $ ' s/c command files and ancillary notes (if any) for details ' fxaddpar, rgsz, 'COMMENT ', bar fxaddpar, rgsz, 'COMMENT ', $ ' Median NIS temperatures & motor currents for sequence NIS-050 - 064' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-050 ', float(val(60)),com(60),format='(f6.1)' ;temps sxaddpar, rgsz, 'NIS-051 ', float(val(61)),com(61),format='(f6.1)' sxaddpar, rgsz, 'NIS-052 ', float(val(62)),com(62),format='(f6.1)' sxaddpar, rgsz, 'NIS-053 ', float(val(63)),com(63),format='(f6.1)' sxaddpar, rgsz, 'NIS-054 ', float(val(64)),com(64),format='(f6.1)' sxaddpar, rgsz, 'NIS-055 ', float(val(65)),com(65),format='(f6.1)' sxaddpar, rgsz, 'NIS-056 ', float(val(66)),com(66),format='(f6.1)' sxaddpar, rgsz, 'NIS-057 ', float(val(67)),com(67),format='(f6.1)' sxaddpar, rgsz, 'NIS-058 ', float(val(68)),com(68),format='(f6.1)' sxaddpar, rgsz, 'NIS-059 ', float(val(69)),com(69),format='(f6.1)' sxaddpar, rgsz, 'NIS-060 ', float(val(70)),com(70),format='(f6.1)' sxaddpar, rgsz, 'NIS-061 ', float(val(71)),com(71),format='(f6.1)' sxaddpar, rgsz, 'NIS-062 ', float(val(72)),com(72),format='(f7.1)' ;currents sxaddpar, rgsz, 'NIS-063 ', float(val(73)),com(73),format='(f7.1)' sxaddpar, rgsz, 'NIS-064 ', float(val(74)),com(74),format='(f7.1)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', $ ' The next comments indicate what type of data, housekeeping' fxaddpar, rgsz, 'COMMENT ', $ ' information, or derived information exists in each spectrum of ' fxaddpar, rgsz, 'COMMENT ', $ ' this file and which columns of the file that information occupies ' fxaddpar, rgsz, 'COMMENT ', bar fxaddpar, rgsz, 'COMMENT ', ' Format is: Keyword = COLUMN / DATA' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-101 ', 1 ,' NIS-DQI - 1st 4 bits = VC, 2nd 4 bits = DQ' sxaddpar, rgsz, 'NIS-102 ', 2 ,' MET high word | MET = 65536.d0*MET_hi + MET_lo' sxaddpar, rgsz, 'NIS-103 ', 3 ,' MET low word | (if MET_lo < 0, add 65536.d0)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Instrument state telltales' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-104 ', 4 ,' Scan mirror drive select (0=primary,1=2ndary)' sxaddpar, rgsz, 'NIS-105 ', 5 ,' Shutter drive select (0=primary,1=secondary)' sxaddpar, rgsz, 'NIS-106 ', 6 ,' Slit drive select (0=primary,1=secondary)' sxaddpar, rgsz, 'NIS-107 ', 7 ,' Slit/shutter pos. (0=wide,1=narrow,2-3=closed)' sxaddpar, rgsz, 'NIS-108 ', 8 ,' Ge detector gain (0=gain 1,1=gain 10)' sxaddpar, rgsz, 'NIS-109 ', 9 ,' Shutter out (0=yes,1=no)' sxaddpar, rgsz, 'NIS-110 ', 10 ,' Shutter in (0=yes,1=no)' sxaddpar, rgsz, 'NIS-111 ', 11 ,' Slit out (0=yes,1=no)' sxaddpar, rgsz, 'NIS-112 ', 12 ,' Slit in (0=yes,1=no)' sxaddpar, rgsz, 'NIS-200 ', 13 ,' Motor move voltage (0=hold,1=move)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Sequence information' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-114 ', 14 ,' Mirror instr. nadir (0=inactive,1=active)' sxaddpar, rgsz, 'NIS-115 ', 15 ,' Mirror start (0=active,1=inactive)' sxaddpar, rgsz, 'NIS-116 ', 16 ,' Commanded scan mirror position' sxaddpar, rgsz, 'NIS-117 ', 17 ,' Actual scan mirror position' sxaddpar, rgsz, 'NIS-118 ', 18 ,' Mirror lost: 0=no,1=yes' sxaddpar, rgsz, 'NIS-119 ', 19 ,' Sequence aborted (0=no,1=yes)' sxaddpar, rgsz, 'NIS-121 ', 20 ,' Offset to MET of Mid-Spectrum Obs. Time (ms)' sxaddpar, rgsz, 'NIS-201 ', 21 ,' Seq Def param. 1: Sequence Number (0-15)' sxaddpar, rgsz, 'NIS-202 ', 22 ,' Seq Def param. 2: # Repeats' sxaddpar, rgsz, 'NIS-203 ', 23 ,' Seq Def param. 3: Seconds b/t repeats' sxaddpar, rgsz, 'NIS-204 ', 24 ,' Seq Def param. 4: Number of Observations' sxaddpar, rgsz, 'NIS-204 ', 25 ,' Seq Def param. 5: Cal Interval (1-65535)' sxaddpar, rgsz, 'NIS-120 ', 26 ,' Seq Def param. 6: Sec of coadded specs (0-63)' sxaddpar, rgsz, 'NIS-207 ', 27 ,' Seq Def param. 7: # rest spectra (0-63)' sxaddpar, rgsz, 'NIS-208 ', 28 ,' Seq Def param. 8: Secs of co-added dark specs' sxaddpar, rgsz, 'NIS-209 ', 29 ,' Seq Def param. 9: # Scan mirror steps b/t obs' sxaddpar, rgsz, 'NIS-210 ', 30 ,' Seq Def param. 10: Seconds b/t observations' sxaddpar, rgsz, 'NIS-211 ', 31 ,' Cal Mode param 1: Calibration mode' sxaddpar, rgsz, 'NIS-212 ', 32 ,' Cal Mode param 2: Dark Mode' sxaddpar, rgsz, 'NIS-213 ', 33 ,' Cal Mode param 3: Noise mode' sxaddpar, rgsz, 'NIS-214 ', 34 ,' Cal Mode param 4: Radiance Mode' sxaddpar, rgsz, 'NIS-215 ', 35 ,' Cal Mode param 5: Slit mode (Defunct)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Housekeeping temperature and motor current information' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-122 ', 36 ,' Ge detector temperature (deg. C)' sxaddpar, rgsz, 'NIS-123 ', 37 ,' Ge inner board temperature (deg. C)' sxaddpar, rgsz, 'NIS-124 ', 38 ,' Ge outer board temperature (deg. C)' sxaddpar, rgsz, 'NIS-125 ', 39 ,' InGaAs detector temperature 1 (deg. C)' sxaddpar, rgsz, 'NIS-126 ', 40 ,' InGaAs detector temperature 2 (deg. C)' sxaddpar, rgsz, 'NIS-127 ', 41 ,' InGaAs inner board temperature (deg. C)' sxaddpar, rgsz, 'NIS-128 ', 42 ,' InGaAs outer board temperature (deg. C)' sxaddpar, rgsz, 'NIS-129 ', 43 ,' SSG scan motor temperature (deg. C)' sxaddpar, rgsz, 'NIS-130 ', 44 ,' SSG scan mirror temperature (deg. C)' sxaddpar, rgsz, 'NIS-131 ', 45 ,' SSG drive board temperature (deg. C)' sxaddpar, rgsz, 'NIS-132 ', 46 ,' SSG detector base temperature (deg. C)' sxaddpar, rgsz, 'NIS-133 ', 47 ,' NIS DC/DC temperature (deg. C)' sxaddpar, rgsz, 'NIS-134 ', 48 ,' DPU DC/DC temperature (deg. C)' sxaddpar, rgsz, 'NIS-135 ', 49 ,' SSG motor current (mA)' sxaddpar, rgsz, 'NIS-136 ', 50 ,' NIS DC/DC current (mA)' sxaddpar, rgsz, 'NIS-137 ', 51 ,' SSG DC/DC current (mA)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Event and MET based flags' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-216 ', 52 ,' Htr Flag (-1=off/? last, 0=on, 1+=sec since on)' sxaddpar, rgsz, 'NIS-217 ', 53 ,' Polariz Correction Flag (corr to cal spectrum)' ;--------------------------------------------------------------------------- fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' SPICE (position and pointing) information' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-138 ', 54 ,' Range to Target in km' sxaddpar, rgsz, 'NIS-139 ', 55 ,' Instrument quaternion in J2000 ref. (q0=angle)' sxaddpar, rgsz, 'NIS-140 ', 56 ,' (q1) This quaternion represents' sxaddpar, rgsz, 'NIS-141 ', 57 ,' (q2) NIS "mirror nadir" body-fixed frame to' sxaddpar, rgsz, 'NIS-142 ', 58 ,' (q3) J2000 inertial frame' sxaddpar, rgsz, 'NIS-143 ', 59 ,' Spacecraft position in J2000 ref. frame (x) km' sxaddpar, rgsz, 'NIS-144 ', 60 ,' y (km)' sxaddpar, rgsz, 'NIS-145 ', 61 ,' z (km)' sxaddpar, rgsz, 'NIS-146 ', 62 ,' Target position in J2000 ref. frame (x) km' sxaddpar, rgsz, 'NIS-147 ', 63 ,' y (km)' sxaddpar, rgsz, 'NIS-148 ', 64 ,' z (km)' sxaddpar, rgsz, 'NIS-149 ', 65 ,' Sun position in J2000 ref frame (x) km' sxaddpar, rgsz, 'NIS-150 ', 66 ,' y (km)' sxaddpar, rgsz, 'NIS-151 ', 67 ,' z (km)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' RAW NIS Data (units=raw DN; 0 to 4095)' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-218 ', 68 ,' 1st column of 32 Ge channels (Raw DN)' sxaddpar, rgsz, 'NIS-219 ', 100,' 1st column if 32 InGaAs channels (Raw DN)' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Calibrated NIS data (units dep on Cal level)' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ sxaddpar, rgsz, 'NIS-152 ', 132,' 1st col of Ge Cal data (816-1486 nm)' sxaddpar, rgsz, 'NIS-153 ', 164,' 1st col of InGaAs Cal (1372-2708 nm)' sxaddpar, rgsz, 'NIS-154 ', 196,' 1st Col of Ge derived noise' sxaddpar, rgsz, 'NIS-155 ', 228,' 1st Col of InGaAs derived noise' ;------------------------------------------------------------------------------ fxaddpar, rgsz, 'HISTORY ',' ' fxaddpar, rgsz, 'COMMENT ', bar,BEFORE='HISTORY' fxaddpar, rgsz, 'COMMENT ', ' Modification history' fxaddpar, rgsz, 'COMMENT ', bar sxdelpar, rgsz, 'HISTORY ' ;------------------------------------------------------------------------------ if hsz(1) gt 134 then begin for hloop = 135,hsz(1)-1 do begin fxaddpar, rgsz, 'HISTORY',strmid(h(hloop),10,70) endfor endif fxaddpar, rgsz, 'HISTORY ','Formatted for calibration by nis_fits_format.pro' ;fxaddpar, rgsz, ' ', ' ', AFTER='COMMENT' ; ; Add NEAR-001 now that we know how big the header will be ; iHeadSize = (Size(rgsz))(1) * 80 + 160 if (iHeadSize MOD 2880 NE 0) then iHeadSize = 2880 * (iHeadSize/2880 + 1) fxaddpar, rgsz, 'NEAR-001', iHeadSize, $ ' Offset from start of file to data (bytes)', BEFORE='NEAR-002' ;------------------------------------------------------------------------------ ;Next, setup the new calibrated data file structure, insert the uncal data ; inside, Leave placeholders empty. ;------------------------------------------------------------------------------ ; First, fill in all the pre-existing data if datsz(0) eq 2 then outdat=fltarr(259,datsz(2)) else outdat=fltarr(259) outdat(0,*) = dat(37,*) ;instrument DQI outdat(1:2,*) = dat(0:1,*) ;sequence MET outdat(3:18,*) = dat(3:18,*) ;Slit,hutter,mirror info outdat(19,*) = dat(20,*) ;Offset to MET of mid-spectrum obs time ; Columns 21-30----------- ; Sequence info is in txt(75) and txt(76) ;OR vars1 = Fix( STRSPLIT( txt(75), /EXTRACT) ) ; Split up text file by whitespace vars2 = fix( STRSPLIT( txt(76), /EXTRACT) ) ; single spectrum qualifier if datsz(0) eq 1 then datsz(2)=1 outdat(20:24,*)=rebin(vars1,5,datsz(2)) outdat(25:29,*)=rebin(vars2,5,datsz(2)) ; Columns 31-35----------- ; Calibration modes passed from nis_proc outdat(30:33,*)=rebin(modes,4,datsz(2)) ; Columns 36-51----------- outdat(35:50,*) = dat(21:36,*)/10. ;temp/current vals in degrees outdat(51,*) = 0. ; set heater event flag to zero outdat(52,*) = 0. ; set heaPolarization correction flag to zero ; Columns 54-67----------- ; SPICE INFO -Quats, J2000 coords, range (EMPTY) ;DATA SPACE outdat(67:130,*)=dat(44:107,*) ; Raw Nis Data - permanent record outdat(131:194,*)=dat(44:107,*) ; Raw Nis Data ; To be modified by calibration ; Columns 196-259----------- ; Placeholder for derived Noise (EMPTY) ; ; Write output data to FITS format file ; WriteFITS, outdir+fileout, outdat, rgsz skip: if verbose eq 1 and CNFF_flag ne 1 then begin print,' STEP 0: calibrated file preformatting completed' print,' >>>> CNFF created: '+fileout print,' >>>> In directory: '+outdir endif if verbose eq 1 and CNFF_flag eq 1 then begin print,' Input file already CNFF formatted' print,' >>>> '+fileout print,' STEP 0: skippped' endif file=fileout return end