Commit e93a90fb authored by Roberto Susino's avatar Roberto Susino
Browse files

Version 2.2

parent 2de5116d
Loading
Loading
Loading
Loading
+4 −12
Original line number Original line Diff line number Diff line
function decode_obt, t_coarse, t_fine, to_double = to_double, from_double = from_double
function decode_obt, t_coarse, t_fine, to_double = to_double, from_double = from_double
	if keyword_set(from_double) then begin
	if keyword_set(to_double) then return, double(t_coarse) + double(t_fine)/65536.0D
		obt = t_coarse
	if keyword_set(from_double) then obt = [ulong(t_coarse), uint((t_coarse - ulong(t_coarse)) * 65536)] else obt = [t_coarse, t_fine]
		t_coarse = ulong(obt)
	return, (obt.tostring()).join(':')
		t_fine = uint((obt - t_coarse) * 65536.0D)
	endif
	
	if keyword_set(to_double) then begin
		return, double(t_coarse) + double(t_fine)/65536.0D
	endif

	return, t_coarse.tostring() + ':' + t_fine.tostring()
end
end
+12 −16
Original line number Original line Diff line number Diff line
function interpol_param, table, par_name, date, empty_params = empty_params
function interpol_param, table, par_name, date, empty_params = empty_params
	i = where(table.par_name eq par_name, count)
	sample = where(table.par_name eq par_name, n)
	if count lt 1 then return, 0.0 ; this should not be necessary
	par_date = dblarr(n)
	par_date = dblarr(count)
	for k = 0, n - 1 do par_date[k] = date_conv(table.gen_time[sample[k]], 'JULIAN')
	par_val = fltarr(count)
	if total(table.eng_val[sample].contains('N/A')) then begin
	for j = 0, count - 1 do begin
		table.eng_val[sample] = table.raw_val[sample]
		k = i[j]
		empty_params = [empty_params, par_name]
		if table.eng_val[k] eq 'N/A' then begin
			table.eng_val[k] = table.raw_val[k]
			if ~ isa(empty_params) then $
				empty_params = table.par_name[k] else $
					empty_params = [empty_params, table.par_name[k]]
	endif
	endif
		par_date[j] = date_conv(table.gen_time[k], 'JULIAN')
	par_val = float(table.eng_val[sample])
		par_val[j] = float(table.eng_val[k])
	s = sort(par_date)
	endfor 
	par_val = par_val[s]
	par_date = par_date[s]
	value = interpol(par_val, par_date, date_conv(date, 'JULIAN'))
	value = interpol(par_val, par_date, date_conv(date, 'JULIAN'))
	if finite(value) then return, value else return, 0.0
	if finite(value) then return, value else return, 0.0
end
end

make_bin_table.pro

