Blame view

src/idl/dustem_compute_polsed.pro 5.45 KB
67bd858a   Ilyes Choubani   Replication of th...
1
FUNCTION dustem_compute_polsed,p_dim,st,P_spec,SP_spec,dustem_polfrac,out_st=out_st,dustem_sed=dustem_sed,_extra=extra
427f1205   Jean-Michel Glorian   version 4.2 merged
2
3
4
5
6
7
8
9
10
11
12
13
14

;+
; NAME:
;    dustem_compute_polsed
; PURPOSE:
;    Computes an SED from a given Dustem spectrum
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    sed=dustem_compute_polsed(p_dim[,st=][,_extra=][,/help])
; INPUTS:
;    p_dim      = parameter values
; OPTIONAL INPUT PARAMETERS:
5f04fa07   Ilyes Choubani   general update
15
;    st        = Dustem structure
427f1205   Jean-Michel Glorian   version 4.2 merged
16
; OUTPUTS:
83b3ddee   Jean-Philippe Bernard   modified with Ily...
17
18
19
;    sed         : computed SED for filters in !dustem_data
;    dustem_qsed : SED in Q
;    dustem_used : SED in U
427f1205   Jean-Michel Glorian   version 4.2 merged
20
; OPTIONAL OUTPUT PARAMETERS:
5f04fa07   Ilyes Choubani   general update
21
;    st        = Dustem output structure
427f1205   Jean-Michel Glorian   version 4.2 merged
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    None
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    
; 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.
427f1205   Jean-Michel Glorian   version 4.2 merged
38

5f04fa07   Ilyes Choubani   general update
39

427f1205   Jean-Michel Glorian   version 4.2 merged
40
41
42
43
44
45
IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_compute_polsed'
  dustem_polsed=0.
  goto,the_end
ENDIF

5f04fa07   Ilyes Choubani   general update
46
IF not keyword_set(st) THEN BEGIN
759a527d   Ilyes Choubani   general update
47
  dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values)
5f04fa07   Ilyes Choubani   general update
48
  st=dustem_run(p_dim)
427f1205   Jean-Michel Glorian   version 4.2 merged
49
ENDIF
452c334e   Ilyes Choubani   Implementation Of...
50

5f04fa07   Ilyes Choubani   general update
51
52
If keyword_set(result) THEN result=st
fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/(st.polsed).wav)*1.e20/1.e7
759a527d   Ilyes Choubani   general update
53

3c479f24   Ilyes Choubani   Allowing to fix p...
54
55
P_spec = st.polsed.em_tot*fact ;This is Polarized intensity P
stI = st.sed.em_tot*fact    ;This is Total intensity I
ba82c5cf   Ilyes Choubani   improved with mod...
56
out=0.
5f04fa07   Ilyes Choubani   general update
57
Nwaves=(size(P_spec))[1]
83b3ddee   Jean-Philippe Bernard   modified with Ily...
58

5f04fa07   Ilyes Choubani   general update
59
frac=P_spec/stI
ba82c5cf   Ilyes Choubani   improved with mod...
60
61
62
tes=where(finite(frac) eq 0)
frac(tes)=0.

3ff9cac3   Ilyes Choubani   general update
63

3c479f24   Ilyes Choubani   Allowing to fix p...
64
scopes=tag_names((*!dustem_plugin))
759a527d   Ilyes Choubani   general update
65
IF scopes[0] NE 'NONE' THEN BEGIN
ba82c5cf   Ilyes Choubani   improved with mod...
66

3c479f24   Ilyes Choubani   Allowing to fix p...
67
    FOR i=0L,n_tags(*!dustem_plugin)-1 DO BEGIN   
ba82c5cf   Ilyes Choubani   improved with mod...
68
        
3c479f24   Ilyes Choubani   Allowing to fix p...
69
        IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'REPLACE_POLSED') THEN BEGIN
5f04fa07   Ilyes Choubani   general update
70
            
3c479f24   Ilyes Choubani   Allowing to fix p...
71
72
73
            Q_spec=(*(*!dustem_plugin).(i).spec)[*,1]
            U_spec=(*(*!dustem_plugin).(i).spec)[*,2]
            SP_spec=(*(*!dustem_plugin).(i).spec)[*,3]
5f04fa07   Ilyes Choubani   general update
74
75
            
        ENDIF 
68598bce   Ilyes Choubani   reducing number o...
76
        
5f04fa07   Ilyes Choubani   general update
77
    ENDFOR    
ba82c5cf   Ilyes Choubani   improved with mod...
78
    
887b421b   Ilyes Choubani   correcting some c...
79
80
ENDIF
    
5f04fa07   Ilyes Choubani   general update
81
82
83
84
    IF ~isa(Q_spec) && ~isa(U_spec) THEN BEGIN
        polar_ippsi2iqu,stI,Q_spec,U_spec,frac,replicate(!dustem_psi,Nwaves)
        SP_spec = frac 
    ENDIF
887b421b   Ilyes Choubani   correcting some c...
85
86
87

IF scopes[0] NE 'NONE' THEN BEGIN    
       
3c479f24   Ilyes Choubani   Allowing to fix p...
88
    FOR i=0L,n_tags(*!dustem_plugin)-1 DO BEGIN
ba82c5cf   Ilyes Choubani   improved with mod...
89
        
3c479f24   Ilyes Choubani   Allowing to fix p...
90
        IF total(strsplit((*(*!dustem_plugin).(i).scope),'+',/extract) EQ 'ADD_POLSED') THEN BEGIN
