|
a |
|
b/functions/@mmo/unitaryopp.m |
|
|
1 |
% support function for mmo object |
|
|
2 |
|
|
|
3 |
function obj2 = unitaryopp(f, obj1, varargin); |
|
|
4 |
|
|
|
5 |
% make new memory mapped data file (blank) |
|
|
6 |
% ---------------------------------------- |
|
|
7 |
newFileName = mmo.getnewfilename; |
|
|
8 |
data = memmapfile(obj1.dataFile, 'writable', obj1.writable, 'format', { 'single' obj1.dimensions 'x' }); |
|
|
9 |
fid = fopen(newFileName, 'w'); |
|
|
10 |
if obj1.dimensions(end) == 1, obj1.dimensions(end) = []; end |
|
|
11 |
ss.type = '()'; |
|
|
12 |
ss.subs(1:length(obj1.dimensions)-1) = { ':' }; |
|
|
13 |
for index = 1:obj1.dimensions(end) |
|
|
14 |
ss.subs{length(obj1.dimensions)} = index; |
|
|
15 |
tmpdata = f(subsref(data.Data.x, ss), varargin{:}); |
|
|
16 |
fwrite(fid, tmpdata, 'float'); |
|
|
17 |
end |
|
|
18 |
fclose(fid); |
|
|
19 |
|
|
|
20 |
% copy the data |
|
|
21 |
% ------------- |
|
|
22 |
obj2 = mmo(newFileName, obj1.dimensions, true, obj1.transposed); |
|
|
23 |
obj2 = updateWorkspace(obj2); |
|
|
24 |
|