FUNCTION dustem_set_data,help=help,sed=sed,ext=ext,polfrac=polfrac,rchi2_weight=rchi2_weight,f_HI=f_HI ;+ ; NAME: ; dustem_set_data ; PURPOSE: ; Initializes the dustem data structure (!dustem_data) ; CATEGORY: ; Dustem ; CALLING SEQUENCE: ; dustem_set_data,spec[,help=] ; INPUTS: ; spec: array of structures containing a SED ; OPTIONAL INPUT PARAMETERS: ; None ; OUTPUTS: ; None ; OPTIONAL OUTPUT PARAMETERS: ; None ; ACCEPTED KEY-WORDS: ; help = If set print this help ; COMMON BLOCKS: ; None ; SIDE EFFECTS: ; initializes !dustem_data ; wavelengths are forced to be the central filter wavelength for ; photometric data ; RESTRICTIONS: ; The dustem idl wrapper must be installed ; PROCEDURE: ; None ; EXAMPLES ; dustem_init ; dir=getenv('DUSTEM_SOFT_DIR')+'/src/dustem3.8_web/SEDs/' ; file=dir+'Gal_composite_spectrum.xcat' ; spec=read_xcat(file,/silent) ; dustem_set_data,spec ; MODIFICATION HISTORY: ; Written by J.-Ph. Bernard ; see evolution details on the dustem cvs maintained at CESR ; Contact J.-Ph. Bernard (Jean-Philippe.Bernard@cesr.fr) in case of problems. ; ; V. Guillet (2012) : dustem_set_data is turned into a function which can be used ; indifferently for sed, ext, polext ; I. Choubani (2022): Adjusting the function to meet the format criteria set by the current release. ; The function uses two main input structures: SED and EXT. Polarization data is included within each. ;- ;fully deprecate the use of polfrac?===>YES should do so IF keyword_set(help) THEN BEGIN doc_library,'dustem_set_data' goto,the_end ENDIF ;Cleaninig data structure !dustem_data.sed = ptr_new() !dustem_data.ext = ptr_new() ;Cleaninig counters NP=0 NQ=0 NU=0 NP_ext=0 NQ_ext=0 NU_ext=0 ;SETTING THE DATA STRUCTURES FOR THE FITTING PROCESS - SED IF keyword_set(sed) THEN BEGIN IF !run_pol THEN BEGIN ind=where(sed.largeP NE la_undef(),NP) if NP NE 0 then !dustem_data.polsed = ptr_new() ind=where(sed.StokesQ NE la_undef(),NQ) if NQ NE 0 then !dustem_data.qsed = ptr_new() ind=where(sed.StokesU NE la_undef(),NU) if NU NE 0 then !dustem_data.used = ptr_new() ENDIF xx=dustem_check_data(sed=sed,ist=ist,pst=pst,qst=qst,ust=ust) ;=== fill !dustem_data !dustem_data.sed = ptr_new(ist) ; If f_HI is specified, multiply the data by f_HI If keyword_set(f_HI) then begin if f_HI gt 0 then (*!dustem_data.sed).values *= f_HI else f_HI = 1. endif else f_HI = 1. defsysv,'!dustem_f_HI',f_HI If NP NE 0 then BEGIN ;=== fill !dustem_data !dustem_data.polsed = ptr_new(pst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.polsed).values *= f_HI ENDIF IF NQ NE 0 THEN BEGIN ;=== fill !dustem_data !dustem_data.qsed = ptr_new(qst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.qsed).values *= f_HI ENDIF if NU NE 0 then BEGIN ;=== fill !dustem_data !dustem_data.used = ptr_new(ust) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.used).values *= f_HI ENDIF ENDIF ;SETTING THE DATA STRUCTURES FOR THE FITTING PROCESS - EXT IF keyword_set(ext) THEN BEGIN IF !run_pol THEN BEGIN ind=where(ext.EXT_P NE la_undef(),NP_ext) if NP_ext NE 0 then !dustem_data.polext = ptr_new() ind=where(ext.EXT_Q NE la_undef(),NQ_ext) if NQ_ext NE 0 then !dustem_data.qext = ptr_new() ind=where(ext.EXT_U NE la_undef(),NU_ext) if NU_ext NE 0 then !dustem_data.uext = ptr_new() ENDIF xx=dustem_check_data(ext=ext,exst=exst,pexst=pexst,qexst=qexst,uexst=uexst) ;=== fill !dustem_data !dustem_data.ext = ptr_new(exst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then begin if f_HI gt 0 then (*!dustem_data.ext).values *= f_HI else f_HI = 1. endif else f_HI = 1. defsysv,'!dustem_f_HI',f_HI if NP_ext NE 0 then BEGIN !dustem_data.polext = ptr_new(pexst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.polext).values *= f_HI ENDIF IF NQ_ext NE 0 THEN BEGIN ;=== fill !dustem_data !dustem_data.qext = ptr_new(qexst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.qext).values *= f_HI ENDIF if NU_ext NE 0 then BEGIN ;=== fill !dustem_data !dustem_data.uext = ptr_new(uexst) ; If f_HI is specified, multiply the data by f_HI if keyword_set(f_HI) then if f_HI gt 0 then $ (*!dustem_data.uext).values *= f_HI ENDIF ENDIF !fit_rchi2_weight.sed=1. !fit_rchi2_weight.ext=1. ;SED IF NP NE 0 THEN !fit_rchi2_weight.polsed=1. IF NQ NE 0 THEN !fit_rchi2_weight.qsed=1. IF NU NE 0 THEN !fit_rchi2_weight.used=1. ;EXT IF NP_ext NE 0 THEN !fit_rchi2_weight.polext=1. IF NQ_ext NE 0 THEN !fit_rchi2_weight.qext=1. IF NU_ext NE 0 THEN !fit_rchi2_weight.uext=1. IF keyword_set(rchi2_weight) THEN BEGIN !fit_rchi2_weight.sed = rchi2_weight.sed !fit_rchi2_weight.ext = rchi2_weight.ext IF NP NE 0 THEN !fit_rchi2_weight.polsed = rchi2_weight.polsed IF NQ NE 0 THEN !fit_rchi2_weight.qsed = rchi2_weight.qsed IF NU NE 0 THEN !fit_rchi2_weight.used = rchi2_weight.used IF NP_ext NE 0 THEN !fit_rchi2_weight.polext = rchi2_weight.polext IF NQ_ext NE 0 THEN !fit_rchi2_weight.qext = rchi2_weight.qext IF NU_ext NE 0 THEN !fit_rchi2_weight.uext = rchi2_weight.uext ENDIF return,ptr_new(obs_st) the_end: END