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

Fix some header keywords (CHECKSUM and DATASUM)

parent 1c47a0c4
Loading
Loading
Loading
Loading

fix_fits_header.pro

0 → 100644
+12 −0
Original line number Diff line number Diff line
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)
        for k = 0, n_elements(header) - 1 do begin
            while header[k].matches('\/  +') do begin
                header[k] = header[k].replace('/  ', '/ ')
            endwhile
        endfor
        modfits, filename, 0, header, exten_no = ext
    endfor
end
 No newline at end of file
+246 −241
Original line number Diff line number Diff line
pro metis_l2_prep_uv

    ; keyword defining if the detector reference frame must be used for the output

    ref_detector = 0
@@ -199,7 +198,7 @@ pro metis_l2_prep_uv
    fxaddpar, primary_header, 'HISTORY', 'L2 FITS file created on ' + date

    if not ref_detector then data = metis_rectify(data, 'UV')
	fits_add_checksum, primary_header, data
    fits_add_checksum, primary_header, float(data)
    mwrfits, float(data), out_file_name, primary_header, /no_comment, /create, /silent

    journal, 'Fits file created:'
@@ -216,6 +215,7 @@ pro metis_l2_prep_uv
    sxdelpar, base_header, 'HISTORY'

    extension_header = base_header
    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'
