Blame view

src/idl/dustem_mpfit_run.pro 20.6 KB
266ae799   Ilyes Choubani   General update
1
FUNCTION dustem_mpfit_run,x,p_min,_EXTRA=_extra
427f1205   Jean-Michel Glorian   version 4.2 merged
2
3
4

;+
; NAME:
36e8b879   Jean-Michel Glorian   update from deborah
5
;    dustem_mpfit_run_vg
427f1205   Jean-Michel Glorian   version 4.2 merged
6
7
8
9
10
; PURPOSE:
;    function used to fit dustem model with dustem_mpfit_sed
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
36e8b879   Jean-Michel Glorian   update from deborah
11
;    res=dustem_mpfit_run_vg(x,params[,_EXTRA=extra][,cc_sed=cc_sed][,/help])
427f1205   Jean-Michel Glorian   version 4.2 merged
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
; INPUTS:
;    x         = necessary for interface but unused
;    params    = Dustem Model parameters normalized to initial values
; OPTIONAL INPUT PARAMETERS:
;    cc_sed    = SED color correction factors
;    _extra    = extra parameters for the plot routine
; OUTPUTS:
;    None
; OPTIONAL OUTPUT PARAMETERS:
;    None
; ACCEPTED KEY-WORDS:
;    help      = If set, print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    SED and model are plotted if !dustem_show_plot
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
36e8b879   Jean-Michel Glorian   update from deborah
33
;    res=dustem_mpfit_run_vg(x,params[,_EXTRA=extra][,cc_sed=cc_sed][,/help])
4750086c   Ilyes Choubani   nouvelle philosph...
34
;  ODIFICATION HISTORY:
427f1205   Jean-Michel Glorian   version 4.2 merged
35
36
37
38
39
40
41
42
;    Adapted to extinction and polarization by Vincent Guillet (IAS)
;    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.
;-

;note that x is not used.

427f1205   Jean-Michel Glorian   version 4.2 merged
43
IF keyword_set(help) THEN BEGIN
9be94157   Jean-Philippe Bernard   improved
44
  doc_library,'dustem_mpfit_run'
427f1205   Jean-Michel Glorian   version 4.2 merged
45
46
47
  sed=0.
  goto,the_end
ENDIF
427f1205   Jean-Michel Glorian   version 4.2 merged
48
49

p_dim=p_min*(*(*!dustem_fit).param_init_values)
427f1205   Jean-Michel Glorian   version 4.2 merged
50

427f1205   Jean-Michel Glorian   version 4.2 merged
51
IF !run_ionfrac gt 0. THEN toto = dustem_create_ionfrac()
452c334e   Ilyes Choubani   Implementation Of...
52

427f1205   Jean-Michel Glorian   version 4.2 merged
53
;RUN THE MODEL AND GET THE SPECTRUM
45da29c6   Ilyes Choubani   updating mpfit_run
54

45da29c6   Ilyes Choubani   updating mpfit_run
55
56
dustem_activate_plugins,p_dim/(*(*!dustem_fit).param_init_values),st ;st is an output...

5f04fa07   Ilyes Choubani   general update
57
;stop
45da29c6   Ilyes Choubani   updating mpfit_run
58

5f04fa07   Ilyes Choubani   general update
59
;st1 = dustem_run(p_dim) 
45da29c6   Ilyes Choubani   updating mpfit_run
60
    
5f04fa07   Ilyes Choubani   general update
61
;stop
45da29c6   Ilyes Choubani   updating mpfit_run
62

36e8b879   Jean-Michel Glorian   update from deborah
63
st_model=dustem_read_all(!dustem_soft_dir)
427f1205   Jean-Michel Glorian   version 4.2 merged
64

45da29c6   Ilyes Choubani   updating mpfit_run
65

