dustem_make_fits_predicted_ext.pro 4.44 KB
FUNCTION dustem_make_fits_predicted_ext ,syst_var $
										,dustem_predicted_ext $
										,str_input_ext=str_input_ext $
										,dustem_predicted_Qext=dustem_predicted_Qext $
    									,dustem_predicted_Uext=dustem_predicted_Uext $
										,help=help

;+
; NAME:
;    dustem_make_fits_predicted_ext
; PURPOSE:
;    extracts dustemwrap predicted extinction SED from dustem system variable syst_var, to be put into fits files
; CATEGORY:
;    DustEMWrap, Distributed, High-Level, User Convenience
; CALLING SEQUENCE:
;    str_predicted_EXT=dustem_make_fits_predicted_ext(syst_var,dustem_predicted_ext[,str_input_ext=])
;    see dustem_write_fits_table.pro
; INPUTS:
;    syst_var  : dustem system variable (*!dustem_data or *!dustem_show)
;    dustem_predicted_ext : dustemwrap predicted extinction SED as output by dustem_compute_ext.pro
; OPTIONAL INPUT PARAMETERS:
;    dustem_predicted_Qext : Stokes Q extinction SED
;    dustem_predicted_Uext : Stokes U extinction SED
; OUTPUTS:
;    str_predicted_EXT : dustemwrap predicted extinction SED as used to store into fits file
; OPTIONAL OUTPUT PARAMETERS:
;    str_input_ext : dustem wrap input extinction SED
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The DustEMWrap IDL code must be installed
; PROCEDURE:
;    None
; EXAMPLES:
;    str_predicted_EXT=dustem_make_fits_predicted_ext(*!dustem_data,dustem_predicted_ext,str_input_ext=str_input_ext)
; MODIFICATION HISTORY:
;    Written by J.-Ph. Bernard Dec 2022
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
;-

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_make_fits_predicted_ext'
  str_predicted_SED=-1
  goto,the_end
ENDIF


;===== define structures containing results
one_str_input_EXT={FILTER:'',Wavelength:la_undef(4),StokesI_EXT:la_undef(5),StokesQ_EXT:la_undef(5),StokesU_EXT:la_undef(5),varianceII_EXT:la_undef(5),varianceQQ_EXT:la_undef(5),varianceUU_EXT:la_undef(5)}
one_str_predicted_EXT={FILTER:'',Wavelength:la_undef(4),StokesI_EXT:la_undef(5),StokesQ_EXT:la_undef(5),StokesU_EXT:la_undef(5)}

Next=n_elements((*syst_var.ext).filt_names)
str_input_EXT=replicate(one_str_input_EXT,Next)
str_input_EXT.FILTER=(*syst_var.ext).filt_names
str_input_EXT.Wavelength=(*syst_var.ext).wav
str_input_EXT.StokesI_EXT=(*syst_var.ext).values
str_input_EXT.varianceII_EXT=la_power((*syst_var.ext).sigma,2.)
stop
;IC; if I didn't misunderstand the str_input_EXT output lacks this information
IF !run_pol THEN BEGIN
    qext=aos2soa(*syst_var.qext)
    FOR i=0L,n_elements(qext.wav)-1 DO BEGIN
        ind=where(str_input_EXT.FILTER EQ qext[i].filt_names and str_input_EXT.wavelength EQ qext[i].wav,count)
        IF count NE 0 THEN BEGIN
            str_input_EXT[ind[0]].STOKESQ_EXT=qext[i].values
            str_input_EXT[ind[0]].varianceQQ_EXT=la_power(qext[i].sigma,2.)
        ENDIF        
    ENDFOR
	uext=aos2soa(*syst_var.uext)
	FOR i=0L,n_elements(uext.wav)-1 DO BEGIN
        ind=where(str_input_EXT.FILTER EQ uext[i].filt_names and str_input_EXT.wavelength EQ uext[i].wav,count)
        IF count NE 0 THEN BEGIN
            str_input_EXT[ind[0]].STOKESU_EXT=uext[i].values
            str_input_EXT[ind[0]].varianceUU_EXT=la_power(uext[i].sigma,2.)
        ENDIF        
    ENDFOR
ENDIF 
;IC: If we make an analogy with emission, why aren't there any predicted variances?
;N_predicted_ext=n_elements(dustem_predicted_polext[0])
N_predicted_ext=n_elements(dustem_predicted_ext)
str_predicted_EXT=replicate(one_str_predicted_EXT,N_predicted_EXT)
fully_undefined_ext=str_predicted_ext
IF N_predicted_ext NE Next THEN BEGIN  ;This is for cases when the extinction data to fit did not have the dimension of computed extinction curve
	message,'I have a problem with dimensions ...',/continue
    stop
ENDIF ELSE BEGIN
	str_predicted_EXT.FILTER=(*syst_var.ext).filt_names    ;taken from input SED
	str_predicted_EXT.Wavelength=(*syst_var.ext).wav       ;taken from input SED
	str_predicted_EXT.StokesI_EXT=dustem_predicted_ext
ENDELSE

IF !run_pol THEN BEGIN
	str_predicted_EXT.StokesQ_EXT=interpol(dustem_predicted_Qext,(*syst_var.qext).wav,(*syst_var.ext).wav)
	str_predicted_EXT.StokesU_EXT=interpol(dustem_predicted_Uext,(*syst_var.uext).wav,(*syst_var.ext).wav)
ENDIF ELSE BEGIN
	str_predicted_EXT.StokesQ_EXT=fully_undefined_ext.StokesQ_EXT
	str_predicted_EXT.StokesU_EXT=fully_undefined_ext.StokesU_EXT
ENDELSE

RETURN,str_predicted_EXT

the_end: 

END