Skip to content
Snippets Groups Projects
Commit a7656a07 authored by Roberto Susino's avatar Roberto Susino
Browse files

Fix some header keywords (CHECKSUM and DATASUM)

parent 1c47a0c4
Branches
Tags
No related merge requests found
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
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 = { $
......
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 = { $
......
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 = { $
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment