Skip to content

Commit 72ef882

Browse files
authored
Merge pull request #141 from mpsonntag/dataArrayFunc
Add missing 'DataArray' functions
2 parents 8ce0767 + 634682b commit 72ef882

File tree

5 files changed

+97
-5
lines changed

5 files changed

+97
-5
lines changed

+nix/DataArray.m

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
nix.Dynamic.add_dyn_attr(obj, 'label', 'rw');
2929
nix.Dynamic.add_dyn_attr(obj, 'unit', 'rw');
3030
nix.Dynamic.add_dyn_attr(obj, 'expansionOrigin', 'rw');
31-
nix.Dynamic.add_dyn_attr(obj, 'polynom_coefficients', 'rw');
32-
nix.Dynamic.add_dyn_attr(obj, 'shape', 'rw');
31+
nix.Dynamic.add_dyn_attr(obj, 'polynomCoefficients', 'rw');
32+
nix.Dynamic.add_dyn_attr(obj, 'dataExtent', 'rw');
3333
end;
3434

3535
% -----------------
@@ -126,5 +126,23 @@ function write_all(obj, data)
126126
end;
127127
end;
128128

129+
function s = datatype(obj)
130+
s = nix_mx('DataArray::dataType', obj.nix_handle);
131+
end
132+
133+
% set data extent enabels to increase the original size
134+
% of a data array within the same dimensions.
135+
% e.g. increase the size of a 2D array [5 10] to another
136+
% 2D array [5 11]. Changing the dimensions is not possible
137+
% e.g. changing from a 2D array to a 3D array.
138+
% Furthermore if the extent shrinks the size of an array
139+
% or remodels the size of an array to a completely different
140+
% shape, existing data that does not fit into the new shape
141+
% will be lost!
142+
function [] = set_data_extent(obj, extent)
143+
nix_mx('DataArray::setDataExtent', obj.nix_handle, extent);
144+
% update changed dataExtent in obj.info
145+
obj.info = nix_mx(strcat(obj.alias, '::describe'), obj.nix_handle);
146+
end
129147
end;
130148
end

