phangs_smooth_muse_isrf.pro
5.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
PRO phangs_smooth_muse_isrf,source_name $
,resolution_filter=resolution_filter $
,save=save $
,test=test
;+
; NAME:
; phangs_smooth_muse_isrf
; PURPOSE:
; Smoothes ISRF to a given resolution
; CATEGORY:
; PHANGS ISRF
; CALLING SEQUENCE:
; phangs_smooth_muse_isrf,source_name[,resolution_filter=][,/save][,/test]=
; INPUTS:
; source_name : source name
; OPTIONAL INPUT PARAMETERS:
; resolution_filter :resolution of the filter to be used for smoothing (defaults=)
; OUTPUTS:
; None
; OPTIONAL OUTPUT PARAMETERS:
; None
; ACCEPTED KEY-WORDS:
; save = If set, saves results
; help = If set, print this help
; COMMON BLOCKS:
; None
; SIDE EFFECTS:
; The following files are written, if they do not already exist:
; _isrf_min_prediction_*.sav
; RESTRICTIONS:
; None
; PROCEDURE:
;
; EXAMPLES
; phangs_smooth_muse_isrf,'ngc0628',reso_filter='SPIRE3'
; MODIFICATION HISTORY:
; Written by J.-Ph. Bernard (2023)
; Evolution details on the DustEMWrap gitlab.
; See http://dustemwrap.irap.omp.eu/ for FAQ and help.
;-
IF keyword_set(help) THEN BEGIN
doc_library,'phangs_smooth_muse_isrf'
goto,the_end
ENDIF
dustem_define_la_common
dustem_init
file=!phangs_data_dir+'/ISRF/WORK/'+source_name+'_ref_header.sav'
restore,file,/verb
;% RESTORE: Restored variable: HREF.
file=!phangs_data_dir+'/ISRF/WORK/'+source_name+'_isrf_min_prediction.sav'
restore,file,/verb
;% RESTORE: Restored variable: ISRFS.
;% RESTORE: Restored variable: G0S.
;% RESTORE: Restored variable: OBJECT_DISTANCE.
;% RESTORE: Restored variable: OBJECT_THICKNESS.
;% RESTORE: Restored variable: USE_SOURCE_NAME.
file=!phangs_data_dir+'/ISRF/WORK/'+source_name+'_seds_indices.sav'
restore,file,/verb
;% RESTORE: Restored variable: ALL_SEDS_INDICES.
;file=!phangs_data_dir+'/ISRF/WORK/'+source_name+'_all_seds_muse_pixels.sav'
;restore,file,/verb
;% RESTORE: Restored variable: ALL_SEDS.
;% RESTORE: Restored variable: ALL_SEDS_INDICES.
Nwav=(size(ISRFS))[1]
Nvor=(size(ISRFS))[2]
;=== This is to compute the Voronoi bins sizes
vor_num=lonarr(Nvor)
FOR i=0L,Nvor-1 DO BEGIN
IF ptr_valid(all_seds_indices[i]) THEN BEGIN
vor_num[i]=n_elements(*all_seds_indices[i])
IF vor_num[i] EQ 1 THEN BEGIN
IF *all_seds_indices[i] EQ -1 THEN BEGIN
vor_num[i]=0L
ENDIF
ENDIF
ENDIF
ENDFOR
vor_sizes=2.*sqrt(1.*vor_num*sxpar(href,'CDELT2')^2/!pi) ;FWHM in deg
print,minmax(vor_sizes)*60.^2
;stop
;==== remove negative values in ISRFs
;ind=where(ISRFs LE 0,count)
;IF count NE 0 THEN BEGIN
; ISRFs[ind]=0.
;ENDIF
;==== Make the ISRF cube
message,'Making the ISRF cube',/info
Nx=sxpar(href,'NAXIS1')
Ny=sxpar(href,'NAXIS2')
ISRF_cube=fltarr(Nx,Ny,Nwav)+la_undef()
im0=ISRF_cube[*,*,0]
ISRF0=fltarr(Nwav)+la_undef()
FOR i=0L,Nvor-1 DO BEGIN
IF i mod 1000 EQ 0 THEN BEGIN
message,strtrim(1.*i/Nvor*100,2)+' %',/continue
;stop
ENDIF
IF vor_num[i] NE 0 THEN BEGIN
ij=index2ij(*all_seds_indices[i],[Nx,Ny])
FOR j=0L,vor_num[i]-1 DO ISRF_cube[ij[j,0],ij[j,1],*]=ISRFS[*,i]
ENDIF
ENDFOR
;==== smooth the ISRF
use_reso_filter='SPIRE3'
IF keyword_set(resolution_filter) THEN use_reso_filter=resolution_filter
message,'smoothing the ISRF cube',/info
data_reso=3./60./60.
reso_str='_'+use_reso_filter
final_reso=dustem_filter2reso(use_reso_filter)
;stop
;in fact degrade_res can degrade resolution of cubes, so ...
;=== That's a test
IF keyword_set(test) THEN BEGIN
ISRFs=degrade_res(ISRF_cube[*,*,0:2],href,data_reso,final_reso,hout)
test_str='Test'
ENDIF ELSE BEGIN
ISRFs=degrade_res(ISRF_cube,href,data_reso,final_reso,hout)
test_str=''
ENDELSE
header=hout
;stop
;=== project ISRFs on reference header for given resolution
file=!phangs_data_dir+'/ISRF/WORK/'+source_name+'_ref_header'+reso_str+'.sav'
restore,file,/verb
;stop
NNx=sxpar(href,'NAXIS1')
NNy=sxpar(href,'NAXIS2')
proj_ISRFs=fltarr(NNx,NNy,Nwav)
i=0L
proj_ISRFs[*,*,i]=project2(header,ISRFs[*,*,i],href,/silent)
;FOR i=1L,Nwav-1 DO BEGIN
FOR i=1L,(size(ISRFs))[3]-1 DO BEGIN
proj_ISRFs[*,*,i]=project2(header,ISRFs[*,*,i],href,/previous_lut,/silent)
ENDFOR
;stop
;==== put back ISRFs on voronoi bins
restore,!phangs_data_dir+'/ISRF/WORK/'+use_source_name+'_muse_images'+reso_str+'.sav',/verb
;% RESTORE: Restored variable: ST_TEMPLATES.
;% RESTORE: Restored variable: ST_MUSE_WEIGHTS.
;% RESTORE: Restored variable: VORONOI_ID.
;% RESTORE: Restored variable: AGE_VALUES.
;% RESTORE: Restored variable: METALICITY_VALUES.
;% RESTORE: Restored variable: BINS.
;% RESTORE: Restored variable: HREF.
NNvor=max(voronoi_id)+1
out_ISRFS=fltarr(Nwav,NNvor)
FOR i=0L,NNvor-1 DO BEGIN
ind=where(voronoi_id EQ i,count)
IF count NE 1 THEN BEGIN
message,'count should be 1',/continue
stop
ENDIF ELSE BEGIN
ij=index2ij(ind,[NNx,NNy])
out_ISRFS[*,i]=reform(proj_ISRFs[ij[0,0],ij[0,1],*])
ENDELSE
ENDFOR
;ISRFs=proj_ISRFs
ISRFs=out_ISRFs
IF keyword_set(save) THEN BEGIN
file_save=!phangs_data_dir+'/ISRF/WORK/'+test_str+source_name+'_isrf_min_prediction'+reso_str+'.sav'
save,ISRFs,href,use_reso_filter,file=file_save
message,'Saved '+file_save,/continue
ENDIF
the_end:
;stop
END