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

Minor improvements and optimizations

parent c37f3cf9
Loading
Loading
Loading
Loading
+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('/  ', '/ ')
+34 −27
Original line number Original line Diff line number Diff line
@@ -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


@@ -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'
@@ -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'
@@ -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'
@@ -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
@@ -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
@@ -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
@@ -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