Commit 702fc61f authored by Roberto Susino's avatar Roberto Susino
Browse files

Fix values of DACnPOLm keywords for VL products

parent 0f81149c
Loading
Loading
Loading
Loading
+62 −23
Original line number Diff line number Diff line
@@ -108,47 +108,86 @@ pro metis_l2_prep_vl_generic

    file_name_fields = strsplit(header.filename, '_', /extract)

    ; error is the quadratic relative error
    ; read the calibration curve to convert pmp raw voltages (dacpol) into effective polarization angles

    error = 0.
    dacpol_cal = cal_pack.vl_channel.dacpol_cal

    case header.datatype of
        0: begin
            data = float(data)

            ; ==================================================================
            ; for old l1 data
            ; data = data * header.nbin * header.ndit
            ; header.xposure = header.xposure * header.ndit
            ; header.nsumexp = header.ndit
            ; ==================================================================

            data = metis_dark_vlda(data, header, cal_pack, err_info, $
                quality_matrix = quality_matrix, history = history)

            ; ==================================================================
            ; for data already subtracted of dark
            ; file = file_basename(header.parent, '.fits') + '_subdark.fits'
            ; data = mrdfits('VL subdark/' + file, 0, /silent)
            ; data = rebin(data, header.naxis1, header.naxis2)
            ; data = data * header.nbin * header.ndit
            ; history = ['Dark correction: ', '  ' + file]
            ; ==================================================================

            if header.pol_id eq 0 then begin
                btype = 'VL fixed-polarization intensity'
                descriptor = 'metis-vl-image'
                polarimetric = 1

                k = where(dacpol_cal.dacpol eq header.dac1Pol1, count)
                if count eq 1 then angle = (dacpol_cal.angle[k])[0] else angle = 0.0

                fxaddpar, primary_header, 'DAC1POL1', angle, '[deg] pol. angle used'
                fxaddpar, primary_header, 'DAC2POL1', angle, '[deg] pol. angle used'
                fxaddpar, primary_header, 'DAC1POL2', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC2POL2', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC1POL3', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC2POL3', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC1POL4', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC2POL4', 0.0, 'unused'
            endif else if header.pol_id ge 1 and header.pol_id le 4 then begin
                pol_id = string(header.pol_id, format = '(i1)')
                btype = 'VL fixed-polarization intensity'
                descriptor = 'metis-vl-image'
                polarimetric = 1

                if fix(header.hdr_vers) le 4 then begin
                    case header.pol_id of
                        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
                endif

                k = where(dacpol_cal.dacpol eq dacpol, count)
                if count eq 1 then angle = (dacpol_cal.angle[k])[0] else angle = 0.0

                for k = 1, 4 do begin
                    s = string(k, format = '(i1)')
                    if k eq header.pol_id then begin
                        fxaddpar, primary_header, 'DAC1POL' + s, angle, '[deg] pol. used'
                        fxaddpar, primary_header, 'DAC2POL' + s, angle, '[deg] pol. used'
                    endif else begin
                        fxaddpar, primary_header, 'DAC1POL' + s, 0.0, 'unused'
                        fxaddpar, primary_header, 'DAC2POL' + s, 0.0, 'unused'
                    endelse
                endfor
            endif else begin
                btype = 'VL total brightness'
                descriptor = 'metis-vl-tb'
                polarimetric = 0

                k = where(dacpol_cal.dacpol eq header.dac1Pol1, count)
                if count eq 1 then angle1 = (dacpol_cal.angle[k])[0] else angle = 0.0
                k = where(dacpol_cal.dacpol eq header.dac1Pol2, count)
                if count eq 1 then angle2 = (dacpol_cal.angle[k])[0] else angle = 0.0

                fxaddpar, primary_header, 'N_POL', 2
                fxaddpar, primary_header, 'DAC1POL1', angle1, '[deg] pol. angle #1'
                fxaddpar, primary_header, 'DAC2POL1', angle1, '[deg] pol. angle #1'
                fxaddpar, primary_header, 'DAC1POL2', angle2, '[deg] pol. angle #2'
                fxaddpar, primary_header, 'DAC2POL2', angle2, '[deg] pol. angle #2'
                fxaddpar, primary_header, 'DAC1POL3', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC2POL3', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC1POL4', 0.0, 'unused'
                fxaddpar, primary_header, 'DAC2POL4', 0.0, 'unused'
            endelse

            data = float(data)

            data = metis_dark_vlda(data, header, cal_pack, err_info, $
                quality_matrix = quality_matrix, history = history)

            data = metis_flat_field(data, header, cal_pack, err_info, $
                quality_matrix = quality_matrix, $
                history = history)
+7 −6
Original line number Diff line number Diff line
@@ -272,16 +272,17 @@ pro metis_l2_prep_vl_polariz

            ; select the correct demodulation tensor element based on effective angle and stokes paramater

            k = where(dacpol_cal.dacpol eq dacpol)
            angle = dacpol_cal.angle[k]
            angle = angle[0]
            k = where(dacpol_cal.dacpol eq dacpol, count)
            if count eq 1 then angle = (dacpol_cal.angle[k])[0] else angle = 0.0

            if isa(angles) then begin
                if n_elements(angles) lt 4 then angles = [angles, angle]
            endif else angles = angle
            if isa(angles) then angles = [angles, angle] else angles = angle

            journal, '  pol. angle = ' + string(angle, format = '(F0.1)')

            pol_id = string(data_header[j].pol_id, format = '(i1)')
            fxaddpar, primary_header, 'DAC1POL' + pol_id, float(angle), '[deg] pol. angle # ' + pol_id
            fxaddpar, primary_header, 'DAC2POL' + pol_id, float(angle), '[deg] pol. angle # ' + pol_id

            n = where(demod_info.angle eq angle and demod_info.stokes eq stokes_name[i], count)

            if count ne 1 then begin