ECG-Kit 1.0

File: <base>/common/wavedet/posmat2.m (3,079 bytes)
function POS=posmat(ann)
% function POS=posmat(ann) generates a Waveform Limit MATRIX with annotation ann
% Input parameters:
%	ann: annotation structure
% Output parameters:
%	POS: matrix with waveform limits

% Salvador Olmos. olmos@posta.unizar.es


ann=iswfl(ann);
q=isqrs(ann);

beats=length(q.time);

%%%%%%%%%
% Removing annotations before the first complete beat
%%%%%%%%%
ai=find(ann.anntyp=='('  & ann.num=='0' & ann.time<q.time(1)); % previous P onset
ann=rmanot(ann,ai(1:end-1));
ai=find(ann.anntyp=='p'  & ann.num=='0' & ann.time<q.time(1)); % Previous P
ann=rmanot(ann,ai(1:end-1));
ai=find(ann.anntyp==')'  & ann.num=='0' & ann.time<q.time(1)); % Previous P offset
ann=rmanot(ann,ai(1:end-1));

%%%%%%%%%
% FALTA ELIMINAR ANOTACIONES POSTERIORES AL ULTIMO LATIDO COMPLETO
%%%%%%%%%

POS=nan(beats,10);

POS(:,5)=q.time; 	% QRS fiducial point

ai=find(ann.anntyp=='(' & ann.num=='1');	% QRS onset

while (max(ann.time(ai))>max(POS(:,5))) 
    ai(end)=[]; 
end

if length(ai)==beats
   POS(:,4)=ann.time(ai);	
else
   for i=1:length(ai)
     p=min(find((ann.time(ai(i))-POS(:,5))<0));
     POS(p,4)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp==')' & ann.num=='1');	% QRS offset
%while (max(ann.time(ai))>max(POS(:,5)+60)) ai(end)=[]; end
if length(ai)==beats
   POS(:,6)=ann.time(ai);	
else
   for i=1:length(ai)
     p=max(find((ann.time(ai(i))-POS(:,5))>0));
     POS(p,6)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp=='(' & ann.num=='0');
while (max(ann.time(ai))>max(POS(:,4))) 
    ai(end)=[]; 
end
if length(ai)==beats
   POS(:,1)=ann.time(ai);	% P wave onset
else
   for i=1:length(ai)
     p=min(find((ann.time(ai(i))-POS(:,5))<0));
     POS(p,1)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp=='p');
while (max(ann.time(ai))>max(POS(:,4)))
    ai(end)=[]; 
end
if length(ai)==beats
   POS(:,2)=ann.time(ai);	% P wave 
else
   for i=1:length(ai)
     p=min(find((ann.time(ai(i))-POS(:,5))<0));
     POS(p,2)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp==')' & ann.num=='0');
while (max(ann.time(ai))>max(POS(:,4)))
    ai(end)=[]; 
end
if length(ai)==beats
   POS(:,3)=ann.time(ai);	% P wave offset
else
   for i=1:length(ai)
     p=min(find((ann.time(ai(i))-POS(:,5))<0));
     POS(p,3)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp=='(' & ann.num=='2');
%while (max(ann.time(ai))<max(POS(:,4))) ai(end)=[]; end
if length(ai)==beats
   POS(:,7)=ann.time(ai);	% T wave onset
else
   for i=1:length(ai)
     p=max(find((POS(:,5)-ann.time(ai(i)))<0));
     POS(p,7)=ann.time(ai(i));
   end
end

ai=find(ann.anntyp==')' & ann.num=='2');
if length(ai)==beats
   POS(:,10)=ann.time(ai);	% T wave offset
else
   for i=1:length(ai)
     p=max(find((POS(:,5)-ann.time(ai(i)))<0));
     POS(p,10)=ann.time(ai(i));
   end
end

% T peak 
ai=find(ann.anntyp=='t');
for i=1:length(ai)
  p=max(find((POS(:,5)-ann.time(ai(i)))<0));
  if POS(p,8)==0 
      POS(p,8)=ann.time(ai(i));
  else
      POS(p,9)=ann.time(ai(i));
  end
end