Blame view

src/idl/dustem_check_data.pro 20.7 KB
04efbaa5   Ilyes Choubani   Correcting set_da...
1
PRO dustem_check_data,data_sed,data_ext,sed,ext,polext,polsed,polfrac,psi_em,qsed,used,qext,uext,psi_ext,fpolext
09e61d64   Ilyes Choubani   cleaned set_data ...
2

303de20d   Ilyes Choubani   updating check_data
3
4
;WRITE HELP SECTION . URGENT
;NOTA BENE: LargeP has not been debiasied yet.       
06fe3845   Ilyes Choubani   general update
5

04efbaa5   Ilyes Choubani   Correcting set_da...
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
;+
; NAME:
;    dustem_set_data
; PURPOSE:
;    ## adapting the data structures to the format used by the fitting algorithm 
;    Initializes the dustem data structure (!dustem_data) used in the fitting
;    Initializes the !dustem_show structure which is either a copy or a more detailed version of !dustem_data 
; CATEGORY:
;    Dustem
; CALLING SEQUENCE:
;    dustem_check_data,data_sed,data_ext,sed,ext,polext,polsed,polfrac,psi_em,qsed,used,qext,uext,psi_ext,fpolext,[/help]
; INPUTS:
;    data_sed : Emission dustemwrap structure
;    data_ext : Extinction dustemwrap structure
; OPTIONAL INPUT PARAMETERS:
;    None
; OUTPUTS:
;    ## adapting the data structures to the format used by the fitting algorithm 
;    sed : emission formatted structure 
;    ext : extinction formatted structure
;    polext : polarized extinction formatted structure
;    polsed : polarized emission formatted structure 
;    polfrac : fractional polarized emission formatted structure
;    psi_em  : emission polarization angle formatted structure 
;    qsed : stokesQ emission formatted structure
;    used : stokesU emission formatted structure
;    qext : stokesQ extinction formatted structure
;    uext : stokesU extinction formatted structure
;    psi_ext : extinction polarization angle formatted structure
;    fpolext : fractional extinction polarization formatted structure
; OPTIONAL OUTPUT PARAMETERS:
;    None
; ACCEPTED KEY-WORDS:
;    help      = If set print this help
; COMMON BLOCKS:
;    None
; SIDE EFFECTS:
;    Structures 
; RESTRICTIONS:
;    The dustem idl wrapper must be installed
; PROCEDURE:
;    None
; EXAMPLES
;    dustem_check_data,data_sed,data_ext,sed,ext,polext,polsed,polfrac,psi_em,qsed,used,qext,uext,psi_ext,fpolext,[/help]
;-


IF keyword_set(help) THEN BEGIN
  doc_library,'dustem_check_data'
  goto,the_end
ENDIF

09e61d64   Ilyes Choubani   cleaned set_data ...
58
;CHECKING THE FORMAT OF THE SED STRUCTURE
3ff9cac3   Ilyes Choubani   general update
59
60
IF KEYWORD_SET(data_sed) THEN BEGIN
            
09e61d64   Ilyes Choubani   cleaned set_data ...
61
    ans=''
3ff9cac3   Ilyes Choubani   general update
62
    wavs=data_sed.wave
09e61d64   Ilyes Choubani   cleaned set_data ...
63
    ;=== Impose central wavelengths for photometric channels
3ff9cac3   Ilyes Choubani   general update
64
    ind=where(data_sed.filter NE 'SPECTRUM',count)
09e61d64   Ilyes Choubani   cleaned set_data ...
65
    IF count NE 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
66
        wavs(ind)=dustem_filter2wav(data_sed(ind).filter)
09e61d64   Ilyes Choubani   cleaned set_data ...
67
    ENDIF
3ff9cac3   Ilyes Choubani   general update
68
    ;=== Initializing observation structure
3ff9cac3   Ilyes Choubani   general update
69
    obs_EM={instru_names:data_sed.instru,filt_names:data_sed.filter,wav:wavs, values:data_sed.StokesI,sigma:sqrt(abs(data_sed.sigmaII))} 
09e61d64   Ilyes Choubani   cleaned set_data ...
70
    ;INITIALIZING OUTPUT STRUCTURES
3ff9cac3   Ilyes Choubani   general update
71
    sed = obs_EM
3ff9cac3   Ilyes Choubani   general update
72
73
    qsed = sed
    used = sed
