fread = function(fname, n=800000) { con = file(fname, 'rb') u = readBin(con, 'int', size=2, n=n) close(con) u } fread_sparse = function(fname, n=100000, bsize=100000) { con = file(fname, 'rb') seek(con, 0, 'end') size = seek(con, 0, 'start') if( size <= 2 * n ) { u = readBin(con, 'int', size=2, n = 2 * size) close(con) i = 1:length(u) return(data.frame(i, u)) } i = floor(.5 * (0:(n-1)/n) * size) inext = 0 ioffs = 0 u = rep(0, n) for(k in 1:n) { if( i[k] >= inext ) { seek(con, 2 * i[k]) buff = readBin(con, 'int', size=2, n=bsize) ioffs = i[k] inext = inext + bsize } u[k] = buff[i[k] - ioffs + 1] } close(con) rm(buff) data.frame(i, u) } fcut = function(fname, oname=paste(fname, 'cut', sep='.')) { d = fread_sparse(fname) plot(d, pch='.') print("click on region boundaries") roi = locator(2) x = sort(floor(roi$x)) print(sprintf("Y-Level: %.1f)", mean(roi$y))) con = file(fname, 'rb') out = file(oname, 'wb') size = diff(x) seek(con, 2 * x[1]) while( size > 0 ) { bsize = min(size, 100000) buff = readBin(con, 'int', size=2, n = bsize) writeBin(buff, out, size=2) size = size - bsize } rm(buff) close(con) close(out) print(oname) } roi_ffid = function(fname,oname=paste(fname, 'cut', sep='.')) { fcut(fname, oname) d=readBin(oname, 'int', size=2, n=1e5) ffid(d, 1/8000) } fanal = function(fname, n=100000) { d = fread_sparse(fname, n) par(xaxs='i') plot(d, t='l') tdev = dev.cur() fdev = -1 con = file(fname, 'rb') while( TRUE ) { dev.set(tdev) print("click on region boundaries") roi = locator(2) if( class(roi) == "NULL" ) break; if( length(roi$x) != 2 ) continue; x = sort(floor(roi$x)) print(sprintf("Y-Level: %.1f)", mean(roi$y))) seek(con, 2 * x[1]) d = readBin(con, 'int', size=2, n=x[2]-x[1]) writeBin(d, sprintf('%s.roi', fname), size=2) if( fdev < 0 ) { x11() par(xaxs='i') fdev = dev.cur() } else { dev.set(fdev) } print("click on frequencies") freq = ffid(d, 1/8000, xlim=c(0,3000)) print(freq) } close(con) dev.set(tdev) }