nix_mx.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@ void mexFunction(int nlhs,
209209
.reg("setNoneLabel", SETTER(const boost::none_t, nix::DataArray, label))
210210
.reg("setUnit", SETTER(const std::string&, nix::DataArray, unit))
211211
.reg("setNoneUnit", SETTER(const boost::none_t, nix::DataArray, unit))
212+
.reg("setExpansionOrigin", SETTER(double, nix::DataArray, expansionOrigin))
213+
.reg("setNoneExpansionOrigin", SETTER(boost::none_t, nix::DataArray, expansionOrigin))
214+
.reg("setNonePolynomCoefficients", SETTER(boost::none_t, nix::DataArray, polynomCoefficients))
212215
.reg("dimensions", FILTER(std::vector<nix::Dimension>, nix::DataArray, , dimensions))
213216
.reg("appendSetDimension", &nix::DataArray::appendSetDimension)
214217
.reg("appendRangeDimension", &nix::DataArray::appendRangeDimension)
@@ -229,6 +232,9 @@ void mexFunction(int nlhs,
229232
methods->add("DataArray::hasSource", nixdataarray::hasSource);
230233
methods->add("DataArray::sourceCount", nixdataarray::sourceCount);
231234
methods->add("DataArray::dimensionCount", nixdataarray::dimensionCount);
235+
methods->add("DataArray::setPolynomCoefficients", nixdataarray::polynomCoefficients);
236+
methods->add("DataArray::dataType", nixdataarray::dataType);
237+
methods->add("DataArray::setDataExtent", nixdataarray::setDataExtent);
232238

233239
classdef<nix::Source>("Source", methods)
234240
.desc(&nixsource::describe)

src/nixdataarray.cc

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace nixdataarray {
2121

2222
mxArray *describe(const nix::DataArray &da) {
2323
struct_builder sb({ 1 }, { "id", "type", "name", "definition", "label",
24-
"shape", "unit", "polynom_coefficients" });
24+
"dataExtent", "unit", "expansionOrigin", "polynomCoefficients" });
2525

2626
sb.set(da.id());
2727
sb.set(da.type());
@@ -30,6 +30,7 @@ namespace nixdataarray {
3030
sb.set(da.label());
3131
sb.set(da.dataExtent());
3232
sb.set(da.unit());
33+
sb.set(da.expansionOrigin());
3334
sb.set(da.polynomCoefficients());
3435

3536
return sb.array();
@@ -118,4 +119,21 @@ namespace nixdataarray {
118119
output.set(0, da.dimensionCount());
119120
}
120121

122+
void polynomCoefficients(const extractor &input, infusor &output) {
123+
nix::DataArray da = input.entity<nix::DataArray>(1);
124+
std::vector<double> pc = input.vec<double>(2);
125+
da.polynomCoefficients(pc);
126+
}
127+
128+
void dataType(const extractor &input, infusor &output) {
129+
nix::DataArray da = input.entity<nix::DataArray>(1);
130+
output.set(0, string_nix2mex(da.dataType()));
131+
}
132+
133+
void setDataExtent(const extractor &input, infusor &output) {
134+
nix::DataArray da = input.entity<nix::DataArray>(1);
135+
nix::NDSize size = input.ndsize(2);
136+
da.dataExtent(size);
137+
}
138+
121139
} // namespace nixdataarray

src/nixdataarray.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ namespace nixdataarray {
3535

3636
void dimensionCount(const extractor &input, infusor &output);
3737

38+
void polynomCoefficients(const extractor &input, infusor &output);
39+
40+
void dataType(const extractor &input, infusor &output);
41+
42+
void setDataExtent(const extractor &input, infusor &output);
43+
3844
} // namespace nixdataarray
3945

4046
#endif

tests/TestDataArray.m

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
funcs{end+1} = @test_source_count;
2929
funcs{end+1} = @test_dimensions;
3030
funcs{end+1} = @test_dimension_count;
31+
funcs{end+1} = @test_datatype;
32+
funcs{end+1} = @test_set_data_extent;
3133
end
3234

3335
function [] = test_attrs( varargin )
@@ -63,6 +65,21 @@
6365

6466
da.label = '';
6567
assert(isempty(da.label));
68+
69+
assert(isempty(da.expansionOrigin));
70+
da.expansionOrigin = 2.5;
71+
assert(da.expansionOrigin == 2.5)
72+
73+
da.expansionOrigin = '';
74+
assert(isempty(da.expansionOrigin));
75+
76+
assert(isempty(da.polynomCoefficients));
77+
c = [1.1 1.2];
78+
da.polynomCoefficients = c;
79+
assert(da.polynomCoefficients(1) == c(1))
80+
81+
da.polynomCoefficients = '';
82+
assert(isempty(da.polynomCoefficients));
6683
end
6784

6885
%% Test: Read all data from DataArray
@@ -468,11 +485,11 @@
468485

469486
daAliasWa = f.blocks{1}.create_data_array_from_data('aliasDimWATest2', ...
470487
'nix.DataArray', [1; 2; 3]);
471-
assert(isequal(daAliasWa.shape, [3 1]));
488+
assert(isequal(daAliasWa.dataExtent, [3 1]));
472489

473490
daAliasWa = f.blocks{1}.create_data_array_from_data('aliasDimWATest3', ...
474491
'nix.DataArray', [1 2 3; 2 4 5; 3 6 7]);
475-
assert(isequal(daAliasWa.shape, [3 3]));
492+
assert(isequal(daAliasWa.dataExtent, [3 3]));
476493
end
477494

478495
%% Test: Dimension count
@@ -499,3 +516,30 @@
499516
f = nix.File(testFile, nix.FileMode.ReadOnly);
500517
assert(f.blocks{1}.dataArrays{1}.dimension_count() == 1);
501518
end
519+
520+
%% Test: Datatype
521+
function [] = test_datatype( varargin )
522+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
523+
typeDA = 'nix.DataArray';
524+
f = nix.File(fileName, nix.FileMode.Overwrite);
525+
b = f.create_block('testBlock', 'nixblock');
526+
527+
da = b.create_data_array_from_data('testDataArray1', typeDA, [1 2 3]);
528+
assert(strcmp(da.datatype, 'double'));
529+
530+
da = b.create_data_array('testDataArray2', typeDA, nix.DataType.Bool, 5);
531+
da.write_all(logical([1 0 1 1 1]));
532+
assert(strcmp(da.datatype, 'logical'));
533+
end
534+
535+
%% Test: Set extent
536+
function [] = test_set_data_extent( varargin )
537+
fileName = fullfile(pwd, 'tests', 'testRW.h5');
538+
f = nix.File(fileName, nix.FileMode.Overwrite);
539+
b = f.create_block('testBlock', 'nixblock');
540+
541+
da = b.create_data_array_from_data('testDataArray1', 'nix.DataArray', [1 2 3; 4 5 6]);
542+
extent = [4 6];
543+
da.set_data_extent(extent);
544+
assert(da.dataExtent(1) == extent(1) && size(da.read_all, 2) == extent(2));
545+
end

0 commit comments

Comments
 (0)