3ff9cac3   Ilyes Choubani   general update
74
    
09e61d64   Ilyes Choubani   cleaned set_data ...
75
    ;Test if there is StokesI data. If not move to polsed testing.
3ff9cac3   Ilyes Choubani   general update
76
    ind = where(data_sed.StokesI NE la_undef() and finite(data_sed.StokesI) EQ 1 and data_sed.sigmaII NE la_undef() and finite(data_sed.sigmaII) EQ 1,N_sed) ;Testing if the data and errors are set
09e61d64   Ilyes Choubani   cleaned set_data ...
77
    IF N_sed EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
78
        sed = ptr_new()
abebbdf3   Ilyes Choubani   General update: A...
79
        goto, qzone
09e61d64   Ilyes Choubani   cleaned set_data ...
80
    ENDIF ELSE BEGIN 
3ff9cac3   Ilyes Choubani   general update
81
    ind = where(finite(data_sed.StokesI) EQ 0 or finite(data_sed.sigmaII) EQ 0, countnoki) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
82
83
84
85
86
87
    IF countnoki NE 0 THEN BEGIN 
        message, "SED format isn't met. NaN value(s) detected in StokesI data.",/continue
        message, 'Without automatic format fitering you cannot proceed.',/continue
        read, ans, prompt='Would you like automatic format filtering? (Y/N):'
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
88
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
89
90
91
92
        ENDIF
    ENDIF 
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
93
94
95
    tdaerri=where((data_sed.sigmaII EQ la_undef() and data_sed.StokesI NE la_undef()) or (data_sed.sigmaII NE la_undef() and data_sed.StokesI EQ la_undef()),ctdaerri)
    IF ctdaerri NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testi=where(data_sed.sigmaII NE 0. and finite(data_sed.sigmaII) EQ 1 and data_sed.sigmaII NE la_undef() and data_sed.StokesI NE la_undef() and finite(data_sed.StokesI) EQ 1,ctesti)                
09e61d64   Ilyes Choubani   cleaned set_data ...
96
    IF ctesti NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