5f04fa07   Ilyes Choubani   general update
91
        
3c479f24   Ilyes Choubani   Allowing to fix p...
92
93
94
            Q_spec+=(*(*!dustem_plugin).(i).spec)[*,1]
            U_spec+=(*(*!dustem_plugin).(i).spec)[*,2]
            SP_spec+=(*(*!dustem_plugin).(i).spec)[*,3]
5f04fa07   Ilyes Choubani   general update
95
96
97
98
            
        ENDIF
      
    ENDFOR
ba82c5cf   Ilyes Choubani   improved with mod...
99
    
759a527d   Ilyes Choubani   general update
100
ENDIF
452c334e   Ilyes Choubani   Implementation Of...
101

887b421b   Ilyes Choubani   correcting some c...
102
103
P_spec=sqrt(Q_spec^2+U_spec^2)

86e5c5c1   Ilyes Choubani   General update + ...
104
105
dustem_polsed = (*!dustem_data.qsed).values * 0.

5f04fa07   Ilyes Choubani   general update
106
107
    
if not isarray(P_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  
452c334e   Ilyes Choubani   Implementation Of...
108

83b3ddee   Jean-Philippe Bernard   modified with Ily...
109

427f1205   Jean-Michel Glorian   version 4.2 merged
110
111
112
113
114
115
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

86e5c5c1   Ilyes Choubani   General update + ...
116
ind_polsed=where((*!dustem_data.qsed).filt_names NE 'SPECTRUM',count_polsed)  
452c334e   Ilyes Choubani   Implementation Of...
117
  
266ae799   Ilyes Choubani   General update
118
IF count_polsed NE 0 THEN BEGIN
86e5c5c1   Ilyes Choubani   General update + ...
119
  filter_names=((*!dustem_data.qsed).filt_names)(ind_polsed)
5f04fa07   Ilyes Choubani   general update
120
  spolsed=dustem_cc(st.polsed.wav,P_spec,filter_names,cc=cc)
83b3ddee   Jean-Philippe Bernard   modified with Ily...
121
  dustem_polsed[ind_polsed]=spolsed
427f1205   Jean-Michel Glorian   version 4.2 merged
122
123
ENDIF

266ae799   Ilyes Choubani   General update
124

266ae799   Ilyes Choubani   General update
125
;For spectrum data points, interpolate in log-log.
427f1205   Jean-Michel Glorian   version 4.2 merged
126
127
;Linear interpolation leads to wrong values, in particular where few
;wavelengths points exist in the model (long wavelengths).
3c479f24   Ilyes Choubani   Allowing to fix p...
128
;I believe this to be automatic because the provided dustem spectra are already sampled on a log-log grid.
266ae799   Ilyes Choubani   General update
129

86e5c5c1   Ilyes Choubani   General update + ...
130
ind_spec=where((*!dustem_data.qsed).filt_names EQ 'SPECTRUM',count_spec) 
5f04fa07   Ilyes Choubani   general update
131
IF count_spec NE 0 THEN dustem_polsed(ind_spec)=interpol(P_spec,st.polsed.wav,(((*!dustem_data.qsed).wav)(ind_spec)))
86e5c5c1   Ilyes Choubani   General update + ...
132

5f04fa07   Ilyes Choubani   general update
133
out_st=st
427f1205   Jean-Michel Glorian   version 4.2 merged
134

fcb6eade   Ilyes Choubani   general update - ...
135
136
;GENERATING THE INTERPOLATES FOR POLFRAC (dustem_polfrac)
if !run_lin then begin
67bd858a   Ilyes Choubani   Replication of th...
137
138
139
    
    if not keyword_set(dustem_sed) then dustem_sed = dustem_compute_sed(p_dim,st,SED_spec)
          		
fcb6eade   Ilyes Choubani   general update - ...
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
    If n_elements(dustem_sed) ne n_elements(dustem_polsed) then begin                            
        if n_elements(dustem_sed) gt n_elements(dustem_polsed) then begin 
      
            dustem_polsed_x = dustem_polsed
            dustem_sed_x = dustem_polsed ;meaning dustem_sed needs to be modified
      
            nwaves = n_elements(dustem_polsed)
      
      
              for i=0L,nwaves-1 do begin
      
                  j=where((*!dustem_data.sed).wav EQ (*!dustem_data.polfrac).wav(i),testwav)
                  if testwav ne 0 then dustem_sed_x(i) = dustem_sed(j(0))                                    
      
              endfor
      
        endif ELSE begin
        
            dustem_polsed_x = dustem_sed
            dustem_sed_x = dustem_sed ;meaning dustem_polsed needs to be modified
        
            nwaves = n_elements(dustem_sed)
        
            for i=0L,nwaves-1 do begin
                j=where((*!dustem_data.sed).wav EQ (*!dustem_data.polfrac).wav(i),testwav)
                if testwav ne 0 then dustem_polsed_x(i) = dustem_polsed(j(0))                                    
            endfor
          
        
        ENDELSE
    
    endif ELSE BEGIN
        
        dustem_polsed_x = dustem_polsed 
        dustem_sed_x = dustem_sed
    
    ENDELSE
    
    dustem_polfrac = dustem_polsed_x/dustem_sed_x 
	       
ENDIF

452c334e   Ilyes Choubani   Implementation Of...
182

427f1205   Jean-Michel Glorian   version 4.2 merged
183
184
185
186
187
188
189
;clean pointers
heap_gc

the_end:

RETURN,dustem_polsed

759a527d   Ilyes Choubani   general update
190
END