ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/proj/globalhs/scripts/idl/weed.pro
Revision: 1.6
Committed: Tue Jun 17 21:41:33 2014 UTC (9 years, 3 months ago) by tplarson
Branch: MAIN
CVS Tags: Ver_9-1, Ver_LATEST, Ver_9-3, Ver_9-41, Ver_9-2, Ver_8-8, Ver_8-6, Ver_8-7, Ver_8-5, Ver_9-5, Ver_9-4, Ver_8-10, Ver_8-11, Ver_8-12, Ver_9-0
Changes since 1.5: +61 -9 lines
Log Message:
generalized to any length timeseries, print rejection statistics

File Contents

# Content
1 PRO WEED, ndt, tsample, icasea
2
3 idldir='$JSOCROOT/proj/globalhs/scripts/idl/'
4
5 binmics=1e6/(ndt*tsample)
6 nt=1 ; May no longer work for nt>1
7
8 if (icasea le 2) then begin
9 iasym=0
10 nm=24
11 paroff=7
12 sigoff=5
13 aoff=12
14 y0=0.30
15 dy=0.10
16 endif else begin
17 iasym=1
18 nm=26
19 paroff=8
20 sigoff=6
21 aoff=14
22 y0=0.36
23 dy=0.09
24 end
25
26 y6=dblarr(nm,310,40,nt)
27 y18=dblarr(nm+24,310,40,nt)
28 y36=dblarr(nm+60,310,40,nt)
29 par=dblarr(12+iasym,310,40,nt)
30 a0=dblarr(9,310,40)
31 names1=strarr(nt)
32 names2=strarr(nt)
33 nms6=lonarr(nt)
34 nms18=lonarr(nt)
35 nms36=lonarr(nt)
36 openr,1,'list'
37 for it=0,nt-1 do begin
38 nm6=0l
39 nm18=0l
40 nm36=0l
41 q='xxx'
42 readf,1,nm6,nm18,nm36,q
43 q1=str_sep(q,' ')
44 name1=q1(1)
45 name2=q1(2)
46 print,it,nm6,nm18,nm36,' ',name1,' ',name2
47 names1(it)=name1
48 names2(it)=name2
49 nms6(it)=nm6
50 nms18(it)=nm18
51 nms36(it)=nm36
52 q=dblarr(nm,nm6)
53 ; openr,2,'m'+name1+'q.'+name2
54 openr,2,'m'+name1+'q'
55 readf,2,q
56 close,2
57 for im=0,nm6-1 do y6(*,q(0,im),q(1,im),it)=q(*,im)
58 if (nm18 ne 0) then begin
59 q=dblarr(nm+24,nm18)
60 ; openr,2,'m'+name1+'q.'+name2+'.18'
61 openr,2,'m'+name1+'q.18'
62 readf,2,q
63 close,2
64 for im=0,nm18-1 do y18(*,q(0,im),q(1,im),it)=q(*,im)
65 end
66 if (nm36 ne 0) then begin
67 q=dblarr(nm+60,nm36)
68 ; openr,2,'m'+name1+'q.'+name2+'.36'
69 openr,2,'m'+name1+'q.36'
70 readf,2,q
71 close,2
72 for im=0,nm36-1 do y36(*,q(0,im),q(1,im),it)=q(*,im)
73 end
74 q=dblarr(12+iasym,4724)
75 ; openr,2,'par'+name1+'.'+name2
76 openr,2,'par'+name1
77 readf,2,q
78 close,2
79 wp=where((q(1,*) le 300) and (q(0,*) le 34),np)
80 for ip=0,np-1 do par(*,q(1,wp(ip)),q(0,wp(ip)),it)=q(*,wp(ip))
81 end
82 close,1
83
84 ; Get splittings pridicted from 360d inversion
85 q=dblarr(9,4627)
86 openr,1,idldir+'a0'
87 readf,1,q
88 close,1
89 wa=where((q(0,*) le 300) and (q(1,*) le 34),na)
90 for i=0,na-1 do a0(*,q(0,wa(i)),q(1,wa(i)))=q(*,wa(i))
91
92 nx=310l*40l*nt
93 y6=reform(y6,nm,nx,/overwrite)
94 y18=reform(y18,nm+24,nx,/overwrite)
95 y36=reform(y36,nm+60,nx,/overwrite)
96 par=reform(par,12+iasym,nx,/overwrite)
97 a0=reform(a0,9,310l*40l,/overwrite)
98
99 ; old code
100 ;a0x=reform(rebin(reform(a0,9,310l*40l,1),9,310l*40l,nt),9,nx)
101 a0x=reform(rebin(reform(a0,9,310l*40l,1),9,310l*40l,nt),9,310l,40l,nt)
102
103 df=1e6/72./86400.
104
105 l=reform(par(1,*))
106 n=reform(par(0,*))
107 f=reform(par(2,*))
108
109 mask0=intarr(nx)
110 mask0(where(y6(2,*) ne 0))=1
111
112 na=6
113 mask6=intarr(nx)
114 nmodes6=fix(total(y6[2,*] ne 0))
115 print,'nmodes6=',nmodes6
116 ; Toss modes more than 0.25 sigma away from input guess
117 w6=where(abs((y6(2,*)-par(2,*))/y6(2+sigoff,*)) le 0.25,nw6)
118 mask6(w6)=1
119 print,'modes6 rejected test1: ',nmodes6-nw6,nmodes6-nw6,nmodes6-nw6
120 ; Toss modes with large errors given width. Most likely low S/N.
121 ;wx=where(y6(2+sigoff,*)/y6(4,*)^0.5*(l+0.5)^0.5 ge 0.5,nwx)
122 ; remove hardcoding of 1/72d
123 wx=where(y6(2+sigoff,*)/y6(4,*)^0.5*(l+0.5)^0.5 ge 3*sqrt(binmics/2/!pi),nwx)
124
125 masktest=intarr(nx)+1
126 nwtest=0
127 if (nwx gt 0) then begin
128 masktest[wx]=0
129 wtest=where(masktest lt mask6,nwtest)
130 endif
131 if (nwx gt 0) then mask6(wx)=0
132 print,'modes6 rejected test2: ',nwtest,nwx,nmodes6-fix(total(mask6))
133
134 ; Factor to jack up errors for modes with measured widths less than 1/72d.
135 ;csig=reform(sqrt(0.16/y6(4,*)>1))
136 ; remove hardcoding of 1/72d
137 csig=reform(sqrt(binmics/y6(4,*)>1))
138
139 y6a=y6
140 y6a(2+sigoff,*)=y6(2+sigoff,*)*csig
141 for ia=0,na-1 do y6a(aoff+na+ia,*)=y6(aoff+na+ia,*)*csig
142
143 ; Toss modes more than 10 sigma away from prediction
144
145 ; old code
146 ;rx=dblarr(nx)
147 ;for ia=0,na-2,2 do rx=rx>abs((y6a(aoff+ia,*)-a0x(3+ia,*))/y6a(aoff+na+ia,*))
148 ;mask6(where(rx gt 10))=0
149
150 ; new code
151 y6a=reform(y6a,nm,310l,40,nt)
152 rx=dblarr(310l,40l,nt)
153 for it=0,nt-1 do begin
154 for ia=0,na-2,2 do begin
155 w0=where(y6a(2,*,0,it) ne 0)
156 mmm=median(y6a(aoff+ia,w0,0,it)-a0x(3+ia,w0,0,it))
157 q=reform(abs((y6a(aoff+ia,*,*,it)-a0x(3+ia,*,*,it)-mmm)/y6a(aoff+na+ia,*,*,it)))
158 wq=where(y6a(aoff+na+ia,*,*,it) eq 0,nwq)
159 if (nwq gt 0) then q[wq]=0
160 rx(*,*,it)=rx(*,*,it)>q
161 end
162 end
163 wq=where(rx gt 10,nq)
164 masktest=intarr(nx)+1
165 nwtest=0
166 if (nq gt 0) then begin
167 masktest[wq]=0
168 wtest=where(masktest lt mask6,nwtest)
169 endif
170 if (nq gt 0) then mask6(wq)=0
171 print,'modes6 rejected test3: ',nwtest,nq,nmodes6-fix(total(mask6))
172
173 ; Toss low freq isolated mode(s)
174 ;mask6(where(f le 900))=0
175 ; don't do this after all, rejects almost zero modes anyway
176 ; unclear how to generalize to longer timeseries
177
178 w6=where(mask6 eq 1)
179
180 na=18
181 mask18=mask6
182 mask18(where(y18(2,*) eq 0))=0
183 nmodes18=fix(total(y18[2,*] ne 0))
184 masktest=intarr(nx)+1
185 masktest[where(y18(2,*) eq 0)]=0
186 wtest=where(mask6 lt masktest,nwtest)
187 print,'nmodes18=',nmodes18
188 print,'modes18 rejected from test4: ',nwtest,nwtest,nmodes18-fix(total(mask18))
189
190 y18a=y18
191 y18a(2+sigoff,*)=y18(2+sigoff,*)*csig
192 for ia=0,na-1 do y18a(aoff+na+ia,*)=y18(aoff+na+ia,*)*csig
193
194 ; Toss modes with much larger errors or large changes from 6 a-coeff case.
195 ry=reform(abs((y18(2,*)-y6(2,*))/y18a(2+sigoff,*)))
196 for ia=0,5 do ry=ry>reform(abs((y18(aoff+ia,*)-y6(aoff+ia,*))/y18a(aoff+na+ia)))
197 sy=reform(y18(2+sigoff,*)/y6(2+sigoff,*))
198 for ia=0,5 do sy=sy>reform(y18(aoff+na+ia,*)/y6(aoff+6+ia,*))
199 wy=where((ry ge 2) or (sy ge 2),nwy)
200 masktest=intarr(nx)+1
201 nwtest=0
202 if (nwy gt 0) then begin
203 masktest[wy]=0
204 wtest=where(masktest lt mask18,nwtest)
205 endif
206 if (nwy ne 0) then mask18(wy)=0
207 print,'modes18 rejected from test5: ',nwtest,nwy,nmodes18-fix(total(mask18))
208
209 w18=where(mask18 eq 1)
210
211 na=36
212 mask36=mask18
213 mask36(where(y36(2,*) eq 0))=0
214 nmodes36=fix(total(y36[2,*] ne 0))
215 masktest=intarr(nx)+1
216 masktest[where(y36(2,*) eq 0)]=0
217 wtest=where(mask18 lt masktest,nwtest)
218 print,'nmodes36=',nmodes36
219 print,'modes36 rejected from test6: ',nwtest,nwtest,nmodes36-fix(total(mask36))
220
221 y36a=y36
222 y36a(2+sigoff,*)=y36(2+sigoff,*)*csig
223 for ia=0,na-1 do y36a(aoff+na+ia,*)=y36(aoff+na+ia,*)*csig
224
225 ; Toss modes with much larger errors or large changes from 6 a-coeff case.
226 rz=reform(abs((y36(2,*)-y6(2,*))/y36a(2+sigoff,*)))
227 for ia=0,5 do rz=rz>reform(abs((y36(aoff+ia,*)-y6(aoff+ia,*))/y36a(aoff+na+ia)))
228 sz=reform(y36(2+sigoff,*)/y6(2+sigoff,*))
229 for ia=0,5 do sz=sz>reform(y36(aoff+na+ia,*)/y6(aoff+6+ia,*))
230 wz=where((rz ge 2) or (sz ge 2),nwz)
231 masktest=intarr(nx)+1
232 nwtest=0
233 if (nwz gt 0) then begin
234 masktest[wz]=0
235 wtest=where(masktest lt mask36,nwtest)
236 endif
237 if (nwz ne 0) then mask36(wz)=0
238 print,'modes36 rejected from test7: ',nwtest,nwz,nmodes36-fix(total(mask36))
239
240 w36=where(mask36 eq 1)
241
242 ; Write things out
243 na=6
244 y6a=reform(y6a,aoff+2*na,310l,40l,nt,/overwrite)
245 mask6=reform(mask6,310l,40l,nt,/overwrite)
246
247 for it=0,nt-1 do begin
248 openw,1,'m'+names1(it)+'qr.'+names2(it)
249 for il=0l,310l-1 do begin
250 for in=0l,40l-1 do begin
251 if (iasym eq 0) then begin
252 if (mask6(il,in,it) eq 1) then printf,1,y6a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)'
253 endif else begin
254 if (mask6(il,in,it) eq 1) then printf,1,y6a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)'
255 end
256 end
257 end
258 close,1
259 end
260
261 for it=0,nt-1 do begin
262 openw,1,'freq'+names1(it)+'qr.'+names2(it)
263 for il=0l,310l-1 do begin
264 for in=0l,40l-1 do begin
265 if (mask6(il,in,it) eq 1) then printf,1,y6a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)'
266 end
267 end
268 close,1
269 end
270
271 i1=[0,1,2,aoff+2*lindgen(na)]
272 for it=0,nt-1 do begin
273 openw,1,'split'+names1(it)+'qr.'+names2(it)
274 for il=1l,310l-1 do begin
275 for in=0l,40l-1 do begin
276 if (mask6(il,in,it) eq 1) then printf,1,y6a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)'
277 end
278 end
279 close,1
280 end
281
282 i1=[0,1,2,aoff+1+2*lindgen(na)]
283 for it=0,nt-1 do begin
284 openw,1,'splite'+names1(it)+'qr.'+names2(it)
285 for il=1l,310l-1 do begin
286 for in=0l,40l-1 do begin
287 if (mask6(il,in,it) eq 1) then printf,1,y6a(i1,il,in,it),format='(2i4,f10.4,99g14.6)'
288 end
289 end
290 close,1
291 end
292
293 for it=0,nt-1 do begin
294 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.2d'
295 for il=1l,310l-1 do begin
296 for in=0l,40l-1 do begin
297 if (mask6(il,in,it) eq 1) then begin
298 for ia=0,na-2,2 do begin
299 if y6a(aoff+na+ia,il,in,it) ne 0 then begin
300 printf,1,y6a([0,1,2],il,in,it),ia/2+1,3,na/2,y6a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)'
301 end
302 end
303 end
304 end
305 end
306 close,1
307 end
308
309 na=18
310 y18a=reform(y18a,aoff+2*na,310l,40l,nt,/overwrite)
311 mask18=reform(mask18,310l,40l,nt,/overwrite)
312
313 for it=0,nt-1 do begin
314 if (nms18(it) ne 0) then begin
315 openw,1,'m'+names1(it)+'qr.'+names2(it)+'.18'
316 for il=0l,310l-1 do begin
317 for in=0l,40l-1 do begin
318 if (iasym eq 0) then begin
319 if (mask18(il,in,it) eq 1) then printf,1,y18a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)'
320 endif else begin
321 if (mask18(il,in,it) eq 1) then printf,1,y18a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)'
322 end
323 end
324 end
325 close,1
326 end
327 end
328
329 for it=0,nt-1 do begin
330 if (nms18(it) ne 0) then begin
331 openw,1,'freq'+names1(it)+'qr.'+names2(it)+'.18'
332 for il=0l,310l-1 do begin
333 for in=0l,40l-1 do begin
334 if (mask18(il,in,it) eq 1) then printf,1,y18a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)'
335 end
336 end
337 close,1
338 end
339 end
340
341 i1=[0,1,2,aoff+2*lindgen(na)]
342 for it=0,nt-1 do begin
343 if (nms18(it) ne 0) then begin
344 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.18'
345 for il=1l,310l-1 do begin
346 for in=0l,40l-1 do begin
347 if (mask18(il,in,it) eq 1) then printf,1,y18a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)'
348 end
349 end
350 close,1
351 end
352 end
353
354 i1=[0,1,2,aoff+1+2*lindgen(na)]
355 for it=0,nt-1 do begin
356 if (nms18(it) ne 0) then begin
357 openw,1,'splite'+names1(it)+'qr.'+names2(it)+'.18'
358 for il=1l,310l-1 do begin
359 for in=0l,40l-1 do begin
360 if (mask18(il,in,it) eq 1) then printf,1,y18a(i1,il,in,it),format='(2i4,f10.4,99g14.6)'
361 end
362 end
363 close,1
364 end
365 end
366
367 for it=0,nt-1 do begin
368 if (nms18(it) ne 0) then begin
369 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.18.2d'
370 for il=1l,310l-1 do begin
371 for in=0l,40l-1 do begin
372 if (mask18(il,in,it) eq 1) then begin
373 for ia=0,na-2,2 do begin
374 if y18a(aoff+na+ia,il,in,it) ne 0 then begin
375 printf,1,y18a([0,1,2],il,in,it),ia/2+1,3,na/2,y18a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)'
376 end
377 end
378 end
379 end
380 end
381 close,1
382 end
383 end
384
385 na=36
386 y36a=reform(y36a,aoff+2*na,310l,40l,nt,/overwrite)
387 mask36=reform(mask36,310l,40l,nt,/overwrite)
388
389 for it=0,nt-1 do begin
390 if (nms36(it) ne 0) then begin
391 openw,1,'m'+names1(it)+'qr.'+names2(it)+'.36'
392 for il=0l,310l-1 do begin
393 for in=0l,40l-1 do begin
394 if (iasym eq 0) then begin
395 if (mask36(il,in,it) eq 1) then printf,1,y36a(*,il,in,it),format='(2i4,f10.4,f10.4,4f8.4,2f9.4,f10.4,f9.4,f11.4,99g14.6)'
396 endif else begin
397 if (mask36(il,in,it) eq 1) then printf,1,y36a(*,il,in,it),format='(2i4,f10.4,f10.4,3f8.4,g14.6,f8.4,2f9.4,f10.4,f9.4,g14.6,f11.4,99g14.6)'
398 end
399 end
400 end
401 close,1
402 end
403 end
404
405 for it=0,nt-1 do begin
406 if (nms36(it) ne 0) then begin
407 openw,1,'freq'+names1(it)+'qr.'+names2(it)+'.36'
408 for il=0l,310l-1 do begin
409 for in=0l,40l-1 do begin
410 if (mask36(il,in,it) eq 1) then printf,1,y36a([0,1,2,2+sigoff],il,in,it),format='(2i4,f10.4,f8.4)'
411 end
412 end
413 close,1
414 end
415 end
416
417 i1=[0,1,2,aoff+2*lindgen(na)]
418 for it=0,nt-1 do begin
419 if (nms36(it) ne 0) then begin
420 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36'
421 for il=1l,310l-1 do begin
422 for in=0l,40l-1 do begin
423 if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)'
424 end
425 end
426 close,1
427 end
428 end
429
430 i1=[0,1,2,aoff+2*lindgen(na)]
431 for it=0,nt-1 do begin
432 if (nms36(it) ne 0) then begin
433 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36f'
434 for il=1l,310l-1 do begin
435 for in=0l,0l do begin
436 if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,f10.4,99g14.6)'
437 end
438 end
439 close,1
440 end
441 end
442
443 i1=[0,1,2,aoff+1+2*lindgen(na)]
444 for it=0,nt-1 do begin
445 if (nms36(it) ne 0) then begin
446 openw,1,'splite'+names1(it)+'qr.'+names2(it)+'.36'
447 for il=1l,310l-1 do begin
448 for in=0l,40l-1 do begin
449 if (mask36(il,in,it) eq 1) then printf,1,y36a(i1,il,in,it),format='(2i4,f10.4,99g14.6)'
450 end
451 end
452 close,1
453 end
454 end
455
456 for it=0,nt-1 do begin
457 if (nms36(it) ne 0) then begin
458 openw,1,'split'+names1(it)+'qr.'+names2(it)+'.36.2d'
459 for il=1l,310l-1 do begin
460 for in=0l,40l-1 do begin
461 if (mask36(il,in,it) eq 1) then begin
462 for ia=0,na-2,2 do begin
463 if y36a(aoff+na+ia,il,in,it) ne 0 then begin
464 printf,1,y36a([0,1,2],il,in,it),ia/2+1,3,na/2,y36a([aoff+ia,aoff+na+ia],il,in,it),format='(i4,i3,f8.2,i4,i2,i3,2g14.6)'
465 end
466 end
467 end
468 end
469 end
470 close,1
471 end
472 end
473
474 end
475