Blame view

src/idl/dustem_set_data.pro 13 KB
5a2643a4   Ilyes Choubani   cleaning/improvin...
1
FUNCTION dustem_set_data,m_fit=m_fit,m_show=m_show,x_fit=x_fit,x_show=x_show,rchi2_weight=rchi2_weight,f_HI=f_HI,help=help
abebbdf3   Ilyes Choubani   General update: A...
2

427f1205   Jean-Michel Glorian   version 4.2 merged
3
4
5
6
7
8
9
10
;+
; NAME:
;    dustem_set_data
; PURPOSE:
;    Initializes the dustem data structure (!dustem_data)
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
3ff9cac3   Ilyes Choubani   general update
11
;    dustem_set_data(data_sed=data_sed,data_ext=data_ext,[/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
33
34
35
36
37
38
39
40
41
42
43
44
; INPUTS:
;    spec: array of structures containing a SED
; OPTIONAL INPUT PARAMETERS:
;    None
; OUTPUTS:
;    None
; OPTIONAL OUTPUT PARAMETERS:
;    None
; ACCEPTED KEY-WORDS:
;    help      = If set print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    initializes !dustem_data
;    wavelengths are forced to be the central filter wavelength for
;    photometric data
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    dustem_init
;    dir=getenv('DUSTEM_SOFT_DIR')+'/src/dustem3.8_web/SEDs/'
;    file=dir+'Gal_composite_spectrum.xcat'
;    spec=read_xcat(file,/silent)
;    dustem_set_data,spec
; MODIFICATION HISTORY:
;    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.
; 
;    V. Guillet (2012) : dustem_set_data is turned into a function which can be used 
;                        indifferently for sed, ext, polext
3ff9cac3   Ilyes Choubani   general update
45
46
;    I. Choubani (2022): Introducing the dustem_check_data procedure where the new format outlined by the latest release is taken into account.
;    This function uses two main input structures: DATA_SED and DATA_EXT. Polarization data is included within each. 
abebbdf3   Ilyes Choubani   General update: A...
47
;    Generation and setting of data sets that were not present in the initial xcat file but that the user wants to plot.  
427f1205   Jean-Michel Glorian   version 4.2 merged
48
49
;-

4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
50

427f1205   Jean-Michel Glorian   version 4.2 merged
51
52
53
54
55
IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_set_data'
  goto,the_end
ENDIF

5a2643a4   Ilyes Choubani   cleaning/improvin...
56
;Cleaninig fitting/showing structure(s) 
3ff9cac3   Ilyes Choubani   general update
57
58
59
60
61
for i=0L,n_tags(!dustem_data)-1 do begin
    !dustem_data.(i) = ptr_new()
    !dustem_show.(i) = ptr_new()
endfor

5a2643a4   Ilyes Choubani   cleaning/improvin...
62
;#FITTING STRUCTURE
3c479f24   Ilyes Choubani   Allowing to fix p...
63

67bd858a   Ilyes Choubani   Replication of th...
64
xx=dustem_check_data(data_sed=m_fit,data_ext=x_fit,sed=sed,ext=ext,polext=polext,polsed=polsed,polfrac=polfrac,psi_em=psi_em,qsed=qsed,used=used,qext=qext,uext=uext,psi_ext=psi_ext,fpolext=fpolext)    
3ff9cac3   Ilyes Choubani   general update
65
;outputs whatever the input structure has, into organized seperate structures formatted for the fitting process.
09e61d64   Ilyes Choubani   cleaned set_data ...
66

abebbdf3   Ilyes Choubani   General update: A...
67
;FITTING STRUCTURE INITIALIZATION
3ff9cac3   Ilyes Choubani   general update
68
69
IF isa(sed) THEN !dustem_data.sed = ptr_new(sed)
IF isa(ext) THEN !dustem_data.ext = ptr_new(ext)
09e61d64   Ilyes Choubani   cleaned set_data ...
70

3ff9cac3   Ilyes Choubani   general update
71
72
73
74
75
76
77
78
79
80
81
82
;####################
;OLD VARIABLE. KEPT IT.
; If f_HI is specified, multiply the data by f_HI
If keyword_set(f_HI) and ptr_valid(!dustem_data.sed) then begin
    if f_HI gt 0 then (*!dustem_data.sed).values *= f_HI else f_HI = 1.
endif else f_HI = 1.
if keyword_set(f_HI) and ptr_valid(!dustem_data.ext) then begin
    if f_HI gt 0 then (*!dustem_data.ext).values *= f_HI else f_HI = 1.
endif else f_HI = 1.
defsysv,'!dustem_f_HI',f_HI
;####################

3ff9cac3   Ilyes Choubani   general update
83
if !run_pol then begin
266ae799   Ilyes Choubani   General update
84
    
abebbdf3   Ilyes Choubani   General update: A...
85
    if keyword_set(m_fit) then begin
266ae799   Ilyes Choubani   General update
86
    
3ff9cac3   Ilyes Choubani   general update
87
88
        teststks = isa(qsed) and isa(used)
    
1355825c   Ilyes Choubani   General update
89
        IF ~teststks  then message, 'Stokes parameters are not set correctly. Please check the input structure. Aborting...'
3ff9cac3   Ilyes Choubani   general update
90
    
abebbdf3   Ilyes Choubani   General update: A...
91
        ;☆EMISSION 
1355825c   Ilyes Choubani   General update
92
        message, 'Polarization component(s) to fit: QSED and USED' ,/continue
abebbdf3   Ilyes Choubani   General update: A...
93
94
95
        
        
        ;☆Mandatory presence in polar mode 
3ff9cac3   Ilyes Choubani   general update
96
97
        IF isa(qsed) THEN BEGIN        
            !dustem_data.qsed = ptr_new(qsed)
b0cabd3c   Ilyes Choubani   general update
98
99
100
            if keyword_set(f_HI) then if f_HI gt 0 then $
          	(*!dustem_data.qsed).values *= f_HI
        ENDIF    
abebbdf3   Ilyes Choubani   General update: A...
101
        ;☆Mandatory presence in polar mode
3ff9cac3   Ilyes Choubani   general update
102
103
        if isa(used) then BEGIN
            !dustem_data.used = ptr_new(used)
b0cabd3c   Ilyes Choubani   general update
104
105
106
            if keyword_set(f_HI) then if f_HI gt 0 then $
          	(*!dustem_data.used).values *= f_HI
        ENDIF
1355825c   Ilyes Choubani   General update
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
        
        if isa(polsed) then BEGIN
            
            !dustem_data.polsed = ptr_new(polsed)
            if keyword_set(f_HI) then if f_HI gt 0 then $
          	(*!dustem_data.polsed).values *= f_HI
            
        ENDIF 
        
        if isa(polfrac) then BEGIN
            
            !dustem_data.polfrac = ptr_new(polfrac)
            if keyword_set(f_HI) then if f_HI gt 0 then $
          	(*!dustem_data.polfrac).values *= f_HI
        
abebbdf3   Ilyes Choubani   General update: A...
122
        ENDIF
1355825c   Ilyes Choubani   General update
123
124
125
126
127
128
129
130
131
132
        
        if isa(psi_em) then BEGIN
            
            !dustem_data.psi_em = ptr_new(psi_em)
            if keyword_set(f_HI) then if f_HI gt 0 then $
          	(*!dustem_data.psi_em).values *= f_HI
        
        ENDIF 
        
        
b0cabd3c   Ilyes Choubani   general update
133
    endif
759a527d   Ilyes Choubani   general update
134
    
abebbdf3   Ilyes Choubani   General update: A...
135
    if keyword_set(x_fit) then begin
5a2643a4   Ilyes Choubani   cleaning/improvin...
136
    
3ff9cac3   Ilyes Choubani   general update
137
        ;Two tests that determine what the user will eventually fit
3ff9cac3   Ilyes Choubani   general update
138
        testexstks = isa(qext) and isa(uext)
3ff9cac3   Ilyes Choubani   general update
139
        
1355825c   Ilyes Choubani   General update
140
141
        IF ~testexstks then message, 'Extinction stokes parameters/Polarization data is not set correctly. Please check the input structure. Aborting...'
         
3ff9cac3   Ilyes Choubani   general update
142
        ;EXTINCTION - allowed for the default fitting of both because I do not know if the same formalism should be applied to the extinction data because it also implies deviding extinction data into two components. 
1355825c   Ilyes Choubani   General update
143
144
145
       
        message, 'Extinction polarization component(s) to fit: QEXT and UEXT',/continue
       
3ff9cac3   Ilyes Choubani   general update
146
147
        if isa(polext) then BEGIN        
            !dustem_data.polext = ptr_new(polext)
b0cabd3c   Ilyes Choubani   general update
148
149
150
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_data.polext).values *= f_HI
        ENDIF
3ff9cac3   Ilyes Choubani   general update
151
152
        IF isa(qext) THEN BEGIN        
            !dustem_data.qext = ptr_new(qext)
b0cabd3c   Ilyes Choubani   general update
153
154
155
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_data.qext).values *= f_HI
        ENDIF
