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