Blame view

src/idl/dustem_compute_polext.pro 6.6 KB
c2f2a31d   Jean-Philippe Bernard   modified to deal ...
1
FUNCTION dustem_compute_polext,p_dim,$
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
2
                              st=st,$
c2f2a31d   Jean-Philippe Bernard   modified to deal ...
3
4
5
6
                              POLEXT_spec=POLEXT_spec,$
                              SPEXT_spec=SPEXT_spec,$
                              dustem_fpolext=dustem_fpolext,$
                              dustem_ext=dustem_ext,$
c2f2a31d   Jean-Philippe Bernard   modified to deal ...
7
                              help=help
e7938fa3   Ilyes Choubani   Corrected02: Impl...
8

07a51917   Ilyes Choubani   updating help sec...
9
10
11
;+
; NAME:
;    dustem_compute_polext
67dbbf5c   Annie Hughes   updated help
12
;
07a51917   Ilyes Choubani   updating help sec...
13
14
; PURPOSE:
;    Computes Polarized Extinction in units of optical depth for a given Dustem spectrum
67dbbf5c   Annie Hughes   updated help
15
;
07a51917   Ilyes Choubani   updating help sec...
16
; CATEGORY:
67dbbf5c   Annie Hughes   updated help
17
18
;    Dustem, Distributed, 
;
07a51917   Ilyes Choubani   updating help sec...
19
; CALLING SEQUENCE:
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
20
;    polext=dustem_compute_polext(p_dim[,st=][,polext_spec=][,spext_spec=][,dustem_fpolext=][,dustem_ext=][,/help])
67dbbf5c   Annie Hughes   updated help
21
;
07a51917   Ilyes Choubani   updating help sec...
22
23
; INPUTS:
;    p_dim      = parameter values
67dbbf5c   Annie Hughes   updated help
24
;
07a51917   Ilyes Choubani   updating help sec...
25
; OPTIONAL INPUT PARAMETERS:
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
26
;    st              = Dustem output structure
07a51917   Ilyes Choubani   updating help sec...
27
;    dustem_ext      = Computed polarized extinction for spectrum points in !dustem_data
67dbbf5c   Annie Hughes   updated help
28
;
07a51917   Ilyes Choubani   updating help sec...
29
; OUTPUTS:
2a8e29d5   Ilyes Choubani   small corrections...
30
;    polext       = computed Polarized Extinction for spectrum points in !dustem_data 
67dbbf5c   Annie Hughes   updated help
31
;
07a51917   Ilyes Choubani   updating help sec...
32
; OPTIONAL OUTPUT PARAMETERS:
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
33
;    st          = Dustem output structure
07a51917   Ilyes Choubani   updating help sec...
34
35
36
;    polext_spec = Dustem polarized extiction output 
;    spext_spec  = Dustem polarized exinction fraction
;    dustem_fpolext  = Computed polarized extinction fraction for spectrum points in !dustem_data 
67dbbf5c   Annie Hughes   updated help
37
;
07a51917   Ilyes Choubani   updating help sec...
38
39
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
67dbbf5c   Annie Hughes   updated help
40
;
07a51917   Ilyes Choubani   updating help sec...
41
42
; COMMON BLOCKS:
;    None
67dbbf5c   Annie Hughes   updated help
43
;
07a51917   Ilyes Choubani   updating help sec...
44
45
; SIDE EFFECTS:
;    None
67dbbf5c   Annie Hughes   updated help
46
;
07a51917   Ilyes Choubani   updating help sec...
47
; RESTRICTIONS:
67dbbf5c   Annie Hughes   updated help
48
49
50
51
52
53
;    The DustEMWrap IDL code must be installed
;
; MODIFICATION HISTORY:
;    Written by JPB,NF,DP Jan-2007
;    Evolution details on the DustEMWrap gitlab.
;    See http://dustemwrap.irap.omp.eu/ for FAQ and help.  
07a51917   Ilyes Choubani   updating help sec...
54
;-
e7938fa3   Ilyes Choubani   Corrected02: Impl...
55
56


07a51917   Ilyes Choubani   updating help sec...
57
58
59
60
61
62

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_compute_polext'
  dustem_polext=0.
  goto,the_end
ENDIF
e7938fa3   Ilyes Choubani   Corrected02: Impl...
63

7a216e2a   Jean-Philippe Bernard   fixed input ouput...
64
65
IF not keyword_set(st) THEN BEGIN
  dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st=st
e7938fa3   Ilyes Choubani   Corrected02: Impl...
66
67
ENDIF

e7938fa3   Ilyes Choubani   Corrected02: Impl...
68

7a216e2a   Jean-Philippe Bernard   fixed input ouput...
69
POLEXT_spec = st.polext.ext_tot * (*!dustem_HCD)/1.0e21  ; 
b74c4452   Ilyes Choubani   Treating extincti...
70

4b745987   Ilyes Choubani   minor update
71
;Hard-coded test to set to potential zero negative values in the polarized extinction arrays:
f2caf3f1   Ilyes Choubani   Debugging some er...
72
73
74
75
76
;so far this has been seen in absorption arrays  
;This test needs to include all grain species that polarize

IF !run_pol THEN BEGIN
    
f2caf3f1   Ilyes Choubani   Debugging some er...
77
78
79
80
81
82
    ind_ngtv_plxt = where (POLEXT_spec LT 0, ct_ngtv_plxt)
   
    IF ct_ngtv_plxt NE 0 THEN (POLEXT_spec)[ind_ngtv_plxt] = 0.
        
        
ENDIF 
b74c4452   Ilyes Choubani   Treating extincti...
83

7a216e2a   Jean-Philippe Bernard   fixed input ouput...
84
EXT_spec = st.ext.ext_tot * (*!dustem_HCD)/1.0e21   ;This is Total intensity I
67bd858a   Ilyes Choubani   Replication of th...
85
86
87
88
89
90
91

out=0.
Nwaves=(size(POLEXT_spec))[1]

frac=POLEXT_spec/EXT_spec
tes=where(finite(frac) eq 0)
frac(tes)=0.
b74c4452   Ilyes Choubani   Treating extincti...
92

afde94a3   Ilyes Choubani   general update
93

b74c4452   Ilyes Choubani   Treating extincti...
94
95
scopes=tag_names((*!dustem_plugin))
IF scopes[0] NE 'NONE' THEN BEGIN
afde94a3   Ilyes Choubani   general update
96
97
98
99
100
101
102
103
;IF ptr_valid(!dustem_plugin) THEN BEGIN
  for i=0L,n_tags(*!dustem_plugin)-1 do begin
    if total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) eq 'ADD_EXT') then EXT_spec+=(*(*!dustem_plugin).(i).spec)[*,0]
  endfor
ENDIF


IF scopes[0] NE 'NONE' THEN BEGIN
67bd858a   Ilyes Choubani   Replication of th...
104
105
106
107
108
109
110

    FOR i=0L,n_tags(*!dustem_plugin)-1 DO BEGIN   
        
        IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'REPLACE_POLEXT') THEN BEGIN
            
            QEXT_spec=(*(*!dustem_plugin).(i).spec)[*,1]
            UEXT_spec=(*(*!dustem_plugin).(i).spec)[*,2]
67bd858a   Ilyes Choubani   Replication of th...
111
112
113
            
        ENDIF 
        
887b421b   Ilyes Choubani   correcting some c...
114
115
    ENDFOR   
ENDIF 
67bd858a   Ilyes Choubani   Replication of th...
116
117
118
119
120
    
    IF ~isa(QEXT_spec) && ~isa(UEXT_spec) THEN BEGIN
        polar_ippsi2iqu,EXT_spec,QEXT_spec,UEXT_spec,frac,replicate(!dustem_psi_ext,Nwaves)
        SPEXT_spec = frac 
    ENDIF
887b421b   Ilyes Choubani   correcting some c...
121
122
123

IF scopes[0] NE 'NONE' THEN BEGIN

67bd858a   Ilyes Choubani   Replication of th...
124
125
126
127
128
129
    FOR i=0L,n_tags(*!dustem_plugin)-1 DO BEGIN
        
        IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLEXT') THEN BEGIN
        
            QEXT_spec+=(*(*!dustem_plugin).(i).spec)[*,1]
            UEXT_spec+=(*(*!dustem_plugin).(i).spec)[*,2]
67bd858a   Ilyes Choubani   Replication of th...
130
131
132
133
            
        ENDIF
      
    ENDFOR
67bd858a   Ilyes Choubani   Replication of th...
134

887b421b   Ilyes Choubani   correcting some c...
135
136
137
ENDIF    

POLEXT_spec=sqrt(QEXT_spec^2+UEXT_spec^2)
afde94a3   Ilyes Choubani   general update
138
SPEXT_spec = POLEXT_SPEC/EXT_spec
887b421b   Ilyes Choubani   correcting some c...
139

e7938fa3   Ilyes Choubani   Corrected02: Impl...
140

0068116a   Ilyes Choubani   General update + ...
141
dustem_polext = (*(*!dustem_data).qext).values * 0.
67bd858a   Ilyes Choubani   Replication of th...
142
143
144
145
146
147
148
149
150
151
152
153
154

    
if not isarray(POLEXT_spec) THEN stop ;I don't understand this test. The only thing it can indicate is a problem with the dust parameters or the fortran executable. But in my opinion these tests would be  


