Waveform Database Software Package (WFDB) for MATLAB and Octave 0.10.0
(7,670 bytes)
function [varargout]=wfdbloadlib(varargin)
%
% [isloaded,config]=wfdbloadlib(debugLevel,networkWaitTime)
%
% Loads the WDFDB libarary if it has not been loaded already into the
% MATLAB classpath. And optionally prints configuration environment and debug information
% regarding the settings used by the classes in the JAR file.
%
% Inputs:
%
% debugLevel
% (Optional) 1x1 integer between 0 and 5 represeting the level of debug information to output from
% Java class when output configuration information. Level 0 (no debug information),
% level =5 is maximum level of information output by the class (logger set to finest). Default is level 0.
%
% networkWaitTime
% (Optional) 1x1 integer representing the longest time in
% milliseconds for which the JVM should wait for a data stream from
% PhysioNet (default is =1000 , ie one second). If you need to change this time to a
% longer value across the entire toolbox, it is better modify to default value in the source
% code below and restart MATLAB.
%
%
% Written by Ikaro Silva, 2013
% Last Modified: April 7, 2015
% Since 0.0.1
%
%
%endOfHelp
mlock;
persistent isloaded wfdb_path wfdb_native_path config
%%%%% SYSTEM WIDE CONFIGURATION PARAMETERS %%%%%%%
%%% Change these values for system wide configuration of the WFDB binaries
%If you are using your own custom version of the WFDB binaries, set this to true
%NOTE: this parameter is completely ignored if the 'WFDB_COMMAND_PATH' parameter
%described above is set (i.e.: the library will used the WFDB commands located
% according to the path in 'WFDB_COMMAND_PATH').
%You will need to restart MATLAB/Octave if to sync the changes.
%The default is to used commands shipped with the toolbox, this location can be obtained by running the command:
%[~,config]=wfdbloadlib; config.WFDB_NATIVE_BIN
WFDB_CUSTOMLIB=0;
%WFDB_PATH: If empty, will use the default given config.WFDB_PATH
%this is where the toolbox searches for data files (*.dat, *.hea etc).
%When unistalling the toolbox, you may wish to clear this directory to save space.
%See http://www.physionet.org/physiotools/wag/setwfd-1.htm for more details.
WFDB_PATH=[];
%WFDBCAL: If empty, will use the default giveng confing.WFDBCAL
%The WFDB library require calibration data in order to convert between sample values
%(expressed in analog-to-digital converter units, or adus) and physical units.
%See http://www.physionet.org/physiotools/wag/wfdbca-5.htm for more details.
WFDBCAL=[];
%CACHE: If CACHE==1, the toolbox will attemp to download data from
%CACHE_SOURCE to CACHE_DEST if the record is not found no the standard
%WFDB PATH. Change CACHE_DEST path to a PhysioNet mirror, if you wish to
%use a server closer to your geographical location. It is safe to delete files on
%CACHE_SOURCE, as they can be re-downloaded if need me.
CACHE=1; %Default is to use the cache system
CACHE_SOURCE=[]; %If empty, defaults to last element of WFDB_PATH
CACHE_DEST=[]; %If empty, defaults to WFDB_JAVA_HOME/../database
%debugLevel: Ouput JVM information while running commands
debugLevel=0;
%networkWaitTime: Setting maximum waiting period for fetching data from
%PhysioNet servers (default location: http://physionet.org/physiobank).
networkWaitTime=1000;
%%%% END OF SYSTEM WIDE CONFIGURATION PARAMETERS
inputs={'debugLevel','networkWaitTime'};
for n=1:nargin
if(~isempty(varargin{n}))
eval([inputs{n} '=varargin{n};']);
end
end
inOctave=is_octave;
fsep=filesep;
if(ispc && inOctave)
fsep=['\\']; %Need to escape '\' for regexp in Octave and Windows
end
if(isempty(isloaded))
jar_path=which('wfdbloadlib');
cut=strfind(jar_path,'wfdbloadlib.m');
wfdb_path=jar_path(1:cut-1);
if(~inOctave)
ml_jar_version=version('-java');
else
%In Octave
ml_jar_version=javaMethod('getProperty','java.lang.System','java.version');
ml_jar_version=['Java ' ml_jar_version];
end
%Check if path has not been added yet
wfdb_path=[wfdb_path 'wfdb-app-JVM7-0-10-0.jar'];
javaaddpath(wfdb_path);
isloaded=1;
%Check if there are any empty space on the path directory, and
%issue a warning if there is
warnMe=strfind(wfdb_path,' ');
if(~isempty(warnMe))
warning('Your WFDB Toolbox installation path contain white spaces!! This may cause issues with the WFDB Toolbox!');
warning(['The installation path is set to: ' wfdb_path]);
end
end
%set configuration
if(isempty(config))
config.MATLAB_VERSION=version;
config.inOctave=inOctave;
if(inOctave)
javaWfdbExec=javaObject('org.physionet.wfdb.Wfdbexec','wfdb-config',WFDB_CUSTOMLIB);
javaWfdbExec.setLogLevel(debugLevel);
config.WFDB_VERSION=char(javaMethod('execToStringList',javaWfdbExec,{'--version'}));
else
javaWfdbExec=org.physionet.wfdb.Wfdbexec('wfdb-config',WFDB_CUSTOMLIB);
javaWfdbExec.setLogLevel(debugLevel);
config.WFDB_VERSION=char(javaWfdbExec.execToStringList('--version'));
end
env=regexp(char(javaWfdbExec.getEnvironment),',','split');
for e=1:length(env)
tmpstr=regexp(env{e},'=','split');
varname=strrep(tmpstr{1},'[','');
varname=strrep(varname,' ','');
varname=strrep(varname,']','');
eval(['config.' varname '=''' tmpstr{2} ''';']);
end
config.MATLAB_PATH=strrep(which('wfdbloadlib'),'wfdbloadlib.m','');
wver=regexp(wfdb_path,fsep,'split');
config.WFDB_JAVA_VERSION=wver{end};
config.DEBUG_LEVEL=debugLevel;
config.NETWORK_WAIT_TIME=networkWaitTime;
config.MATLAB_ARCH=computer('arch');
%Remove empty spaces from arch name
del=strfind(config.osName,' ');
config.osName(del)=[];
%Define WFDB Environment variables
if(isempty(WFDB_PATH))
tmpCache=[config.MATLAB_PATH '..' filesep 'database' filesep];
WFDB_PATH=['. ' tmpCache ' http://physionet.org/physiobank/database/'];
end
if(isempty(WFDBCAL))
WFDBCAL=[config.WFDB_JAVA_HOME fsep 'database' fsep 'wfdbcal'];
end
config.WFDB_PATH=WFDB_PATH;
config.WFDBCAL=WFDBCAL;
config.WFDB_CUSTOMLIB=WFDB_CUSTOMLIB;
warnMe=strfind(wfdb_path,' ');
if(~isempty(warnMe))
warning('Your WFDB Toolbox installation path contain white spaces!! This may cause issues with the WFDB Toolbox!');
end
%Set CACHE configurations
if(isempty(CACHE_SOURCE) && CACHE)
ind=strfind(config.WFDB_PATH,'http');
if(~isempty(ind))
CACHE_SOURCE=config.WFDB_PATH(ind:end);
else
warning(['Could not set CACHE, CACHE_SOURCE invalid']);
CACHE=0;
end
end
config.CACHE_SOURCE=CACHE_SOURCE;
if(isempty(CACHE_DEST) && CACHE)
CACHE_DEST=[config.MATLAB_PATH '..' filesep 'database' filesep];
if(~isdir(CACHE_DEST))
mkdir(CACHE_DEST);
end
if(~isdir(CACHE_DEST))
warning(['Could not set CACHE, CACHE_DEST directory does not exist: ' CACHE_DEST]);
CACHE=0;
end
end
config.CACHE_DEST=CACHE_DEST;
config.CACHE=CACHE;
%Set enviroment variables used by WFBD
setenv('WFDB',config.WFDB_PATH);
setenv('WFDBCAL',config.WFDBCAL);
end
outputs={'isloaded','config'};
for n=1:nargout
eval(['varargout{n}=' outputs{n} ';']);
end
%% subfunction that checks if we are in octave
function r = is_octave ()
r = exist ('OCTAVE_VERSION', 'builtin')>0;