@@ -228,7 +228,7 @@ pro metis_l2_prep_uv
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'UV')
	fits_add_checksum, extension_header, quality_matrix
    fits_add_checksum, extension_header, float(quality_matrix)
    mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -238,6 +238,7 @@ pro metis_l2_prep_uv
    if not ref_detector then error = metis_rectify(error, 'UV')
    error_matrix = data * sqrt(error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
@@ -250,6 +251,10 @@ pro metis_l2_prep_uv

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name

    ; write the auxiliary information file

    output = { $
+292 −287
Original line number Diff line number Diff line
pro metis_l2_prep_vl_generic

    ; keyword defining if the detector reference frame must be used for the output

    ref_detector = 0
@@ -193,16 +192,16 @@ pro metis_l2_prep_vl_generic
    if header.pol_id ne 5 then begin
        if fix(header.hdr_vers) le 4 then begin
            case header.pol_id of
				0: dacpol = header.dac1pol1
				1: dacpol = header.dac1pol1
				2: dacpol = header.dac1pol2
				3: dacpol = header.dac1pol3
				4: dacpol = header.dac1pol4
                0: dacpol = header.dac1Pol1
                1: dacpol = header.dac1Pol1
                2: dacpol = header.dac1Pol2
                3: dacpol = header.dac1Pol3
                4: dacpol = header.dac1Pol4
            endcase
        endif

        if fix(header.hdr_vers) ge 5 then begin
			dacpol = header.dac1pol1
            dacpol = header.dac1Pol1
        endif

        k = where(dacpol_cal.dacpol eq dacpol)
@@ -236,7 +235,7 @@ pro metis_l2_prep_vl_generic
    ; add checksum and datasum to the fits header

    if not ref_detector then data = metis_rectify(data, 'VL')
	fits_add_checksum, primary_header, data
    fits_add_checksum, primary_header, float(data)
    mwrfits, float(data), out_file_name, primary_header, /no_comment, /create, /silent

    journal, 'Fits file created:'
@@ -253,6 +252,7 @@ pro metis_l2_prep_vl_generic
    sxdelpar, base_header, 'HISTORY'

    extension_header = base_header
    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'
@@ -265,7 +265,7 @@ pro metis_l2_prep_vl_generic
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
	fits_add_checksum, extension_header, quality_matrix
    fits_add_checksum, extension_header, float(quality_matrix)
    mwrfits, float(quality_matrix), out_file_name, extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -275,6 +275,7 @@ pro metis_l2_prep_vl_generic
    if not ref_detector then error = metis_rectify(error, 'VL')
    error_matrix = data * sqrt(error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
@@ -286,6 +287,10 @@ pro metis_l2_prep_vl_generic

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name

    ; write the auxiliary information file

    output = { $
+773 −763
Original line number Diff line number Diff line
pro metis_l2_prep_vl_polariz

    ; keyword defining if the detector reference frame must be used for the output

    ref_detector = 0
@@ -51,7 +50,6 @@ pro metis_l2_prep_vl_polariz
    quality_matrix = 1.

    for k = 0, 3 do begin

        ; read the input image

        image = mrdfits(input.file_name[k], 0, primary_header, /silent)
@@ -100,10 +98,10 @@ pro metis_l2_prep_vl_polariz
        ; check consistency of pmp raw voltages (dacpol)

        if $
			header.dac1pol1 ne header.dac2pol1 or $
			header.dac1pol2 ne header.dac2pol2 or $
			header.dac1pol3 ne header.dac2pol3 or $
			header.dac1pol4 ne header.dac2pol4 then begin
            header.dac1Pol1 ne header.dac2Pol1 or $
            header.dac1Pol2 ne header.dac2Pol2 or $
            header.dac1Pol3 ne header.dac2Pol3 or $
            header.dac1Pol4 ne header.dac2Pol4 then begin
                journal, 'Error 05: image has inconsistent PMP voltages.'
                journal
                exit, status = 5
@@ -193,26 +191,24 @@ pro metis_l2_prep_vl_polariz
    stokes_subdark = dblarr(header.naxis1, header.naxis2, 3)
    stokes_abs_error = dblarr(header.naxis1, header.naxis2, 3)
    for i = 0, 2 do begin
		
        journal, '  stokes = ' + stokes_name[i]

        for j = 0, 3 do begin

            journal, '  pol_id = ' + string(data_header[j].pol_id, format = '(I0)')

            ; check the polarization state of the image and select the corresponding dacpol value

            if fix(data_header[j].hdr_vers) le 4 then begin
                case data_header[j].pol_id of
					1: dacpol = data_header[j].dac1pol1
					2: dacpol = data_header[j].dac1pol2
					3: dacpol = data_header[j].dac1pol3
					4: dacpol = data_header[j].dac1pol4
                    1: dacpol = data_header[j].dac1Pol1
                    2: dacpol = data_header[j].dac1Pol2
                    3: dacpol = data_header[j].dac1Pol3
                    4: dacpol = data_header[j].dac1Pol4
                endcase
            endif

            if fix(data_header[j].hdr_vers) ge 5 then begin
				dacpol = data_header[j].dac1pol1
                dacpol = data_header[j].dac1Pol1
            endif

            ; select the correct demodulation tensor element based on effective angle and stokes paramater
@@ -312,8 +308,8 @@ pro metis_l2_prep_vl_polariz

    ; compute the polarization angle from the stokes q and u

	pol_angle = 0.5D0 * atan(stokes[*, *, 2], stokes[*, *, 1])
	pol_angle_error = (q^2 * u_abs_error^2 + u^2 * q_abs_error^2)/(2D0 * pb_image^4)/pol_angle^2
    pol_angle = 0.5d0 * atan(stokes[*, *, 2], stokes[*, *, 1])
    pol_angle_error = (q ^ 2 * u_abs_error ^ 2 + u ^ 2 * q_abs_error ^ 2) / (2d0 * pb_image ^ 4) / pol_angle ^ 2

    pol_angle = pol_angle * !radeg

@@ -436,7 +432,7 @@ pro metis_l2_prep_vl_polariz
    ; add checksum and datasum to the fits header

    if not ref_detector then pb_image = metis_rectify(pb_image, 'VL')
	fits_add_checksum, primary_pb_header, pb_image
    fits_add_checksum, primary_pb_header, float(pb_image)
    mwrfits, float(pb_image), out_file_name[0], primary_pb_header, /no_comment, /create, /silent

    journal, 'Polarized-brightness FITS file created:'
@@ -453,6 +449,7 @@ pro metis_l2_prep_vl_polariz
    sxdelpar, base_header, 'HISTORY'

    extension_header = base_header
    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'
@@ -465,7 +462,7 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then pb_quality_matrix = metis_rectify(pb_quality_matrix, 'VL')
	fits_add_checksum, extension_header, pb_quality_matrix
    fits_add_checksum, extension_header, float(pb_quality_matrix)
    mwrfits, float(pb_quality_matrix), out_file_name[0], extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -475,17 +472,22 @@ pro metis_l2_prep_vl_polariz
    if not ref_detector then pb_error = metis_rectify(pb_error, 'VL')
    error_matrix = pb_image * 0. ; pb_image * sqrt(pb_error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
    fxaddpar, extension_header, 'BTYPE', 'Absolute error'
    fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
    fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
	fits_add_checksum, extension_header, error_matrix
    fits_add_checksum, extension_header, float(error_matrix)
    mwrfits, float(error_matrix), out_file_name[0], extension_header, /no_comment, /silent

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name[0]

    ; keywords specific for total brightness images

    primary_tb_header = primary_header
@@ -509,7 +511,7 @@ pro metis_l2_prep_vl_polariz
    ; add checksum and datasum to the fits header

    if not ref_detector then tb_image = metis_rectify(tb_image, 'VL')
	fits_add_checksum, primary_tb_header, tb_image
    fits_add_checksum, primary_tb_header, float(tb_image)
    mwrfits, float(tb_image), out_file_name[1], primary_tb_header, /no_comment, /create, /silent

    journal, 'Total-brightness FITS file created:'
@@ -526,6 +528,7 @@ pro metis_l2_prep_vl_polariz
    sxdelpar, base_header, 'HISTORY'

    extension_header = base_header
    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'
@@ -538,7 +541,7 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then tb_quality_matrix = metis_rectify(tb_quality_matrix, 'VL')
	fits_add_checksum, extension_header, tb_quality_matrix
    fits_add_checksum, extension_header, float(tb_quality_matrix)
    mwrfits, float(tb_quality_matrix), out_file_name[1], extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -548,17 +551,22 @@ pro metis_l2_prep_vl_polariz
    if not ref_detector then tb_error = metis_rectify(tb_error, 'VL')
    error_matrix = tb_image * 0. ; tb_image * sqrt(tb_error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
    fxaddpar, extension_header, 'BTYPE', 'Absolute error'
    fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
    fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
	fits_add_checksum, extension_header, error_matrix
    fits_add_checksum, extension_header, float(error_matrix)
    mwrfits, float(error_matrix), out_file_name[1], extension_header, /no_comment, /silent

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name[1]

    ; keywords specific for polarization-angle images

    primary_polangle_header = primary_header
@@ -582,7 +590,7 @@ pro metis_l2_prep_vl_polariz
    ; add checksum and datasum to the fits header

    if not ref_detector then pol_angle = metis_rectify(pol_angle, 'VL')
	fits_add_checksum, primary_polangle_header, pol_angle
    fits_add_checksum, primary_polangle_header, float(pol_angle)
    mwrfits, float(pol_angle), out_file_name[2], primary_polangle_header, /no_comment, /create, /silent

    journal, 'Polarization-angle FITS file created:'
@@ -599,6 +607,7 @@ pro metis_l2_prep_vl_polariz
    sxdelpar, base_header, 'HISTORY'

    extension_header = base_header
    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'
@@ -611,7 +620,7 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then pol_angle_quality_matrix = metis_rectify(quality_matrix, 'VL')
	fits_add_checksum, extension_header, pol_angle_quality_matrix
    fits_add_checksum, extension_header, float(pol_angle_quality_matrix)
    mwrfits, float(pol_angle_quality_matrix), out_file_name[2], extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -621,17 +630,22 @@ pro metis_l2_prep_vl_polariz
    if not ref_detector then pol_angle_error = metis_rectify(pol_angle_error, 'VL')
    error_matrix = pol_angle * 0. ; pol_angle * sqrt(pol_angle_error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
    fxaddpar, extension_header, 'BTYPE', 'Absolute error'
    fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
    fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
	fits_add_checksum, extension_header, error_matrix
    fits_add_checksum, extension_header, float(error_matrix)
    mwrfits, float(error_matrix), out_file_name[2], extension_header, /no_comment, /silent

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name[2]

    ; management of stokes images

    journal, 'Calibrating Stokes parameter I...'
@@ -677,7 +691,7 @@ pro metis_l2_prep_vl_polariz

    ; add checksum and datasum to the fits header
    if not ref_detector then i = metis_rectify(i, 'VL')
	fits_add_checksum, primary_stokes_header, i
    fits_add_checksum, primary_stokes_header, float(i)
    mwrfits, float(i), out_file_name[3], primary_stokes_header, /no_comment, /create, /silent

    journal, 'Stokes parameters FITS file created:'
@@ -685,14 +699,14 @@ pro metis_l2_prep_vl_polariz

    ; add the extension with the stokes q image

	extension_header = primary_stokes_header
	sxdelpar, extension_header, 'SIMPLE'
	sxdelpar, extension_header, 'EXTEND'
	sxdelpar, extension_header, 'DATASUM'
	sxdelpar, extension_header, 'CHECKSUM'
	sxdelpar, extension_header, 'COMMENT'
	sxdelpar, extension_header, 'HISTORY'
    base_header = primary_stokes_header
    sxdelpar, base_header, 'SIMPLE'
    sxdelpar, base_header, 'EXTEND'
    sxdelpar, base_header, 'DATASUM'
    sxdelpar, base_header, 'CHECKSUM'

    extension_header = base_header
    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', 'Stokes Q', 'extension name', before = 'LONGSTRN'
@@ -702,21 +716,15 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'DATAMAX', max(q, /nan)
    sxdelpar, extension_header, 'EXTEND'
    if not ref_detector then q = metis_rectify(q, 'VL')
	fits_add_checksum, extension_header, q
    fits_add_checksum, extension_header, float(q)
    mwrfits, float(q), out_file_name[3], extension_header, /no_comment, /silent

    journal, 'Q parameter extension correctly added.'

    ; add the extension with the stokes u image

	extension_header = primary_stokes_header
	sxdelpar, extension_header, 'SIMPLE'
	sxdelpar, extension_header, 'EXTEND'
	sxdelpar, extension_header, 'DATASUM'
	sxdelpar, extension_header, 'CHECKSUM'
	sxdelpar, extension_header, 'COMMENT'
	sxdelpar, extension_header, 'HISTORY'
	
    extension_header = base_header
    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', 'Stokes U', 'extension name', before = 'LONGSTRN'
@@ -726,21 +734,18 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'DATAMAX', max(u, /nan)
    sxdelpar, extension_header, 'EXTEND'
    if not ref_detector then u = metis_rectify(u, 'VL')
	fits_add_checksum, extension_header, u
    fits_add_checksum, extension_header, float(u)
    mwrfits, float(u), out_file_name[3], extension_header, /no_comment, /silent

    journal, 'U parameter extension correctly added.'

	; add the extension with the quality matrix

	base_header = primary_stokes_header
	sxdelpar, base_header, 'EXTEND'
	sxdelpar, base_header, 'DATASUM'
	sxdelpar, base_header, 'CHECKSUM'
    sxdelpar, base_header, 'COMMENT'
    sxdelpar, base_header, 'HISTORY'

    ; add the extension with the quality matrix

    extension_header = base_header
    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'
@@ -753,7 +758,7 @@ pro metis_l2_prep_vl_polariz
    fxaddpar, extension_header, 'COMMENT', '  0   = unreliable pixel value'
    fxaddpar, extension_header, 'COMMENT', '  1   = good pixel'
    if not ref_detector then quality_matrix = metis_rectify(quality_matrix, 'VL')
	fits_add_checksum, extension_header, quality_matrix
    fits_add_checksum, extension_header, float(quality_matrix)
    mwrfits, float(quality_matrix), out_file_name[3], extension_header, /no_comment, /silent

    journal, 'Quality-matrix extension correctly added.'
@@ -763,17 +768,22 @@ pro metis_l2_prep_vl_polariz
    if not ref_detector then error_matrix = metis_rectify(error_matrix, 'VL')
    error_matrix = tb_image * 0. ; tb_image * sqrt(tb_error)
    extension_header = base_header
    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', 'Error matrix', 'extension name', before = 'LONGSTRN'
    fxaddpar, extension_header, 'BTYPE', 'Absolute error'
    fxaddpar, extension_header, 'DATAMIN', min(error_matrix, /nan)
    fxaddpar, extension_header, 'DATAMAX', max(error_matrix, /nan)
	fits_add_checksum, extension_header, error_matrix
    fits_add_checksum, extension_header, float(error_matrix)
    mwrfits, float(error_matrix), out_file_name[3], extension_header, /no_comment, /silent

    journal, 'Error-matrix extension correctly added.'

    ; fix some header keywords

    fix_fits_header, out_file_name[3]

    ; write the auxiliary information file

    output = { $