427f1205   Jean-Michel Glorian   version 4.2 merged
66
67
chi2_sed      = 0  
chi2_ext      = 0  
452c334e   Ilyes Choubani   Implementation Of...
68
69
70
71
chi2_qsed      =0
chi2_used      =0 
chi2_qext      =0
chi2_uext      =0 
18e4331f   Ilyes Choubani   general update (f...
72

427f1205   Jean-Michel Glorian   version 4.2 merged
73
74
rchi2_sed     = 0
rchi2_ext     = 0
452c334e   Ilyes Choubani   Implementation Of...
75
76
77
78
rchi2_qsed     =0
rchi2_used     =0
rchi2_qext     =0
rchi2_uext     =0
18e4331f   Ilyes Choubani   general update (f...
79

427f1205   Jean-Michel Glorian   version 4.2 merged
80
81
wrchi2_sed    = 0
wrchi2_ext    = 0
452c334e   Ilyes Choubani   Implementation Of...
82
83
84
85
wrchi2_qsed    =0
wrich2_used    =0
wrchi2_qext    =0
wrich2_uext    =0
18e4331f   Ilyes Choubani   general update (f...
86

427f1205   Jean-Michel Glorian   version 4.2 merged
87
88
n_sed         = 0
n_ext         = 0
452c334e   Ilyes Choubani   Implementation Of...
89
90
91
92
n_qsed         =0
n_used         =0
n_qext         =0
n_uext         =0
36e8b879   Jean-Michel Glorian   update from deborah
93
94

win = 0
427f1205   Jean-Michel Glorian   version 4.2 merged
95
96
97

tagnames=tag_names(!dustem_data)
dustem_out = [0]
36e8b879   Jean-Michel Glorian   update from deborah
98
99
ind_data_tag=dustem_data_tag(count=count_data_tag)

b5ccb706   Jean-Philippe Bernard   improved to fit p...
100
FOR i_tag=0,count_data_tag-1 DO BEGIN
427f1205   Jean-Michel Glorian   version 4.2 merged
101

36e8b879   Jean-Michel Glorian   update from deborah
102
    CASE tagnames(ind_data_tag(i_tag)) OF
266ae799   Ilyes Choubani   General update
103
        
fcb6eade   Ilyes Choubani   general update - ...
104
		'SED'	: BEGIN ;UPDATED. BUT ISSUE WITH THE CONCATENATION TO THE DUSTEM_OUT ARRAY AS OUTLINED BELOW
45da29c6   Ilyes Choubani   updating mpfit_run
105
    		
5f04fa07   Ilyes Choubani   general update
106
	        dustem_sed = dustem_compute_sed(p_dim,st,SED_spec)
b5ccb706   Jean-Philippe Bernard   improved to fit p...
107
108
109
110
111
112
113
114
115
116
117
118
119
	        chi2_sed   = total(((*!dustem_data.sed).values-dustem_sed)^2/(*!dustem_data.sed).sigma^2)
			n_sed = n_elements((*!dustem_data.sed).values)
	       	rchi2_sed  = chi2_sed / n_sed
	       	wrchi2_sed  = rchi2_sed * !fit_rchi2_weight.sed
	       	message,"chi2 SED = "+strtrim(chi2_sed,2)+"  rchi2 SED = "+strtrim(rchi2_sed,2),/continue;," weighted rchi2 SED=",wrchi2_sed
			;print,'wl ',(*!dustem_data.sed).wav
			;print,"Delta SED per wl: ",(*!dustem_data.sed).values-dustem_sed
			;print,"error per wl: ",(*!dustem_data.sed).sigma
			;print,"chi2 per wl: ",((*!dustem_data.sed).values-dustem_sed)^2/(*!dustem_data.sed).sigma^2
	        alpha = total(((*!dustem_data.sed).values*dustem_sed)/(*!dustem_data.sed).sigma^2) $
	              		/ total(((*!dustem_data.sed).values)^2/(*!dustem_data.sed).sigma^2)
	        beta = total(((*!dustem_data.sed).values*dustem_sed)/(*!dustem_data.sed).sigma^2) $
	             		/ total(dustem_sed^2/(*!dustem_data.sed).sigma^2)
427f1205   Jean-Michel Glorian   version 4.2 merged
120
		
b5ccb706   Jean-Philippe Bernard   improved to fit p...
121
	        print,"Best SED chi2 obtained if f_HI = ",alpha, " or if we multiply model by ",beta
759a527d   Ilyes Choubani   general update
122
123
	        (*!dustem_fit).chi2=chi2_sed
	        (*!dustem_fit).rchi2=rchi2_sed
5f04fa07   Ilyes Choubani   general update
124
            
fcb6eade   Ilyes Choubani   general update - ...
125
126
127
            ;I think this test isn't the correct one because when we want to show the SED data and not fit it we have an issue
            ;with the current hiding/showing formalism!!!!  
	        
1355825c   Ilyes Choubani   General update
128
	        if isa(!dustem_data.sed) then dustem_out = [ dustem_out, dustem_sed ]
266ae799   Ilyes Choubani   General update
129
            
36e8b879   Jean-Michel Glorian   update from deborah
130
131
		END

fcb6eade   Ilyes Choubani   general update - ...
132
		'EXT' 	: BEGIN ;NOT UPDATED
452c334e   Ilyes Choubani   Implementation Of...
133
134
    		
    		;ADDING PLUGIN TO SPECTRUM----------------
759a527d   Ilyes Choubani   general update
135
    		IF ptr_valid(*!dustem_plugin) THEN BEGIN
452c334e   Ilyes Choubani   Implementation Of...
136
    		for i=0L,n_tags(*!dustem_scope)-1 do begin
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
137
            if total(strsplit(*(*!dustem_scope).(i),'+',/extract) eq 'ADD_EXT') then st.ext.ext_tot+=(*(*!dustem_plugin).(i))
452c334e   Ilyes Choubani   Implementation Of...
138
            endfor
759a527d   Ilyes Choubani   general update
139
            endif
452c334e   Ilyes Choubani   Implementation Of...
140
141
        	;------------------------------------------
        	
b5ccb706   Jean-Philippe Bernard   improved to fit p...
142
			dustem_ext = interpol(st.ext.ext_tot,st.ext.wav,(*!dustem_data.ext).wav) 
452c334e   Ilyes Choubani   Implementation Of...
143
            
b5ccb706   Jean-Philippe Bernard   improved to fit p...
144
145
146
147
148
149
	        chi2_ext   = total(((*!dustem_data.ext).values-dustem_ext)^2/(*!dustem_data.ext).sigma^2)
			n_ext = n_elements((*!dustem_data.ext).values)
			rchi2_ext  = chi2_ext / n_ext
	        	wrchi2_ext  = rchi2_ext * !fit_rchi2_weight.ext
	        	print,"chi2 EXT = ",chi2_ext,"  rchi2 EXT = ",rchi2_ext;," weighted rchi2 EXT=",wrchi2_ext
	        	;print,"chi2 per wl: ",((*!dustem_data.ext).values-dustem_ext)^2/(*!dustem_data.ext).sigma^2
36e8b879   Jean-Michel Glorian   update from deborah
150

b5ccb706   Jean-Philippe Bernard   improved to fit p...
151
152
			; Plot if needed
			IF !dustem_show_plot NE 0 THEN BEGIN
36e8b879   Jean-Michel Glorian   update from deborah
153

b5ccb706   Jean-Philippe Bernard   improved to fit p...
154
155
156
157
158
159
				win+=1
	                	;dustem_plot_ext,st,yr=[1.e-6,1.e0],/ysty,xr=[0.5,40],/xsty,win=win
				xr=[0.3,40]
				yr=[1.e-26,1.e-21]
				dustem_plot_ext,st,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,mergePAH=mergePAH,/donotclose,multi=1
				dustem_plot_ext,st,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,mergePAH=mergePAH,multi=2
452c334e   Ilyes Choubani   Implementation Of...
160
        		
b5ccb706   Jean-Philippe Bernard   improved to fit p...
161
162
163
164
165
166
167
168
169
				win+=1
	                	;dustem_plot_ext,st,/UV,yr=[0,2.5],/ysty,xr=[0,10],/xsty,win=win
				xr=[0.2,10]
				yr=[0,3e-21]
				dustem_plot_ext,st,/UV,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,mergePAH=mergePAH,/donotclose,multi=1
				dustem_plot_ext,st,/UV,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,mergePAH=mergePAH,multi=2

			ENDIF
			
759a527d   Ilyes Choubani   general update
170
			;dustem_plot_ext,st,/print_Rv ;commented this recently
b5ccb706   Jean-Philippe Bernard   improved to fit p...
171
172
173
174
175

		 	dustem_out = [ dustem_out, dustem_ext ]

		 	END

fcb6eade   Ilyes Choubani   general update - ...
176
		'POLEXT': BEGIN ;NOT UPDATED
b5ccb706   Jean-Philippe Bernard   improved to fit p...
177

759a527d   Ilyes Choubani   general update
178
179
			
			;---------------the procedure within this block has not been updated for a vert long time
b5ccb706   Jean-Philippe Bernard   improved to fit p...
180
181
182
183
184
			IF !dustem_show_plot NE 0 and !run_circ then begin
	                   win+=1
	                 
				dustem_plot_circ,st,win=win,xr=[0.1,5],aligned=st_model.align.grains.aligned,yr=[-0.03,0.03]
			endif
759a527d   Ilyes Choubani   general update
185
186
187
			;--------------------------------------------------------------------------------------
			
			
b5ccb706   Jean-Philippe Bernard   improved to fit p...
188
189

			IF !run_lin then begin
759a527d   Ilyes Choubani   general update
190
                    ;compute_polext needs updating. It's been months. 
452c334e   Ilyes Choubani   Implementation Of...
191
                    dustem_polext = dustem_compute_polext(p_dim,st,dustem_qext,dustem_uext,Q_ext,U_ext)
b5ccb706   Jean-Philippe Bernard   improved to fit p...
192
	        		chi2_polext   = total(((*!dustem_data.polext).values-dustem_polext)^2/(*!dustem_data.polext).sigma^2)
18e4331f   Ilyes Choubani   general update (f...
193
194
195
196
;     				n_polext = n_elements((*!dustem_data.polext).values)
; 	        		rchi2_polext  = chi2_polext / n_polext
; 	        		wrchi2_polext  = rchi2_polext * !fit_rchi2_weight.polext
; 	        		print,"chi2 POLEXT = ",chi2_polext,"  rchi2 POLEXT = ",rchi2_polext;," weighted rchi2 POLEXT=",wrchi2_polext
b5ccb706   Jean-Philippe Bernard   improved to fit p...
197
198
199
200
201
202
	        		;print,"chi2 per wl: ",((*!dustem_data.polext).values-dustem_polext)^2/(*!dustem_data.polext).sigma^2

	        		; Fit in (pmax,lmax,K)
	        		x=st.polext.wav
	        		logx=alog(x)
	        		logy=alog(st.polext.ext_tot)
4750086c   Ilyes Choubani   nouvelle philosph...
203
	        		
b5ccb706   Jean-Philippe Bernard   improved to fit p...
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
	        		; Whittet+1992 (Table 1)
	        		Uband = 0.36
	        		Bband = 0.43
	        		Vband = 0.55
	        		Rband = 0.63
	        		Iband = 0.78
	        		Jband = 1.21
	        		Hband = 1.64
	        		Kband = 2.04
	        		bands = [Uband,Bband,Vband,Rband,Iband,Jband,Hband]
	        		nbands = n_elements(bands)
	        		jband = indgen(nbands)*0
	        		for k=0,nbands-1 do begin
	                		xx=min(abs(st.polext.wav-bands(k)),j)
	                		jband(k) = j
	        		endfor
	        		;j=where(st.polext.ext_tot gt 0 and x gt 0.2 and x lt 1)
	        		res = poly_fit(logx(jband),logy(jband),2)
			
	        		print
	        		print,"Serkowski Fit with free K over ",string(st.polext(jband).wav,format='(100F5.2)')
	        		print,"-------------------------"
	        		K    = -res(2)
	        		lmax = exp(res(1)/(2*K))
	        		pmax = exp(res(0)+K*alog(lmax)^2)
	        		print,"* lmax = ",lmax," micron"
	        		print,"* K    = ",K
	        		print,"* pmax = ",pmax," for NH=1e21"
	        		print
			
				; Plot if needed
				IF !dustem_show_plot NE 0 THEN BEGIN

452c334e   Ilyes Choubani   Implementation Of...
237
238
239
240
241
;  	       			; Polarization fraction in the UV-IR
;  	                win+=1
; 	                           
;  	       			dustem_plot_polar,st,p_dim,aligned=st_model.align.grains.aligned,yr=[0,0.15],/ysty,xr=[0.1,50],/xsty,win=win;multi=0,ps=filename
; ; 					
b5ccb706   Jean-Philippe Bernard   improved to fit p...
242
	   				; Polarisation curve (Serkowski)
452c334e   Ilyes Choubani   Implementation Of...
243
244
245
246
 					win+=1
 					;xr=[0.3,1e4]
 					xr=[1e-4,3.5]
 					yr=[1e-30,5e-24]
b7f936fc   Ilyes Choubani   to JP: initial fi...
247
248
249
250
251
 					
 					dustem_plot_polext,st,p_dim,dustem_polext,aligned=st_model.align.grains.aligned,win=win
 					
;  					dustem_plot_polar,st,p_dim,aligned=st_model.align.grains.aligned,/UV,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,/donotclose,multi=1
;  					dustem_plot_polar,st,p_dim,aligned=st_model.align.grains.aligned,/UV,yr=yr,/ysty,xr=xr,/xsty,ps=filename,win=win,multi=2
b5ccb706   Jean-Philippe Bernard   improved to fit p...
252
		
452c334e   Ilyes Choubani   Implementation Of...
253
254
255
;  					win+=1
;  					dustem_plot_fpol,win=win,xr=[10,1000],yr=[0,1.1]
;  					
b5ccb706   Jean-Philippe Bernard   improved to fit p...
256
257
	                                
	            ENDIF
36e8b879   Jean-Michel Glorian   update from deborah
258

b5ccb706   Jean-Philippe Bernard   improved to fit p...
259
260
261
				;dustem_plot_polar,st,/print_ratio,cont=cont
	                     
				dustem_out = [ dustem_out, dustem_polext ]
36e8b879   Jean-Michel Glorian   update from deborah
262

b5ccb706   Jean-Philippe Bernard   improved to fit p...
263
			ENDIF
36e8b879   Jean-Michel Glorian   update from deborah
264

b5ccb706   Jean-Philippe Bernard   improved to fit p...
265
			END
427f1205   Jean-Michel Glorian   version 4.2 merged
266

fcb6eade   Ilyes Choubani   general update - ...
267
        'QSED': BEGIN ;UPDATED
45da29c6   Ilyes Choubani   updating mpfit_run
268
        		    
fcb6eade   Ilyes Choubani   general update - ...
269
		        toto = dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec,PSI_spec,dustem_psi_em) 
45da29c6   Ilyes Choubani   updating mpfit_run
270
271
272
273
274
275
		       
		        ;taking care of the color correction for spass ; SHOULD NOT LEAVE THIS ON
		        ;dustem_qsed(-1)=dustem_qsed(-2)
; 		        testspass1 = ((*!dustem_data.qsed).filt_names)(-1) eq 'SPASS1' 
;  			    if testspass1 then dustem_qsed(-1)=dustem_qsed(-2)
;  			    
5f04fa07   Ilyes Choubani   general update
276
			    chi2_qsed = total(((*!dustem_data.qsed).values-dustem_qsed)^2/(*!dustem_data.qsed).sigma^2) 
45da29c6   Ilyes Choubani   updating mpfit_run
277
278
279
280
281
282
283
284
			    n_qsed = n_elements((*!dustem_data.qsed).values)
			    rchi2_qsed  = chi2_qsed / n_qsed
	        	wrchi2_qsed  = rchi2_qsed * !fit_rchi2_weight.qsed 
	            if isa(!dustem_data.qsed) then dustem_out = [ dustem_out, dustem_qsed ] ; classic command
	            message,"chi2 QSED = "+strtrim(chi2_qsed,2)+"  rchi2 QSED = "+strtrim(rchi2_qsed,2),/continue;," weighted rchi2 POLSED=",wrchi2_polsed
	        	print,"chi2 per wl: ",((*!dustem_data.qsed).values-dustem_qsed)^2/(*!dustem_data.qsed).sigma^2
		        
		    END   
1355825c   Ilyes Choubani   General update
285

fcb6eade   Ilyes Choubani   general update - ...
286
287
        'USED': BEGIN ;UPDATED
    		    ;THIS IMPLIES THAT QSED HAS BEEN RAN BEFORE 
5f04fa07   Ilyes Choubani   general update
288
289
    		    ;toto = dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec) 
 			    chi2_used  = total(((*!dustem_data.used).values-dustem_used)^2/(*!dustem_data.used).sigma^2) 
45da29c6   Ilyes Choubani   updating mpfit_run
290
291
292
293
294
295
296
297
298
 			    n_used = n_elements((*!dustem_data.used).values)
 			    rchi2_used  = chi2_used / n_used
  	        	wrchi2_used  = rchi2_used * !fit_rchi2_weight.used
 	            if isa(!dustem_data.used) then dustem_out = [ dustem_out, dustem_used] ; classic command
 	            message,"chi2 USED = "+strtrim(chi2_used,2)+"  rchi2 USED = "+strtrim(rchi2_used,2),/continue;," weighted rchi2 POLSED=",wrchi2_polsed
  	        	print,"chi2 per wl: ",((*!dustem_data.used).values-dustem_used)^2/(*!dustem_data.used).sigma^2
                
  		END
  		
fcb6eade   Ilyes Choubani   general update - ...
299
        'POLSED': BEGIN ;UPDATED
45da29c6   Ilyes Choubani   updating mpfit_run
300
301
302
303
304
		    
		          ;PLUGIN IS ADDED INSIDE DUSTEM_COMPUTE_SED
 			
             	  IF !run_pol and !run_lin THEN BEGIN
  
fcb6eade   Ilyes Choubani   general update - ...
305
            	       	dustem_polsed = dustem_compute_polsed(p_dim,st,P_spec,SP_spec,dustem_polfrac);dustem_compute_polsed(p_dim,st,cont=cont,freefree=freefree,synchrotron=synchrotron)
45da29c6   Ilyes Choubani   updating mpfit_run
306
307
308
309
 	        
         		  ENDIF
		END
    	
fcb6eade   Ilyes Choubani   general update - ...
310
    	'PSI_EM' : BEGIN ;This block is present if PSI_EM data is to be shown but not the rest of the stokes parameters ? 
5f04fa07   Ilyes Choubani   general update
311
312
313
                   
                   IF !run_pol and !run_lin THEN BEGIN
                       degtorad = !pi/180
fcb6eade   Ilyes Choubani   general update - ...
314
315
                       if ~isa(dustem_used) or ~isa(dustem_qsed) then toto = dustem_compute_stokes(p_dim,st,dustem_qsed,dustem_used,Q_spec,U_spec,PSI_spec,dustem_psi_em)
                       ;dustem_psi_em = 0.5*atan(dustem_used,dustem_qsed)/degtorad 
5f04fa07   Ilyes Choubani   general update
316
317
318
319
320
                       
                      
                   ENDIF		
    	END
    	
45da29c6   Ilyes Choubani   updating mpfit_run
321
    	
fcb6eade   Ilyes Choubani   general update - ...
322
323
324
    	'POLFRAC': BEGIN ;We do not really need this block
			
			END
452c334e   Ilyes Choubani   Implementation Of...
325

452c334e   Ilyes Choubani   Implementation Of...
326
 		
fcb6eade   Ilyes Choubani   general update - ...
327
  		'QEXT': BEGIN ;NOT UPDATED ; Q - EXTINCTION CROSS SECTION 
452c334e   Ilyes Choubani   Implementation Of...
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
                   
 			    chi2_qext   =total(((*!dustem_data.qext).values-dustem_qext)^2/(*!dustem_data.qext).sigma^2) 
   			    n_qext = n_elements((*!dustem_data.qext).values)
   			    rchi2_qext  = chi2_qext / n_qext
  	        	wrchi2_qext  = rchi2_qext * !fit_rchi2_weight.qext
   	            dustem_out = [ dustem_out, dustem_qext] ; classic command
   	            message,"chi2 QEXT = "+strtrim(chi2_qext,2)+"  rchi2 QEXT = "+strtrim(rchi2_qext,2),/continue;," weighted rchi2 POLSED=",wrchi2_polsed
  	        	print,"chi2 per wl: ",((*!dustem_data.qext).values-dustem_qext)^2/(*!dustem_data.qext).sigma^2
                if !dustem_show_plot ne 0 then begin
	            
	            win+=1
                window  ,win ,title='DUSTEM WRAP (QEXT)'	                 
                titqex='Q-polarized Cross-section'
                ytitqex=textoidl('\sigma_{Q}/N_H (cm^2/H)')
                xtit=textoidl('\lambda^{-1} (\mum^{-1})')
    	        ;xr=[0.3,1e4]
    	        xr=[1e-4,3.5]
    	          
                yr=[1e-34,5e-24]
                indqex=where(Q_ext lt 0, countqex)
                ylog=1
                if countqex ne 0 then begin
                ylog=0
                yr=[-9e-27,5e-27]  
                endif 
                normpol = st.polext.ext_tot * 0. + 1.d21  
                cgplot,1/st.polext.wav,Q_ext,xtit='',ytit=ytitqex,tit=titqex,ylog=ylog,/xlog,xr=xr,yr=yr,/ys,/xs,position=[0.17,0.35,0.93,0.93],xtickformat='(A1)',color='black'
                cgoplot,1/st.polext.wav,Q_ext/normpol,color='black'
                cgoplot,1/(*!dustem_data.qext).wav,(*!dustem_data.qext).values/normpol,color='Indian Red',psym=16,symsize=1,thick=2
                err_bar,1/(*!dustem_data.qext).wav,(*!dustem_data.qext).values/normpol,yrms=3.*((*!dustem_data.qext).sigma)/2/normpol,color=cgColor('Indian Red')
                cgoplot,1/(*!dustem_data.qext).wav,dustem_qext/normpol,psym=6,color='red',symsize=2
                
                
                
                cgplot,1/st.polsed.wav,Q_ext/Q_ext,xtit=xtit,ytit='Normalized',tit='',/xlog,xr=xr,/ys,/xs,yr=[0,2],ylog=0,position=[0.17,0.14,0.93,0.35],/noerase,yticks=2,ymino=5,xticklen=0.1    
                cgoplot,1/st.polsed.wav,Q_ext/Q_ext,color='black'
                cgoplot,1/(*!dustem_data.qext).wav,(*!dustem_data.qext).values/dustem_qext,color='Indian Red',psym=16,symsize=1,thick=2
                err_bar,1/(*!dustem_data.qext).wav,(*!dustem_data.qext).values/dustem_qext,yrms=3.*((*!dustem_data.qext).sigma)/2.,color=cgColor('Indian Red')
                    
            	            endif                  
     	           
  		END
;  		
fcb6eade   Ilyes Choubani   general update - ...
371
  		'UEXT': BEGIN ;NOT UPDATED
452c334e   Ilyes Choubani   Implementation Of...
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
  
 			    
 			    chi2_uext   =total(((*!dustem_data.uext).values-dustem_uext)^2/(*!dustem_data.uext).sigma^2) 
   			    n_uext = n_elements((*!dustem_data.uext).values)
   			    rchi2_uext  = chi2_uext / n_uext
  	        	wrchi2_uext  = rchi2_uext * !fit_rchi2_weight.uext
   	            dustem_out = [ dustem_out, dustem_uext] ; classic command
   	            message,"chi2 UEXT = "+strtrim(chi2_uext,2)+"  rchi2 UEXT = "+strtrim(rchi2_uext,2),/continue;," weighted rchi2 POLSED=",wrchi2_polsed
  	        	print,"chi2 per wl: ",((*!dustem_data.uext).values-dustem_uext)^2/(*!dustem_data.uext).sigma^2
                if !dustem_show_plot ne 0 then begin
	            
	            win+=1
                window  ,win ,title='DUSTEM WRAP (UEXT)'	                 
                tituex='U-polarized Cross-section'
                ytituex=textoidl('\sigma_{U}/N_H (cm^2/H)')
                xtit=textoidl('\lambda^{-1} (\mum^{-1})')
    	        ;xr=[0.3,1e4]
    	        xr=[1e-4,3.5]
    	          
                yr=[1e-34,5e-24]
                induex=where(U_ext lt 0, countuex)
                ylog=1
                if countuex ne 0 then begin
                ylog=0
                yr=[-9e-27,5e-27]  
                endif 
                normpol = st.polext.ext_tot * 0. + 1.d21  
                cgplot,1/st.polext.wav,U_ext,xtit='',ytit=ytituex,tit=tituex,ylog=ylog,/xlog,xr=xr,yr=yr,/ys,/xs,position=[0.17,0.35,0.93,0.93],xtickformat='(A1)',color='black'
                cgoplot,1/st.polext.wav,U_ext/normpol,color='black'
                cgoplot,1/(*!dustem_data.uext).wav,(*!dustem_data.uext).values/normpol,color='Steel Blue',psym=16,symsize=1,thick=2
                err_bar,1/(*!dustem_data.uext).wav,(*!dustem_data.uext).values/normpol,yrms=3.*((*!dustem_data.uext).sigma)/2/normpol,color=cgColor('Steel Blue')
                cgoplot,1/(*!dustem_data.uext).wav,dustem_uext/normpol,psym=6,color='red',symsize=2
                
                
                
                cgplot,1/st.polsed.wav,U_ext/U_ext,xtit=xtit,ytit='Normalized',tit='',/xlog,xr=xr,/ys,/xs,yr=[0,2],ylog=0,position=[0.17,0.14,0.93,0.35],/noerase,yticks=2,ymino=5,xticklen=0.1    
                cgoplot,1/st.polsed.wav,U_ext/U_ext,color='black'
                cgoplot,1/(*!dustem_data.uext).wav,(*!dustem_data.uext).values/dustem_uext,color='Steel Blue',psym=16,symsize=1,thick=2
                err_bar,1/(*!dustem_data.uext).wav,(*!dustem_data.uext).values/dustem_uext,yrms=3.*((*!dustem_data.uext).sigma)/2/normpol,color=cgColor('Steel Blue')
                    
            	            endif                  
5f04fa07   Ilyes Choubani   general update
413
     	          
452c334e   Ilyes Choubani   Implementation Of...
414
415
416
 	           
  		END
 		
18e4331f   Ilyes Choubani   general update (f...
417
	    ELSE :;IF tagnames(ind_data_tag(i_tag)) NE 'POLFRAC' THEN stop 
427f1205   Jean-Michel Glorian   version 4.2 merged
418
419
    ENDCASE

b5ccb706   Jean-Philippe Bernard   improved to fit p...
420
ENDFOR
5f04fa07   Ilyes Choubani   general update
421
dustemwrap_plot,p_dim,st,dustem_sed,SED_spec,dustem_qsed,Q_spec,dustem_used,U_spec,dustem_polsed,P_spec,dustem_polfrac,SP_spec, dustem_psi_em, PSI_spec,_extra=_extra
427f1205   Jean-Michel Glorian   version 4.2 merged
422

36e8b879   Jean-Michel Glorian   update from deborah
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
DOF = n_elements(p_min)
total_chi2 = 0
total_rchi2 = 0
total_n = 0
if !fit_rchi2_weight.ext ne 0 then begin
	total_n += n_ext
	total_chi2 +=  chi2_ext
	total_rchi2 += rchi2_ext
endif
if !fit_rchi2_weight.sed ne 0 then begin
	total_n += n_sed
	total_chi2 += chi2_sed
	total_rchi2 += rchi2_sed
endif
if !run_pol then begin
1355825c   Ilyes Choubani   General update
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458

    if !fit_rchi2_weight.qsed ne 0 then begin
    	total_n += n_qsed
    	total_chi2 += chi2_qsed
    	total_rchi2 += rchi2_qsed
    endif
    if !fit_rchi2_weight.used ne 0 then begin
    	total_n += n_used
    	total_chi2 += chi2_used
    	total_rchi2 += rchi2_used
    endif
    if !fit_rchi2_weight.qext ne 0 then begin
    	total_n += n_qext
    	total_chi2 += chi2_qext
    	total_rchi2 += rchi2_qext
    endif
    if !fit_rchi2_weight.uext ne 0 then begin
    	total_n += n_uext
    	total_chi2 += chi2_uext
    	total_rchi2 += rchi2_uext
    endif
452c334e   Ilyes Choubani   Implementation Of...
459
460
461

endif

36e8b879   Jean-Michel Glorian   update from deborah
462
463
464
465

total_wchi2 = chi2_ext * !fit_rchi2_weight.ext $
            + chi2_sed * !fit_rchi2_weight.sed 
if !run_pol then begin
18e4331f   Ilyes Choubani   general update (f...
466
	total_wchi2 	+=  $;chi2_polext  * !fit_rchi2_weight.polext $
3ff9cac3   Ilyes Choubani   general update
467
468
;              		 + chi2_polsed  * !fit_rchi2_weight.polsed $
;              		 + chi2_polfrac * !fit_rchi2_weight.polfrac $
452c334e   Ilyes Choubani   Implementation Of...
469
470
471
472
             		 + chi2_qsed * !fit_rchi2_weight.qsed $
             		 + chi2_used * !fit_rchi2_weight.used $
             		 + chi2_qext * !fit_rchi2_weight.qext $
             		 + chi2_uext * !fit_rchi2_weight.uext  
36e8b879   Jean-Michel Glorian   update from deborah
473
474
endif

9ccf7615   Jean-Philippe Bernard   modified to fit u...
475
message,'======================================================================',/continue
36e8b879   Jean-Michel Glorian   update from deborah
476
477
478
print,"Total weighted chi2 driving mpfitfun = ", total_wchi2
print,"Nb of data points = ", total_n
print,"DOF = ", DOF
18e4331f   Ilyes Choubani   general update (f...
479
480
481
print,"Reduced chi2 EXT/SED/POLEXT/POLSED/POLFRAC",rchi2_ext,rchi2_sed;,rchi2_polext;,rchi2_polsed,rchi2_polfrac
print,"Weighted reduced chi2 EXT/SED/POLEXT/POLSED/POLFRAC",wrchi2_ext,wrchi2_sed;,wrchi2_polext;,wrchi2_polsed,wrchi2_polfrac
if !run_pol then 	print,"Weights",!fit_rchi2_weight.ext,!fit_rchi2_weight.sed $;,!fit_rchi2_weight.polext $;,!fit_rchi2_weight.polsed,!fit_rchi2_weight.polfrac $ 
36e8b879   Jean-Michel Glorian   update from deborah
482
483
484
else 			print,"Weights",!fit_rchi2_weight.ext,!fit_rchi2_weight.sed
print,"Mean weighted reduced chi2 = ", total_wchi2/(total_n-DOF)
print,"Unweighted reduced Total chi2 = ", total_chi2/(total_n-DOF)
452c334e   Ilyes Choubani   Implementation Of...
485
print,"Unweighted mean reduced chi2 = ", total_rchi2/4*total_n/(total_n-DOF);total_rchi2/4*total_n/(total_n-DOF) original
9ccf7615   Jean-Philippe Bernard   modified to fit u...
486
message,'======================================================================',/continue
36e8b879   Jean-Michel Glorian   update from deborah
487
488
489
490
491
492
493
494
495

;print,"Total reduced chi2 = ", (wrchi2_sed+wrchi2_ext+wrchi2_polext+wrchi2_polsed+wrchi2_polfrac)/(n_sed+n_ext+n_polext+n_polsed+n_polfrac-DOF)
; Reduced chi2 is like if there were the same nb of data points for each curve
;print,"Mean reduced chi2 = ", (wrchi2_sed+wrchi2_ext+wrchi2_polext+wrchi2_polsed+wrchi2_polfrac) * total_n/(total_n-DOF)

; Plot size distribution
win+=1
xr=[0.3,5e3]
yr=[0.1,100]
9ccf7615   Jean-Philippe Bernard   modified to fit u...
496
;IF !dustem_show_plot NE 0 THEN dustem_plot_sdist,xr=xr,yr=yr,ps=filename,win=win;,/donotclose
427f1205   Jean-Michel Glorian   version 4.2 merged
497
498
499
500

; Suppress the artificial [0] at the beginning 
dustem_out = dustem_out[1:*]

9ccf7615   Jean-Philippe Bernard   modified to fit u...
501
502
503
504
505
506
507
;IF defined(extra) THEN BEGIN
;  IF keyword_set(extra.plot_it) THEN BEGIN
;;    message,'params='+strtrim(p_min,2),/info,/continue
;;    stop
;    print,'dustem_mpfit_run_vg: Current parameters values:',p_dim
;  ENDIF
;ENDIF
427f1205   Jean-Michel Glorian   version 4.2 merged
508
509
510
511
512
513

the_end:

RETURN,dustem_out

END