0 → 100644
+87 −0
Original line number Original line Diff line number Diff line
function make_bin_table, table
    n = n_elements(table.gen_time)
    gen_time = dblarr(n)
    for k = 0, n - 1 do gen_time[k] = date_conv(table.gen_time[k], 'JULIAN')

    w = where(table.eng_val.contains('N/A'))
    table.eng_val[w] = table.raw_val[w]
    par_names = table.par_name
    s = sort(par_names)
    par_names = par_names[s]
    u = uniq(par_names)
    par_names = par_names[u]

    bin_table = !null
    foreach par_name, par_names do begin
        sample = where(table.par_name eq par_name)

        min_time = min(gen_time[sample], i)
        j = sample[i]
        param = create_struct( $
            'PAR_NAME', par_name, $
            'GEN_TIME', date_conv(gen_time[j], 'FITS'), $
            'RAW_VAL', table.raw_val[j], $
            'ENG_VAL', table.eng_val[j], $
            'UNIT', table.unit[j], $
            'DESCR', table.desc[j])
        bin_table = [bin_table, param]

        max_time = max(gen_time[sample], i)
        j = sample[i]
        param = create_struct( $
            'PAR_NAME', par_name, $
            'GEN_TIME', date_conv(gen_time[j], 'FITS'), $
            'RAW_VAL', table.raw_val[j], $
            'ENG_VAL', table.eng_val[j], $
            'UNIT', table.unit[j], $
            'DESCR', table.desc[j])
        bin_table = [bin_table, param]

        avg_time = (min_time + max_time)/2
        i = max(where(gen_time[sample] le avg_time))
        j = sample[i]
        param = create_struct( $
            'PAR_NAME', par_name, $
            'GEN_TIME', date_conv(gen_time[j], 'FITS'), $
            'RAW_VAL', table.raw_val[j], $
            'ENG_VAL', table.eng_val[j], $
            'UNIT', table.unit[j], $
            'DESCR', table.desc[j])
        bin_table = [bin_table, param]

        if product(table.eng_val[sample].matches('^-?[0-9]+')) then begin
            min_val = min(float(table.eng_val[sample]), i)
            j = sample[i]
            param = create_struct( $
                'PAR_NAME', par_name, $
                'GEN_TIME', date_conv(gen_time[j], 'FITS'), $
                'RAW_VAL', table.raw_val[j], $
                'ENG_VAL', table.eng_val[j], $
                'UNIT', table.unit[j], $
                'DESCR', 'Min. value of ' + table.desc[j])
            bin_table = [bin_table, param]

            max_val = max(float(table.eng_val[sample]), i)
            j = sample[i]
            param = create_struct( $
                'PAR_NAME', par_name, $
                'GEN_TIME', date_conv(gen_time[j], 'FITS'), $
                'RAW_VAL', table.raw_val[j], $
                'ENG_VAL', table.eng_val[j], $
                'UNIT', table.unit[j], $
                'DESCR', 'Max. value of ' + table.desc[j])
            bin_table = [bin_table, param]

            param = create_struct( $
                'PAR_NAME', par_name, $
                'GEN_TIME', 'N/A', $
                'RAW_VAL', string(mean(fix(table.raw_val[sample])), format = '(I0)'), $
                'ENG_VAL', string(mean(double(table.eng_val[sample])), format = '(D0.16)'), $
                'UNIT', (table.unit[sample])[0], $
                'DESCR', 'Average value of ' + (table.desc[sample])[0])
            bin_table = [bin_table, param]
        endif
    endforeach

    return, bin_table
