pro vlist @compile_opt.pro ; On error, return to caller root = filepath(root=getenv('DAT'), subdir=['nagoya','yearly'],'') year = 2000 yr = strcompress(year, /rem) old = filepath(root=root, 'nagoya_bad.'+yr) new = filepath(root=root, 'japan'+yr+'.ips') ; Read the old nagoya ips file openr, /get_lun, iu, old str = '' ips_old = strarr(25000) i = -1 repeat begin readf, iu, str i = i+1 ips_old[i] = str endrep until eof(iu) free_lun, iu ips_old = ips_old[0:i] ; Read the new nagoya ips file openr, /get_lun, iu, new str = '' ips_new = strarr(25000) i = -1 repeat begin readf, iu, str if strmid(str,0,1) ne ';' then begin i = i+1 ips_new[i] = str endif endrep until eof(iu) free_lun, iu ips_new = ips_new[0:i] whatis, ips_old, ips_new ;1915-121 991219 4.45 0.41 22 -63 28 115 1957 -999-999 0.85487 fmt_old = '(A9,3I2,F6.2,F5.2,I4,I5,I4,3I5,I4,F8.5)' gchar = [58,65] ;1524-13 991121 2.55 0.12 41 80 34 269 1956 638 235 0.828E+03 fmt_new = '(A9,3I2,F6.2,F5.2,I4,I5,I4,3I5,I4,E10.3)' schar = [58,67] vchar = [49,57] name = '' yr = 0 mon = 0 day = 0 a = 0.0 b = 0.0 c = 0 d = 0 e = 0 f = 0 g = 0 v = 0 h = 0 g = 0.0 s = 0.0 n = n_elements(ips_old) name1 = strarr(n) yr1 = intarr(n) mon1 = intarr(n) day1 = intarr(n) a1 = fltarr(n) b1 = fltarr(n) c1 = intarr(n) d1 = intarr(n) e1 = intarr(n) f1 = intarr(n) g1 = intarr(n) v1 = intarr(n) h1 = intarr(n) g1 = fltarr(n) for i=0,n-1 do begin reads, ips_old[i], format=fmt_old, name, yr,mon,day,a,b,c,d,e,f,g,v,h,g name1[i]= name yr1[i] = yr mon1[i] = mon day1[i] = day a1[i] = a b1[i] = b c1[i] = c d1[i] = d e1[i] = e f1[i] = f g1[i] = g v1[i] = v h1[i] = h g1[i] = g endfor n = n_elements(ips_new) name2 = strarr(n) yr2 = intarr(n) mon2 = intarr(n) day2 = intarr(n) a2 = fltarr(n) b2 = fltarr(n) c2 = intarr(n) d2 = intarr(n) e2 = intarr(n) f2 = intarr(n) g2 = intarr(n) v2 = intarr(n) h2 = intarr(n) s2 = fltarr(n) for i=0,n-1 do begin reads, ips_new[i], format=fmt_new, name, yr,mon,day,a,b,c,d,e,f,g,v,h,s name2[i]= name yr2[i] = yr mon2[i] = mon day2[i] = day a2[i] = a b2[i] = b c2[i] = c d2[i] = d e2[i] = e f2[i] = f g2[i] = g v2[i] = v h2[i] = h s2[i] = s endfor yr1 = fix2digityear(yr1) yr2 = fix2digityear(yr2) told = TimeSet(yr=yr1, mon=mon1, day=day1, hour=a1) tnew = TimeSet(yr=yr2, mon=mon2, day=day2, hour=a2) told = TimeGet(told, /njd) tnew = TimeGet(tnew, /njd) nold = n_elements(told) nnew = n_elements(tnew) print, 'old file ',old i = where(g1 ne 0.0, ni) print, 'good g : ', ni, '/', nold i = where(v1 ne -999, ni) print, 'good v : ', ni, '/', nold print, 'new file ',new i = where(v2 ne -999, ni) print, 'good v : ', ni, '/', nnew for i=0,nold-1 do begin iname = where(name1[i] eq name2) if iname[0] eq -1 then begin iname = where(name1[i] eq name1, ns) print, 'no matching source in new file: ',name1[i], '(',ns,')' endif endfor for i=0,nnew-1 do begin iname = where(name2[i] eq name1) if iname[0] eq -1 then begin iname = where(name2[i] eq name2, ns) print, 'no matching source in old file: ',name2[i], '(',ns,')' endif endfor match1 = intarr(nold)-1 match2 = intarr(nnew)-1 for i=0,nold-1 do begin iname = where(name1[i] eq name2, nsrce) if iname[0] ne -1 then begin tdiff = abs(tnew[iname]-told[i]) tmp = min(tdiff,itmp) if tmp le 0.5 then begin if n_elements(maxdiff) eq 0 then maxdiff = tmp else maxdiff = maxdiff > tmp if n_elements(iname) gt 1 then begin other = where( indgen(nsrce) ne itmp ) other = iname[other] next_diff = min( abs(tnew[other]-told[i]) ) if next_diff lt 0.5 then message, /info, 'bummer: two matches' endif tdiff = tdiff[itmp] i_new = iname[itmp] if match2[i_new] ne -1 then begin print, ips_old[i] print, ips_old[match2[i_new]] print, ips_new[i_new] message, 'bummer' endif match1[i ] = i_new match2[i_new] = i endif endif endfor ; ips_new contains scintillation index instead of g-level ; If an ips_new obs was matched with one in ips_old ; copy the g-level from ips_old to ips_new. If no match ; was found set the g-level to zero for i=0,nnew-1 do begin ips_new[i] = strmid(ips_new[i],0,schar[0]) ; Drop scintillation index case match2[i] eq -1 of 0: ips_new[i] = ips_new[i]+strmid(ips_old[match2[i]],gchar[0],gchar[1]-gchar[0]+1) 1: ips_new[i] = ips_new[i]+' 0.00000' endcase endfor print, 'new vlist file for', year print, round(total( match2 ne -1 )),'/',nnew,' sources matched print, 'max. time difference =', maxdiff*24*50,' minutes' i = where(match2 ne -1) ii = i oldg = g1[ match2[i] ] oldv = v1[ match2[i] ] newv = v2[ i ] i = where(oldg ne 0.0, ni) print, 'copied old g ok : ', ni i = where(oldv eq -999 and newv eq -999,ni) print, 'old and new v bad : ', ni i = where(oldv ne -999 and newv eq -999,ni) print, 'old v ok but new v bad: ', ni i = where(oldv eq -999 and newv ne -999,ni) print, 'old v bad but new v ok: ', ni i = where(oldv ne -999 and newv ne -999,ni) dv = newv[i]-oldv[i] print, 'old and new v ok : ', ni print, 'dv = ',mean(dv),' sig(dv) = ', stddev(dv) ;j = where(abs (dv) gt 1000) ;print, dv[j] ;print, ips_new[ ii[i[j] ] ] qbar, /histo, dv return i = where(match2 eq -1) newv = v2[ i ] i = where(newv ne -999,ni) print, 'unmatched new v ok : ', ni, '/', n_elements(newv) for i=0,nold-1 do $ if match1[i] eq -1 then $ ips_old[i] = strmid(ips_old[i],0,vchar[0])+' -999-999'+strmid(ips_old[i],vchar[1]+1) ;print, nold, nnew ;print, round( total( match1 ne -1 ) ), round( total( match2 ne -1 ) ) i = sort(tnew) tnew = tnew[i] ips_new = ips_new[i] yr = strcompress(year, /rem) redo = filepath(root=root, 'nagoya_new_plusg.'+yr) openw, /get_lun, iu, redo for i=0,nnew-1 do printf, iu, ips_new[i] free_lun, iu print, 'new file, plus g ',redo i = where( strmid(ips_new,gchar[0], gchar[1]-gchar[0]+1) ne ' 0.00000', ni) print, 'good g : ', ni, '/', nnew i = where( strmid(ips_new,vchar[0], vchar[1]-vchar[0]+1) ne ' -999-999', ni) print, 'good v : ', ni, '/', nnew add = where(match1 eq -1, nadd) if nadd ne 0 then begin i = where(g1[add] ne 0.0,ni) print, 'unmatched good old g : ', ni,'/',nadd tnew = [tnew, told[add]] ips_new = [ips_new, ips_old[add]] i = sort(tnew) tnew = tnew[i] ips_new = ips_new[i] yr = strcompress(year, /rem) redo = filepath(root=root, 'nagoya_old_new.'+yr) openw, /get_lun, iu, redo for i=0,nnew+nadd-1 do printf, iu, ips_new[i] free_lun, iu print, 'new file, plus g, plus old unmatched g ',redo i = where( strmid(ips_new,gchar[0], gchar[1]-gchar[0]+1) ne ' 0.00000', ni) print, 'good g : ', ni, '/', nnew+nadd i = where( strmid(ips_new,vchar[0], vchar[1]-vchar[0]+1) ne ' -999-999', ni) print, 'good v : ', ni, '/', nnew+nadd endif return & end