wolffd@0: function varargout = mirpattern(orig,varargin) wolffd@0: % p = mirpattern(a) wolffd@0: wolffd@0: period.key = 'Period'; wolffd@0: period.type = 'Boolean'; wolffd@0: period.when = 'After'; wolffd@0: period.default = 0; wolffd@0: option.period = period; wolffd@0: wolffd@0: specif.option = option; wolffd@0: wolffd@0: varargout = mirfunction(@mirpattern,orig,varargin,nargout,specif,@init,@main); wolffd@0: wolffd@0: wolffd@0: function [x type] = init(x,option) wolffd@0: if not(isamir(x,'mirpattern')) wolffd@0: x = mirsimatrix(x); wolffd@0: end wolffd@0: type = 'mirpattern'; wolffd@0: wolffd@0: wolffd@0: function p = main(orig,option,postoption) wolffd@0: if not(isamir(orig,'mirpattern')) wolffd@0: b = get(orig,'Branch'); wolffd@0: fp = get(orig,'FramePos'); wolffd@0: pp = get(orig,'PeakPos'); wolffd@0: for i = 1:length(b) wolffd@0: bi = b{i}{1}{1}; wolffd@0: pi1 = sort(pp{i}{1}{bi(1,1)}); wolffd@0: pi2 = sort(pp{i}{1}{bi(end,1)}); wolffd@0: p.pattern{1}.occurrence{1}.start = ... wolffd@0: fp{i}{1}(1,bi(1,1)) - mean(fp{i}{1}(1:2,pi1(bi(1,2)))); wolffd@0: p.pattern{end}.occurrence{2}.start = ... wolffd@0: fp{i}{1}(1,bi(1,1)); wolffd@0: p.pattern{end}.occurrence{1}.end = ... wolffd@0: fp{i}{1}(1,bi(end,1)) - mean(fp{i}{1}(1:2,pi2(bi(end,2)))); wolffd@0: p.pattern{end}.occurrence{2}.end = ... wolffd@0: fp{i}{1}(1,bi(end,1)); wolffd@0: end wolffd@0: p = class(p,'mirpattern',mirdata(orig)); wolffd@0: end wolffd@0: if postoption.period wolffd@0: for i = 1:length(p.pattern) wolffd@0: poi = p.pattern{i}.occurrence; wolffd@0: if poi{1}.end > poi{2}.start wolffd@0: poi{1}.end = poi{2}.start; wolffd@0: cycle = poi{1}.end - poi{1}.start; wolffd@0: ncycles = floor((poi{2}.end-poi{2}.start)/cycle)+2; wolffd@0: poi{ncycles}.end = poi{2}.end; wolffd@0: poi{2}.end = poi{2}.start + cycle; wolffd@0: for j = 2:ncycles-1 wolffd@0: poi{j}.end = poi{j}.start + cycle; wolffd@0: poi{j+1}.start = poi{j}.end; wolffd@0: end wolffd@0: end wolffd@0: p.pattern{i}.occurrence = poi; wolffd@0: end wolffd@0: end