Commit 5d34557b6b55768a68d50ef7b9885ee7e64768eb
1 parent
21b2be95
Exists in
master
First commit
Showing
2 changed files
with
200 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,20 @@ |
1 | +\Written by write_xcat.pro on Thu Sep 15 14:18:31 2022 | |
2 | +|INSTRU |FILTER |WAVE |STOKESI |STOKESQ |STOKESU |LARGEP |SMALLP |PSI |SIGMAII |SIGMAQQ |SIGMAUU |SIGMAIQ |SIGMAIU |SIGMAQU |SIGMA_LARGEP |SIGMA_SMALLP |SIGMA_PSI | | |
3 | +|char |char |real |real |real |real |real |real |real |real |real |real |real |real |real |real |real |real | | |
4 | +|NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL | | |
5 | +IRAS IRAS1 12.0000 0.0312461 0.000293617 0.000106868 -32768.0 -32768.0 -32768.0 3.12461e-08 2.93617e-10 1.06868e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
6 | +IRAS IRAS2 25.0000 0.0332762 0.000312694 0.000113811 -32768.0 -32768.0 -32768.0 3.32762e-08 3.12694e-10 1.13811e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
7 | +IRAS IRAS3 60.0000 0.121636 0.00114300 0.000416018 -32768.0 -32768.0 -32768.0 1.21636e-07 1.14300e-09 4.16018e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
8 | +IRAS IRAS4 100.000 0.363825 0.00341883 0.00124435 -32768.0 -32768.0 -32768.0 3.63825e-07 3.41883e-09 1.24435e-09 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
9 | +PACS PACS3 160.000 0.546915 0.00513932 0.00187056 -32768.0 -32768.0 -32768.0 5.46915e-07 5.13932e-09 1.87056e-09 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
10 | +SPIRE SPIRE1 250.000 0.424589 0.00398983 0.00145218 -32768.0 -32768.0 -32768.0 4.24589e-07 3.98983e-09 1.45218e-09 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
11 | +SPIRE SPIRE2 350.000 0.244398 0.00229659 0.000835890 -32768.0 -32768.0 -32768.0 2.44398e-07 2.29659e-09 8.35890e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
12 | +SPIRE SPIRE3 500.000 0.112675 0.00105880 0.000385371 -32768.0 -32768.0 -32768.0 1.12675e-07 1.05880e-09 3.85371e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
13 | +HFI HFI2 550.078 0.0883461 0.000830182 0.000302162 -32768.0 -32768.0 -32768.0 8.83461e-08 8.30182e-10 3.02162e-10 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
14 | +HFI HFI3 849.270 0.0271650 0.000255268 9.29098e-05 -32768.0 -32768.0 -32768.0 2.71650e-08 2.55268e-10 9.29098e-11 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
15 | +HFI HFI4 1381.53 0.00613173 5.76194e-05 2.09717e-05 -32768.0 -32768.0 -32768.0 6.13173e-09 5.76194e-11 2.09717e-11 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
16 | +HFI HFI5 2096.45 0.00149945 1.40903e-05 5.12844e-06 -32768.0 -32768.0 -32768.0 1.49945e-09 1.40903e-11 5.12844e-12 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
17 | +HFI HFI6 2997.92 0.000522665 4.91144e-06 1.78762e-06 -32768.0 -32768.0 -32768.0 5.22665e-10 4.91144e-12 1.78762e-12 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
18 | +LFI LFI1 4285.71 0.000171805 1.61443e-06 5.87606e-07 -32768.0 -32768.0 -32768.0 1.71805e-10 1.61443e-12 5.87606e-13 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
19 | +LFI LFI2 6818.18 8.11966e-05 7.62998e-07 2.77709e-07 -32768.0 -32768.0 -32768.0 8.11966e-11 7.62998e-13 2.77709e-13 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | |
20 | +LFI LFI3 10000.0 0.000125388 1.17826e-06 4.28851e-07 -32768.0 -32768.0 -32768.0 1.25388e-10 1.17826e-12 4.28851e-13 0.00000 0.00000 0.00000 -32768.0 -32768.0 -32768.0 | ... | ... |
... | ... | @@ -0,0 +1,180 @@ |
1 | +PRO dustem_fit_polarisation_example,model=model $ | |
2 | + ,sed_file=sed_file $ | |
3 | + ,Nitermax=Nitermax $ | |
4 | + ,postscript=postscript $ | |
5 | + ,fits_save_and_restore=fits_save_and_restore $ | |
6 | + ,help=help | |
7 | + | |
8 | +;This routine is an example of how to fit observational SEDs with | |
9 | +;DustEM and DustEMWrap. The objective is to illustrate how to use DustEMWrap | |
10 | +; (and not to do science -- the fit obtained by running this example is | |
11 | +; likely to be poor!) | |
12 | +; | |
13 | +;For this example, the code uses the SED in the file example_SED_1.xcat, | |
14 | +;which is distributed in the Data/EXAMPLE_OBSDATA/ directory | |
15 | +; | |
16 | +;The example SED has Stokes I photometric data points from SPITZER | |
17 | +;IRAC and MIPS and IRAS. Examples illustrating running DustEMWrap to | |
18 | +;fit data with spectral data, polarisation data and extinction data | |
19 | +;are provided in other _readme routines in the src/idl/ directory. | |
20 | + | |
21 | +;; ***COMMENT AH*** | |
22 | +;; Remove or update the next few lines -->> | |
23 | +;; No spectrum data points. | |
24 | +;;SPECTRUM data points can be included and the corresponding filter | |
25 | +;;filed must read SPECTRUM. Note that its is note necessary | |
26 | +;;to use the .xcat file format, and data SED can be provided | |
27 | +;;manually, but the observation structure must have the structure shown below. | |
28 | +;;For the example to work, the DustEM and DustEMWrap packages must have | |
29 | +;;been configured and installed succesfully. | |
30 | +;;See dustem_cvs_readme.txt for install instructions). | |
31 | +;; *** END COMMENT AH*** | |
32 | + | |
33 | +;+ | |
34 | +; NAME: | |
35 | +; dustem_fit_polarisation_example | |
36 | +; PURPOSE: | |
37 | +; This is an example of how to fit SEDs with DustEMWrap. | |
38 | +; It is intended as an example to follow when writing your own | |
39 | +; programs to analyse data with DustEMWrap. | |
40 | +; CATEGORY: | |
41 | +; DustEMWrap, Distributed, High-Level, User Example | |
42 | +; CALLING SEQUENCE: | |
43 | +; dustem_fit_polarisation_example[,model=][sed_file=][,postscript=][,Nitermax=][,fits_save_and_restore=][,/help] | |
44 | +; INPUTS: | |
45 | +; None | |
46 | +; OPTIONAL INPUT PARAMETERS: | |
47 | +; None | |
48 | +; OUTPUTS: | |
49 | +; None | |
50 | +; OPTIONAL OUTPUT PARAMETERS: | |
51 | +; Plots, Results save structure | |
52 | +; ACCEPTED KEY-WORDS: | |
53 | +; model = specifies the interstellar dust mixture used by DustEM | |
54 | +; 'MC10' model from Compiegne et al 2010 (default) | |
55 | +; 'DBP90' model from Desert et al 1990 | |
56 | +; 'DL01' model from Draine & Li 2001 | |
57 | +; 'WD01_RV5p5B' model from Weingartner & Draine 2002 with Rv=5.5 | |
58 | +; 'DL07' model from Draine & Li 2007 | |
59 | +; 'J13' model from Jones et al 2013, as updated in | |
60 | +; Koehler et al 2014 | |
61 | +; 'G17_ModelA' model A from Guillet et al (2018). Includes | |
62 | +; polarisation. See Tables 2 and 3 of that paper for details. | |
63 | +; 'G17_ModelB' model B from Guillet et al (2018) | |
64 | +; 'G17_ModelC' model C from Guillet et al (2018) | |
65 | +; 'G17_ModelD' model A from Guillet et al (2018) | |
66 | +; sed_file = string naming the path to text file in .xcat format that | |
67 | +; describes the observational SED. If not set, the file | |
68 | +; 'Data/SEDs/sample_SED.xcat' is used. | |
69 | +; postscript = if set, final plot is saved as postscript in the | |
70 | +; current working directory | |
71 | +; Nitermax = maximum number of fit iterations. Default is 5. | |
72 | +; fits_save_and_restore = if set, saves results in a fits file, restore the file and plot restored results | |
73 | +; help = if set, print this help | |
74 | +; COMMON BLOCKS: | |
75 | +; None | |
76 | +; SIDE EFFECTS: | |
77 | +; None | |
78 | +; RESTRICTIONS: | |
79 | +; The DustEM fortran code must be installed | |
80 | +; The DustEMWrap IDL code must be installed | |
81 | +; PROCEDURES AND SUBROUTINES USED: | |
82 | +; *** COMMENT AH --> is this really NONE? **** | |
83 | +; EXAMPLES | |
84 | +; dustem_fit_polarisation_example | |
85 | +; dustem_fit_polarisation_example,Nitermax=1,fits_save_and_restore='/tmp/mysavefile.fits' | |
86 | +; dustem_fit_polarisation_example,model='DBP90' | |
87 | +; MODIFICATION HISTORY: | |
88 | +; Written by JPB Apr-2022 | |
89 | +; Evolution details on the DustEMWrap gitlab. | |
90 | +; See http://dustemwrap.irap.omp.eu/ for FAQ and help. | |
91 | +;- | |
92 | + | |
93 | +IF keyword_set(help) THEN BEGIN | |
94 | + doc_library,'dustem_fit_polarisation_example' | |
95 | + goto,the_end | |
96 | +END | |
97 | + | |
98 | +IF keyword_set(model) THEN BEGIN | |
99 | + use_model=strupcase(model) | |
100 | +ENDIF ELSE BEGIN | |
101 | + use_model='G17_MODELC' ;Default | |
102 | +ENDELSE | |
103 | + | |
104 | +dustem_define_la_common | |
105 | + | |
106 | +;=== initialise dustem | |
107 | +dustem_init,mode=use_model,kwords=['logn-chrg-spin','plaw-pol','plaw-pol'],/pol;,kwords=['plaw-ed','logn','logn'];,/pol;kwords=['plaw-ed-chrg-spin'],/pol;,kwords=['plaw-ed'];kwords=['plaw-ed-chrg-spin'];,/pol; | |
108 | + | |
109 | +!dustem_verbose=1 | |
110 | +!dustem_show_plot=1 | |
111 | +!dustem_nocatch=1 | |
112 | + | |
113 | +filename=!dustem_wrap_soft_dir+'/Data/EXAMPLE_OBSDATA/example_sed3.xcat' | |
114 | +sed=read_xcat(filename) | |
115 | + | |
116 | +dustem_set_data,sed | |
117 | + | |
118 | +;=== Set which parameters you want to fit | |
119 | +pd = [ $ | |
120 | + '(*!dustem_params).G0', $ ;G0 | |
121 | + '(*!dustem_params).grains(0).mdust_o_mh',$ ;PAH0 mass fraction | |
122 | + '(*!dustem_params).grains(1).mdust_o_mh',$ ;PAH0 mass fraction | |
123 | + '(*!dustem_params).grains(2).mdust_o_mh' $ ;PAH1 mass fraction | |
124 | + ;'(*!dustem_params).grains(3).mdust_o_mh',$ ;amCBEx | |
125 | + ;'dustem_plugin_synchrotron_2', $ ;Synchrotron amplitude | |
126 | + ;'dustem_plugin_synchrotron_4', $ ;Synchrotron polarization angle | |
127 | + ;'dustem_plugin_modify_dust_polarization_2', $ ;Polarization angle applied to the Fortran dust model via a core plugin | |
128 | + ;'dustem_plugin_modify_spinning_polarization_1', $ | |
129 | + ;'dustem_plugin_modify_spinning_polarization_2' $ | |
130 | + ] | |
131 | + | |
132 | +;p_truth=[1.,7.8000E-04,7.8000E-04,7.8000E-04,1.6500E-04,68.,4e-3,20] | |
133 | +;iv=p_truth+[0.,8.e-4,8.e-4,8.e-4,8.e-4,-10.,2e-4,10] ;shifted from solution | |
134 | + | |
135 | +;p_truth=[1.,7.8000E-04,7.8000E-04,7.8000E-04,1.6500E-04,5e-3,20.,68.,1.2,20] | |
136 | +p_truth=[1.,7.8000E-04,7.8000E-04,7.8000E-04] | |
137 | +iv=p_truth+[0.,1.e-4,1.e-4,1.e-4] ;shifted from solution | |
138 | + | |
139 | +Npar=n_elements(pd) | |
140 | +ulimed=replicate(0,Npar) | |
141 | +llimed=replicate(1,Npar) | |
142 | +llims=replicate(0,Npar) | |
143 | + | |
144 | +;stop | |
145 | + | |
146 | +dustem_init_parinfo,pd,iv,up_limited=ulimed,lo_limited=llimed,up_limits=ulims,lo_limits=llims;,tied=tied | |
147 | +;stop | |
148 | +dustem_init_plugins,pd | |
149 | + | |
150 | +;=== SET THE OBSERVATION STRUCTURE | |
151 | + | |
152 | +;ind=where(sed.wave GE 0.1) | |
153 | + | |
154 | +;st_bidon=dustem_set_data(m_fit=sed[ind],rchi2_weight=rchi2_weight,f_HI=f_HI) ; comment if second line is to be used | |
155 | + | |
156 | +;=== RUN fit | |
157 | +tol=1.e-16 | |
158 | +xtol=1.e-16 | |
159 | +Nitermax=30; just an initialization | |
160 | +;for i=0L,n_tags(!dustem_data)-1 do begin | |
161 | +;if ptr_valid(!dustem_data.(i)) then Nitermax+=1 | |
162 | +;endfor | |
163 | +;Nitermax=4 ;maximum number of iteration. This is the criterion which will stop the fit procedure | |
164 | + | |
165 | +xrange=[1.,2.e4] | |
166 | +yrange=[1e-4,1.e3] | |
167 | + | |
168 | +loadct,13 | |
169 | +;!y.range=[1e-8,100] ;This is to ajust plot range from outside the routine | |
170 | +t1=systime(0,/sec) | |
171 | +title='CACA' ;does not work if title is undefined .... | |
172 | +res=dustem_mpfit_data(tol=tol,xtol=xtol,Nitermax=Nitermax,xrange=xrange,/xstyle,yrange=yrange,/ysty,/ylog,/xlog,xtit='wavelength [mic]',ytit='Brightness []',title=title) | |
173 | +t2=systime(0,/sec) | |
174 | + | |
175 | +stop | |
176 | + | |
177 | +the_end: | |
178 | + | |
179 | +END | |
180 | + | ... | ... |