3ff9cac3   Ilyes Choubani   general update
156
157
        if isa(uext) then BEGIN 
            !dustem_data.uext = ptr_new(uext)
b0cabd3c   Ilyes Choubani   general update
158
159
160
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_data.uext).values *= f_HI
        ENDIF
1355825c   Ilyes Choubani   General update
161
        
67bd858a   Ilyes Choubani   Replication of th...
162
163
164
165
166
167
168
        ;added for completeness 
        if isa(fpolext) then BEGIN        
            !dustem_data.fpolext = ptr_new(fpolext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_data.fpolext).values *= f_HI
        ENDIF
        
b0cabd3c   Ilyes Choubani   general update
169
    endif
3ff9cac3   Ilyes Choubani   general update
170
171
endif

5a2643a4   Ilyes Choubani   cleaning/improvin...
172
;#SHOWING STRUCTURE
3ff9cac3   Ilyes Choubani   general update
173

abebbdf3   Ilyes Choubani   General update: A...
174
if not keyword_set(m_show) then m_show=m_fit
427f1205   Jean-Michel Glorian   version 4.2 merged
175

3ff9cac3   Ilyes Choubani   general update
176
;Setting of the structure that will be displayed
67bd858a   Ilyes Choubani   Replication of th...
177
yy=dustem_check_data(data_sed=m_show,data_ext=x_show,sed=sed,ext=ext,polext=polext,polsed=polsed,polfrac=polfrac,qsed=qsed,used=used,qext=qext,uext=uext,psi_em=psi_em,psi_ext=psi_ext,fpolext=fpolext)
5a2643a4   Ilyes Choubani   cleaning/improvin...
178

