Loading fix_fits_header.pro +1 −1 Original line number Original line Diff line number Diff line pro fix_fits_header, filename pro fix_fits_header, filename fits_info, filename, n_ext = n_ext, /silent fits_info, filename, n_ext = n_ext, /silent for ext = 0, n_ext do begin 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 for k = 0, n_elements(header) - 1 do begin while header[k].matches('\/ +') do begin while header[k].matches('\/ +') do begin header[k] = header[k].replace('/ ', '/ ') header[k] = header[k].replace('/ ', '/ ') Loading metis_l1_prep.pro +34 −27 Original line number Original line Diff line number Diff line Loading @@ -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 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 ; if the data product is an accumulation matrix, look for the accumulation vector extension and read it if it exists Loading Loading @@ -297,6 +298,20 @@ pro metis_l1_prep ; adjust the primary header (it is almost the same for all data product types) ; 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, 'FILENAME', file_name fxaddpar, primary_header, 'PARENT', file_basename(input.file_name), 'name of the parent file', before = 'APID' 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' fxaddpar, primary_header, 'DATE', date, 'date and time of FITS file creation', before = 'OBT_BEG' Loading @@ -315,7 +330,7 @@ pro metis_l1_prep 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', '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_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, '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' Loading @@ -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, '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, '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, '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, '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, 'BZERO', 0, 'physical value for the array value 0', before = 'DATAMIN' fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'science data object type', before = 'DATAMIN' fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'science data object type', before = 'DATAMIN' Loading Loading @@ -412,7 +427,7 @@ pro metis_l1_prep if empty_params eq !null then empty_params = '' 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) key = fxpar(primary_header, 'MEASKIND', count = count) if count gt 0 then begin if count gt 0 then begin Loading Loading @@ -467,31 +482,24 @@ pro metis_l1_prep if datatype le 6 then begin if datatype le 6 then begin wcs = metis_wcs(header, cal_pack, ref_detector = ref_detector) 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 endif ; append solar keywords ; append solar keywords ephemeris = solo_get_ephemeris(header, cal_pack) ephemeris = solo_get_ephemeris(header, cal_pack) foreach element, ephemeris do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE' 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' ; modify keywords for file history ; 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 fxaddpar, primary_header, 'HISTORY', 'L1 FITS file created on ' + date ; modify keywords for comments ; modify keywords for comments Loading @@ -512,14 +520,12 @@ pro metis_l1_prep fxaddpar, primary_header, 'COMMENT', comment[k] fxaddpar, primary_header, 'COMMENT', comment[k] endif endif ; rectify the image if requested ; make rotations if necessary if not ref_detector then begin if not ref_detector then data = metis_rectify(data, filter) data = metis_rectify(data, filter) if not ref_detector then quality_matrix = metis_rectify(quality_matrix, filter) quality_matrix = metis_rectify(quality_matrix, filter) endif ; add checksum and datasum to the fits header and save ; write the fits file fits_add_checksum, primary_header, data fits_add_checksum, primary_header, data mwrfits, data, out_file_name, primary_header, /no_comment, /create, /silent mwrfits, data, out_file_name, primary_header, /no_comment, /create, /silent Loading Loading @@ -586,5 +592,6 @@ pro metis_l1_prep journal, 'Exiting without errors.' journal, 'Exiting without errors.' journal journal exit, status = 0 exit, status = 0 end end No newline at end of file Loading
fix_fits_header.pro +1 −1 Original line number Original line Diff line number Diff line pro fix_fits_header, filename pro fix_fits_header, filename fits_info, filename, n_ext = n_ext, /silent fits_info, filename, n_ext = n_ext, /silent for ext = 0, n_ext do begin 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 for k = 0, n_elements(header) - 1 do begin while header[k].matches('\/ +') do begin while header[k].matches('\/ +') do begin header[k] = header[k].replace('/ ', '/ ') header[k] = header[k].replace('/ ', '/ ') Loading
metis_l1_prep.pro +34 −27 Original line number Original line Diff line number Diff line Loading @@ -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 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 ; if the data product is an accumulation matrix, look for the accumulation vector extension and read it if it exists Loading Loading @@ -297,6 +298,20 @@ pro metis_l1_prep ; adjust the primary header (it is almost the same for all data product types) ; 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, 'FILENAME', file_name fxaddpar, primary_header, 'PARENT', file_basename(input.file_name), 'name of the parent file', before = 'APID' 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' fxaddpar, primary_header, 'DATE', date, 'date and time of FITS file creation', before = 'OBT_BEG' Loading @@ -315,7 +330,7 @@ pro metis_l1_prep 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', '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_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, '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' Loading @@ -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, '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, '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, '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, '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, 'BZERO', 0, 'physical value for the array value 0', before = 'DATAMIN' fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'science data object type', before = 'DATAMIN' fxaddpar, primary_header, 'BTYPE', metis_datatype[datatype], 'science data object type', before = 'DATAMIN' Loading Loading @@ -412,7 +427,7 @@ pro metis_l1_prep if empty_params eq !null then empty_params = '' 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) key = fxpar(primary_header, 'MEASKIND', count = count) if count gt 0 then begin if count gt 0 then begin Loading Loading @@ -467,31 +482,24 @@ pro metis_l1_prep if datatype le 6 then begin if datatype le 6 then begin wcs = metis_wcs(header, cal_pack, ref_detector = ref_detector) 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 endif ; append solar keywords ; append solar keywords ephemeris = solo_get_ephemeris(header, cal_pack) ephemeris = solo_get_ephemeris(header, cal_pack) foreach element, ephemeris do fxaddpar, primary_header, element.name, element.value, element.comment, before = 'DATATYPE' 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' ; modify keywords for file history ; 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 fxaddpar, primary_header, 'HISTORY', 'L1 FITS file created on ' + date ; modify keywords for comments ; modify keywords for comments Loading @@ -512,14 +520,12 @@ pro metis_l1_prep fxaddpar, primary_header, 'COMMENT', comment[k] fxaddpar, primary_header, 'COMMENT', comment[k] endif endif ; rectify the image if requested ; make rotations if necessary if not ref_detector then begin if not ref_detector then data = metis_rectify(data, filter) data = metis_rectify(data, filter) if not ref_detector then quality_matrix = metis_rectify(quality_matrix, filter) quality_matrix = metis_rectify(quality_matrix, filter) endif ; add checksum and datasum to the fits header and save ; write the fits file fits_add_checksum, primary_header, data fits_add_checksum, primary_header, data mwrfits, data, out_file_name, primary_header, /no_comment, /create, /silent mwrfits, data, out_file_name, primary_header, /no_comment, /create, /silent Loading Loading @@ -586,5 +592,6 @@ pro metis_l1_prep journal, 'Exiting without errors.' journal, 'Exiting without errors.' journal journal exit, status = 0 exit, status = 0 end end No newline at end of file