FUNCTION dustem_plugin_modify_spinning_sed, key=key, val=val, scope=scope, help=help ;+ ; NAME: ; dustem_create_stext ; PURPOSE: ; MODIFIES THE SPINNING DUST SED BY INTRODUCING A POLARIZATION FRACTION p AND A POLARIZATION ANGLE psi ; CATEGORY: ; DUSTEM Wrapper ; CALLING SEQUENCE: ; dustem_plugin_modify_spinning_sed(st,key=key,val=val) ; INPUTS: ; st (st = dustem_run(p_dim)) ; OPTIONAL INPUT PARAMETERS: ; key = input parameter number ; val = input parameter value ; OUTPUTS: ; out = array containing the extinction stokes parameters ; OPTIONAL OUTPUT PARAMETERS: ; None ; ACCEPTED KEY-WORDS: ; help = if set, print this help ; COMMON BLOCKS: ; None ; SIDE EFFECTS: ; None ; RESTRICTIONS: ; The dustem fortran code must be installed ; The dustem idl wrapper must be installed ; PROCEDURE: ; This is a dustem plugin ;- IF keyword_set(help) THEN BEGIN doc_library,'dustem_plugin_modify_spinning_sed' goto,the_end ENDIF scope='REPLACE_POLSED+REPLACE_QSED+REPLACE_USED' IF ptr_valid((*!dustem_fit).CURRENT_PARAM_VALUES) THEN BEGIN p_dii=(*(*!dustem_fit).CURRENT_PARAM_VALUES) st=dustem_run(p_dii) ENDIF ELSE BEGIN p_dii=(*(*!dustem_fit).PARAM_INIT_VALUES) st=dustem_run(p_di) ENDELSE psi=0. smallp=0. ;supposing the spinning dust is IF keyword_set(key) THEN BEGIN ind1=where(key EQ 1,count1) ind2=where(key EQ 2,count2) IF count1 NE 0 THEN smallp=val[ind1[0]] ; setting psi from pd IF count2 NE 0 THEN psi=val[ind2[0]] ; setting psi from pd ENDIF fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/(st.polsed).wav)*1.e20/1.e7 SpinningI=(st.sed.em_grain_1)+(st.sed.em_grain_2)*fact SpinningP=SpinningI*smallp Nwaves=(size(SpinningI))[1] polar_ippsi2iqu,SpinningI,SpinningQ,SpinningU,replicate(smallp,Nwaves),replicate(psi,Nwaves) out=fltarr(Nwaves,4) out[*,0]=SpinningI out[*,1]=SpinningQ out[*,2]=SpinningU out[*,3]=SpinningP return, out the_end: end