;NO COLOR CORRECTION FOR EXTINCTION. FOR NOW ...

; IF !dustem_do_cc NE 0 AND !dustem_never_do_cc EQ 0 THEN BEGIN
;   message,'DOING color correction calculations',/info
; ENDIF ELSE BEGIN
;   message,'SKIPPING color correction calculations',/info
; ENDELSE
; 
0068116a   Ilyes Choubani   General update + ...
155
; ind_polsed=where((*(*!dustem_data).qsed).filt_names NE 'SPECTRUM',count_polsed)  
67bd858a   Ilyes Choubani   Replication of th...
156
157
;   
; IF count_polsed NE 0 THEN BEGIN
0068116a   Ilyes Choubani   General update + ...
158
;   filter_names=((*(*!dustem_data).qsed).filt_names)(ind_polsed)
67bd858a   Ilyes Choubani   Replication of th...
159
160
161
162
163
164
165
166
167
168
;   spolsed=dustem_cc(st.polsed.wav,P_spec,filter_names,cc=cc)
;   dustem_polsed[ind_polsed]=spolsed
; ENDIF


;For spectrum data points, interpolate in log-log.
;Linear interpolation leads to wrong values, in particular where few
;wavelengths points exist in the model (long wavelengths).
;I believe this to be automatic because the provided dustem spectra are already sampled on a log-log grid.

0068116a   Ilyes Choubani   General update + ...
169
ind_spec=where((*(*!dustem_data).qext).filt_names EQ 'SPECTRUM',count_spec) 
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
170
IF count_spec NE 0 THEN dustem_polext(ind_spec)=interpol(POLEXT_spec,st.polext.wav,(((*(*!dustem_data).qext).wav)(ind_spec)))
67bd858a   Ilyes Choubani   Replication of th...
171
172
173
174
175

;GENERATING THE INTERPOLATES FOR POLFRAC (dustem_polfrac)
if !run_lin then begin
      		
    
7a216e2a   Jean-Philippe Bernard   fixed input ouput...
176
    if not keyword_set(dustem_ext) then dustem_ext = dustem_compute_ext(p_dim,st=st,EXT_spec=EXT_spec) 
67bd858a   Ilyes Choubani   Replication of th...
177
178
179
180
181
182
183
184
185
186
187
188
    
    If n_elements(dustem_ext) ne n_elements(dustem_polext) then begin                            
        if n_elements(dustem_ext) gt n_elements(dustem_polext) then begin 
      
            dustem_polext_x = dustem_polext
            dustem_ext_x = dustem_polext ;meaning dustem_sed needs to be modified
      
            nwaves = n_elements(dustem_polext)
      
      
              for i=0L,nwaves-1 do begin
      
0068116a   Ilyes Choubani   General update + ...
189
                  j=where((*(*!dustem_data).ext).wav EQ (*(*!dustem_data).fpolext).wav(i),testwav)
67bd858a   Ilyes Choubani   Replication of th...
190
191
192
193
194
195
196
197
198
199
200
201
                  if testwav ne 0 then dustem_ext_x(i) = dustem_ext(j(0))                                    
      
              endfor
      
        endif ELSE begin
        
            dustem_polext_x = dustem_ext
            dustem_ext_x = dustem_ext ;meaning dustem_polsed needs to be modified
        
            nwaves = n_elements(dustem_ext)
        
            for i=0L,nwaves-1 do begin
0068116a   Ilyes Choubani   General update + ...
202
                j=where((*(*!dustem_data).ext).wav EQ (*(*!dustem_data).fpolext).wav(i),testwav)
67bd858a   Ilyes Choubani   Replication of th...
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
                if testwav ne 0 then dustem_polext_x(i) = dustem_polext(j(0))                                    
            endfor
          
        
        ENDELSE
    
    endif ELSE BEGIN
        
        dustem_polext_x = dustem_polext 
        dustem_ext_x = dustem_ext
    
    ENDELSE
    
    dustem_fpolext = dustem_polext_x/dustem_ext_x 
	       
ENDIF
e7938fa3   Ilyes Choubani   Corrected02: Impl...
219

cee5beec   Jean-Philippe Bernard   just changed form...
220
the_end:
e7938fa3   Ilyes Choubani   Corrected02: Impl...
221

cee5beec   Jean-Philippe Bernard   just changed form...
222
return, dustem_polext
759a527d   Ilyes Choubani   general update
223

67dbbf5c   Annie Hughes   updated help
224
END