dustem_plugin_mdfy_spinning_pol.pro
2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
FUNCTION dustem_plugin_mdfy_spinning_pol, 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_polarization'
goto,the_end
ENDIF
;
; IF ptr_valid((*!dustem_fit).CURRENT_PARAM_VALUES) THEN BEGIN
; p_dii=(*(*!dustem_fit).CURRENT_PARAM_VALUES)
;
; ENDIF ELSE BEGIN
;
;
; p_dii=(*(*!dustem_fit).PARAM_INIT_VALUES)
;
;
; ENDELSE
;
; st=dustem_run(p_dii)
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 smallp from pd
IF count2 NE 0 THEN psi=val[ind2[0]] ; setting psi from pd
ENDIF
lambir=dustem_get_wavelengths()
Nwaves=n_elements(lambir)
fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/(lambir))*1.e20/1.e7
filee=!dustem_dat+'out/SPIN.RES'
readcol,filee,waves,em_g1,em_g2,em_g3,em_tot,format='D,D,D,D,D',delimiter=' ',silent=silent,skipline=8;comment='#'
;spawn,'rm -rf '+!dustem_dat+'out/*SPIN*'
out=fltarr(Nwaves,3)
out[*,0]=em_tot*fact
polar_ippsi2iqu,out[*,0],SpinningQ,SpinningU,replicate(smallp,Nwaves),replicate(psi,Nwaves)
out[*,1]=SpinningQ
out[*,2]=SpinningU
scope='ADD_QSED+ADD_USED'
return, out
;clean pointers
heap_gc
the_end:
end