Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
  • Version-3.0.0
  • Version-3.1.0
  • Version-3.1.1
  • Version-3.1.2
  • Version-3.2.0
  • Version-3.2.1
  • Version-3.3.0
8 results

Target

Select target project
  • metis-scientific-pipeline/l1-pipeline
1 result
Select Git revision
  • master
  • Version-3.0.0
  • Version-3.1.0
  • Version-3.1.1
  • Version-3.1.2
  • Version-3.2.0
  • Version-3.2.1
  • Version-3.3.0
8 results
Show changes

Commits on Source 2

pro fix_fits_header, filename
fits_info, filename, n_ext = n_ext, /silent
for ext = 0, n_ext do begin
data = readfits(filename, header, exten_no = ext, /silent)
data = readfits(filename, header, exten_no = ext, /noscale, /silent)
for k = 0, n_elements(header) - 1 do begin
while header[k].matches('\/ +') do begin
header[k] = header[k].replace('/ ', '/ ')
......
......@@ -68,7 +68,8 @@ pro metis_l1_prep
; if the data product is a light curve or a pcu-event list, read the data binary hk_table
if datatype gt 6 then data_bin_table = mrdfits(input.file_name, 1, data_extension_header, /silent) else data_bin_table = !null
if datatype gt 6 then $
data_bin_table = mrdfits(input.file_name, 1, data_extension_header, /silent) else data_bin_table = !null
; if the data product is an accumulation matrix, look for the accumulation vector extension and read it if it exists
......@@ -297,6 +298,20 @@ pro metis_l1_prep
; adjust the primary header (it is almost the same for all data product types)
; remove redundant and misleading keywords
sxdelpar, primary_header, 'WIDTH'
sxdelpar, primary_header, 'HEIGHT'
sxdelpar, primary_header, 'X_SIZE'
sxdelpar, primary_header, 'Y_SIZE'
sxdelpar, primary_header, 'Z_SIZE'
sxdelpar, primary_header, 'P_BANDS'
sxdelpar, primary_header, 'N_BANDS'
sxdelpar, primary_header, 'ORIG_X'
sxdelpar, primary_header, 'ORIG_Y'
; update the other keywords
fxaddpar, primary_header, 'FILENAME', file_name
fxaddpar, primary_header, 'PARENT', file_basename(input.file_name), 'name of the parent file', before = 'APID'
fxaddpar, primary_header, 'DATE', date, 'date and time of FITS file creation', before = 'OBT_BEG'
......@@ -315,7 +330,7 @@ pro metis_l1_prep
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, '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', 'Sun', 'the use of the keyword OBJECT is [TBD]', before = 'DATAMIN'
fxaddpar, primary_header, 'OBS_MODE', planning_data.obs_mode, 'observation 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'
......@@ -329,7 +344,7 @@ pro metis_l1_prep
fxaddpar, primary_header, 'SOOPNAME', planning_data.soop_name, 'name of the SOOP that the data belong to', before = 'DATAMIN'
fxaddpar, primary_header, 'SOOPTYPE', sooptype, 'campaign ID(s) that the data belong to', before = 'DATAMIN'
fxaddpar, primary_header, 'OBS_ID', planning_data.obs_id, 'unique ID of the individual observation', before = 'DATAMIN'
fxaddpar, primary_header, 'TARGET', 'TBD', 'type of target from planning', before = 'DATAMIN'
fxaddpar, primary_header, 'TARGET', 'Corona', 'type of target from planning', before = 'DATAMIN'
fxaddpar, primary_header, 'BSCALE', 1, 'ratio of physical to array value at 0 offset', before = 'DATAMIN'
fxaddpar, primary_header, 'BZERO', 0, 'physical value for the array value 0', before = 'DATAMIN'
fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'science data object type', before = 'DATAMIN'
......@@ -412,7 +427,7 @@ pro metis_l1_prep
if empty_params eq !null then empty_params = ''
; replace with text keyword values
; replace with user-friendly keyword values
key = fxpar(primary_header, 'MEASKIND', count = count)
if count gt 0 then begin
......@@ -467,31 +482,24 @@ pro metis_l1_prep
if datatype le 6 then begin
wcs = metis_wcs(header, cal_pack, ref_detector = ref_detector)
foreach element, wcs do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
foreach element, wcs do $
fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
endif
; append solar keywords
ephemeris = solo_get_ephemeris(header, cal_pack)
foreach element, ephemeris do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
fxaddpar, primary_header, 'HISTORY', 'WCS and solar ephemeris:'
fxaddpar, primary_header, 'HISTORY', ' SKD version = ' + kernel_version
; remove redundant and misleading keywords
sxdelpar, primary_header, 'WIDTH'
sxdelpar, primary_header, 'HEIGHT'
sxdelpar, primary_header, 'X_SIZE'
sxdelpar, primary_header, 'Y_SIZE'
sxdelpar, primary_header, 'Z_SIZE'
sxdelpar, primary_header, 'P_BANDS'
sxdelpar, primary_header, 'N_BANDS'
sxdelpar, primary_header, 'ORIG_X'
sxdelpar, primary_header, 'ORIG_Y'
foreach element, ephemeris do $
fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE'
; modify keywords for file history
history = header.history
sxdelpar, primary_header, 'HISTORY'
for k = 1, n_elements(history) - 1 do $
fxaddpar, primary_header, 'HISTORY', history[k]
fxaddpar, primary_header, 'HISTORY', 'WCS and solar ephemeris:'
fxaddpar, primary_header, 'HISTORY', ' SKD version = ' + kernel_version
fxaddpar, primary_header, 'HISTORY', 'L1 FITS file created on ' + date
; modify keywords for comments
......@@ -512,14 +520,12 @@ pro metis_l1_prep
fxaddpar, primary_header, 'COMMENT', comment[k]
endif
; rectify the image if requested
; make rotations if necessary
if not ref_detector then begin
data = metis_rectify(data, filter)
quality_matrix = metis_rectify(quality_matrix, filter)
endif
if not ref_detector then data = metis_rectify(data, filter)
if not ref_detector then quality_matrix = metis_rectify(quality_matrix, filter)
; add checksum and datasum to the fits header and save
; write the fits file
fits_add_checksum, primary_header, data
mwrfits, data, out_file_name, primary_header, /no_comment, /create, /silent
......@@ -527,35 +533,87 @@ pro metis_l1_prep
journal, 'Fits file created:'
journal, ' file name = ' + out_file_name
base_header = primary_header
sxdelpar, base_header, 'SIMPLE'
sxdelpar, base_header, 'EXTEND'
sxdelpar, base_header, 'COMMENT'
sxdelpar, base_header, 'HISTORY'
; if applicable, save the data binary-table extension as it is
if isa(data_bin_table) then begin
if datatype lt 9 then fits_add_checksum, data_extension_header, data_bin_table
mwrfits, data_bin_table, out_file_name, data_extension_header, /no_comment, /silent
extension_header = base_header
sxdelpar, extension_header, 'BSCALE'
sxdelpar, extension_header, 'BZERO'
sxdelpar, extension_header, 'BUNIT'
sxdelpar, extension_header, 'BTYPE'
sxdelpar, extension_header, 'BLANK'
sxdelpar, extension_header, 'DATAMIN'
sxdelpar, extension_header, 'DATAMAX'
fxaddpar, extension_header, 'XTENSION', 'BINTABLE', 'binary table extension', before = 'BITPIX'
fxaddpar, extension_header, 'NAXIS', 2, 'number of data axes'
fxaddpar, extension_header, 'NAXIS1', 0, 'length of dimension 1', after = 'NAXIS'
fxaddpar, extension_header, 'NAXIS2', 0, 'length of dimension 2', after = 'NAXIS1'
fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
fxaddpar, extension_header, 'TFIELDS', 0, 'number of columns in table', before = 'LONGSTRN'
fxaddpar, extension_header, 'EXTNAME', fxpar(data_extension_header, 'EXTNAME'), 'extension name', before = 'LONGSTRN'
; add the extension to the fits file
mwrfits, data_bin_table, out_file_name, extension_header, /no_comment, /silent
endif
; save the quality matrix
if datatype le 6 and isa(quality_matrix) then begin
quality_matrix_header = !null
fxaddpar, quality_matrix_header, 'PCOUNT', 0, 'parameter count'
fxaddpar, quality_matrix_header, 'GCOUNT', 1, 'group count'
fxaddpar, quality_matrix_header, 'EXTNAME', 'Quality matrix', 'extension name'
fits_add_checksum, quality_matrix_header, quality_matrix
mwrfits, quality_matrix, out_file_name, quality_matrix_header, /no_comment, /silent
extension_header = base_header
sxdelpar, extension_header, 'BLANK'
fxaddpar, extension_header, 'XTENSION', 'IMAGE', 'image extension', before = 'BITPIX'
fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
fxaddpar, extension_header, 'EXTNAME', 'Quality matrix', 'extension name', before = 'LONGSTRN'
fxaddpar, extension_header, 'BTYPE', 'Pixel quality'
fxaddpar, extension_header, 'BUNIT', 'None'
fxaddpar, extension_header, 'DATAMIN', min(quality_matrix, /nan)
fxaddpar, extension_header, 'DATAMAX', max(quality_matrix, /nan)
fxaddpar, extension_header, 'COMMENT', 'Quality matrix values:'
fxaddpar, extension_header, 'COMMENT', ' NaN = saturated or null L0 pixel counts'
fxaddpar, extension_header, 'COMMENT', ' 0 = unreliable pixel value'
fxaddpar, extension_header, 'COMMENT', ' 1 = good pixel'
; add the extension to the fits file
fits_add_checksum, extension_header, quality_matrix
mwrfits, quality_matrix, out_file_name, extension_header, /no_comment, /silent
journal, 'Quality-matrix extension correctly added.'
endif
; build the telemetry extension
hk_extension_header = !null
fxaddpar, hk_extension_header, 'PCOUNT', 0, 'parameter count'
fxaddpar, hk_extension_header, 'GCOUNT', 1, 'group count'
fxaddpar, hk_extension_header, 'EXTNAME', 'House-keeping', 'extension name'
hk_bin_table = make_bin_table(hk_table)
mwrfits, hk_bin_table, out_file_name, hk_extension_header, /no_comment, /silent
extension_header = base_header
sxdelpar, extension_header, 'BSCALE'
sxdelpar, extension_header, 'BZERO'
sxdelpar, extension_header, 'BUNIT'
sxdelpar, extension_header, 'BTYPE'
sxdelpar, extension_header, 'BLANK'
sxdelpar, extension_header, 'DATAMIN'
sxdelpar, extension_header, 'DATAMAX'
fxaddpar, extension_header, 'XTENSION', 'BINTABLE', 'binary table extension', before = 'BITPIX'
fxaddpar, extension_header, 'NAXIS', 2, 'number of data axes'
fxaddpar, extension_header, 'NAXIS1', 0, 'length of dimension 1', after = 'NAXIS'
fxaddpar, extension_header, 'NAXIS2', 0, 'length of dimension 2', after = 'NAXIS1'
fxaddpar, extension_header, 'PCOUNT', 0, 'parameter count', before = 'LONGSTRN'
fxaddpar, extension_header, 'GCOUNT', 1, 'group count', before = 'LONGSTRN'
fxaddpar, extension_header, 'TFIELDS', 0, 'number of columns in table', before = 'LONGSTRN'
fxaddpar, extension_header, 'EXTNAME', 'House-keeping', 'extension name', before = 'LONGSTRN'
; add the extension to the fits file
mwrfits, hk_bin_table, out_file_name, extension_header, /no_comment, /silent
journal, 'HK binary-table extension correctly added.'
......@@ -586,5 +644,6 @@ pro metis_l1_prep
journal, 'Exiting without errors.'
journal
exit, status = 0
end
\ No newline at end of file