end
+69 −79
Original line number Original line Diff line number Diff line
@@ -7,16 +7,16 @@ pro metis_l1_prep
	; some definitions
	; some definitions


	metis_datatype = list( $
	metis_datatype = list( $
		'vl-image', $				; 0
		'VL image', $						; 0
		'uv-image', $				; 1
		'UV image', $						; 1
		'pcu-accumul', $			; 2
		'PCU accumulation matrix', $		; 2
		'vl-temp-matrix', $			; 3
		'VL temporal standard deviation', $	; 3
		'uv-temp-matrix', $			; 4
		'UV temporal standard deviation', $	; 4
		'vl-c-ray-mat', $			; 5
		'VL cosmic-ray matrix', $			; 5
		'uv-c-ray-mat', $			; 6
		'UV cosmic-ray matrix', $			; 6
		'pcu-event-list', $			; 7
		'PCU event list', $					; 7
		'pcu-test-event-list', $	; 8
		'PCU test event list', $			; 8
		'light-curve' $				; 9
		'VL light-curve' $					; 9
	)
	)


	metis_obj_size = list( $
	metis_obj_size = list( $
@@ -120,7 +120,9 @@ pro metis_l1_prep
	date_end = solo_obt2utc(decode_obt(obt_end, /from_double))
	date_end = solo_obt2utc(decode_obt(obt_end, /from_double))
	date_avg = solo_obt2utc(decode_obt(obt_avg, /from_double))
	date_avg = solo_obt2utc(decode_obt(obt_avg, /from_double))


	date_beg_string = strreplace(strreplace(strmid(date_beg, 0, 19), '-', ''), ':', '')
	date_beg_string = strmid(date_beg, 0, 19)
	date_beg_string = date_beg_string.replace('-', '')
	date_beg_string = date_beg_string.replace(':', '')


	journal, 'UTC time of start acquisition = ' + date_beg
	journal, 'UTC time of start acquisition = ' + date_beg


@@ -133,12 +135,11 @@ pro metis_l1_prep


	; exposure times
	; exposure times


	dit = float(fxpar(metadata_extension_header, 'DIT'))
	dit = fxpar(metadata_extension_header, 'DIT')
	telapse = float(obt_end - obt_beg)
	telapse = obt_end - obt_beg
	xposure = dit/1000.
	xposure = dit/1000.


	; instrument keywords
	; instrument keywords
	; TODO - complete with filter information


	if datatype eq 0 or datatype eq 3 or datatype eq 5 or datatype eq 9 then begin
	if datatype eq 0 or datatype eq 3 or datatype eq 5 or datatype eq 9 then begin
		filter = 'VL'
		filter = 'VL'
@@ -208,31 +209,31 @@ pro metis_l1_prep
	fxaddpar, primary_header, 'DATE-AVG', date_avg, 'Average time of observation', before = 'OBT_BEG'
	fxaddpar, primary_header, 'DATE-AVG', date_avg, 'Average time of observation', before = 'OBT_BEG'
	fxaddpar, primary_header, 'DATE-END', date_end, 'End time of observation', before = 'OBT_BEG'
	fxaddpar, primary_header, 'DATE-END', date_end, 'End time of observation', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMESYS', 'UTC', 'System used for time keywords', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMESYS', 'UTC', 'System used for time keywords', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMRDER', 0.0, 'Estimated random error in time values', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMRDER', 0.0, '[s] Estimated random error in time values', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMSYER', 0.0, 'Estimated systematic error in time values', before = 'OBT_BEG'
	fxaddpar, primary_header, 'TIMSYER', 0.0, '[s] Estimated systematic error in time values', before = 'OBT_BEG'
	fxaddpar, primary_header, 'LEVEL', 'L1'
	fxaddpar, primary_header, 'LEVEL', 'L1'
	fxaddpar, primary_header, 'CREATOR', 'metis_l1_prep.pro'
	fxaddpar, primary_header, 'CREATOR', 'metis_l1_prep.pro'
	fxaddpar, primary_header, 'OBSRVTRY', 'Solar Orbiter', 'Satellite name', before = 'INSTRUME'
	fxaddpar, primary_header, 'OBSRVTRY', 'Solar Orbiter', 'Satellite name', before = 'INSTRUME'
	fxaddpar, primary_header, 'TELESCOP', telescope, 'Telescope that took the measurement', before = 'INSTRUME'
	fxaddpar, primary_header, 'TELESCOP', telescope, 'Telescope that took the measurement', before = 'INSTRUME'
	fxaddpar, primary_header, 'DETECTOR', detector, 'Subunit/sensor', before = 'DATAMIN'
	fxaddpar, primary_header, 'DETECTOR', detector, 'Subunit/sensor', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBJECT', 'TBD', 'The use of the keyword OBJECT is [TBD]', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBJECT', 'TBD', 'The use of the keyword OBJECT is [TBD]', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBS_MODE', planning_data.obs_mode, 'Observation mode or study that has been used to acquire this image', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBS_MODE', planning_data.obs_mode, 'Observation mode', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBS_TYPE', obs_type, 'Subfield of OBS_ID that only contains an encoded version of OBS_MODE', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBS_TYPE', obs_type, 'Encoded version of OBS_MODE', before = 'DATAMIN'
	fxaddpar, primary_header, 'FILTER', filter, 'Filter used to acquire this image', before = 'DATAMIN'
	fxaddpar, primary_header, 'FILTER', filter, 'Filter used to acquire this image', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVELNTH', wavelnth, 'Characteristic wavelength at which the observation was taken', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVELNTH', wavelnth, '[nm] Characteristic wavelength of observation', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEMIN', wavemin, 'The shortest wavelength at which the net (approximate) response function becomes 0.05 times the maximum response. ', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEMIN', wavemin, '[nm] Min. wavelength where response > 0.05 of max.', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEMAX', wavemax, 'The longest wavelength at which the net (approximate) response function becomes 0.05 times the maximum response', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEMAX', wavemax, '[nm] Max. wavelength where response > 0.05 of max.', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEBAND', waveband, 'Description of the wavelength band', before = 'DATAMIN'
	fxaddpar, primary_header, 'WAVEBAND', waveband, 'Bandpass description', before = 'DATAMIN'
	fxaddpar, primary_header, 'XPOSURE', xposure, 'Total effective exposure time of the observation, in seconds', before = 'DATAMIN'
	fxaddpar, primary_header, 'XPOSURE', xposure, '[s] Total effective exposure time', before = 'DATAMIN'
	fxaddpar, primary_header, 'NSUMEXP', 1, 'Number of images summed together to form the observation', before = 'DATAMIN'
	fxaddpar, primary_header, 'NSUMEXP', 1, 'Number of detector readouts summed together', before = 'DATAMIN'
	fxaddpar, primary_header, 'TELAPSE', telapse, 'Total elapsed time between the beginning and end of the complete observation in seconds, including any dead times between exposures', before = 'DATAMIN'
	fxaddpar, primary_header, 'TELAPSE', telapse, '[s] Elapsed time between beginning and end of observation', before = 'DATAMIN'
	fxaddpar, primary_header, 'SOOPNAME', planning_data.soop_name, 'SOOP(s) that this observation belongs to', before = 'DATAMIN'
	fxaddpar, primary_header, 'SOOPNAME', planning_data.soop_name, 'Name of the SOOP campaign that the data belong to', before = 'DATAMIN'
	fxaddpar, primary_header, 'SOOPTYPE', soop_type, before = 'DATAMIN'
	fxaddpar, primary_header, 'SOOPTYPE', soop_type, 'Campaign ID(s) that the data belong to', before = 'DATAMIN'
	fxaddpar, primary_header, 'OBS_ID', planning_data.obs_id, 'Unique identifier for the observation that is associated with the data acquisition', before = 'DATAMIN' 
	fxaddpar, primary_header, 'OBS_ID', planning_data.obs_id, 'Unique ID of the individual observation', before = 'DATAMIN'
	fxaddpar, primary_header, 'TARGET', 'TBD', 'Taget as defined in the SOOP description', before = 'DATAMIN'
	fxaddpar, primary_header, 'TARGET', 'TBD', 'Type of target from planning', before = 'DATAMIN'
	fxaddpar, primary_header, 'BSCALE', 1.0, before = 'DATAMIN'
	fxaddpar, primary_header, 'BSCALE', 1., 'Ratio of physical to array value at 0 offset', before = 'DATAMIN'
	fxaddpar, primary_header, 'BZERO', 0.0, before = 'DATAMIN'
	fxaddpar, primary_header, 'BZERO', 0., 'Physical value for the array value 0', before = 'DATAMIN'
	fxaddpar, primary_header, 'BTYPE', strupcase(metis_datatype[datatype]), 'Science data object type', before = 'DATAMIN'
	fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'Science data object type', before = 'DATAMIN'
	fxaddpar, primary_header, 'BUNIT', 'DN', 'Units of physical value, after application of BSCALE and BZERO', before = 'DATAMIN'
	fxaddpar, primary_header, 'BUNIT', 'DN', 'Units of physical value, after application of BSCALE and BZERO', before = 'DATAMIN'
	if datatype le 6 then begin
	if datatype le 6 then begin
		fxaddpar, primary_header, 'PXBEG1', 1, 'First pixel that has been read out in dimension 1', before = 'COMPRESS'
		fxaddpar, primary_header, 'PXBEG1', 1, 'First pixel that has been read out in dimension 1', before = 'COMPRESS'
@@ -252,18 +253,20 @@ pro metis_l1_prep


	; replace raw values with calibrated values in the primary header
	; replace raw values with calibrated values in the primary header


	empty_params = !null

	if datatype eq 0 or datatype eq 3 or datatype eq 5 then begin
	if datatype eq 0 or datatype eq 3 or datatype eq 5 then begin


		; WARN - DACPOL parameters are not calibrated since a calibration curve does not exist in the IDB. Their calibration in physical units (e.g., voltages or angles) should be done later
		; NOTE - DACPOL parameters are not calibrated since a calibration curve does not exist in the IDB. Their calibration in physical units (e.g., voltages or angles) should be done later


		; fxaddpar, primary_header, 'DAC1POL1', interpol_param(hk_table, 'NIT0E061', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC1POL1', interpol_param(hk_table, 'NIT0E061', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC2POL1', interpol_param(hk_table, 'NIT0E062', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC2POL1', interpol_param(hk_table, 'NIT0E062', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC1POL2', interpol_param(hk_table, 'NIT0E064', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC1POL2', interpol_param(hk_table, 'NIT0E064', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC2POL2', interpol_param(hk_table, 'NIT0E065', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC2POL2', interpol_param(hk_table, 'NIT0E065', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC1POL3', interpol_param(hk_table, 'NIT0E067', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC1POL3', interpol_param(hk_table, 'NIT0E067', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC2POL3', interpol_param(hk_table, 'NIT0E068', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC2POL3', interpol_param(hk_table, 'NIT0E068', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC1POL4', interpol_param(hk_table, 'NIT0E06A', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC1POL4', interpol_param(hk_table, 'NIT0E06A', date_avg, empty_params = empty_params)
		; fxaddpar, primary_header, 'DAC2POL4', interpol_param(hk_table, 'NIT0E06B', date_avg, empty_param = empty_param)
		; fxaddpar, primary_header, 'DAC2POL4', interpol_param(hk_table, 'NIT0E06B', date_avg, empty_params = empty_params)


		fxaddpar, primary_header, 'TSENSOR ', interpol_param(hk_table, 'NIT0E0E0', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'TSENSOR ', interpol_param(hk_table, 'NIT0E0E0', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'PMPTEMP ', interpol_param(hk_table, 'NIT0L00D', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'PMPTEMP ', interpol_param(hk_table, 'NIT0L00D', date_avg, empty_params = empty_params)
@@ -276,15 +279,21 @@ pro metis_l1_prep
	if datatype eq 1 or datatype eq 4 or datatype eq 6 then begin
	if datatype eq 1 or datatype eq 4 or datatype eq 6 then begin
		fxaddpar, primary_header, 'HVU_SCR ', interpol_param(hk_table, 'NIT0E070', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'HVU_SCR ', interpol_param(hk_table, 'NIT0E070', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'HVU_MCP ', interpol_param(hk_table, 'NIT0E071', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'HVU_MCP ', interpol_param(hk_table, 'NIT0E071', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'HV_SCR_V', interpol_param(hk_table, 'NIT0E0B7', date_avg, empty_params = empty_params), after = 'HVU_MCP'
		fxaddpar, primary_header, 'HV_MCP_V', interpol_param(hk_table, 'NIT0E0B6', date_avg, empty_params = empty_params), after = 'HV_SCR_V'
		fxaddpar, primary_header, 'HV_MCP_I', interpol_param(hk_table, 'NIT0E0BF', date_avg, empty_params = empty_params), after = 'HV_MCP_V'
		fxaddpar, primary_header, 'TSENSOR ', interpol_param(hk_table, 'NIT0E050', date_avg, empty_params = empty_params)
		fxaddpar, primary_header, 'TSENSOR ', interpol_param(hk_table, 'NIT0E050', date_avg, empty_params = empty_params)


		journal, 'Header keywords were calibrated using HK parameters:'
		journal, 'Header keywords were calibrated using HK parameters:'
		journal, '  HVU_SCR  = ' + string(fxpar(primary_header, 'HVU_SCR'), format = '(F0)')
		journal, '  HVU_SCR  = ' + string(fxpar(primary_header, 'HVU_SCR'), format = '(F0)')
		journal, '  HVU_MCP  = ' + string(fxpar(primary_header, 'HVU_MCP'), format = '(F0)')
		journal, '  HVU_MCP  = ' + string(fxpar(primary_header, 'HVU_MCP'), format = '(F0)')
		journal, '  HV_SCR_V = ' + string(fxpar(primary_header, 'HV_SCR_V'), format = '(F0)')
		journal, '  HV_MCP_V = ' + string(fxpar(primary_header, 'HV_MCP_V'), format = '(F0)')
		journal, '  HV_MCP_I = ' + string(fxpar(primary_header, 'HV_MCP_I'), format = '(F0)')
		journal, '  TSENSOR  = ' + string(fxpar(primary_header, 'TSENSOR'), format = '(F0)')
		journal, '  TSENSOR  = ' + string(fxpar(primary_header, 'TSENSOR'), format = '(F0)')
	endif
	endif


	if ~ isa(empty_params) then empty_params = ''
	if empty_params eq !null then empty_params = ''


	; replace verbose keyword values
	; replace verbose keyword values


@@ -348,12 +357,7 @@ pro metis_l1_prep
	; modify keywords for file history
	; modify keywords for file history


	date = date_conv(systime(/julian, /utc), 'FITS')
	date = date_conv(systime(/julian, /utc), 'FITS')
	
	fxaddpar, primary_header, 'HISTORY', 'L1 FITS file created on ' + date
	old_history = fxpar(primary_header, 'HISTORY')
	sxdelpar, primary_header, 'HISTORY'
	history = ['L1 FITS file created on ' + date, old_history]
	for k = 0, n_elements(history) - 1 do $
		fxaddpar, primary_header, 'HISTORY', history[k]


	; modify keywords for comments
	; modify keywords for comments


@@ -374,7 +378,6 @@ pro metis_l1_prep
	endif
	endif


	; add checksum and datasum to the fits header
	; add checksum and datasum to the fits header
	; WARN - should this be done at the end? i don't know


	fits_add_checksum, primary_header, image
	fits_add_checksum, primary_header, image


@@ -383,7 +386,6 @@ pro metis_l1_prep
	journal, 'Fits file created:'
	journal, 'Fits file created:'
	journal, '  file name = ' + out_file_name
	journal, '  file name = ' + out_file_name



	; if applicable, save the data binary-table extension as it is
	; if applicable, save the data binary-table extension as it is


	if isa(data_bin_table) then mwrfits, data_bin_table, 'output/' + file_name, data_extension_header, /no_comment, /silent
	if isa(data_bin_table) then mwrfits, data_bin_table, 'output/' + file_name, data_extension_header, /no_comment, /silent
@@ -400,19 +402,7 @@ pro metis_l1_prep
	fxaddpar, hk_extension_header, 'GCOUNT', 1, 'Group count'
	fxaddpar, hk_extension_header, 'GCOUNT', 1, 'Group count'
	fxaddpar, hk_extension_header, 'EXTNAME', 'House-keeping', 'Extension name'
	fxaddpar, hk_extension_header, 'EXTNAME', 'House-keeping', 'Extension name'


	for i = 0, n_elements(hk_table.par_name) - 1 do begin
	hk_bin_table = make_bin_table(hk_table)
		param = create_struct( $
			'PAR_NAME', hk_table.par_name[i], $
			'PACKET', hk_table.packet[i], $
			'GEN_TIME', hk_table.gen_time[i], $
			'REC_TIME', hk_table.rec_time[i], $
			'RAW_VAL', hk_table.raw_val[i], $
			'ENG_VAL', hk_table.eng_val[i], $
			'UNIT', hk_table.unit[i], $
			'DESCR', hk_table.desc[i] $
		)
		if ~ isa(hk_bin_table) then hk_bin_table = param else hk_bin_table = [hk_bin_table, param]
	endfor


	mwrfits, hk_bin_table, out_file_name, hk_extension_header, /no_comment, /silent
	mwrfits, hk_bin_table, out_file_name, hk_extension_header, /no_comment, /silent


strreplace.pro

deleted100644 → 0
+0 −3
Original line number Original line Diff line number Diff line
function strreplace, input, substring, replacement
	return, strjoin(strsplit(input, substring, /extract, /preserve), replacement)
end