Commit 21d1a616d4739eb3dd0e13f9889246bdc0edc851
Exists in
master
Merge branch 'master' of https://gitlab.irap.omp.eu/OV-GSO-DC/dustem-wrapper_idl
Showing
15 changed files
with
272 additions
and
192 deletions
Show diff stats
src/idl/dustem_check_data.pro
1 | -FUNCTION dustem_check_data, sed=sed,ext=ext,ist=ist,pst=pst,qst=qst,ust=ust,exst=exst,pexst=pexst,qexst=qexst,uexst=uexst | |
1 | +FUNCTION dustem_check_data, sed=sed,ext=ext,fpol=fpol,ist=ist,pst=pst,fpst=fpst,qst=qst,ust=ust,exst=exst,pexst=pexst,qexst=qexst,uexst=uexst | |
2 | 2 | |
3 | 3 | |
4 | 4 | ;THIS PROCEDURE CHECKS THE DATA PROVIDED BY THE USER AND RETURNS DIFFERENT STRUCTURES TO DEFINE (SET) THE COMPOSITE DATA FITTING STRUCTURE (!dustem_data) |
... | ... | @@ -23,6 +23,7 @@ IF KEYWORD_SET(sed) THEN BEGIN |
23 | 23 | ;INITIALIZING OUTPUT STRUCTURES |
24 | 24 | ist = obs_st |
25 | 25 | pst = ist |
26 | + fpst = ist | |
26 | 27 | qst = ist |
27 | 28 | ust = ist |
28 | 29 | ;This allows the user to fit polsed, qsed and used individually. |
... | ... | @@ -39,8 +40,7 @@ IF KEYWORD_SET(sed) THEN BEGIN |
39 | 40 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
40 | 41 | IF strupcase(ans) EQ 'N' THEN BEGIN |
41 | 42 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
42 | - message, 'Aborting ...',/continue | |
43 | - stop | |
43 | + message, 'Aborting ...' | |
44 | 44 | ENDIF |
45 | 45 | ENDIF |
46 | 46 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -59,11 +59,11 @@ IF KEYWORD_SET(sed) THEN BEGIN |
59 | 59 | ans='' |
60 | 60 | pst.values=sed.largeP |
61 | 61 | pst.sigma=sqrt(abs(sed.sigma_largeP)) |
62 | - ;Testig if there is LargeP data. If not move to qsed data | |
62 | + ;Testig if there is LargeP data. If not move to polfrac data (fpol) | |
63 | 63 | ind = where(sed.largeP NE la_undef() and finite(sed.largeP) EQ 1 and sed.sigma_largeP NE la_undef() and finite(sed.sigma_largeP) EQ 1,NP) ;Testing on the nan values is needed to move to testing the other data fields (because if the dataset is full of Nans but not la_undef(), the code will think it's valid dta) |
64 | 64 | IF NP EQ 0 THEN BEGIN |
65 | 65 | pst = ptr_new() |
66 | - goto, qzone | |
66 | + goto, fpzone | |
67 | 67 | ENDIF ELSE BEGIN |
68 | 68 | ind = where(finite(sed.largeP) EQ 0 or finite(sed.sigma_largeP) EQ 0, countnokp) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value |
69 | 69 | IF countnokp NE 0 THEN BEGIN |
... | ... | @@ -72,8 +72,7 @@ IF KEYWORD_SET(sed) THEN BEGIN |
72 | 72 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
73 | 73 | IF strupcase(ans) EQ 'N' THEN BEGIN |
74 | 74 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
75 | - message, 'Aborting ...',/continue | |
76 | - stop | |
75 | + message, 'Aborting ...' | |
77 | 76 | ENDIF |
78 | 77 | ENDIF |
79 | 78 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -86,8 +85,41 @@ IF KEYWORD_SET(sed) THEN BEGIN |
86 | 85 | values = pst.values(testp) |
87 | 86 | sigma = pst.sigma(testp) |
88 | 87 | pst={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma} |
89 | - ENDIF | |
90 | - ENDELSE | |
88 | + ENDIF | |
89 | + ENDELSE | |
90 | + fpzone: | |
91 | + ans='' | |
92 | + fpst.values=sed.smallp | |
93 | + fpst.sigma=sqrt(abs(sed.sigma_smallp)) | |
94 | + ;Testig if there is smallp data. If not move to qsed data | |
95 | + ind = where(sed.smallP NE la_undef() and finite(sed.smallP) EQ 1 and sed.sigma_smallP NE la_undef() and finite(sed.sigma_smallP) EQ 1,NSP) ;Testing on the nan values is needed to move to testing the other data fields (because if the dataset is full of Nans but not la_undef(), the code will think it's valid dta) | |
96 | + IF NSP EQ 0 THEN BEGIN | |
97 | + fpst = ptr_new() | |
98 | + ;goto, qzone | |
99 | + goto, qzone | |
100 | + ENDIF ELSE BEGIN | |
101 | + ind = where(finite(sed.smallP) EQ 0 or finite(sed.sigma_smallP) EQ 0, countnoksp) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value | |
102 | + IF countnoksp NE 0 THEN BEGIN | |
103 | + message, "SED format isn't met. NaN value(s) detected in SmallP data.",/continue | |
104 | + message, 'Without automatic format fitering you cannot proceed.',/continue | |
105 | + read, ans, prompt='Would you like automatic format filtering? (Y/N):' | |
106 | + IF strupcase(ans) EQ 'N' THEN BEGIN | |
107 | + message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue | |
108 | + message, 'Aborting ...' | |
109 | + ENDIF | |
110 | + ENDIF | |
111 | + IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ | |
112 | + ELSE message, 'Data format is met. Removal of undefined data points...',/continue | |
113 | + testsp=where(sed.sigma_smallP NE 0. and finite(sed.sigma_smallP) EQ 1 and sed.sigma_smallP NE la_undef() and sed.smallP NE la_undef() and finite(sed.smallP) EQ 1,ctestsp) | |
114 | + IF ctestsp NE 0 THEN BEGIN | |
115 | + instru_names = fpst.instru_names(testsp) | |
116 | + filt_names = fpst.filt_names(testsp) | |
117 | + wav = fpst.wav(testsp) | |
118 | + values = fpst.values(testsp) | |
119 | + sigma = fpst.sigma(testsp) | |
120 | + fpst={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma} | |
121 | + ENDIF | |
122 | + ENDELSE | |
91 | 123 | qzone: |
92 | 124 | ans='' |
93 | 125 | qst.values=sed.StokesQ |
... | ... | @@ -105,8 +137,7 @@ IF KEYWORD_SET(sed) THEN BEGIN |
105 | 137 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
106 | 138 | IF strupcase(ans) EQ 'N' THEN BEGIN |
107 | 139 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
108 | - message, 'Aborting ...',/continue | |
109 | - stop | |
140 | + message, 'Aborting ...' | |
110 | 141 | ENDIF |
111 | 142 | ENDIF |
112 | 143 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -138,8 +169,7 @@ IF KEYWORD_SET(sed) THEN BEGIN |
138 | 169 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
139 | 170 | IF strupcase(ans) EQ 'N' THEN BEGIN |
140 | 171 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
141 | - message, 'Aborting ...',/continue | |
142 | - stop | |
172 | + message, 'Aborting ...' | |
143 | 173 | ENDIF |
144 | 174 | ENDIF |
145 | 175 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -191,8 +221,7 @@ IF KEYWORD_SET(ext) THEN begin |
191 | 221 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
192 | 222 | IF strupcase(ans) EQ 'N' THEN BEGIN |
193 | 223 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
194 | - message, 'Aborting ...',/continue | |
195 | - stop | |
224 | + message, 'Aborting ...' | |
196 | 225 | ENDIF |
197 | 226 | ENDIF |
198 | 227 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -225,8 +254,7 @@ IF KEYWORD_SET(ext) THEN begin |
225 | 254 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
226 | 255 | IF strupcase(ans) EQ 'N' THEN BEGIN |
227 | 256 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
228 | - message, 'Aborting ...',/continue | |
229 | - stop | |
257 | + message, 'Aborting ...' | |
230 | 258 | ENDIF |
231 | 259 | ENDIF |
232 | 260 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -260,8 +288,7 @@ IF KEYWORD_SET(ext) THEN begin |
260 | 288 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
261 | 289 | IF strupcase(ans) EQ 'N' THEN BEGIN |
262 | 290 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
263 | - message, 'Aborting ...',/continue | |
264 | - stop | |
291 | + message, 'Aborting ...' | |
265 | 292 | ENDIF |
266 | 293 | ENDIF |
267 | 294 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ |
... | ... | @@ -294,8 +321,7 @@ IF KEYWORD_SET(ext) THEN begin |
294 | 321 | read, ans, prompt='Would you like automatic format filtering? (Y/N):' |
295 | 322 | IF strupcase(ans) EQ 'N' THEN BEGIN |
296 | 323 | message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue |
297 | - message, 'Aborting ...',/continue | |
298 | - stop | |
324 | + message, 'Aborting ...' | |
299 | 325 | ENDIF |
300 | 326 | ENDIF |
301 | 327 | IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ | ... | ... |
src/idl/dustem_compute_polsed.pro
... | ... | @@ -48,14 +48,14 @@ IF not keyword_set(stp) THEN BEGIN |
48 | 48 | ENDIF |
49 | 49 | |
50 | 50 | If keyword_set(result) THEN result=stp |
51 | -fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/(stp.polsed).wav)*1.e20/1.e7 | |
51 | +fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/(stp.polsed).wav)*1.e20/1.e7 | |
52 | 52 | |
53 | 53 | P = stp.polsed.em_tot*fact;1.00e17/(4.*!pi) ;This is Polarized intensity P |
54 | -I = stp.sed.em_tot*fact;1.00e17/(4.*!pi) ;This is Total intensity I | |
54 | +stI = stp.sed.em_tot*fact;1.00e17/(4.*!pi) ;This is Total intensity I | |
55 | 55 | out=0. |
56 | 56 | Nwaves=(size(P))[1] |
57 | 57 | |
58 | -frac=P/I | |
58 | +frac=P/stI | |
59 | 59 | tes=where(finite(frac) eq 0) |
60 | 60 | frac(tes)=0. |
61 | 61 | |
... | ... | @@ -77,7 +77,7 @@ FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN |
77 | 77 | ENDFOR |
78 | 78 | |
79 | 79 | |
80 | -IF ~isa(Q_spec) && ~isa(U_spec) THEN polar_ippsi2iqu,I,Q_spec,U_spec,frac,replicate(0.,Nwaves) | |
80 | +IF ~isa(Q_spec) && ~isa(U_spec) THEN polar_ippsi2iqu,stI,Q_spec,U_spec,frac,replicate(0.,Nwaves) | |
81 | 81 | |
82 | 82 | |
83 | 83 | FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN |
... | ... | @@ -92,13 +92,12 @@ FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN |
92 | 92 | |
93 | 93 | ENDFOR |
94 | 94 | |
95 | - | |
96 | 95 | P=sqrt(Q_spec^2+U_spec^2) |
97 | 96 | |
98 | 97 | ENDIF |
99 | 98 | |
100 | -dustem_polsed = (*!dustem_data.polsed).values * 0. | |
101 | - | |
99 | +IF isa(!dustem_data.polsed) THEN dustem_polsed = (*!dustem_data.polsed).values * 0. ELSE dustem_polsed = (*!dustem_data.polfrac).values * 0. | |
100 | +;stop | |
102 | 101 | |
103 | 102 | if not isarray(P) THEN stop |
104 | 103 | |
... | ... | @@ -109,22 +108,25 @@ ENDIF ELSE BEGIN |
109 | 108 | message,'SKIPPING color correction calculations',/info |
110 | 109 | ENDELSE |
111 | 110 | |
112 | -ind_polsed=where((*!dustem_data.polsed).filt_names NE 'SPECTRUM',count_polsed) | |
113 | - | |
114 | -IF count_polsed NE 0 THEN BEGIN | |
115 | - filter_names=((*!dustem_data.polsed).filt_names)(ind_polsed) | |
111 | +IF isa(!dustem_data.polsed) THEN ind_polsed=where((*!dustem_data.polsed).filt_names NE 'SPECTRUM',count_polsed) ELSE ind_polsed=where((*!dustem_data.polfrac).filt_names NE 'SPECTRUM',count_polsed) | |
116 | 112 | |
113 | +IF count_polsed NE 0 THEN BEGIN | |
114 | + IF isa(!dustem_data.polsed) THEN filter_names=((*!dustem_data.polsed).filt_names)(ind_polsed) ELSE filter_names=((*!dustem_data.polfrac).filt_names)(ind_polsed) | |
117 | 115 | spolsed=dustem_cc(stp.polsed.wav,P,filter_names,cc=cc) |
118 | 116 | dustem_polsed[ind_polsed]=spolsed |
119 | - | |
120 | 117 | ENDIF |
121 | 118 | |
122 | -;For spectrum data points, interpolate in log-log | |
119 | + | |
120 | +;stop | |
121 | + | |
122 | + | |
123 | +;For spectrum data points, interpolate in log-log. | |
123 | 124 | ;Linear interpolation leads to wrong values, in particular where few |
124 | 125 | ;wavelengths points exist in the model (long wavelengths). |
125 | -ind_spec=where((*!dustem_data.polsed).filt_names EQ 'SPECTRUM',count_spec) | |
126 | + | |
127 | +IF isa(!dustem_data.polsed) THEN ind_spec=where((*!dustem_data.polsed).filt_names EQ 'SPECTRUM',count_spec) ELSE ind_spec=where((*!dustem_data.polfrac).filt_names EQ 'SPECTRUM',count_spec) | |
126 | 128 | IF count_spec NE 0 THEN BEGIN |
127 | - dustem_polsed(ind_spec)=interpol(P,stp.polsed.wav,(((*!dustem_data.polsed).wav)(ind_spec))) | |
129 | + IF isa(!dustem_data.polsed) THEN dustem_polsed(ind_spec)=interpol(P,stp.polsed.wav,(((*!dustem_data.polsed).wav)(ind_spec))) ELSE dustem_polsed(ind_spec)=interpol(P,stp.polsed.wav,(((*!dustem_data.polfrac).wav)(ind_spec))) | |
128 | 130 | ENDIF |
129 | 131 | out_st=stp |
130 | 132 | ... | ... |
src/idl/dustem_init.pro
... | ... | @@ -200,7 +200,11 @@ defsysv,'!dustem_show_plot',1 ;0=show no plot |
200 | 200 | ;== This is for the default mode |
201 | 201 | dustem_inputs={GRAIN:'GRAIN.DAT',ISRF:'ISRF.DAT',ALIGN:'ALIGN.DAT'} |
202 | 202 | !dustem_inputs=ptr_new(dustem_inputs) |
203 | + | |
204 | + | |
203 | 205 | defsysv, '!dustem_HCD', ptr_new(1.00E20) ;This is a dumb thing I added but will shortly remove it |
206 | + | |
207 | + | |
204 | 208 | ;===This is the Desert option |
205 | 209 | |
206 | 210 | IF keyword_set(model) THEN BEGIN |
... | ... | @@ -247,7 +251,11 @@ defsysv, '!dustem_model', model |
247 | 251 | 'NY_MODELA':BEGIN |
248 | 252 | (*!dustem_inputs).grain='GRAIN_NY_MODELA.DAT' |
249 | 253 | (*!dustem_inputs).align='ALIGN_G17_MODELA.DAT' |
250 | - END | |
254 | + END | |
255 | + ;This is a user-defined model | |
256 | + 'USER_MODEL':BEGIN | |
257 | + (*!dustem_inputs).grain='GRAIN_USER.DAT' | |
258 | + END | |
251 | 259 | ELSE:BEGIN |
252 | 260 | message,'model '+model+' unknown',/continue |
253 | 261 | message,'Known models are COMPIEGNE_ETAL2010,DBP90,DL01,DL07,AJ13,G17_MODELA,G17_MODELB,G17_MODELC,G17_MODELD,THEMIS',/continue | ... | ... |
src/idl/dustem_init_parinfo.pro
... | ... | @@ -10,7 +10,7 @@ PRO dustem_init_parinfo,pd,iv, $ |
10 | 10 | dustem_set_func_ind,pd,iv |
11 | 11 | |
12 | 12 | |
13 | -one_parinfo={value:0.D0, fixed:0, limited:[0,0], limits:[0.D0,0], parname:'', relstep:0., step:0.5, mpside:0, tied:''} | |
13 | +one_parinfo={value:0.D0, fixed:0, limited:[0,0], limits:[0.D0,0], parname:'', relstep:0.5, step:0.0, mpside:0, tied:''} | |
14 | 14 | Npar=n_elements(pd) |
15 | 15 | dustem_parinfo=replicate(one_parinfo,Npar) |
16 | 16 | FOR i=0L,Npar-1 DO BEGIN |
... | ... | @@ -60,5 +60,5 @@ ENDIF |
60 | 60 | suite2: |
61 | 61 | |
62 | 62 | defsysv,'!dustem_parinfo',ptr_new(dustem_parinfo) |
63 | - | |
63 | +;stop | |
64 | 64 | END | ... | ... |
src/idl/dustem_mpfit_run.pro
1 | -FUNCTION dustem_mpfit_run,x,p_min,_EXTRA=extra | |
1 | +FUNCTION dustem_mpfit_run,x,p_min,_EXTRA=_extra | |
2 | 2 | |
3 | 3 | ;+ |
4 | 4 | ; NAME: |
... | ... | @@ -55,12 +55,6 @@ dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values) |
55 | 55 | st = dustem_run(p_dim) |
56 | 56 | st_model=dustem_read_all(!dustem_soft_dir) |
57 | 57 | |
58 | - | |
59 | - | |
60 | -;problem that needs fixing - case of the composite ISRF | |
61 | -; st=st if you want to make the isrf thingy work. This is because dustem_activate_plugins requires the st structure but in the case of the composite ISRF the problem is that the wrapper's first read isrf is a MATHIS one so the first abundances the wrapper gets from dustem are the product of dust heated by the MATHIS ISRF | |
62 | - | |
63 | - | |
64 | 58 | chi2_sed = 0 |
65 | 59 | chi2_ext = 0 |
66 | 60 | chi2_polext = 0 |
... | ... | @@ -105,7 +99,7 @@ dustem_out = [0] |
105 | 99 | ind_data_tag=dustem_data_tag(count=count_data_tag) |
106 | 100 | |
107 | 101 | ;if exist('./noplot') then !dustem_show_plot = 0 else if !dustem_show_plot eq 0 then !dustem_show_plot = 1 |
108 | - | |
102 | +;stop | |
109 | 103 | FOR i_tag=0,count_data_tag-1 DO BEGIN |
110 | 104 | |
111 | 105 | ;stop |
... | ... | @@ -113,11 +107,9 @@ FOR i_tag=0,count_data_tag-1 DO BEGIN |
113 | 107 | ;print,i_tag,ind_data_tag(i_tag) |
114 | 108 | ;print,tagnames(ind_data_tag(i_tag)) |
115 | 109 | |
116 | - | |
117 | 110 | CASE tagnames(ind_data_tag(i_tag)) OF |
118 | - | |
111 | + | |
119 | 112 | 'SED' : BEGIN |
120 | - | |
121 | 113 | dustem_sed = dustem_compute_sed(p_dim,st);dustem_compute_sed(p_dim,st,cont=cont,freefree=freefree,synchrotron=synchrotron) |
122 | 114 | chi2_sed = total(((*!dustem_data.sed).values-dustem_sed)^2/(*!dustem_data.sed).sigma^2) |
123 | 115 | n_sed = n_elements((*!dustem_data.sed).values) |
... | ... | @@ -136,22 +128,96 @@ FOR i_tag=0,count_data_tag-1 DO BEGIN |
136 | 128 | print,"Best SED chi2 obtained if f_HI = ",alpha, " or if we multiply model by ",beta |
137 | 129 | (*!dustem_fit).chi2=chi2_sed |
138 | 130 | (*!dustem_fit).rchi2=rchi2_sed |
139 | - | |
140 | 131 | ; Plot if needed |
141 | 132 | IF !dustem_show_plot NE 0 THEN BEGIN |
133 | + | |
142 | 134 | ;title='DUSTEM WRAP('+strtrim(string(win),2)+')' |
143 | 135 | window,win,title='DUSTEM WRAP (SED)' |
144 | 136 | |
145 | 137 | ;cgwindow,WMULTI=[2,2,1],/CURRENT |
146 | - | |
147 | - dustem_plot_fit_sed,st,dustem_sed,_extra=extra,res=p_min*(*(*!dustem_fit).param_init_values),chi2=(*!dustem_fit).chi2,rchi2=(*!dustem_fit).rchi2 | |
148 | - | |
149 | - | |
138 | + ;I.C | |
139 | + ;undeprecated the use of polfrac here | |
140 | + ;********** | |
141 | + ;I added this block so I can plot polfrac inside the sed window | |
142 | + ;I will probably remove it | |
143 | + ;********** | |
144 | + ;test if polfrac is in tagnames: | |
145 | + ;another problem is that sed and pol data don't have the same filters. | |
146 | + varvar=where(tagnames eq 'POLFRAC', testfpol) | |
147 | + if testfpol ne 0 then begin | |
148 | + if !run_lin then begin | |
149 | + dustem_polsed = dustem_compute_polsed(p_dim,st) ; this quantity hasn't been computed yet that is why this line is present here. | |
150 | + ind_filt=where((*!dustem_data.polfrac).filt_names NE 'SPECTRUM',count_filt) ;locating the filters of polfrac=smallp in SED xcat | |
151 | + ind_fspec=where((*!dustem_data.polfrac).filt_names EQ 'SPECTRUM',count_fspec) ;locating the spectrum points in polfrac data. Later testing will have to be on the wavelengths | |
152 | + | |
153 | + ;dustem_sed and dustem_polsed might not have the same length thus this block. | |
154 | + ;I'm not so sure about this... | |
155 | + | |
156 | + If n_elements(dustem_sed) ne n_elements(dustem_polsed) then begin | |
157 | + if n_elements(dustem_sed) gt n_elements(dustem_polsed) then begin | |
158 | + dustem_polsed_x = dustem_polsed | |
159 | + dustem_sed_x = dustem_polsed ;meaning dustem_sed needs to be modified | |
160 | + ;matching the filter data points | |
161 | + IF count_filt ne 0 then begin | |
162 | + for i=0L,count_filt-1 do begin | |
163 | + j=where((*!dustem_data.sed).filt_names EQ (*!dustem_data.polfrac).filt_names(ind_filt(i)),testfilt) | |
164 | + if testfilt ne 0 then dustem_sed_x(ind_filt(i)) = dustem_sed(j(0)) | |
165 | + endfor | |
166 | + endif | |
167 | + ;matching the spectrum data points | |
168 | + IF count_fspec ne 0 then begin | |
169 | + for i=0L,count_fspec-1 do begin | |
170 | + j=where((*!dustem_data.sed).wav EQ (*!dustem_data.polfrac).wav(ind_fspec(i)),testspec) | |
171 | + if testspec ne 0 then dustem_sed_x((ind_fspec(i))) = dustem_sed(j(0)) | |
172 | + endfor | |
173 | + endif | |
174 | + endif ELSE begin | |
175 | + | |
176 | + ;I think I will have errors here!! The thing is I'm trying to make this work without (*!dustem_data.polsed) which is hard. | |
177 | + | |
178 | + dustem_polsed_x = dustem_sed | |
179 | + dustem_sed_x = dustem_sed ;meaning dustem_polsed needs to be modified | |
180 | + ;matching the filter data points | |
181 | + IF count_filt ne 0 then begin | |
182 | + for i=0L,count_filt-1 do begin | |
183 | + j=where((*!dustem_data.sed).filt_names EQ (*!dustem_data.polfrac).filt_names(ind_filt(i)),testfilt) | |
184 | + if testfilt ne 0 then dustem_polsed_x(ind_filt(i)) = dustem_polsed(j(0)) | |
185 | + endfor | |
186 | + endif | |
187 | + ;matching the spectrum data points | |
188 | + IF count_fspec ne 0 then begin | |
189 | + for i=0L,count_fspec-1 do begin | |
190 | + j=where((*!dustem_data.sed).wav EQ (*!dustem_data.polfrac).wav(ind_fspec(i)),testspec) | |
191 | + if testspec ne 0 then dustem_polsed_x((ind_fspec(i))) = dustem_polsed(j(0)) | |
192 | + endfor | |
193 | + endif | |
194 | + | |
195 | + ENDELSE | |
196 | + endif ELSE BEGIN | |
197 | + dustem_polsed_x = dustem_polsed | |
198 | + dustem_sed_x = dustem_sed | |
199 | + ENDELSE | |
200 | + | |
201 | + dustem_polfrac = dustem_polsed_x/dustem_sed_x | |
202 | + ;stop | |
203 | + ;stop | |
204 | + chi2_polfrac = total(((*!dustem_data.polfrac).values-dustem_polfrac)^2/(*!dustem_data.polfrac).sigma^2) | |
205 | + n_polfrac = n_elements((*!dustem_data.polfrac).values) | |
206 | + rchi2_polfrac = chi2_polfrac / n_polfrac | |
207 | + wrchi2_polfrac = rchi2_polfrac * !fit_rchi2_weight.polfrac | |
208 | + message,"chi2 POLFRAC = "+strtrim(chi2_polfrac,2)+" rchi2 POLFRAC = "+strtrim(rchi2_polfrac,2),/continue ;," weighted rchi2 POLFRAC=",wrchi2_polfrac | |
209 | + dustem_out = [ dustem_out, dustem_polfrac ] | |
210 | + fpol=dustem_polfrac ; problem because extra structure does not get updated so you actually need the 'extra' procedure you haven't finihed coding. | |
211 | + endif | |
212 | + endif | |
213 | + ;stop | |
214 | + dustem_plot_fit_sed,st,dustem_sed,_extra=_extra,res=p_min*(*(*!dustem_fit).param_init_values),chi2=(*!dustem_fit).chi2,rchi2=(*!dustem_fit).rchi2,fpol=fpol | |
215 | + | |
150 | 216 | ;stop |
151 | 217 | ENDIF |
152 | 218 | |
153 | 219 | dustem_out = [ dustem_out, dustem_sed ] |
154 | - | |
220 | + | |
155 | 221 | END |
156 | 222 | |
157 | 223 | 'EXT' : BEGIN |
... | ... | @@ -394,7 +460,7 @@ FOR i_tag=0,count_data_tag-1 DO BEGIN |
394 | 460 | win+=1 |
395 | 461 | window ,win ,title='DUSTEM WRAP (QSED)' |
396 | 462 | titstq='Stokes Q Polarization Intensity' |
397 | - ytitstq=textoidl('Q_\nu (W/m^2/HZ/sr) for N_H=10^{20} H/cm^2') | |
463 | + ytitstq=textoidl('Q_\nu (W/m^2/Hz/sr) for N_H=10^{20} H/cm^2') | |
398 | 464 | xtit=textoidl('\lambda (\mum)') |
399 | 465 | xr=[10,2e4] |
400 | 466 | normpol=Q_spec*fact |
... | ... | @@ -579,9 +645,7 @@ FOR i_tag=0,count_data_tag-1 DO BEGIN |
579 | 645 | |
580 | 646 | END |
581 | 647 | |
582 | - | |
583 | - ELSE : stop | |
584 | - | |
648 | + ELSE : IF tagnames(ind_data_tag(i_tag)) NE 'POLFRAC' THEN stop | |
585 | 649 | ENDCASE |
586 | 650 | |
587 | 651 | ENDFOR | ... | ... |
src/idl/dustem_plot_fit_sed.pro
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | res=res,errors=errors,chi2=chi2,rchi2=rchi2, $ |
3 | 3 | no_spec_error=no_spec_error,title=title,$;xtit=xtit,ytit=ytit,xr=xr,yr=yr $ |
4 | 4 | help=help,win=win,ps=ps, $ |
5 | - legend_xpos=legend_xpos,legend_ypos=legend_ypos,legend_offset=legend_offset, $ | |
5 | + legend_xpos=legend_xpos,legend_ypos=legend_ypos,legend_offset=legend_offset,fpol=fpol, $ | |
6 | 6 | _extra=_extra |
7 | 7 | |
8 | 8 | ; NAME: |
... | ... | @@ -59,11 +59,10 @@ IF keyword_set(ps) THEN BEGIN |
59 | 59 | ENDIF ELSE BEGIN |
60 | 60 | |
61 | 61 | set_plot,'X' |
62 | - IF keyword_set(win) then window,win | |
62 | + IF keyword_set(win) then window,win;,xsize=600,ysize=800 | |
63 | 63 | ENDELSE |
64 | 64 | |
65 | 65 | fact = 1.e4*(*!dustem_HCD)/(4.*!pi)/(3.e8/1.e-6/st.sed.wav)*1.e20/1.e7 |
66 | - | |
67 | 66 | ;use_col_data_filt=70 |
68 | 67 | ;use_col_sed_spec=170 |
69 | 68 | use_col_data_filt='blue' |
... | ... | @@ -89,7 +88,7 @@ ENDELSE |
89 | 88 | |
90 | 89 | |
91 | 90 | spec = st.sed.em_tot * fact |
92 | - | |
91 | +if keyword_set(fpol) then specpol = st.polsed.em_tot * fact | |
93 | 92 | ;ADDING PLUGIN(S) TO SPECTRUM---------------- |
94 | 93 | ;if n_tags(!dustem_data.sed) gt 1 then begin |
95 | 94 | scopes=tag_names((*!dustem_scope)) |
... | ... | @@ -97,6 +96,14 @@ IF scopes[0] NE 'NONE' THEN BEGIN |
97 | 96 | ;IF ptr_valid(!dustem_plugin) THEN BEGIN |
98 | 97 | FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN |
99 | 98 | IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'ADD_SED') THEN spec+=(*(*!dustem_plugin).(i))[*,0] |
99 | + if keyword_set(fpol) then begin | |
100 | + IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'REPLACE_QSED') THEN specpol=sqrt(((*(*!dustem_plugin).(i))[*,1])^2+((*(*!dustem_plugin).(i))[*,2])^2) | |
101 | + endif | |
102 | + ENDFOR | |
103 | + FOR i=0L,n_tags(*!dustem_scope)-1 DO BEGIN | |
104 | + if keyword_set(fpol) then begin | |
105 | + IF total(strsplit((*(*!dustem_scope).(i)),'+',/extract) EQ 'ADD_QSED') THEN specpol+=sqrt(((*(*!dustem_plugin).(i))[*,1])^2+((*(*!dustem_plugin).(i))[*,2])^2) | |
106 | + endif | |
100 | 107 | ENDFOR |
101 | 108 | ENDIF |
102 | 109 | ;endif |
... | ... | @@ -127,12 +134,23 @@ IF keyword_set(xtit) THEN xtit = xtit ELSE xtit = textoidl('\lambda (\mum)') |
127 | 134 | |
128 | 135 | IF keyword_set(ytit) THEN ytit = ytit ELSE ytit = textoidl('Brightness/N_H (MJy/sr/H)') |
129 | 136 | |
137 | + | |
130 | 138 | ;deffo define a title variable here. The procedures are not communicating with each other. |
131 | 139 | |
140 | +;############################### | |
141 | +if keyword_set(fpol) then begin | |
142 | + if !run_lin then begin | |
143 | + cgDisplay, 600, 500 | |
144 | + cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/norm,/nodata,xtit='',ytit=ytit,tit='',/ylog,/xlog,/ys,/xs,position=[0.12,0.25,0.96,0.76],xtickformat='(A1)',_extra=_extra,charsize=1.3,/noerase | |
145 | + endif | |
146 | +endif ELSE cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/norm,/nodata,xtit='',ytit=ytit,tit=title,/ylog,/xlog,/ys,/xs,position=[0.12,0.35,0.96,0.90],xtickformat='(A1)',_extra=_extra,charsize=1.3 | |
147 | +;############################### | |
148 | + | |
149 | + | |
132 | 150 | ;cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/norm,/nodata,xtit='',ytit=textoidl('Brightness/N_H (MJy/sr/H)'),tit=title,ylog=1,/xlog,xr=xr,yr=yr,/ys,/xs,position=[0.12,0.35,0.96,0.90],xtickformat='(A1)' |
133 | -cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/norm,/nodata,xtit='',ytit=ytit,tit=title,/ylog,/xlog,/ys,/xs,position=[0.12,0.35,0.96,0.90],xtickformat='(A1)',_extra=_extra,charsize=1.3 | |
134 | 151 | |
135 | 152 | |
153 | +;stop | |
136 | 154 | ;cgplot,st.polsed.wav,Q_sed*fact,xtit='',ytit=ytitstq,tit=titstq,ylog=ylog,/xlog,xr=xr,yr=yr,/ys,/xs,position=[0.17,0.35,0.95,0.95],xtickformat='(A1)' |
137 | 155 | |
138 | 156 | ;this is where you will add the normalized sed |
... | ... | @@ -185,8 +203,8 @@ IF !dustem_show_plot EQ 2 THEN BEGIN |
185 | 203 | ENDIF ELSE BEGIN |
186 | 204 | norm = spec * 0. + 1 |
187 | 205 | ENDELSE |
206 | +use_cols[1]='Cornflower' | |
188 | 207 | FOR i=0L,Ngrains-1 DO BEGIN |
189 | - use_cols[1]='Cornflower' | |
190 | 208 | cgoplot,st.sed.wav,st.sed.(i+1)*fact/norm,color=use_cols[i],linestyle=use_lines[i] |
191 | 209 | ENDFOR |
192 | 210 | |
... | ... | @@ -213,6 +231,7 @@ ENDIF |
213 | 231 | |
214 | 232 | |
215 | 233 | cgoplot,st.sed.wav,spec/norm,color=use_col_tot,linestyle=use_line_tot |
234 | +if keyword_set(fpol) then cgoplot,st.polsed.wav,specpol,color='Teal',linestyle=4 | |
216 | 235 | ;plot the normalized data as well. |
217 | 236 | ;---------------------------------------- |
218 | 237 | |
... | ... | @@ -221,7 +240,7 @@ frmt0='(A36)' |
221 | 240 | frmt1='(1E10.2)' |
222 | 241 | frmt2='(F7.2)' |
223 | 242 | use_legend_xpos=0.50 |
224 | -use_legend_ypos=0.84 | |
243 | +if keyword_set(fpol) then use_legend_ypos=0.70 ELSE use_legend_ypos=0.84 | |
225 | 244 | use_legend_offset=0.03 ;This is the offset between lines of the legend in normalized units |
226 | 245 | legend_charsize=0.86 |
227 | 246 | |
... | ... | @@ -236,7 +255,7 @@ IF keyword_set(legend_ypos) THEN use_legend_ypos=legend_ypos |
236 | 255 | IF keyword_set(legend_offset) THEN use_legend_offset=legend_offset |
237 | 256 | |
238 | 257 | IF !d.name NE 'PS' THEN cleanplot |
239 | -;oo=0 | |
258 | + | |
240 | 259 | tg=0 |
241 | 260 | prv_str='' |
242 | 261 | IF keyword_set(res) THEN BEGIN |
... | ... | @@ -327,25 +346,31 @@ IF keyword_set(res) THEN BEGIN |
327 | 346 | ENDIF |
328 | 347 | IF keyword_set(chi2) THEN BEGIN |
329 | 348 | xxpos=1.29*use_legend_xpos |
330 | - yypos=1.13*use_legend_ypos | |
349 | + yypos=1.13*0.84;use_legend_ypos | |
331 | 350 | xyouts,xxpos,yypos,string('chi2=',format=frmt0)+string(chi2,format=frmt2),color=0,/normal,charsize=legend_charsize |
332 | 351 | ENDIF |
333 | 352 | IF keyword_set(rchi2) THEN BEGIN |
334 | 353 | xxpos=1.29*use_legend_xpos |
335 | - yypos=1.13*use_legend_ypos-use_legend_offset | |
354 | + yypos=1.13*0.84-use_legend_offset;use_legend_ypos-use_legend_offset | |
336 | 355 | xyouts,xxpos,yypos,string('red. chi2=',format=frmt0)+string(rchi2,format=frmt2),color=0,/normal,charsize=legend_charsize |
337 | 356 | ENDIF |
338 | 357 | |
339 | 358 | xtit=textoidl('\lambda (\mum)') |
340 | 359 | ;cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/sed,/nodata,xtit=xtit,ytit='Normalized',tit='',/xlog,xr=xr,/ys,/xs,yr=[0,2],ylog=0,position=[0.12,0.14,0.96,0.35],/noerase,yticks=2,ymino=2,xticklen=0.1 |
341 | 360 | ;stop |
361 | + | |
342 | 362 | IF keyword_set(_extra) THEN BEGIN |
343 | 363 | extra_kept={XR:[0.,0.]} |
344 | 364 | extra_tags=tag_names(_extra) |
345 | 365 | ind=where(extra_tags EQ 'XR',count) |
346 | 366 | IF count NE 0 THEN extra_kept.XR=_extra.(ind[0]) ;ELSE extra_kept=0 |
347 | 367 | ENDIF |
348 | -cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/sed,_extra=extra_kept,/nodata,xtit=xtit,ytit='Normalized',tit='',/xlog,/ys,/xs,yr=[0,2],ylog=0,position=[0.12,0.14,0.96,0.35],/noerase,yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.3 | |
368 | + | |
369 | +;stop | |
370 | +;,position=[0.12,0.14,0.96,0.35] old position before your polfrac display modification | |
371 | +if keyword_set(fpol) then begin | |
372 | +cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/sed,_extra=extra_kept,/nodata,xtit=xtit,ytit='Normalized',tit='',/xlog,/ys,/xs,yr=[0,2],ylog=0,position=[0.12,0.1,0.96,0.25],/noerase,yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.3 | |
373 | +endif else cgplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/sed,_extra=extra_kept,/nodata,xtit=xtit,ytit='Normalized',tit='',/xlog,/ys,/xs,yr=[0,2],ylog=0,position=[0.12,0.14,0.96,0.35],/noerase,yticks=2,ymino=2,xticklen=0.1,ytickformat='(F6.2)',charsize=1.3 | |
349 | 374 | ;plot the normalized data as well. |
350 | 375 | IF count_spec NE 0 THEN BEGIN |
351 | 376 | xx=((*!dustem_data.sed).wav)[ind_spec] |
... | ... | @@ -361,6 +386,7 @@ IF count_filt NE 0 THEN BEGIN |
361 | 386 | trois_sigma=(3.*((*!dustem_data.sed).sigma)/2./sed)[ind_filt] |
362 | 387 | cgerrplot,xx,yy-trois_sigma,yy+trois_sigma,color='Dodger Blue' |
363 | 388 | ENDIF |
389 | + | |
364 | 390 | ;stop |
365 | 391 | ;cgoplot,(*!dustem_data.sed).wav,(*!dustem_data.sed).values/sed,psym=16,symsize=1,thick=2,color='Dodger Blue' |
366 | 392 | cgoplot,10^!x.crange,replicate(1.,2),color='black',linestyle=0 |
... | ... | @@ -368,6 +394,24 @@ cgoplot,10^!x.crange,replicate(1.,2),color='black',linestyle=0 |
368 | 394 | ;cgerrplot,((*!dustem_data.sed).wav),((*!dustem_data.sed).values)/sed-3.*((*!dustem_data.sed).sigma)/2./sed,((*!dustem_data.sed).values)/sed+3.*((*!dustem_data.sed).sigma)/2./sed,color='Dodger Blue' |
369 | 395 | |
370 | 396 | |
397 | +if keyword_set(fpol) then begin | |
398 | + plotsym,0,/fill | |
399 | + cgplot, (*!dustem_data.polfrac).wav,(*!dustem_data.polfrac).values*100,/nodata,xtit='',tit=title,ytit='',/xlog,/ylog,/ys,/xs,position=[0.12,0.76,0.96,0.91],charsize=1.3,yr=[1.0E-1,30.0],/noerase,xticklen=0.1,xtickformat='(A1)',_extra=extra_kept;,xr=_extra.xr | |
400 | + xxpos=use_legend_xpos*0.35 | |
401 | + yypos=use_legend_ypos*1.25 | |
402 | + xyouts,xxpos,yypos,'Polarization fraction (%)',color=cgcolor('purple'),charsize=legend_charsize,/normal | |
403 | + yypos=use_legend_ypos*1.20 | |
404 | + stringg='Polarization SED '+'('+textoidl('P_{\nu}')+')' | |
405 | + xyouts,xxpos,yypos,stringg,color=cgcolor('teal'),charsize=legend_charsize,/normal | |
406 | + pilotfx=fpol(0);((*!dustem_data.polfrac).values)(0);fpol(0); | |
407 | + cgoplot, (*!dustem_data.polfrac).wav,(*!dustem_data.polfrac).values*100,charsize=1.3,psym=8,syms=1,thick=2,color='Dodger Blue' | |
408 | + cgoplot, st.polsed.wav,(specpol/spec)*100/pilotfx*((*!dustem_data.polfrac).values)(0),color='purple' | |
409 | + cgoplot, (*!dustem_data.polfrac).wav,fpol*100/pilotfx*((*!dustem_data.polfrac).values)(0),color='Red',psym=6,syms=1 | |
410 | + ;fpol=abs(fpol) | |
411 | + ;delp=(*!dustem_data.polfrac).values*100-fpol*100/pilotfx*((*!dustem_data.polfrac).values)(0) | |
412 | + ;cgoplot, ((*!dustem_data.polfrac).wav),((*!dustem_data.polfrac).values*100+delp),charsize=1.3,color='black',linestyle=2 | |
413 | + ;stop | |
414 | +endif | |
371 | 415 | |
372 | 416 | IF keyword_set(ps) THEN BEGIN |
373 | 417 | device,/close | ... | ... |
src/idl/dustem_plot_polsed.pro
1 | -PRO dustem_plot_polsed, st, p_dim, dustem_polsed, aligned=aligned, win=win | |
1 | + PRO dustem_plot_polsed, st, p_dim, dustem_polsed, aligned=aligned, win=win | |
2 | 2 | |
3 | 3 | |
4 | 4 | IF keyword_set(ps) THEN BEGIN |
... | ... | @@ -29,7 +29,7 @@ if not keyword_set(st) then begin |
29 | 29 | ENDIF |
30 | 30 | |
31 | 31 | |
32 | -fact=1/(4.*!pi)/(3.e8/1.e-6/(st.polsed).wav)*1.00e17 | |
32 | +fact=1/(4.*!pi)*(*!dustem_HCD)*1.E-20/(3.e8/1.e-6/(st.polsed).wav)*1.00e17 ;applied correction here to take into account the HCD | |
33 | 33 | fact1=1.E-20 ;This will convert data (real data) that is in MJy/sr to W |
34 | 34 | |
35 | 35 | P = st.polsed.em_tot*fact ;This is Polarized intensity P | ... | ... |
src/idl/dustem_plugin_freefree.pro
... | ... | @@ -42,14 +42,20 @@ IF keyword_set(help) THEN BEGIN |
42 | 42 | ENDIF |
43 | 43 | |
44 | 44 | ;default values of input parameters |
45 | -Tgas=10000. ;default gas temperature | |
45 | +Tgas=10000. ;default gas temperature | |
46 | 46 | Amplitude=1. ;Amplitude |
47 | -paramtag=['T_gas (K)','Amp'] | |
47 | +smallp=0.0 ;default polarization fraction | |
48 | +psi=0. ;default polarization angle | |
49 | +paramtag=['T_gas (K)','Amp','p','Psi (deg)'] | |
48 | 50 | IF keyword_set(key) THEN BEGIN |
49 | 51 | a=where(key EQ 1,count1) |
50 | 52 | b=where(key EQ 2,count2) |
53 | + c=where(key EQ 3,count3) ;default polarization fraction -newly added | |
54 | + d=where(key EQ 4,count4) ;default polarization angle -newly added | |
51 | 55 | IF count1 NE 0 then Tgas=(val(a))(0) |
52 | 56 | IF count2 NE 0 then Amplitude=(val(b))(0) |
57 | + IF count3 NE 0 then smallp=val[c[0]] ;-newly added | |
58 | + IF count4 NE 0 then psi=val[d[0]] ;-newly added | |
53 | 59 | ENDIF |
54 | 60 | |
55 | 61 | ;IF !dustem_which EQ 'DESERT' THEN BEGIN |
... | ... | @@ -59,12 +65,15 @@ ENDIF |
59 | 65 | ;ENDELSE |
60 | 66 | ;replaced by the following to ease the life of plugins writters |
61 | 67 | lambir=dustem_get_wavelengths() |
62 | - | |
68 | +Nwavs=n_elements(lambir) | |
63 | 69 | cmic=3.e14 |
64 | 70 | nu=cmic/lambir ;Hz |
65 | 71 | mjy=1 ;output is in MJy/sr |
66 | 72 | lambir_ref=10000. |
67 | 73 | |
74 | + | |
75 | +output=fltarr(Nwavs,3) ;newly added | |
76 | + | |
68 | 77 | ;stop |
69 | 78 | ;use_method='Deschenes2008' |
70 | 79 | ;use_method='WallsGabaud1998' |
... | ... | @@ -73,22 +82,22 @@ use_method='Dickinson2003_norm' |
73 | 82 | CASE use_method OF |
74 | 83 | 'WallsGabaud1998':BEGIN |
75 | 84 | em=1. ;This is a stupid value for the Emission measure. Result will be rescaled based on I_halpha_R anyway |
76 | - output=intensity_free_free(nu,Tgas,em,I_halpha_R=I_halpha_R,nHe=nHe,ergs=ergs,mjy=mjy) | |
85 | + output[*,0]=intensity_free_free(nu,Tgas,em,I_halpha_R=I_halpha_R,nHe=nHe,ergs=ergs,mjy=mjy) | |
77 | 86 | fact=Amplitude/I_halpha_R |
78 | 87 | ;=== normalize to the requested Halpha value. |
79 | - output=output*fact | |
88 | + output[*,0]=output[*,0]*fact | |
80 | 89 | END |
81 | 90 | 'WallsGabaud1998_scaled':BEGIN |
82 | 91 | em=1. ;This is a stupid value for the Emission measure. Result will be rescaled based on I_halpha_R anyway |
83 | - output=intensity_free_free(nu,Tgas,em,I_halpha_R=I_halpha_R,nHe=nHe,ergs=ergs,mjy=mjy) | |
84 | - norm=interpol(output,lambir,lambir_ref) | |
85 | - output=output/norm*Amplitude | |
92 | + output[*,0]=intensity_free_free(nu,Tgas,em,I_halpha_R=I_halpha_R,nHe=nHe,ergs=ergs,mjy=mjy) | |
93 | + norm=interpol(output[*,0],lambir,lambir_ref) | |
94 | + output[*,0]=output[*,0]/norm*Amplitude | |
86 | 95 | END |
87 | 96 | 'Deschenes2008':BEGIN |
88 | 97 | beta_freefree=2.+1./(10.48+1.5*alog(Tgas/8.e3)-alog(nu/1.e9)) |
89 | - output=nu^(-1.*beta_freefree) | |
90 | - norm=interpol(output,lambir,lambir_ref) | |
91 | - output=output/norm*Amplitude | |
98 | + output[*,0]=nu^(-1.*beta_freefree) | |
99 | + norm=interpol(output[*,0],lambir,lambir_ref) | |
100 | + output[*,0]=output[*,0]/norm*Amplitude | |
92 | 101 | END |
93 | 102 | 'Dickinson2003_norm':BEGIN |
94 | 103 | ;stop |
... | ... | @@ -99,12 +108,17 @@ CASE use_method OF |
99 | 108 | Tb=8.369e3*a*(nu_ghz)^(-2.)*T4^0.667*10^(0.029*T4)*(1.+0.08) ;in mK for 1 Rayleigh |
100 | 109 | convert_mk_mjy, lambir, Tb, I_Mjy, /RJ |
101 | 110 | norm=interpol(I_Mjy,lambir,lambir_ref) |
102 | - output=I_Mjy/norm*Amplitude | |
111 | + output[*,0]=I_Mjy/norm*Amplitude | |
103 | 112 | END |
104 | 113 | ENDCASE |
105 | 114 | |
106 | -scope='ADD_SED' | |
115 | +scope='ADD_SED+ADD_QSED+ADD_USED' | |
116 | + | |
117 | +;polarization this actually need to | |
118 | +polar_ippsi2iqu,output[*,0],Q,U,replicate(smallp,Nwavs),replicate(psi,Nwavs) | |
107 | 119 | |
120 | +output[*,1]=Q | |
121 | +output[*,2]=U | |
108 | 122 | |
109 | 123 | |
110 | 124 | the_end: | ... | ... |
src/idl/dustem_plugin_mdfy_spinning_pol.pro
1 | -FUNCTION dustem_plugin_mdfy_spinning_pol, key=key, val=val, scope=scope, help=help | |
1 | +FUNCTION dustem_plugin_mdfy_spinning_pol, key=key, val=val, scope=scope, paramtags=paramtags, help=help | |
2 | 2 | |
3 | 3 | ;+ |
4 | 4 | ; NAME: |
... | ... | @@ -65,6 +65,10 @@ IF keyword_set(key) THEN BEGIN |
65 | 65 | |
66 | 66 | ENDIF |
67 | 67 | |
68 | + | |
69 | + | |
70 | +paramtags=['p','Psi (deg)'] | |
71 | + | |
68 | 72 | lambir=dustem_get_wavelengths() |
69 | 73 | Nwaves=n_elements(lambir) |
70 | 74 | ... | ... |
src/idl/dustem_plugin_modify_dust_polarization.pro deleted
... | ... | @@ -1,93 +0,0 @@ |
1 | -Function dustem_plugin_modify_dust_polarization, key=key, val=val, scope=scope,help=help | |
2 | - | |
3 | -;+ | |
4 | -; NAME: | |
5 | -; dustem_create_stokes | |
6 | -; PURPOSE: | |
7 | -; Produces stokes emission parameters for the dust and synchrotron components | |
8 | -; CATEGORY: | |
9 | -; DUSTEM Wrapper | |
10 | -; CALLING SEQUENCE: | |
11 | -; dustem_create_stokes(st,key=key,val=val) | |
12 | -; INPUTS: | |
13 | -; st (st = dustem_run(p_dim)) | |
14 | -; OPTIONAL INPUT PARAMETERS: | |
15 | -; key = input parameter number | |
16 | -; val = input parameter value | |
17 | -; OUTPUTS: | |
18 | -; out = array containing the stokes emission parameters associated to the dust/synchrotron component or a concatenated version for both | |
19 | -; OPTIONAL OUTPUT PARAMETERS: | |
20 | -; None | |
21 | -; ACCEPTED KEY-WORDS: | |
22 | -; help = if set, print this help | |
23 | -; COMMON BLOCKS: | |
24 | -; None | |
25 | -; SIDE EFFECTS: | |
26 | -; None | |
27 | -; RESTRICTIONS: | |
28 | -; The dustem fortran code must be installed | |
29 | -; The dustem idl wrapper must be installed | |
30 | -; PROCEDURE: | |
31 | -; This is a dustem plugin | |
32 | -;- | |
33 | - | |
34 | -IF keyword_set(help) THEN BEGIN | |
35 | - doc_library,'dustem_create_stokes' | |
36 | - out=0. | |
37 | - goto,the_end | |
38 | -ENDIF | |
39 | - | |
40 | - | |
41 | - | |
42 | -IF not KEYWORD_SET(st) THEN BEGIN | |
43 | -IF ptr_valid((*!dustem_fit).CURRENT_PARAM_VALUES) THEN BEGIN | |
44 | - p_di=(*(*!dustem_fit).CURRENT_PARAM_VALUES) | |
45 | - | |
46 | -ENDIF ELSE BEGIN | |
47 | - p_di=(*(*!dustem_fit).PARAM_INIT_VALUES) | |
48 | - ENDELSE | |
49 | - | |
50 | -st=dustem_run(p_di) | |
51 | -ENDIF | |
52 | - | |
53 | - | |
54 | -psi=0. | |
55 | -smallp=1. | |
56 | -IF keyword_set(key) THEN BEGIN | |
57 | - ind1=where(key EQ 1,count1) | |
58 | - ind2=where(key EQ 2,count2) | |
59 | - IF count1 NE 0 THEN smallp=val[ind1[0]] ; setting psi from pd | |
60 | - IF count2 NE 0 THEN psi=val[ind2[0]] ; setting psi from pd | |
61 | -ENDIF | |
62 | - | |
63 | - | |
64 | -fact = 1.e4*1.E20/(4.*!pi)/(3.e8/1.e-6/((st.polsed).wav))*1.e20/1.e7 | |
65 | -P=((st.polsed).em_tot)*fact | |
66 | -I=((st.sed).em_tot)*fact | |
67 | - | |
68 | - | |
69 | - | |
70 | -Nwaves=(size(I))[1] | |
71 | - | |
72 | -frac=P/I*smallp | |
73 | -tes=where(finite(frac) eq 0) | |
74 | -frac(tes)=0. | |
75 | - | |
76 | - | |
77 | -polar_ippsi2iqu,I,Q,U,frac,replicate(psi,Nwaves) | |
78 | - | |
79 | -out=fltarr(Nwaves,3) | |
80 | - | |
81 | -out[*,0]=I | |
82 | -out[*,1]=Q | |
83 | -out[*,2]=U | |
84 | - | |
85 | -scope='REPLACE_QSED+REPLACE_USED' | |
86 | - | |
87 | -return, out | |
88 | - | |
89 | -the_end: | |
90 | - | |
91 | - | |
92 | -end | |
93 | - |
src/idl/dustem_plugin_stellar_population.pro
... | ... | @@ -3288,8 +3288,6 @@ ENDELSE |
3288 | 3288 | if keyword_set(key) then begin |
3289 | 3289 | print, 'comp_pop is:' |
3290 | 3290 | print, comp_pop |
3291 | -endif | |
3292 | - | |
3293 | 3291 | ;integrating the mathis isrf |
3294 | 3292 | ma_isrf_dat=!dustem_soft_dir+'data/ISRF_MATHIS.DAT' |
3295 | 3293 | ma_isrf=dustem_read_isrf(ma_isrf_dat) |
... | ... | @@ -3303,6 +3301,9 @@ int_isrf=INT_TABULATED((ma_isrf.lambisrf)[un],(st.isrf)[un]) |
3303 | 3301 | print, 'G0_stellar_population=' |
3304 | 3302 | print, int_isrf/int_mathis |
3305 | 3303 | ;stop |
3304 | + | |
3305 | +endif | |
3306 | + | |
3306 | 3307 | |
3307 | 3308 | the_end: |
3308 | 3309 | ... | ... |
src/idl/dustem_read_all_web3p8.pro
src/idl/dustem_sed_plot.pro
1 | -PRO dustem_sed_plot,p_min,_extra=_extra,function_name=function_name,pol=pol,legend_xpos=legend_xpos,legend_ypos=legend_ypos,ps=ps,png=png | |
1 | +PRO dustem_sed_plot,p_min,_extra=_extra,function_name=function_name,pol=pol,legend_xpos=legend_xpos,legend_ypos=legend_ypos,ps=ps,png=png,fpol=fpol | |
2 | 2 | |
3 | 3 | IF not keyword_set(function_name) THEN BEGIN |
4 | 4 | ;Run dustem with as an interface to mpfitfun; what does this mean? This whole procedure will have to be changed |
... | ... | @@ -15,20 +15,20 @@ IF not keyword_set(function_name) THEN BEGIN |
15 | 15 | st=out_st |
16 | 16 | ;dustem_plot_fit_sed,st,dustem_sed,cont,freefree,synchrotron,_extra=_extra,legend_xpos=legend_xpos,legend_ypos=legend_ypos |
17 | 17 | win=1;win-act_wins+1 |
18 | - IF keyword_set(ps) THEN dustem_plot_fit_sed,st,dustem_sed,win=win,_extra=_extra,legend_xpos=legend_xpos,legend_ypos=legend_ypos,ps=ps,png=png,use_model=use_model ELSE dustem_plot_fit_sed,st,dustem_sed,_extra=_extra,win=win,legend_xpos=legend_xpos,legend_ypos=legend_ypos,use_model=use_model | |
18 | + IF keyword_set(ps) THEN dustem_plot_fit_sed,st,dustem_sed,win=win,_extra=_extra,legend_xpos=legend_xpos,legend_ypos=legend_ypos,ps=ps,png=png,use_model=use_model,fpol=fpol ELSE dustem_plot_fit_sed,st,dustem_sed,_extra=_extra,win=win,legend_xpos=legend_xpos,legend_ypos=legend_ypos,use_model=use_model,fpol=fpol | |
19 | 19 | |
20 | 20 | ;I do not understand the reason begind the stop below - either way polarization is handled by other procedures |
21 | 21 | IF keyword_set(pol) THEN BEGIN |
22 | 22 | ;stop |
23 | 23 | IF tag_exist(!dustem_data,'polsed') THEN BEGIN |
24 | - IF isa(*!dustem_data.polsed) THEN BEGIN | |
24 | + IF isa(!dustem_data.polsed) THEN BEGIN | |
25 | 25 | win+=1 |
26 | 26 | dustem_polsed=dustem_compute_polsed(p_min,st=st) |
27 | 27 | dustem_plot_polsed, st, p_dim, dustem_polsed, aligned=aligned, win=win,_Extra=extra |
28 | 28 | ENDIF |
29 | 29 | ENDIF |
30 | 30 | IF tag_exist(!dustem_data,'polext') THEN BEGIN |
31 | - IF isa(*!dustem_data.polext) THEN BEGIN | |
31 | + IF isa(!dustem_data.polext) THEN BEGIN | |
32 | 32 | win+=1 |
33 | 33 | dustem_polext=dustem_compute_polext(p_min,st=st) |
34 | 34 | dustem_plot_polext, st, p_dim, dustem_polext, aligned=aligned, win=win,_Extra=extra | ... | ... |
src/idl/dustem_set_data.pro
1 | -FUNCTION dustem_set_data,help=help,sed=sed,ext=ext,polfrac=polfrac,rchi2_weight=rchi2_weight,f_HI=f_HI | |
1 | +FUNCTION dustem_set_data,help=help,sed=sed,ext=ext,fpol=fpol,rchi2_weight=rchi2_weight,f_HI=f_HI | |
2 | 2 | |
3 | 3 | ;+ |
4 | 4 | ; NAME: |
... | ... | @@ -46,7 +46,6 @@ FUNCTION dustem_set_data,help=help,sed=sed,ext=ext,polfrac=polfrac,rchi2_weight= |
46 | 46 | ; The function uses two main input structures: SED and EXT. Polarization data is included within each. |
47 | 47 | ;- |
48 | 48 | |
49 | -;fully deprecate the use of polfrac?===>YES should do so | |
50 | 49 | |
51 | 50 | IF keyword_set(help) THEN BEGIN |
52 | 51 | doc_library,'dustem_set_data' |
... | ... | @@ -61,8 +60,10 @@ ENDIF |
61 | 60 | ;SETTING THE DATA STRUCTURES FOR THE FITTING PROCESS - SED |
62 | 61 | |
63 | 62 | IF keyword_set(sed) THEN BEGIN |
64 | - | |
65 | - xx=dustem_check_data(sed=sed,ist=ist,pst=pst,qst=qst,ust=ust) | |
63 | + | |
64 | + | |
65 | + ;maybe to activate fpol here you need to set it to one? CHECK THIS OUT. | |
66 | + if keyword_set(fpol) then xx=dustem_check_data(sed=sed,ist=ist,pst=pst,fpol=fpol,fpst=fpst,qst=qst,ust=ust) else xx=dustem_check_data(sed=sed,ist=ist,pst=pst,fpst=fpst,qst=qst,ust=ust) | |
66 | 67 | ;stop |
67 | 68 | ;=== fill !dustem_data |
68 | 69 | IF isa(ist) THEN !dustem_data.sed = ptr_new(ist) ;ELSE !dustem_data.sed = ptr_new() |
... | ... | @@ -79,6 +80,13 @@ IF keyword_set(sed) THEN BEGIN |
79 | 80 | if keyword_set(f_HI) then if f_HI gt 0 then $ |
80 | 81 | (*!dustem_data.polsed).values *= f_HI |
81 | 82 | ENDIF |
83 | + If isa(fpst) then BEGIN | |
84 | + ;=== fill !dustem_data | |
85 | + !dustem_data.polfrac = ptr_new(fpst) | |
86 | + ; If f_HI is specified, multiply the data by f_HI | |
87 | + if keyword_set(f_HI) then if f_HI gt 0 then $ | |
88 | + (*!dustem_data.polfrac).values *= f_HI | |
89 | + ENDIF | |
82 | 90 | IF isa(qst) THEN BEGIN |
83 | 91 | ;=== fill !dustem_data |
84 | 92 | !dustem_data.qsed = ptr_new(qst) |
... | ... | @@ -139,6 +147,7 @@ ENDIF |
139 | 147 | If !run_pol THEN BEGIN |
140 | 148 | ;SED |
141 | 149 | IF isa(pst) THEN !fit_rchi2_weight.polsed=1. |
150 | + IF isa(fpst) THEN !fit_rchi2_weight.polfrac=1. | |
142 | 151 | IF isa(qst) THEN !fit_rchi2_weight.qsed=1. |
143 | 152 | IF isa(ust) THEN !fit_rchi2_weight.used=1. |
144 | 153 | |
... | ... | @@ -155,6 +164,7 @@ IF keyword_set(rchi2_weight) THEN BEGIN |
155 | 164 | |
156 | 165 | IF !run_pol THEN BEGIN |
157 | 166 | IF isa(pst) THEN !fit_rchi2_weight.polsed = rchi2_weight.polsed |
167 | + IF isa(fpst) THEN !fit_rchi2_weight.polfrac = rchi2_weight.polfrac | |
158 | 168 | IF isa(qst) THEN !fit_rchi2_weight.qsed = rchi2_weight.qsed |
159 | 169 | IF isa(ust) THEN !fit_rchi2_weight.used = rchi2_weight.used |
160 | 170 | ... | ... |
src/idl_misc/JPBLib_for_Dustemwrap/General/convert_mk_mjy.pro
... | ... | @@ -16,7 +16,7 @@ |
16 | 16 | ; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | 17 | |
18 | 18 | ;+ |
19 | -; Convert mK, either themodynamic or Rayleigh-Jeans in MJy/sr | |
19 | +; Convert mK, either thermodynamic or Rayleigh-Jeans in MJy/sr | |
20 | 20 | ; |
21 | 21 | ; |
22 | 22 | ; @param lam {in}{required}{type=float} wavelength in micron | ... | ... |