Commit 4d392534e8995babfcf22dd8bc4f9c6cf0c64720
1 parent
56fada2b
Exists in
master
First commit
Showing
1 changed file
with
202 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,202 @@ |
1 | +PRO dustem_define_grid_v1,table_name $ | |
2 | + ,filters=filters $ | |
3 | + ,help=help $ | |
4 | + ,table_params=table_params $ | |
5 | + ,table_pmins=table_pmins $ | |
6 | + ,table_pmaxs=table_pmaxs $ | |
7 | + ,table_pnvals=table_pnvals $ | |
8 | + ,table_plogs=table_plogs | |
9 | + | |
10 | +;+ | |
11 | +; NAME: | |
12 | +; dustem_define_grid_v1 | |
13 | +; PURPOSE: | |
14 | +; loads an SED Grid table into !dustem_grid. This is for initial versions of grid tables. Used to convert them to new convention. | |
15 | +; CATEGORY: | |
16 | +; Dustem | |
17 | +; CALLING SEQUENCE: | |
18 | +; dustem_define_grid,table_name,filters[,table_params=][,table_pmins=][,table_pmaxs=][,table_pnvals=][,table_plogs=] | |
19 | +; INPUTS: | |
20 | +; table_name : fits file name containing the grid | |
21 | +; filters : name of dustemwrap filters to be included in the GRID | |
22 | +; OPTIONAL INPUT PARAMETERS: | |
23 | +; NONE | |
24 | +; OUTPUTS: | |
25 | +; None | |
26 | +; OPTIONAL OUTPUT PARAMETERS: | |
27 | +; table_params= parameter names in the grid table | |
28 | +; table_pmins= parameter min values in the grid table | |
29 | +; table_pmaxs= parameter max values in the grid table | |
30 | +; table_pnvals= parameter number of values in the grid table | |
31 | +; table_plogs= 1=parameter values in log in the grid table, 0=linear | |
32 | +; ACCEPTED KEY-WORDS: | |
33 | +; help = If set, print this help | |
34 | +; COMMON BLOCKS: | |
35 | +; None | |
36 | +; SIDE EFFECTS: | |
37 | +; !dustem_grid is updated | |
38 | +; RESTRICTIONS: | |
39 | +; The DustEM fortran code must be installed | |
40 | +; The DustEMWrap IDL code must be installed | |
41 | +; PROCEDURE: | |
42 | +; None | |
43 | +; EXAMPLES | |
44 | +; dustem_make_sed_table,'DBP90',['(*!dustem_params).G0','(*!dustem_params).grains(0).mdust_o_mh'], $ | |
45 | +; [0.1,1.e-3],[100.,1.e-1],[10,3],filename='/tmp/IRAS_GO.fits',log=[1,0],/show_seds, $ | |
46 | +; filters=[dustem_instru2filters('IRAC'),dustem_instru2filters('SPIRE')] | |
47 | +; dustem_define_grid,/tmp/IRAS_GO.fits',['IRAC3','SPIRE2'] | |
48 | +; help,!dustem_grid | |
49 | +; MODIFICATION HISTORY: | |
50 | +; Written by J.-Ph. Bernard (2023) | |
51 | +; Evolution details on the DustEMWrap gitlab. | |
52 | +; See http://dustemwrap.irap.omp.eu/ for FAQ and help. | |
53 | +;- | |
54 | + | |
55 | +IF keyword_set(help) THEN BEGIN | |
56 | + doc_library,'dustem_define_grid_v1' | |
57 | + goto,the_end | |
58 | +ENDIF | |
59 | + | |
60 | +;=== read the grid table | |
61 | +message,'reading grid data from '+table_name,/continue | |
62 | +;stop | |
63 | +info=file_info(table_name) | |
64 | +IF info.exists THEN BEGIN | |
65 | + st=mrdfits(table_name,1,h) | |
66 | +ENDIF ELSE BEGIN | |
67 | + message,'grid data '+table_name+' not found',/continue | |
68 | + stop | |
69 | +ENDELSE | |
70 | + | |
71 | +;stop | |
72 | +;=== get filters and params names from grid table header | |
73 | +i=0L | |
74 | +table_filters=[''] | |
75 | +fname='bidon' | |
76 | +count=1 | |
77 | +WHILE count NE 0 DO BEGIN | |
78 | + fname=sxpar(h,'FNAME'+strtrim(i+1,2),count=count) | |
79 | + IF count NE 0 THEN table_filters=[table_filters,strtrim(fname,2)] | |
80 | + i=i+1 | |
81 | +ENDWHILE | |
82 | +table_filters=table_filters[1:*] | |
83 | +Ntfilters=n_elements(table_filters) | |
84 | + | |
85 | +table_params=[''] | |
86 | +table_pmins=[0.d0] | |
87 | +table_pmaxs=[0.d0] | |
88 | +table_pnvals=[0L] | |
89 | +table_plogs=[0] | |
90 | +count=1 | |
91 | +i=0L | |
92 | +WHILE count NE 0 DO BEGIN | |
93 | + pname=sxpar(h,'PNAME'+strtrim(i+1,2),count=count) | |
94 | + IF count NE 0 THEN BEGIN | |
95 | + table_params=[table_params,strtrim(pname,2)] | |
96 | + pmin=sxpar(h,'PMIN'+strtrim(i+1,2),count=count) | |
97 | + pmax=sxpar(h,'PMAX'+strtrim(i+1,2),count=count) | |
98 | + pnval=sxpar(h,'PNVAL'+strtrim(i+1,2),count=count) | |
99 | + plog=sxpar(h,'PLOG'+strtrim(i+1,2),count=count) | |
100 | + table_pmins=[table_pmins,pmin] | |
101 | + table_pmaxs=[table_pmaxs,pmax] | |
102 | + table_pnvals=[table_pnvals,pnval] | |
103 | + table_plogs=[table_plogs,plog] | |
104 | + ENDIF | |
105 | + i=i+1 | |
106 | +ENDWHILE | |
107 | +table_params=table_params[1:*] | |
108 | +table_pmins=table_pmins[1:*] | |
109 | +table_pmaxs=table_pmaxs[1:*] | |
110 | +table_pnvals=table_pnvals[1:*] | |
111 | +table_plogs=table_plogs[1:*] | |
112 | +Ntparams=n_elements(table_params) | |
113 | + | |
114 | +;=== select only requested filters | |
115 | +;stop | |
116 | +use_filters=table_filters ;default is to keep all filters | |
117 | +IF keyword_set(filters) THEN use_filters=filters | |
118 | + | |
119 | +Nfilters=n_elements(use_filters) | |
120 | +keep_tfilters=intarr(Ntfilters) | |
121 | +tags=tag_names(st) | |
122 | +FOR i=0L,Nfilters-1 DO BEGIN | |
123 | + ind=where(table_filters EQ use_filters[i],count) | |
124 | + IF count NE 0 THEN keep_tfilters[ind]=1 | |
125 | +ENDFOR | |
126 | + | |
127 | +;stop | |
128 | + | |
129 | +;totals=st.total | |
130 | +FOR i=0L,Ntfilters-1 DO BEGIN | |
131 | + IF keep_tfilters[i] EQ 0 THEN BEGIN | |
132 | + col_name=tags[i+Ntparams] | |
133 | + st=structure_remove_column(st,col_name) | |
134 | + ENDIF | |
135 | +ENDFOR | |
136 | + | |
137 | +;separate structure into parameters and seds | |
138 | +st_seds=st | |
139 | +tags=tag_names(st) | |
140 | +FOR i=0L,Ntparams-1 DO BEGIN | |
141 | + col_name=tags[i] | |
142 | + st_seds=structure_remove_column(st_seds,col_name) | |
143 | +ENDFOR | |
144 | +;stop | |
145 | +st_seds=structure_remove_column(st_seds,'TOTAL') | |
146 | +st_params=st | |
147 | +FOR i=0L,Nfilters-1 DO BEGIN | |
148 | + col_name=tags[i+Ntparams] | |
149 | + st_params=structure_remove_column(st_params,col_name) | |
150 | +ENDFOR | |
151 | +st_params=structure_remove_column(st_params,'TOTAL') | |
152 | +sed_totals=st.(Nfilters+Ntparams-1) | |
153 | + | |
154 | +;stop | |
155 | + | |
156 | +;==== recompute totals | |
157 | +Nsed=n_elements(st) | |
158 | +;==== recompute totals (needed if some columns have been removed) | |
159 | +FOR i=0L,Nsed-1 DO BEGIN | |
160 | + this_total=0.d0 | |
161 | + FOR j=0L,Nfilters-1 DO BEGIN | |
162 | + ;this_total=this_total+(st[i]).(j+Ntparams) | |
163 | + this_total=this_total+st_seds[i].(j) | |
164 | + ENDFOR | |
165 | + ;st[i].total=this_total | |
166 | + sed_totals[i]=this_total | |
167 | +ENDFOR | |
168 | + | |
169 | +;stop | |
170 | + | |
171 | +dustem_grid={Nsed:Nsed $ ; | |
172 | + ,Nfilters:Nfilters $ ; | |
173 | + ,Nparams:Ntparams $ ; | |
174 | + ,filters:use_filters $ ; | |
175 | + ,params:table_params $; | |
176 | + ,st_seds:st_seds $ ; | |
177 | + ,st_params:st_params $ ; | |
178 | + ,sed_totals:sed_totals $ ; | |
179 | +; ,seds:st $ ;meant to disapear | |
180 | + ,pmin_values:table_pmins $ ; | |
181 | + ,pmax_values:table_pmaxs $ ; | |
182 | + } | |
183 | + | |
184 | +defsysv,'!dustem_grid',ptr_new(dustem_grid) | |
185 | +message,'Defined !dustem_grid',/continue | |
186 | + | |
187 | +;help,!dustem_grid | |
188 | +;** Structure <9b80dc08>, 10 tags, length=3760784, data length=3760780, refs=2: | |
189 | +; NSED LONG 20000 | |
190 | +; NFILTERS LONG 42 | |
191 | +; NPARAMS LONG 3 | |
192 | +; FILTERS STRING Array[42] | |
193 | +; PARAMS STRING Array[3] | |
194 | +; ST_SEDS STRUCT -> <Anonymous> Array[20000] | |
195 | +; ST_PARAMS STRUCT -> <Anonymous> Array[20000] | |
196 | +; SED_TOTALS DOUBLE Array[20000] | |
197 | +; PMIN_VALUES DOUBLE Array[3] | |
198 | +; PMAX_VALUES DOUBLE Array[3] | |
199 | + | |
200 | +the_end: | |
201 | + | |
202 | +END | |
0 | 203 | \ No newline at end of file | ... | ... |