Skip to content

Instantly share code, notes, and snippets.

@dzonesasaki
Created June 24, 2014 03:37
Show Gist options
  • Save dzonesasaki/a54018d6f737d5c85562 to your computer and use it in GitHub Desktop.
Save dzonesasaki/a54018d6f737d5c85562 to your computer and use it in GitHub Desktop.
isf read
function [rtnData, headData] = isfread (filename)
% * Written 1/25/2009 by Wenwei Qiao *
% * modified by Dzone 140624_10:40 *
fileID = fopen(filename,'r');
% read ASCII header
header_tmp = fread(fileID, 500)';
header = char(header_tmp);
headData = parseHead(header);
fseek(fileID, 0, 'eof');
dataOffset = - headData.NR_P*headData.BYT_N;
fseek(fileID, dataOffset, 'cof');
if (headData.BYT_N==1)
inData = fread(fileID, headData.NR_P, 'int8');
else
inData = fread(fileID, headData.NR_P, 'int16', 'ieee-be');
end
fclose(fileID);
lowerXLimit = headData.XZE;
upperXLimit = ((headData.NR_P-1)* headData.XIN + headData.XZE);
rtnData.x = [lowerXLimit : headData.XIN : upperXLimit]';
rtnData.y = headData.YMU*(inData-headData.YOF) + headData.YZE;
% parseHead - used to parse and convert the header data into a more
% useful structure.
function headData = parseHead(header)
headData.NR_P = getParamNum(header, 'NR_PT' );
headData.BYT_N = getParamNum(header, 'BYT_NR' );
headData.BIT_N = getParamNum(header, 'BIT_NR' );
headData.XIN = getParamNum(header, 'XINCR' );
headData.XZE = getParamNum(header, 'XZERO' );
headData.PT_O = getParamNum(header, 'PT_OFF' );
headData.YMU = getParamNum(header, 'YMULT' );
headData.YOF = getParamNum(header, 'YOFF' );
headData.YZE = getParamNum(header, 'YZERO' );
headData.YSCALE = getParamNum(header, 'VSCALE' );
headData.HSCALE = getParamNum(header, 'HSCALE' );
headData.YPOS = getParamNum(header, 'VPOS' );
headData.YOFFSET = getParamNum(header, 'VOFFSET' );
headData.HDELAY = getParamNum(header, 'HDELAY' );
headData.ENC = getParamStr(header, 'ENCDG', ';');
headData.BN_F = getParamStr(header, 'BN_FMT', ';');
headData.BYT_O = getParamStr(header, 'BYT_OR', ';');
headData.WFI = getParamStr(header, 'WFID', '"');
headData.PT_F = getParamStr(header, 'PT_FMT', ';');
headData.XUN = getParamStr(header, 'XUNIT', '"');
headData.YUN = getParamStr(header, 'YUNIT', '"');
headData.CURV = getCurvNum(header);
function rtnNum = getParamNum (headStr, cmdStr)
cmdLoc = findstr(headStr, cmdStr);
if (cmdLoc)
headStr_tmp = headStr(cmdLoc(1)+length(cmdStr)+1 : length(headStr)) ;
[tmp, remJunk] = strtok(headStr_tmp,';') ;
rtnNum = str2num(tmp);
else
rtnNum =[];
end
function rtnStr = getParamStr(headStr, cmdStr, dlm)
cmdLoc = findstr(headStr, cmdStr);
if (cmdLoc)
headStr_tmp = headStr(cmdLoc(1)+length(cmdStr)+1 : length(headStr)) ;
[rtnStr,remStr] = strtok(headStr_tmp, dlm) ;
else
rtnStr=[];
end
function rtnNum = getCurvNum (headStr)
cmdStr='CURV #';
cmdLoc = findstr(headStr, cmdStr);
if (cmdLoc)
headStr_tmp = headStr(cmdLoc(1)+length(cmdStr) : length(headStr)) ;
curvNum_tmp = headStr_tmp(1);
curvNum = str2num(curvNum_tmp);
tmp = headStr_tmp(2:curvNum+1) ;
rtnNum = str2num(tmp);
else
rtnNum=[];
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment