Blame view

src/idl/dustem_compute_polsed.pro 4.47 KB
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
1
FUNCTION dustem_compute_polsed,p_dim,stp,out_st=out_st,_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:
83b3ddee   Jean-Philippe Bernard   modified with Ily...
15
;    stp        = 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:
83b3ddee   Jean-Philippe Bernard   modified with Ily...
21
;    stp        = 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
39
40
41
42
43
44
45

IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_compute_polsed'
  dustem_polsed=0.
  goto,the_end
ENDIF

IF not keyword_set(stp) THEN BEGIN
b5ccb706   Jean-Philippe Bernard   improved to fit p...
46
  stp=dustem_run(p_dim)
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
47
  dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),stp
427f1205   Jean-Michel Glorian   version 4.2 merged
48
ENDIF
452c334e   Ilyes Choubani   Implementation Of...
49
50
51

If keyword_set(result) THEN result=stp
fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/(stp.polsed).wav)*1.e20/1.e7
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
52
P = stp.polsed.em_tot * fact   ;This is Polarized intensity P
ba82c5cf   Ilyes Choubani   improved with mod...
53
54
55
I = stp.sed.em_tot * fact   ;This is Total intensity I
out=0.
Nwaves=(size(P))[1]
83b3ddee   Jean-Philippe Bernard   modified with Ily...
56

ba82c5cf   Ilyes Choubani   improved with mod...
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
frac=P/I
tes=where(finite(frac) eq 0)
frac(tes)=0.


; 
; 
; ;ADDING PLUGIN TO SPECTRUM----------------
; FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN
;   IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'ADD_POLSED') THEN P+=(*(*!dustem_plugin).(i))[*,3] ;3 is for the polarized portion of the plugin because this is polsed
; ENDFOR
; ;-----------------------------------------
; 
; 
; ;MODIFYING PLUGIN----------------
; FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN
;   IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'REPLACE_POLSED') THEN BEGIN
;       P=(*(*!dustem_plugin).(i))[*,3]
;       P+=(*(*!dustem_plugin).(i))[*,3] ;3 is for the polarized portion of the plugin because this is polsed
;   ENDIF   
; ENDFOR
; ;-----------------------------------------
452c334e   Ilyes Choubani   Implementation Of...
79

452c334e   Ilyes Choubani   Implementation Of...
80

ba82c5cf   Ilyes Choubani   improved with mod...
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
;if Q and U have already been computed elsewhere
; FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN   
;     
;     IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'MODIFY_DUST_POLAR') THEN BEGIN
;         
;         Q_spec=(*(*!dustem_plugin).(i))[*,1]
;         U_spec=(*(*!dustem_plugin).(i))[*,2]
;         
;     ENDIF 
; ENDFOR    


FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN   
    
    IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'REPLACE_QSED') THEN BEGIN
        
        Q_spec=(*(*!dustem_plugin).(i))[*,1]
    ENDIF 
    
    IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'REPLACE_USED') THEN BEGIN
        U_spec=(*(*!dustem_plugin).(i))[*,2]
    ENDIF
    
ENDFOR    

    
IF ~isa(Q_spec) && ~isa(U_spec) THEN polar_ippsi2iqu,stI,Q_spec,U_spec,frac,replicate(0.,Nwaves) 
        
7d2d66e7   Ilyes Choubani   replacing polsed,...
109
FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN
ba82c5cf   Ilyes Choubani   improved with mod...
110
111
112
113
114
115
116
117
118
    
    IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'ADD_QSED') THEN BEGIN
        Q_spec+=(*(*!dustem_plugin).(i))[*,1]
    ENDIF
    
    IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'ADD_USED') THEN BEGIN
        U_spec+=(*(*!dustem_plugin).(i))[*,2]
    ENDIF              
    
7d2d66e7   Ilyes Choubani   replacing polsed,...
119
ENDFOR
7d2d66e7   Ilyes Choubani   replacing polsed,...
120
121


ba82c5cf   Ilyes Choubani   improved with mod...
122
123
P=sqrt(Q_spec^2+U_spec^2)

4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
124
dustem_polsed = (*!dustem_data.sed).values * 0.
452c334e   Ilyes Choubani   Implementation Of...
125

452c334e   Ilyes Choubani   Implementation Of...
126

4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
127
if not isarray(P) THEN stop 
452c334e   Ilyes Choubani   Implementation Of...
128

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

427f1205   Jean-Michel Glorian   version 4.2 merged
130
131
132
133
134
135
136
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

ind_polsed=where((*!dustem_data.polsed).filt_names NE 'SPECTRUM',count_polsed)
83b3ddee   Jean-Philippe Bernard   modified with Ily...
137
  
452c334e   Ilyes Choubani   Implementation Of...
138
IF count_polsed NE 0 THEN BEGIN ; INCLUDE COLOR CORRECTIONS OF (Q,U) for dust & synch
427f1205   Jean-Michel Glorian   version 4.2 merged
139
  filter_names=((*!dustem_data.polsed).filt_names)(ind_polsed)
452c334e   Ilyes Choubani   Implementation Of...
140
  
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
141
  spolsed=dustem_cc(stp.sed.wav,P,filter_names,cc=cc)
83b3ddee   Jean-Philippe Bernard   modified with Ily...
142
  dustem_polsed[ind_polsed]=spolsed
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
143
     
427f1205   Jean-Michel Glorian   version 4.2 merged
144
145
146
147
148
149
150
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).
ind_spec=where((*!dustem_data.polsed).filt_names EQ 'SPECTRUM',count_spec)
IF count_spec NE 0 THEN BEGIN
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
151
  dustem_polsed(ind_spec)=interpol(P,stp.wav,(((*!dustem_data.polsed).wav)(ind_spec)))
427f1205   Jean-Michel Glorian   version 4.2 merged
152
153
154
ENDIF
out_st=stp

452c334e   Ilyes Choubani   Implementation Of...
155

427f1205   Jean-Michel Glorian   version 4.2 merged
156
157
158
159
160
161
162
163
;clean pointers
heap_gc

the_end:

RETURN,dustem_polsed

END