3ff9cac3   Ilyes Choubani   general update
179
180
IF isa(sed) THEN !dustem_show.sed = ptr_new(sed)
IF isa(ext) THEN !dustem_show.ext = ptr_new(ext)
3ff9cac3   Ilyes Choubani   general update
181
182
183
184
185
186
187
188
189
190
191
192
193
194
  
;####################
;OLD VARIABLE. KEPT IT.
; If f_HI is specified, multiply the data by f_HI
If keyword_set(f_HI) and ptr_valid(!dustem_show.sed) then begin
    if f_HI gt 0 then (*!dustem_show.sed).values *= f_HI else f_HI = 1.
endif else f_HI = 1.
if keyword_set(f_HI) and ptr_valid(!dustem_show.ext) then begin
    if f_HI gt 0 then (*!dustem_show.ext).values *= f_HI else f_HI = 1.
endif else f_HI = 1.
defsysv,'!dustem_f_HI',f_HI
;####################

if !run_pol then begin
6a714abf   Ilyes Choubani   small fix to dust...
195
    
abebbdf3   Ilyes Choubani   General update: A...
196
    if isa(m_show) then begin ; because sometimes this keyword isn't set.
3ff9cac3   Ilyes Choubani   general update
197
198
199
        
        teststks = isa(qsed) and isa(used)
        
1355825c   Ilyes Choubani   General update
200
        IF (~teststks and ~isa(polsed)) or (~teststks and ~isa(polfrac)) then message, 'Stokes parameters/Polarization showing data is not set correctly. Please check the input structure. Aborting...'
3ff9cac3   Ilyes Choubani   general update
201
        
1355825c   Ilyes Choubani   General update
202
203
204
205
206
207
        if teststks and isa(polsed) and ~(isa(polfrac)) and ~(isa(psi_em)) then nowshowing = 'QSED, USED and POLSED'
        if teststks and isa(polsed) and ~(isa(polfrac)) and isa(psi_em) then nowshowing = 'QSED, USED, POLSED and PSI_EM'
        if teststks and ~(isa(polsed)) and isa(polfrac) and ~(isa(psi_em)) then nowshowing = 'QSED, USED and POLFRAC'
        if teststks and ~(isa(polsed)) and isa(polfrac) and isa(psi_em) then nowshowing = 'QSED, USED, POLFRAC and PSI_EM'
        if teststks and ~(isa(polsed)) and ~(isa(polfrac)) and ~(isa(psi_em)) then nowshowing = 'QSED and USED'
        if teststks and isa(polsed) and isa(polfrac) and ~(isa(psi_em)) then nowshowing = 'QSED, USED, POLSED and POLFRAC'
