% The function rcvsim.m is a wrapper function which enables simulate.m % -- a human cardiovascular simulator -- to be executed at the Linux % prompt. This function reads in an input file containing the parameter % values which characterize the model and its execution and outputs % waveforms and annotations in MIT format. % % Note: This function does not permit the execution of all of the % models of simulate.m. Rather, only the models that have % been fully documented can be executed. Type rcvsim -h at % the Linux prompt to find out which models may be implemented. % In order to execute the non-documented models, simulate.m % must be run in the MATLAB environment. % function rcvsim(parameterfile,outputfile) if (nargin < 1) display(['Usage: rcvsim parameterfile outputfile']); display([' rcvsim -h for help']); elseif (nargin == 1 & feval('strcmp',parameterfile,'-h') == 1) display(['The function rcvsim executes a computational model of the']); display(['cardiovascular system. The model includes the following']); display(['components:']); display(['1) lumped parameter, pulsatile heart and circulation (intact,']); display([' heart-lung unit, or systemic circulation)']); display(['2) short-term regulatory system']); display([' a) arterial baroreflex system']); display([' b) cardiopulmonary baroreflex system']); display([' c) direct neural coupling mechanism between respiration']); display([' and heart rate']); display(['3) resting physiologic perturbations']); display([' a) respiration']); display([' b) autoregulation of local vascular beds']); display([' (bandlimited disturbance to systemic arterial resistance)']); display([' c) 1/f disturbance to heart rate']); display([' ']); display(['Command line arguments:']); display([' ']); display(['rcvsim parameterfile outputfile']); display([' ']); display(['where']); display([' ']); display(['parameterfile - name of working file which contains the current parameter']); display([' values characterizing the model (must be in current directory)']); display([' outputfile - prefix of the output files generated by the model']); display([' ']); display(['or']); display([' ']); display(['rcvsim -h for help']); display(' '); display(['Output files:']); display([' ']); display([' outputfile.dat - binary file (MIT format -- shorts) containing all']); display([' generated waveforms']); display([' outputfile.qrs - qrs annotations file (MIT format)']); display([' outputfile.hea - header file (MIT format) describing the contents']); display([' of outputfile.dat']); display([' outputfile.txt - ascii, multi-column file representing either']); display([' cardiac function or venous return curves']); display(['parameterfile.num - parameter file characterizing execution;']); display([' created after each parameter update beginning with']); display([' the initial choice of values (num = 0);']); display([' see aux information in outputfile.qrs for']); display([' for time in which this file is created']); display([' ']); display(['During on-line viewing,']); display([' ']); display(['Press p and RETURN at standard input to pause']); display([' ']); display(['Once paused, the following actions may be carried out:']); display(['1) scrolling backwards with arrow buttons']); display(['2) plotting waveforms against each other by clicking on File']); display([' (with the right mouse), then, Analyze..., and then VCG']); display([' (the first two waveforms in Signal List will be plotted']); display([' against each other)']); display(['3) update parameters in parameterfile and save parameterfile']); display([' ']); display(['Press r and RETURN at standard input to resume']); elseif (nargin < 2) display(['Usage: rcvsim parameterfile outputfile']); display([' rcvsim -h for help']); elseif (nargin > 3) display(['Usage: rcvsim parameterfile outputfile']); display([' rcvsim -h for help']); else % Checking for existence of parameter file. If file does not % exist, then exit program. fidp = fopen(parameterfile,'r'); y = (fidp == -1); mbintscalar(y); if (y) display(['Invalid parameter file name.']); else % Reading initial choice of parameters from working % parameter file. [th,signals] = read_param(fidp); fclose(fidp); % Writing initial choice of parameters to file named % parameterfile.0. write_param(parameterfile,'0'); % Checking that all parameter values are properly % assigned to th parameter vector. If not, then % exit the program. if (length(th) == 1) display(['All parameter values in the file ' parameterfile ' not properly assigned.']); else % Assigning status parameters. preparation = th(107); breathing = th(108); dncm = th(109); baro = th(110); dra = th(111); if (dra == 1) dra = 2; end df = th(112); flag = [preparation; breathing; dncm; baro; dra; 0; df; 0]; % Writing header file. Note that the checksum % values are not assigned properly. fid1 = fopen([outputfile '.hea'],'w'); fprintf(fid1,'%s %d %8.2f %d\n',outputfile,29,th(113),th(106)); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pl'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pr'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Ppa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Ppv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pth'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Palv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/mmHg',16,0,0,0,0,'Pra'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Ql'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qr'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qpa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qpv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,1,'/ml',16,0,0,0,0,'Qlu'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'qpv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'ql'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'qa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'qv'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'qr'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml/s',16,0,0,0,0,'qpa'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,1000,'/ml/mmHg',16,0,0,0,0,'Cls'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,1000,'/ml/mmHg',16,0,0,0,0,'Crs'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,10,'/ml',16,0,0,0,0,'Qvo'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,1000,'/mmHg-s/ml',16,0,0,0,0,'Ra'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,100,'/bpm',16,0,0,0,0,'F'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,100,'/mmHg/ml',16,0,0,0,0,'El'); fprintf(fid1,'%s %d %8.2f%s %d %d %d %d %d %s\n',[outputfile '.dat'],16,100,'/mmHg/ml',16,0,0,0,0,'Er'); fclose(fid1); % Generating the waveforms by calling simulate.m. [P,v,q,ap,ve,qrs,t,num] = simulate(flag,th,outputfile,parameterfile,signals); % Writing waveforms and annotations to MIT format files % if they are not being viewed on-line. if (strcmp(signals,'-1') ~= 0) ap = ap(1:5,:); X = [P; v(1:6,:); v(7,:)*0.1; q; ap(1:2,:)*100; ap(3,:); ap(4,:)*100; ap(5,:)*600; ve*10]*10; fid = fopen([outputfile '.dat'],'w'); fwrite(fid,X,'short'); fclose(fid); fid2 = fopen([outputfile '.qrs'],'wa'); fwrite(fid2,1,'bit10'); fwrite(fid2,1,'ubit6'); fwrite(fid2,-1,'bit10'); fwrite(fid2,62,'ubit6'); Nbytes = length(parameterfile)+2; fwrite(fid2,Nbytes,'bit10'); fwrite(fid2,63,'ubit6'); fwrite(fid2,[parameterfile '.' num2str(0)],[num2str(Nbytes) '*uchar']); qrso = diff(qrs'); for i = 1:length(qrso) fwrite(fid2,qrso(i),'bit10'); fwrite(fid2,1,'ubit6'); end fwrite(fid2,0,'bit10'); fwrite(fid2,0,'ubit6'); fclose(fid2); end % Writing cardiac function or venous return curve % numerics to ascii multi-column file, if necessary. if (preparation == 1 | preparation == 2) fid3 = fopen([outputfile '.txt'],'w'); if (preparation == 2) fprintf(fid3,'%8s %8s\n','mPra', 'mqv'); fprintf(fid3,'%8.2f %8.2f\n',[num(1,:); num(2,:)*(60/1000)]); elseif (preparation == 1) fprintf(fid3,'%8s %8s %8s\n','mPra','mql','mPa'); fprintf(fid3,'%8.2f %8.2f %8.2f\n',[num(1,:); num(3,:)*(60/1000); num(2,:)]); end fclose(fid3); if (th(68) ~= -1) %#function plot_cfvr plot_cfvr(outputfile,th(68)); end end end end end