%sFtpRead_binAnn %obtain annotation from ISHNE binary ann file % %in------------------------------------------------------------------------ %fileName: the ishne binary annotation filename including the path %sFtpClient: a Java SFTPv3Client object (instance of sftp client class) %endPos: number of ecg samples for which the annotation is the be read % %out----------------------------------------------------------------------- %ishneHeader: ishne header info %Ann: annotation of the beats %Rloc: R peak location %########################################################################## function [ihsneHeader, Ann, Rloc, RR]= sFtpRead_binAnn(fileName, sFtpClient, endPos); fid = sFtpFopen(fileName, sFtpClient); if ne(fid,-1) %Magic number magicNumber = sFtpFread( fid, sFtpClient, 8, 'uchar'); % get checksum checksum = sFtpFread( fid, sFtpClient, 1, 'uint16'); %read header Var_length_block_size = sFtpFread( fid, sFtpClient, 1, 'long'); ihsneHeader.Sample_Size_ECG = sFtpFread( fid, sFtpClient, 1, 'long'); Offset_var_lenght_block = sFtpFread( fid, sFtpClient, 1, 'long'); Offset_ECG_block = sFtpFread( fid, sFtpClient, 1, 'long'); File_Version = sFtpFread( fid, sFtpClient, 1, 'short'); First_Name = sFtpFread( fid, sFtpClient, 40, 'uchar'); Last_Name = sFtpFread( fid, sFtpClient, 40, 'uchar'); ID = sFtpFread( fid, sFtpClient, 20, 'uchar'); Sex = sFtpFread( fid, sFtpClient, 1, 'short'); Race = sFtpFread( fid, sFtpClient, 1, 'short'); Birth_Date = sFtpFread( fid, sFtpClient, 3, 'short'); Record_Date = sFtpFread( fid, sFtpClient, 3, 'short'); File_Date = sFtpFread( fid, sFtpClient, 3, 'short'); Start_Time = sFtpFread( fid, sFtpClient, 3, 'short'); ihsneHeader.nbLeads = sFtpFread( fid, sFtpClient, 1, 'short'); Lead_Spec = sFtpFread( fid, sFtpClient, 12, 'short'); Lead_Qual = sFtpFread( fid, sFtpClient, 12, 'short'); ihsneHeader.Resolution = sFtpFread( fid, sFtpClient, 12, 'short'); Pacemaker = sFtpFread( fid, sFtpClient, 1, 'short'); Recorder = sFtpFread( fid, sFtpClient, 40, 'uchar'); ihsneHeader.Sampling_Rate = sFtpFread( fid, sFtpClient, 1, 'short'); Proprietary = sFtpFread( fid, sFtpClient, 80, 'uchar'); Copyright = sFtpFread( fid, sFtpClient, 80, 'uchar'); Reserved = sFtpFread( fid, sFtpClient, 88, 'uchar'); % read variable_length block if Var_length_block_size > 0 varblock = sFtpFread( fid, sFtpClient, Var_length_block_size, 'char'); end % read first location loc = sFtpFread( fid, sFtpClient, 1, 'int32'); % get number of beats currentPosition = sFtpFtell(sFtpClient); endPosition = sFtpFseek(fid, sFtpClient, 0, 'eof'); numBeat = (endPosition-currentPosition)/4; sFtpFseek(fid, sFtpClient, currentPosition - endPosition, 'eof'); for i = 1:numBeat Ann(i) = sFtpFread( fid, sFtpClient, 1, 'uchar'); internalUse = sFtpFread( fid, sFtpClient, 1, 'uchar'); RR(i) = sFtpFread( fid, sFtpClient, 1, 'uint16'); loc = int32(RR(i)) + loc; Rloc(i) = loc; if (Rloc(i) > endPos) break; end end sFtpFclose(fid, sFtpClient); else ihsneHeader = []; Ann = []; Rloc = []; RR = []; end