3ff9cac3   Ilyes Choubani   general update
208
        if teststks and isa(polsed) and isa(polfrac) and isa(psi_em) then nowshowing = 'QSED, USED, POLFRAC, POLSED and PSI_EM'
1355825c   Ilyes Choubani   General update
209
        if teststks and ~(isa(polsed)) and ~(isa(polfrac)) and isa(psi_em) then nowshowing = 'QSED, USED and PSI_EM'
3ff9cac3   Ilyes Choubani   general update
210
        
4fd64cbb   Ilyes Choubani   dustem_fit_sed_po...
211

3ff9cac3   Ilyes Choubani   general update
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
237
238
239
240
        message, 'Polarization component(s) to show: '+nowshowing ,/continue
        
        
        If isa(polsed) then BEGIN    ;Apply changes to !dustem_data here.      
            !dustem_show.polsed = ptr_new(polsed)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.polsed).values *= f_HI
        ENDIF
        If isa(polfrac) then BEGIN        
            !dustem_show.polfrac = ptr_new(polfrac)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.polfrac).values *= f_HI
        ENDIF
        IF isa(qsed) THEN BEGIN        
            !dustem_show.qsed = ptr_new(qsed)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.qsed).values *= f_HI
        ENDIF    
        if isa(used) then BEGIN
            !dustem_show.used = ptr_new(used)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.used).values *= f_HI
        ENDIF
        if isa(psi_em) then BEGIN
            !dustem_show.psi_em = ptr_new(psi_em)
            if keyword_set(f_HI) then if f_HI gt 0 then $
            (*!dustem_show.psi_em).values *= f_HI
        ENDIF        
    endif
abebbdf3   Ilyes Choubani   General update: A...
241
    if isa(x_show) then begin
3ff9cac3   Ilyes Choubani   general update
242
243
        teststks = isa(qext) and isa(uext)
        
1355825c   Ilyes Choubani   General update
244
        IF (~teststks) then message, 'Extinction stokes parameters/Polarization data is not set correctly. Please check the input structure. Aborting...'
3ff9cac3   Ilyes Choubani   general update
245
        
67bd858a   Ilyes Choubani   Replication of th...
246
247
248
249
250
251
252
253
254
255
256
257
258
259
;         if teststks and isa(polext) and ~(isa(psi_ext)) then nowshowing = 'QEXT, UEXT and POLEXT'
;         if teststks and isa(polext) and isa(psi_ext) then nowshowing = 'QEXT, UEXT, POLEXT and PSI_EXT'
;         if teststks and ~(isa(polext)) and isa(psi_ext) then nowshowing = 'QEXT,UEXT and PSI_EXT' 
;         if teststks and ~(isa(polext)) and ~(isa(psi_ext)) then nowshowing = 'QEXT and UEXT'
        
        if teststks and isa(polext) and ~(isa(polextfrac)) and ~(isa(psi_ext)) then nowshowing = 'QEXT, UEXT and POLEXT'
        if teststks and isa(polext) and ~(isa(polextfrac)) and isa(psi_ext) then nowshowing = 'QEXT, UEXT, POLEXT and PSI_EXT'
        if teststks and ~(isa(polext)) and isa(polextfrac) and ~(isa(psi_ext)) then nowshowing = 'QEXT, UEXT and POLEXTFRAC'
        if teststks and ~(isa(polext)) and isa(polextfrac) and isa(psi_ext) then nowshowing = 'QEXT, UEXT, POLEXTFRAC and PSI_EXT'
        if teststks and ~(isa(polext)) and ~(isa(polextfrac)) and ~(isa(psi_ext)) then nowshowing = 'QEXT and UEXT'
        if teststks and isa(polext) and isa(polextfrac) and ~(isa(psi_ext)) then nowshowing = 'QEXT, UEXT, POLEXT and POLEXTFRAC'
        if teststks and isa(polext) and isa(polextfrac) and isa(psi_ext) then nowshowing = 'QEXT, UEXT, POLEXTFRAC, POLEXT and PSI_EXT'
        if teststks and ~(isa(polext)) and ~(isa(polextfrac)) and isa(psi_ext) then nowshowing = 'QEXT, UEXT and PSI_EXT'
        
3ff9cac3   Ilyes Choubani   general update
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
        
        message, 'Polarization component(s) to show: '+nowshowing ,/continue
        
        ;EXTINCTION
        if isa(polext) then BEGIN        
            !dustem_show.polext = ptr_new(polext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.polext).values *= f_HI
        ENDIF
        IF isa(qext) THEN BEGIN        
            !dustem_show.qext = ptr_new(qext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.qext).values *= f_HI
        ENDIF
        if isa(uext) then BEGIN 
            !dustem_show.uext = ptr_new(uext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.uext).values *= f_HI
        ENDIF
        if isa(psi_ext) then BEGIN 
            !dustem_show.psi_ext = ptr_new(psi_ext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.psi_ext).values *= f_HI
        ENDIF
67bd858a   Ilyes Choubani   Replication of th...
284
285
286
287
288
289
290
291
292
        
        ;Added for completeness
        
        if isa(fpolext) then BEGIN        
            !dustem_show.fpolext = ptr_new(fpolext)
            if keyword_set(f_HI) then if f_HI gt 0 then $
           	(*!dustem_show.fpolext).values *= f_HI
        ENDIF
        
3ff9cac3   Ilyes Choubani   general update
293
294
    endif
endif
427f1205   Jean-Michel Glorian   version 4.2 merged
295

09e61d64   Ilyes Choubani   cleaned set_data ...
296
IF keyword_set(rchi2_weight) THEN BEGIN
427f1205   Jean-Michel Glorian   version 4.2 merged
297
298
	!fit_rchi2_weight.sed     = rchi2_weight.sed
	!fit_rchi2_weight.ext     = rchi2_weight.ext
09e61d64   Ilyes Choubani   cleaned set_data ...
299
	
6a714abf   Ilyes Choubani   small fix to dust...
300
	IF !run_pol THEN BEGIN
1355825c   Ilyes Choubani   General update
301
    	
3ff9cac3   Ilyes Choubani   general update
302
303
    	IF isa(qsed) THEN !fit_rchi2_weight.qsed  = rchi2_weight.qsed
    	IF isa(used) THEN !fit_rchi2_weight.used  = rchi2_weight.used
6a714abf   Ilyes Choubani   small fix to dust...
304
    	
3ff9cac3   Ilyes Choubani   general update
305
306
    	IF isa(qext) THEN !fit_rchi2_weight.qext  = rchi2_weight.qext
    	IF isa(uext) THEN !fit_rchi2_weight.uext  = rchi2_weight.uext
6a714abf   Ilyes Choubani   small fix to dust...
307
308
    ENDIF
    
3ff9cac3   Ilyes Choubani   general update
309
310
311
312
313
314
ENDIF ELSE BEGIN

    !fit_rchi2_weight.sed=1.
    !fit_rchi2_weight.ext=1.
    
    If !run_pol THEN BEGIN
1355825c   Ilyes Choubani   General update
315
        
3ff9cac3   Ilyes Choubani   general update
316
317
        IF isa(qsed) THEN !fit_rchi2_weight.qsed=1.
        IF isa(used) THEN !fit_rchi2_weight.used=1.
1355825c   Ilyes Choubani   General update
318
        
3ff9cac3   Ilyes Choubani   general update
319
320
        IF isa(qext) THEN !fit_rchi2_weight.qext=1.
        IF isa(uext) THEN !fit_rchi2_weight.uext=1.
1355825c   Ilyes Choubani   General update
321
    
3ff9cac3   Ilyes Choubani   general update
322
    ENDIF
427f1205   Jean-Michel Glorian   version 4.2 merged
323

3ff9cac3   Ilyes Choubani   general update
324
ENDELSE
427f1205   Jean-Michel Glorian   version 4.2 merged
325

5a2643a4   Ilyes Choubani   cleaning/improvin...
326
327
328
329
;Setting the data and wavelength tags in '!dustem_fit'
((*!dustem_fit).data)=ptr_new(!dustem_data)


427f1205   Jean-Michel Glorian   version 4.2 merged
330
331
the_end:

3ff9cac3   Ilyes Choubani   general update
332

abebbdf3   Ilyes Choubani   General update: A...
333
return,0.
3ff9cac3   Ilyes Choubani   general update
334
335
336
337




427f1205   Jean-Michel Glorian   version 4.2 merged
338
END