annotate extra/ncArray/inst/@ncArray/load.m @ 11980:de10a10ef6bf octave-forge

load data based on coordinate range or value (2)
author abarth93
date Mon, 29 Jul 2013 13:50:32 +0000
parents
children 7c7960da6a76
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11980
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
1 % [val,coord1,coord2,...] = load(self,'coord_name1',range1,'coord_name2',range2,...)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
2 % Load a subset of a variable based on range of coordiante variables.
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
3 % The names of the coordinates (coord_name1, coord_name2,...) coorespond to the standard_name attribute.
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
4 % Only 1-dimensional coordinates are currently supported.
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
5 %
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
6 %
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
7 % Example
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
8 % [temp,lon,lat,depth,time] = load(self,'longitude',[0 10],'latitude',[0 10])
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
9
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
10 function varargout = load(self,varargin)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
11
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
12 c = coord(self);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
13
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
14 for i = 1:length(c)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
15 c(i).v = full(c(i).val);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
16 % per default take all data along a dimension
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
17 c(i).index = ':';
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
18 c(i).sub = c(i).v;
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
19 end
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
20
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
21 % loop over all constraints
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
22 for i = 1:2:length(varargin)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
23 name = varargin{i};
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
24
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
25 j = find(strcmp(name,{c.standard_name}));
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
26 if isempty(j)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
27 warning(['no coordinate has the standard_name ' name ...
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
28 '. Try to use variable names.']);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
29
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
30 j = find(strcmp(name,{c.name}));
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
31 if isempty(j)
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
32 error(['no coordinate has the name ' name '.']);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
33 end
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
34 end
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
35
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
36 range = varargin{i+1};
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
37
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
38 if numel(range) == 1
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
39 dist = abs(c(j).v - range);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
40 [mindist,i] = min(dist);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
41 %mindist
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
42 else
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
43 i = find(range(1) < c(j).v & c(j).v < range(end));
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
44 i = min(i):max(i);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
45 end
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
46
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
47 c(j).index = i;
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
48 c(j).sub = c(j).v(i);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
49 end
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
50
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
51 idx = substruct('()',{c.index});
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
52 data = subsref (self,idx);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
53
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
54 varargout = {data,c.sub};
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
55
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
56
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
57 % i = 1;
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
58
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
59 % mask = xr(1) <= x & x <= xr(2);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
60 % l = find(mask);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
61
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
62 % [ij{:}] = ind2sub(size(mask),l);
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
63
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
64 % for j=1:len
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
65 % mins(j) = min(ij{j});
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
66 % maxs(j) = max(ij{j});
de10a10ef6bf load data based on coordinate range or value (2)
abarth93
parents:
diff changeset
67