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