97
98
99
100
101
102
        instru_names = sed.instru_names(testi)
        filt_names = sed.filt_names(testi)
        wav = sed.wav(testi)
        values = sed.values(testi)
        sigma = sed.sigma(testi)
        sed={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
103
104
    ENDIF    
    ENDELSE
09e61d64   Ilyes Choubani   cleaned set_data ...
105
106
    qzone:
    ans=''
3ff9cac3   Ilyes Choubani   general update
107
108
    qsed.values=data_sed.StokesQ
    qsed.sigma=sqrt(abs(data_sed.sigmaQQ))
09e61d64   Ilyes Choubani   cleaned set_data ...
109
    ;Testig if there is StokesQ data. If not move to used data
3ff9cac3   Ilyes Choubani   general update
110
    ind = where(data_sed.StokesQ NE la_undef() and finite(data_sed.StokesQ) EQ 1 and data_sed.sigmaQQ NE la_undef() and finite(data_sed.sigmaQQ) EQ 1,NQ)
09e61d64   Ilyes Choubani   cleaned set_data ...
111
    IF NQ EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
112
        qsed = ptr_new()
09e61d64   Ilyes Choubani   cleaned set_data ...
113
114
        goto, uzone
    ENDIF ELSE BEGIN
3ff9cac3   Ilyes Choubani   general update
115
    ind = where(finite(data_sed.StokesQ) EQ 0 or finite(data_sed.sigmaQQ) EQ 0, countnokq) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
116
117
118
119
120
121
    IF countnokq NE 0 THEN BEGIN 
        message, "SED format isn't met. NaN value(s) detected in StokesQ data.",/continue
        message, 'Without automatic format fitering you cannot proceed.',/continue
        read, ans, prompt='Would you like automatic format filtering? (Y/N):' 
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
122
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
123
124
125
126
        ENDIF
    ENDIF
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
127
128
129
    tdaerrq=where((data_sed.sigmaQQ EQ la_undef() and data_sed.StokesQ NE la_undef()) or (data_sed.sigmaQQ NE la_undef() and data_sed.StokesQ EQ la_undef()),ctdaerrq)
    IF ctdaerrq NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testq=where(data_sed.sigmaQQ NE 0. and finite(data_sed.sigmaQQ) EQ 1 and data_sed.sigmaQQ NE la_undef() and data_sed.StokesQ NE la_undef() and finite(data_sed.StokesQ) EQ 1,ctestq)                
09e61d64   Ilyes Choubani   cleaned set_data ...
130
    IF ctestq NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
131
132
133
134
135
136
        instru_names = qsed.instru_names(testq)
        filt_names = qsed.filt_names(testq)
        wav = qsed.wav(testq)
        values = qsed.values(testq)
        sigma = qsed.sigma(testq)
        qsed={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
137
138
139
140
    ENDIF
    ENDELSE
    uzone:
    ans=''
3ff9cac3   Ilyes Choubani   general update
141
142
    used.values=data_sed.StokesU
    used.sigma=sqrt(abs(data_sed.sigmaUU))
09e61d64   Ilyes Choubani   cleaned set_data ...
143
    ;Testig if there is StokesU data. If not return empty value and end loop.
3ff9cac3   Ilyes Choubani   general update
144
    ind = where(data_sed.StokesU NE la_undef() and finite(data_sed.StokesU) EQ 1 and data_sed.sigmaUU NE la_undef() and finite(data_sed.sigmaUU) EQ 1,NU)
09e61d64   Ilyes Choubani   cleaned set_data ...
145
    IF NU EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
146
        used = ptr_new()
abebbdf3   Ilyes Choubani   General update: A...
147
        goto, psiemzone
09e61d64   Ilyes Choubani   cleaned set_data ...
148
    ENDIF ELSE BEGIN
3ff9cac3   Ilyes Choubani   general update
149
    ind = where(finite(data_sed.StokesU) EQ 0 or finite(data_sed.sigmaUU) EQ 0, countnoku) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
150
151
152
153
154
155
    IF countnoku NE 0 THEN BEGIN 
        message, "SED format isn't met. NaN value(s) detected in StokesU data.",/continue
        message, 'Without automatic format fitering you cannot proceed.',/continue
        read, ans, prompt='Would you like automatic format filtering? (Y/N):' 
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
156
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
157
158
159
160
        ENDIF
    ENDIF  
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
161
162
163
    tdaerru=where((data_sed.sigmaUU EQ la_undef() and data_sed.StokesU NE la_undef()) or (data_sed.sigmaUU NE la_undef() and data_sed.StokesU EQ la_undef()),ctdaerru)
    IF ctdaerru NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testu=where(data_sed.sigmaUU NE 0. and finite(data_sed.sigmaUU) EQ 1 and data_sed.sigmaUU NE la_undef() and data_sed.StokesU NE la_undef() and finite(data_sed.StokesU) EQ 1,ctestu)                
09e61d64   Ilyes Choubani   cleaned set_data ...
164
    IF ctestu NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
165
166
167
168
169
170
        instru_names = used.instru_names(testu)
        filt_names = used.filt_names(testu)
        wav = used.wav(testu)
        values = used.values(testu)
        sigma = used.sigma(testu)
        used={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
171
172
    ENDIF
    ENDELSE
abebbdf3   Ilyes Choubani   General update: A...
173
174
    psiemzone:
    
303de20d   Ilyes Choubani   updating check_data
175
    if nu eq 0 and nq eq 0 then goto, end_sed
abebbdf3   Ilyes Choubani   General update: A...
176
177
    degtorad = !pi/180
    
303de20d   Ilyes Choubani   updating check_data
178
    ;Generation of POLFRAC,POLSED and PSI data by default   
abebbdf3   Ilyes Choubani   General update: A...
179
    ;Testing on the presence of covariances otherwise an error is returned
303de20d   Ilyes Choubani   updating check_data
180
    ;The testing happens here because covariances are needed for the error estimation of P,p and PSI.   
abebbdf3   Ilyes Choubani   General update: A...
181
182
     
    tstcovu = where((data_sed(testu).sigmaIU) EQ la_undef() or (data_sed(testu).sigmaQU) EQ la_undef(), ctcovu)
303de20d   Ilyes Choubani   updating check_data
183
    if ctcovu NE 0  then message, 'Covariance data is missing in StokesU data. Data, errors and covariances do not match. Aborting...'
abebbdf3   Ilyes Choubani   General update: A...
184
    tstcovq = where((data_sed(testq).sigmaIQ) EQ la_undef() or (data_sed(testq).sigmaQU) EQ la_undef(), ctcovq)
303de20d   Ilyes Choubani   updating check_data
185
    if ctcovq NE 0  then message, 'Covariance data is missing in StokesQ data. Data, errors and covariances do not match. Aborting...'
abebbdf3   Ilyes Choubani   General update: A...
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
    
    ;Matching both filter and spectrum points 
    
    match2,used.wav,qsed.wav,qpts,upts
    
    ;removing -1 values from the indices (qpts & upts)
    indnotq = where(qpts eq -1, cnotq)
    if cnotq ne 0 then remove, indnotq, qpts
    indnotu = where(upts eq -1, cnotu)
    if cnotu ne 0 then remove, indnotu, upts
    
    match2, sed.wav, qsed.wav(qpts), qtmp, sedpts
    indnoti = where(sedpts eq -1, cnoti)
    if cnoti ne 0 then remove, indnoti, sedpts
    
    instru_names = used.instru_names(upts)
    filt_names = used.filt_names(upts)
    wav = used.wav(upts)
    values = 0.5*atan(used.values(upts),qsed.values(qpts))/degtorad
    polar_variance_iqu2ippsi,sed.values(sedpts),qsed.values(qpts),used.values(upts),(data_sed(testi).sigmaII)(sedpts),(data_sed(testq).sigmaQQ)(qpts),(data_sed(testu).sigmaUU)(upts),(data_sed(testi).sigmaIQ)(sedpts),(data_sed(testi).sigmaIU)(sedpts),(data_sed(testi).sigmaQU)(sedpts),variance_smallp,variance_psi,variance_largep
    sigma = sqrt(variance_psi)
    psi_em={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
    
303de20d   Ilyes Choubani   updating check_data
209
    goto, pzone ; the variances for polfrac and polsed were already computed. 
abebbdf3   Ilyes Choubani   General update: A...
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
        
    pzone:
    
    polsed = psi_em
    polsed.values = sqrt(used.values(upts)^2+qsed.values(qpts)^2) 
    polsed.sigma = sqrt(variance_largep)
    goto, fpzone
    
    fpzone:
    
    polfrac = psi_em
    polfrac.values = polsed.values/sed.values(sedpts) 
    polfrac.sigma = sqrt(variance_smallp)
    
    goto, end_sed
09e61d64   Ilyes Choubani   cleaned set_data ...
225
    end_sed:
303de20d   Ilyes Choubani   updating check_data
226
    
09e61d64   Ilyes Choubani   cleaned set_data ...
227
228
229
ENDIF


abebbdf3   Ilyes Choubani   General update: A...
230
231
232
;EXTINCTION HASN'T BEEN TREATED YET 


67bd858a   Ilyes Choubani   Replication of th...
233
234
;SMALLL ISSUE .. POLEXTFRAC is not present. Let's create it for completness

3ff9cac3   Ilyes Choubani   general update
235
236
IF KEYWORD_SET(data_ext) THEN begin
    
09e61d64   Ilyes Choubani   cleaned set_data ...
237
    ans=''
3ff9cac3   Ilyes Choubani   general update
238
    wavs=data_ext.wave
09e61d64   Ilyes Choubani   cleaned set_data ...
239
    ;=== Impose central wavelengths for photometric channels
3ff9cac3   Ilyes Choubani   general update
240
    ind=where(data_ext.filter NE 'SPECTRUM',count)
09e61d64   Ilyes Choubani   cleaned set_data ...
241
    IF count NE 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
242
        wavs(ind)=dustem_filter2wav(data_ext(ind).filter)
09e61d64   Ilyes Choubani   cleaned set_data ...
243
244
    ENDIF
    ;=== define observations structure 
3ff9cac3   Ilyes Choubani   general update
245
    obs_EXT={instru_names:data_ext.instru,filt_names:data_ext.filter,wav:wavs, values:data_ext.EXT_I,sigma:sqrt(abs(data_ext.sigextII))} 
09e61d64   Ilyes Choubani   cleaned set_data ...
246
    ;INITIALIZING OUTPUT STRUCTURES
3ff9cac3   Ilyes Choubani   general update
247
    ext = obs_EXT
3ff9cac3   Ilyes Choubani   general update
248
249
    qext = ext
    uext = ext
3ff9cac3   Ilyes Choubani   general update
250
251
    
    ind = where(data_ext.EXT_I NE la_undef() and finite(data_ext.EXT_I) EQ 1 and data_ext.sigextII NE la_undef() and finite(data_ext.sigextII) EQ 1,N_ext) ;Testing if the data and errors are set
09e61d64   Ilyes Choubani   cleaned set_data ...
252
    IF N_ext EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
253
        ext = ptr_new()
303de20d   Ilyes Choubani   updating check_data
254
        goto, qexzone
09e61d64   Ilyes Choubani   cleaned set_data ...
255
    ENDIF ELSE BEGIN
3ff9cac3   Ilyes Choubani   general update
256
    ind = where(finite(data_ext.EXT_I) EQ 0 or finite(data_ext.sigextII) EQ 0, countnokex) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
257
258
259
260
261
262
263
    IF countnokex NE 0 THEN BEGIN 
        message, "SED format isn't met. NaN value(s) detected in EXT_I data.",/continue
        message, 'Without automatic format fitering you cannot proceed.',/continue
        ans=''
        read, ans, prompt='Would you like automatic format filtering? (Y/N):' 
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
264
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
265
266
267
268
        ENDIF
    ENDIF      
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $ 
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
269
270
271
    tdaerrex=where((data_ext.sigextII EQ la_undef() and data_ext.EXT_I NE la_undef()) or (data_ext.sigextII NE la_undef() and data_ext.EXT_I EQ la_undef()),ctdaerrex)
    IF ctdaerrex NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testex=where(data_ext.sigextII NE 0. and finite(data_ext.sigextII) EQ 1 and data_ext.sigextII NE la_undef() and data_ext.EXT_I NE la_undef() and finite(data_ext.EXT_I) EQ 1,ctestex)                
09e61d64   Ilyes Choubani   cleaned set_data ...
272
    IF ctestex NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
273
274
275
276
277
278
        instru_names = ext.instru_names(testex)
        filt_names = ext.filt_names(testex)
        wav = ext.wav(testex)
        values = ext.values(testex)
        sigma = ext.sigma(testex)
        ext={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
279
280
    ENDIF 
    ENDELSE
303de20d   Ilyes Choubani   updating check_data
281
    
09e61d64   Ilyes Choubani   cleaned set_data ...
282
283
    qexzone:
    ans=''
3ff9cac3   Ilyes Choubani   general update
284
285
    qext.values=data_ext.EXT_Q
    qext.sigma=sqrt(abs(data_ext.sigextQQ))
09e61d64   Ilyes Choubani   cleaned set_data ...
286
    ;Testig if there is EXT_P data. If not move to EXT_U testing
3ff9cac3   Ilyes Choubani   general update
287
    ind = where(data_ext.EXT_Q NE la_undef() and finite(data_ext.EXT_Q) EQ 1 and data_ext.sigextQQ NE la_undef() and finite(data_ext.sigextQQ) EQ 1,NQ_ext) ;Testing if the data and errors are set
9ee42e40   Ilyes Choubani   fixed small bugs
288
    ;dustem_set_data.prostop   
09e61d64   Ilyes Choubani   cleaned set_data ...
289
    IF NQ_ext EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
290
        qext = ptr_new()
09e61d64   Ilyes Choubani   cleaned set_data ...
291
292
        goto, uexzone
    ENDIF ELSE BEGIN
3ff9cac3   Ilyes Choubani   general update
293
    ind = where(finite(data_ext.EXT_Q) EQ 0 or finite(data_ext.sigextQQ) EQ 0, countnokqex) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
294
    IF countnokqex NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
295
        message, "SED format isn't met. NaN value(s) detected in EXT_Q data.",/continue
09e61d64   Ilyes Choubani   cleaned set_data ...
296
297
298
299
300
        message, 'Without automatic format fitering you cannot proceed.',/continue
        ans=''
        read, ans, prompt='Would you like automatic format filtering? (Y/N):' 
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
301
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
302
303
304
305
        ENDIF
    ENDIF
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
306
307
308
    tdaerrqex=where((data_ext.sigextQQ EQ la_undef() and data_ext.EXT_Q NE la_undef()) or (data_ext.sigextQQ NE la_undef() and data_ext.EXT_Q EQ la_undef()),ctdaerrqex)
    IF ctdaerrqex NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testqex=where(data_ext.sigextQQ NE 0. and finite(data_ext.sigextQQ) EQ 1 and data_ext.sigextQQ NE la_undef() and data_ext.EXT_Q NE la_undef() and finite(data_ext.EXT_Q) EQ 1,ctestqex)                
09e61d64   Ilyes Choubani   cleaned set_data ...
309
    IF ctestqex NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
310
311
312
313
314
315
        instru_names = qext.instru_names(testqex)
        filt_names = qext.filt_names(testqex)
        wav = qext.wav(testqex)
        values = qext.values(testqex)
        sigma = qext.sigma(testqex)
        qext={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
316
317
    ENDIF 
    ENDELSE
303de20d   Ilyes Choubani   updating check_data
318
    
09e61d64   Ilyes Choubani   cleaned set_data ...
319
320
    uexzone:
    ans=''
3ff9cac3   Ilyes Choubani   general update
321
322
    uext.values=data_ext.EXT_U
    uext.sigma=sqrt(abs(data_ext.sigextUU))
09e61d64   Ilyes Choubani   cleaned set_data ...
323
    ;Testig if there is EXT_P data. If not return empty value and end loop.
3ff9cac3   Ilyes Choubani   general update
324
    ind = where(data_ext.EXT_U NE la_undef() and finite(data_ext.EXT_U) EQ 1 and data_ext.sigextUU NE la_undef() and finite(data_ext.sigextUU) EQ 1,NU_ext) ;Testing if the data and errors are set
09e61d64   Ilyes Choubani   cleaned set_data ...
325
    IF NU_ext EQ 0 THEN BEGIN
3ff9cac3   Ilyes Choubani   general update
326
        uext = ptr_new()
303de20d   Ilyes Choubani   updating check_data
327
        goto, psiexzone
09e61d64   Ilyes Choubani   cleaned set_data ...
328
    ENDIF ELSE BEGIN
3ff9cac3   Ilyes Choubani   general update
329
    ind = where(finite(data_ext.EXT_U) EQ 0 or finite(data_ext.sigextUU) EQ 0, countnokuex) ;Format is not okay if there are nan values but the wrapper recognizes the la_undef() value 
09e61d64   Ilyes Choubani   cleaned set_data ...
330
    IF countnokuex NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
331
        message, "SED format isn't met. NaN value(s) detected in EXT_U data.",/continue
09e61d64   Ilyes Choubani   cleaned set_data ...
332
333
334
335
336
        message, 'Without automatic format fitering you cannot proceed.',/continue
        ans=''
        read, ans, prompt='Would you like automatic format filtering? (Y/N):' 
        IF strupcase(ans) EQ 'N' THEN BEGIN
            message,'You have chosen not to use automatic filtering. Please adjust the SED format.',/continue
266ae799   Ilyes Choubani   General update
337
            message, 'Aborting ...'
09e61d64   Ilyes Choubani   cleaned set_data ...
338
339
340
341
        ENDIF
    ENDIF
    IF strupcase(ans) EQ 'Y' THEN message, 'You have chosen automatic format filtering. Removal of undefined data points...',/continue $
    ELSE message, 'Data format is met. Removal of undefined data points...',/continue
3ff9cac3   Ilyes Choubani   general update
342
343
344
    tdaerruex=where((data_ext.sigextUU EQ la_undef() and data_ext.EXT_U NE la_undef()) or (data_ext.sigextUU NE la_undef() and data_ext.EXT_U EQ la_undef()),ctdaerruex)
    IF ctdaerruex NE 0 THEN message, 'Data and errors do not match. Undefinded data detected. Aborting...'
    testuex=where(data_ext.sigextUU NE 0. and finite(data_ext.sigextUU) EQ 1 and data_ext.sigextUU NE la_undef() and data_ext.EXT_U NE la_undef() and finite(data_ext.EXT_U) EQ 1,ctestuex)                
09e61d64   Ilyes Choubani   cleaned set_data ...
345
    IF ctestuex NE 0 THEN BEGIN 
3ff9cac3   Ilyes Choubani   general update
346
347
348
349
350
351
        instru_names = uext.instru_names(testuex)
        filt_names = uext.filt_names(testuex)
        wav = uext.wav(testuex)
        values = uext.values(testuex)
        sigma = uext.sigma(testuex)
        uext={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
09e61d64   Ilyes Choubani   cleaned set_data ...
352
353
    ENDIF 
    ENDELSE
303de20d   Ilyes Choubani   updating check_data
354
355
356
    
    psiexzone: ;Starting the analogy here. 
    
04efbaa5   Ilyes Choubani   Correcting set_da...
357
    if NU_EXT eq 0 and NQ_EXT eq 0 then goto, end_ext
303de20d   Ilyes Choubani   updating check_data
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
    degtorad = !pi/180
    
    ;Generation of POLEXT and PSI_EXT data by default   
    ;Testing on the presence of covariances otherwise an error is returned
    ;The testing happens here because covariances are needed for the error estimation of EXT_P,PSI_EXT.   
    
    tstcovuex = where((data_ext(testuex).sigextIU) EQ la_undef() or (data_ext(testuex).sigmaQU) EQ la_undef(), ctcovuex)
    if ctcovuex NE 0  then message, 'Covariance data is missing in the extinction data pertaining to the StokesU parameter. Data, errors and covariances do not match. Aborting...'
    tstcovqex = where((data_ext(testqex).sigextIQ) EQ la_undef() or (data_ext(testqex).sigextQU) EQ la_undef(), ctcovqex)
    if ctcovqex NE 0  then message, 'Covariance data is missing in the extinction pertaining to the StokesQ parameter. Data, errors and covariances do not match. Aborting...'
    
    ;Matching both filter and spectrum points 
    match2,uext.wav,qext.wav,qexpts,uexpts
    
    ;removing -1 values from the indices (qpts & upts)
    indnotqex = where(qexpts eq -1, cnotqex)
    if cnotqex ne 0 then remove, indnotqex, qexpts
    indnotuex = where(uexpts eq -1, cnotuex)
    if cnotuex ne 0 then remove, indnotuex, uexpts
    
    match2, ext.wav, qexsed.wav(qexpts), qextmp, extpts
    indnotx = where(extpts eq -1, cnotx)
    if cnotx ne 0 then remove, indnotx, extpts
    
    instru_names = uext.instru_names(uexpts)
    filt_names = uext.filt_names(uexpts)
    wav = uext.wav(uexpts)
    values = 0.5*atan(uext.values(uexpts),qext.values(qexpts))/degtorad
    polar_variance_iqu2ippsi,ext.values(sedpts),qexsed.values(qexpts),uext.values(uexpts),(data_ext(testx).sigextII)(extpts),(data_ext(testqex).sigextQQ)(qexpts),(data_ext(testuex).sigextUU)(uexpts),(data_ext(testx).sigextIQ)(extpts),(data_ext(testx).sigextIU)(extpts),(data_ext(testx).sigextQU)(extpts),variance_smallp,variance_psi,variance_largep
    sigma = sqrt(variance_psi)
5a2643a4   Ilyes Choubani   cleaning/improvin...
388
    psi_ext={instru_names:instru_names,filt_names:filt_names,wav:wav,values:values,sigma:sigma}
303de20d   Ilyes Choubani   updating check_data
389
390
391
392
393
394
395
396
    
    goto, pexzone  ; the variances for polextPSI_EXT were already computed. 
        
    pexzone:
    
    polext = psi_ext
    polext.values = sqrt(uext.values(uexpts)^2+qexsed.values(qexpts)^2) 
    polext.sigma = sqrt(variance_largep)
67bd858a   Ilyes Choubani   Replication of th...
397
398
399
400
401
402
403
404
    goto, fpexzone
    
    fpexzone:
    
    fpolext = psi_ext
    fpolext.values = polext.values/ext.values(extpts) 
    fpolext.sigma = sqrt(variance_smallp)
    
303de20d   Ilyes Choubani   updating check_data
405
406
    goto, end_ext
    
67bd858a   Ilyes Choubani   Replication of th...
407
    
09e61d64   Ilyes Choubani   cleaned set_data ...
408
409
    end_ext:
ENDIF
04efbaa5   Ilyes Choubani   Correcting set_da...
410
411
412

the_end:

9ee42e40   Ilyes Choubani   fixed small bugs
413
;stop
04efbaa5   Ilyes Choubani   Correcting set_da...
414
; RETURN, 0.
3ff9cac3   Ilyes Choubani   general update
415

09e61d64   Ilyes Choubani   cleaned set_data ...
416
417

END