annotate sequences/@seq/gathern.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents beb8a3f4a345
children
rev   line source
samer@3 1 function [Y,X0]=gathern(dim,n,X,varargin)
samer@3 2 % gathern - make big array of n arrays in a sequence
samer@3 3 %
samer@3 4 % gathern :: N:natural, seq [D] -> [E], seq [D].
samer@3 5 % gathern ::
samer@3 6 % D:natural ~'the dimension along which to collect arrays',
samer@3 7 % N:natural ~'number of elements to collect',
samer@3 8 % seq [D] ~'the seq to gather',
samer@3 9 % options {
samer@3 10 % draw :: boolean /0 ~'whether or not to call plotfn every iteration';
samer@3 11 % plotfn :: seq [D]->handle ~'plotting function';
samer@3 12 % save :: natural /0 ~'if >0, then save state every this many interations';
samer@3 13 % recover:: boolean / 0 ~'if 1, then attempt to restart from saved state';
samer@3 14 % id :: string /'@gather' ~'file to save state'
samer@3 15 % }
samer@3 16 % -> [E], seq [D].
samer@3 17 %
samer@3 18 % E is such that E(I) = D(I) if I~=N. The second return
samer@3 19 % is the final object in the sequence
samer@3 20
samer@3 21 Y=[]; i=1;
samer@3 22 if nargin<3 % simple version
samer@3 23 if ~isempty(X),
samer@3 24 Y=head(X);
samer@3 25 i=1; while i<n
samer@3 26 X0=X; X=next(X0); i=i+1;
samer@3 27 if isempty(X), break; end
samer@3 28 Y=cat(dim,Y,head(X));
samer@3 29 end
samer@3 30 end
samer@3 31 else
samer@37 32 opts=options('save',0,'recover',0,'draw',0,'plotfn',@nullplot,varargin{:});
samer@3 33 draw=opts.draw;
samer@3 34 savn=opts.save;
samer@3 35
samer@3 36 if opts.recover && exist([opts.id,'.mat'],'file')
samer@3 37 load(opts.id);
samer@3 38 X=next(X0);
samer@3 39 fprintf('recovering from i=%d\n',i);
samer@3 40 end
samer@3 41
samer@3 42 if savn==0 && ~draw
samer@3 43 if ~isempty(X)
samer@3 44 Y=head(X);
samer@3 45 i=1; while i<n
samer@3 46 X0=X; X=next(X0); i=i+1;
samer@3 47 if isempty(X), break; end
samer@3 48 Y=cat(dim,Y,head(X));
samer@3 49 end
samer@3 50 end
samer@3 51 else
samer@3 52 if savn>0
samer@3 53 fprintf('Will save every %d iterations to %s.mat\n',savn,opts.id);
samer@3 54 end
samer@3 55
samer@3 56 if ~isempty(X)
samer@3 57 Y=head(X);
samer@3 58 i=1; while i<n
samer@3 59 X0=X; X=next(X0); i=i+1;
samer@3 60 if draw, opts.plotfn(X0); end
samer@3 61 if mod(i,savn)==0,
samer@3 62 fprintf('saving at %d.\n',i);
samer@3 63 save(opts.id,'X0','Y','opts','i','dim');
samer@3 64 end
samer@3 65 optpause(opts);
samer@3 66 if isempty(X), break; end
samer@3 67 Y=cat(dim,Y,head(X));
samer@3 68 end
samer@3 69 end
samer@3 70 if savn>0, delete([opts.id '.mat']); end
samer@3 71 end
samer@3 72 if nargout>1, if isempty(X), X0=X; else X0=next(X); end; end
samer@3 73 end
samer@3 74
samer@3 75 function nullplot(A,B), return