Skip to content

Commit 50438c8

Browse files
committed
Fixed mex+matlab functions and tests to use new API
1 parent 9b6e268 commit 50438c8

File tree

10 files changed

+103
-74
lines changed

10 files changed

+103
-74
lines changed

makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ FFTWDIR = ${FFTW}
77
# Directory for GSL
88
GSLDIR = ${GSL}
99
# Directory for MATLAB
10-
MLAB = /Applications/MATLAB_R2013a.app
10+
MLAB = /Applications/MATLAB_R2015b.app
1111
# Directory for DOXYGEN
1212
DOXYGEN_PATH=doxygen
1313

@@ -123,7 +123,7 @@ $(FLAGOBJMAT)/%_mex.o: %_mex.c $(FLAGLIB)/lib$(FLAGLIBN).a
123123
$(CC) $(OPT) $(FFLAGS) -c $< -o $@ -I${MLABINC}
124124

125125
$(FLAGOBJMEX)/%_mex.$(MEXEXT): $(FLAGOBJMAT)/%_mex.o $(FLAGLIB)/lib$(FLAGLIBN).a
126-
$(MEX) $< -o $@ $(LDFLAGSMEX) $(MEXFLAGS) -L$(MLABLIB)
126+
$(MEX) $< -output $@ $(LDFLAGSMEX) $(MEXFLAGS) -L$(MLABLIB)
127127

128128
# ======================================== #
129129

src/main/matlab/flag_analysis.m

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
% true [assume f real (improves performance)] }
1717
% 'L' = { Harmonic band-limit; L > 1 (default=guessed) }
1818
% 'P' = { Radial band-limit; P > 1 (default=guessed) }
19-
% 'R' = { Radial boundary; R > 0 (default=1.0) }
19+
% 'tau' = { Radial scale factor; tau > 0 (default=1.0) }
20+
% 'spin' = { spin (default=0) }
2021
%
2122
% FLAG package to perform 3D Fourier-Laguerre Analysis
2223
% Copyright (C) 2012 Boris Leistedt & Jason McEwen
@@ -30,7 +31,8 @@
3031
p.addRequired('f', @isnumeric);
3132
p.addParamValue('L', Lguessed, @isnumeric);
3233
p.addParamValue('P', Pguessed, @isnumeric);
33-
p.addParamValue('R', 1.0, @isnumeric);
34+
p.addParamValue('tau', 1.0, @isnumeric);
35+
p.addParamValue('spin', 0, @isnumeric);
3436
p.addParamValue('Reality', false, @islogical);
3537
p.parse(f, varargin{:});
3638
args = p.Results;
@@ -41,6 +43,6 @@
4143
f_vec(n,:) = flag_mw_arr2vec( temp );
4244
end
4345

44-
flmp = flag_analysis_mex(f_vec, args.L, args.P, args.R, args.Reality);
46+
flmp = flag_analysis_mex(f_vec, args.L, args.P, args.tau, args.Reality, args.spin);
4547

4648
end

src/main/matlab/flag_analysis_mex.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
*
1313
* Usage:
1414
* flmn = ...
15-
* flag_analysis_mex(f, L, N, R, reality);
15+
* flag_analysis_mex(f, L, N, tau, reality, spin);
1616
*
1717
*/
1818
void mexFunction( int nlhs, mxArray *plhs[],
1919
int nrhs, const mxArray *prhs[])
2020
{
2121

22-
int i, L, N, n, f_m, f_n, reality;
22+
int i, spin, L, N, n, f_m, f_n, reality;
2323
int f_is_complex;
2424
double *flmn_real = NULL, *flmn_imag = NULL;
2525
double *f_real = NULL, *f_imag = NULL;
@@ -29,7 +29,7 @@ void mexFunction( int nlhs, mxArray *plhs[],
2929
int iin = 0, iout = 0;
3030

3131
/* Check number of arguments. */
32-
if(nrhs!=5) {
32+
if(nrhs!=6) {
3333
mexErrMsgIdAndTxt("flag_analysis_mex:InvalidInput:nrhs",
3434
"Require five inputs.");
3535
}
@@ -99,27 +99,38 @@ void mexFunction( int nlhs, mxArray *plhs[],
9999
mexErrMsgIdAndTxt("flag_analysis_mex:InvalidInput:bandLimitNonInt",
100100
"Harmonic band-limit N must be positive integer.");
101101

102-
// Parse harmonic band-limit R
102+
// Parse tau
103103
iin = 3;
104104
if( !mxIsDouble(prhs[iin]) ||
105105
mxIsComplex(prhs[iin]) ||
106106
mxGetNumberOfElements(prhs[iin])!=1 ) {
107-
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:Rlimit",
108-
"Radial limit R must be positive real.");
107+
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:taulimit",
108+
"Radial scale factor tau must be positive real.");
109109
}
110-
double R = mxGetScalar(prhs[iin]);
111-
if ( R <= 0 )
112-
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:RLimitNonInt",
113-
"Radial limit R must be positive real.");
110+
double tau = mxGetScalar(prhs[iin]);
111+
if ( tau <= 0 )
112+
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:TauLimitNonInt",
113+
"Radial scale factor tau must be positive real.");
114114

115+
iin = 5;
116+
if( !mxIsDouble(prhs[iin]) ||
117+
mxIsComplex(prhs[iin]) ||
118+
mxGetNumberOfElements(prhs[iin])!=1 ) {
119+
mexErrMsgIdAndTxt("flag_analysis_mex:InvalidInput:spin",
120+
"spin must be integer.");
121+
}
122+
spin = (int)mxGetScalar(prhs[iin]);
123+
if (mxGetScalar(prhs[iin]) > (double)spin || spin < 0)
124+
mexErrMsgIdAndTxt("flag_analysis_mex:InvalidInput:bandLimitNonInt",
125+
"spin must be positive integer.");
115126

116127
ntheta = L;
117128
nphi = 2 * L - 1;
118129
flmn = (complex double*)calloc(L*L*N, sizeof(complex double));
119130
if (reality) {
120-
flag_core_analysis_real(flmn, fr, R, L, N);
131+
flag_core_analysis_real(flmn, fr, L, tau, N);
121132
} else {
122-
flag_core_analysis(flmn, f, R, L, N);
133+
flag_core_analysis(flmn, f, L, tau, N, spin);
123134
}
124135

125136
// Copy flm to output

src/main/matlab/flag_fulltest.m

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
% flag_fulltest - Run all tests
1+
% flag_fulltest - tauun all tests
22
%
33
% FLAG package to perform 3D Fourier-Laguerre Analysis
44
% Copyright (C) 2012 Boris Leistedt & Jason McEwen
@@ -10,7 +10,7 @@
1010
% Main parameters
1111
L = 32
1212
P = 32
13-
R = 1.0
13+
tau = 1.0
1414

1515
% Generate random 3D FLAG decomposition
1616
flmn = zeros(P, L^2);
@@ -27,16 +27,16 @@
2727
flmn_rec = flag_analysis(f, 'L', L, 'P', P);
2828
flag_custom_transform_error = max(max(abs(flmn-flmn_rec)))
2929

30-
nodes = slag_sampling(P, R);
30+
nodes = slag_sampling(P, tau);
3131
% Test exactness for complex FLAG transform on the same grid
3232
f = flag_synthesis(flmn, 'L', L, 'P', P, 'Nodes', nodes);
33-
flmn_rec = flag_analysis(f, 'L', L, 'P', P, 'R', R);
33+
flmn_rec = flag_analysis(f, 'L', L, 'P', P, 'tau', tau);
3434
flag_grid_transform_error = max(max(abs(flmn-flmn_rec)))
3535

36-
nodes = slag_sampling(P, R);
36+
nodes = slag_sampling(P, tau);
3737
% Test exactness for complex FLAG transform on the same grid
38-
f = flag_synthesis(flmn, 'R', R);
39-
flmn_rec = flag_analysis(f, 'R', R);
38+
f = flag_synthesis(flmn, 'tau', tau);
39+
flmn_rec = flag_analysis(f, 'tau', tau);
4040
flag_bound_transform_error = max(max(abs(flmn-flmn_rec)))
4141

4242
% Impose reality on flms.
@@ -65,11 +65,11 @@
6565
slag_default_transform_error = max(max(abs(fn-fn_rec)))
6666

6767
% Test exactness of SLAG transform
68-
[f, nodes] = slag_synthesis(fn, 'P', P, 'R', R);
69-
fn_rec = slag_analysis(f, 'P', P, 'R', R);
68+
[f, nodes] = slag_synthesis(fn, 'P', P, 'tau', tau);
69+
fn_rec = slag_analysis(f, 'P', P, 'tau', tau);
7070
slag_custom_transform_error = max(max(abs(fn-fn_rec)))
7171

72-
nodes2 = slag_sampling(P, R);
72+
nodes2 = slag_sampling(P, tau);
7373
if (max(abs(nodes-nodes2))) ~= 0
7474
print('Problem with sampling scheme');
7575
end

src/main/matlab/flag_synthesis.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
% true [assume f real (improves performance)] }
1717
% 'L' = { Harmonic band-limit; L > 1 (default=guessed) }
1818
% 'P' = { Radial band-limit; N > 1 (default=guessed) }
19-
% 'R' = { Radial boundary; R > 0 (default=1.0) }
19+
% 'tau' = { Radial scale factor: tau > 0 (default=1.0) }
20+
% 'spin' = { spin (default=0) }
2021
%
2122
% FLAG package to perform 3D Fourier-Laguerre Analysis
2223
% Copyright (C) 2012 Boris Leistedt & Jason McEwen
@@ -29,15 +30,16 @@
2930
p = inputParser;
3031
p.addRequired('flmp', @isnumeric);
3132
p.addParamValue('L', Lguessed, @isnumeric);
32-
p.addParamValue('P', Pguessed, @isnumeric);
33+
p.addParamValue('P', Pguessed, @isnumeric);
34+
p.addParamValue('spin', 0, @isnumeric);
3335
p.addParamValue('Nodes', 0.0, @isnumeric);
34-
p.addParamValue('R', 1.0, @isnumeric);
36+
p.addParamValue('tau', 1.0, @isnumeric);
3537
p.addParamValue('Reality', false, @islogical);
3638
p.parse(flmp, varargin{:});
3739
args = p.Results;
3840

3941
% Compute inverse transform.
40-
f_vec = flag_synthesis_mex(flmp, args.L, args.P, args.Nodes, args.R, args.Reality);
42+
f_vec = flag_synthesis_mex(flmp, args.L, args.P, args.Nodes, args.tau, args.Reality, args.spin);
4143

4244
sz = size(args.Nodes);
4345
P = sz(2);

src/main/matlab/flag_synthesis_mex.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
*
1313
* Usage:
1414
* f = ...
15-
* flag_synthesis_mex(flmn, L, N, nodes, R, reality);
15+
* flag_synthesis_mex(flmn, L, N, nodes, tau, reality, spin);
1616
*
1717
*/
1818
void mexFunction( int nlhs, mxArray *plhs[],
1919
int nrhs, const mxArray *prhs[])
2020
{
21-
int f_is_complex, n, i, L, N, reality, flmn_m, flmn_n, Nnodes;
21+
int spin, f_is_complex, n, i, L, N, reality, flmn_m, flmn_n, Nnodes;
2222
double *flmn_real, *flmn_imag, *f_real, *f_imag;
2323
double *fr = NULL;
2424
complex double *flmn = NULL, *f = NULL;
@@ -27,7 +27,7 @@ void mexFunction( int nlhs, mxArray *plhs[],
2727

2828

2929
// Check number of arguments
30-
if(nrhs!=6) {
30+
if(nrhs!=7) {
3131
mexErrMsgIdAndTxt("flag_synthesis_mex:InvalidInput:nrhs",
3232
"Require six inputs.");
3333
}
@@ -92,18 +92,32 @@ void mexFunction( int nlhs, mxArray *plhs[],
9292
ntheta = L;
9393
nphi = 2 * L - 1;
9494

95-
// Parse harmonic band-limit R
95+
// Parse radial scale factor tau
9696
iin = 4;
9797
if( !mxIsDouble(prhs[iin]) ||
9898
mxIsComplex(prhs[iin]) ||
9999
mxGetNumberOfElements(prhs[iin])!=1 ) {
100-
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:Rlimit",
101-
"Radial limit R must be positive real.");
100+
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:taulimit",
101+
"Radial scale factor tau must be positive real.");
102102
}
103-
double R = mxGetScalar(prhs[iin]);
104-
if ( R <= 0 )
105-
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:RLimitNonInt",
106-
"Radial limit R must be positive real.");
103+
double tau = mxGetScalar(prhs[iin]);
104+
if ( tau <= 0 )
105+
mexErrMsgIdAndTxt("slag_synthesis_mex:InvalidInput:tauLimitNonInt",
106+
"Radial scale factor tau must be positive real.");
107+
108+
109+
// Parse radial scale factor tau
110+
iin = 6;
111+
if( !mxIsDouble(prhs[iin]) ||
112+
mxIsComplex(prhs[iin]) ||
113+
mxGetNumberOfElements(prhs[iin])!=1 ) {
114+
mexErrMsgIdAndTxt("flag_synthesis_mex:InvalidInput:LbandLimit",
115+
"spin must be integer.");
116+
}
117+
spin = (int)mxGetScalar(prhs[iin]);
118+
if (mxGetScalar(prhs[iin]) > (double)spin || spin < 0)
119+
mexErrMsgIdAndTxt("flag_synthesis_mex:InvalidInput:bandLimitNonInt",
120+
"spin must be positive integer.");
107121

108122
// Parse nodes
109123
int nodes_m, nodes_n;
@@ -123,17 +137,17 @@ void mexFunction( int nlhs, mxArray *plhs[],
123137
Nnodes = N ;
124138
nodes = (double*)calloc(Nnodes, sizeof(double));
125139
weights = (double*)calloc(Nnodes, sizeof(double));
126-
flag_spherlaguerre_sampling(nodes, weights, R, N);
140+
flag_spherlaguerre_sampling(nodes, weights, tau, N);
127141
free(weights);
128142
}
129143

130144

131145
if (reality) {
132146
flag_core_allocate_f_real(&fr, L, N);
133-
flag_core_synthesis_real(fr, flmn, nodes, Nnodes, L, N);
147+
flag_core_synthesis_real(fr, flmn, nodes, Nnodes, L, tau, N);
134148
} else {
135149
flag_core_allocate_f(&f, L, N);;
136-
flag_core_synthesis(f, flmn, nodes, Nnodes, L, N);
150+
flag_core_synthesis(f, flmn, nodes, Nnodes, L, tau, N, spin);
137151
}
138152

139153

src/main/matlab/slag_analysis.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
%
55
% Default usage :
66
%
7-
% fn = slag_analysis(f, P, R)
7+
% fn = slag_analysis(f, P, tau)
88
%
99
% where P is the harmonic band-limit,
10-
% R is the radial limit,
10+
% tau is the radial scale factor,
1111
% f is a vector of size P,
1212
% the output fn is a vector of P
1313
%
1414
% Options :
1515
% 'P' = { Band-limit; P > 1 (default=guessed) }
16-
% 'R' = { double (default=1.0) }
16+
% 'tau' = { double (default=1.0) }
1717
%
1818
% FLAG package to perform 3D Fourier-Laguerre Analysis
1919
% Copyright (C) 2012 Boris Leistedt & Jason McEwen
@@ -25,10 +25,10 @@
2525
p = inputParser;
2626
p.addRequired('f', @isnumeric);
2727
p.addParamValue('P', Pguessed, @isnumeric);
28-
p.addParamValue('R', 1.0, @isnumeric);
28+
p.addParamValue('tau', 1.0, @isnumeric);
2929
p.parse(f, varargin{:});
3030
args = p.Results;
3131

32-
fn = slag_analysis_mex(f, args.P, args.R);
32+
fn = slag_analysis_mex(f, args.P, args.tau);
3333

3434
end

src/main/matlab/slag_analysis_mex.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
*
1313
* Usage:
1414
* fn = ...
15-
* slag_analysis_mex(f, N, R);
15+
* slag_analysis_mex(f, N, tau);
1616
*
1717
*/
1818
void mexFunction( int nlhs, mxArray *plhs[],
1919
int nrhs, const mxArray *prhs[])
2020
{
2121

2222
int n, i, N, f_m, f_n;
23-
double R;
23+
double tau;
2424
double *fn_real, *f_real;
2525
double *fn = NULL, *f = NULL, *nodes = NULL, *weights = NULL;
2626
int iin = 0, iout = 0;
@@ -66,21 +66,21 @@ void mexFunction( int nlhs, mxArray *plhs[],
6666
if( !mxIsDouble(prhs[iin]) ||
6767
mxIsComplex(prhs[iin]) ||
6868
mxGetNumberOfElements(prhs[iin])!=1 ) {
69-
mexErrMsgIdAndTxt("slag_analysis_mex:InvalidInput:Rlimit",
69+
mexErrMsgIdAndTxt("slag_analysis_mex:InvalidInput:taulimit",
7070
"Radial limit R must be positive real.");
7171
}
72-
R = mxGetScalar(prhs[iin]);
73-
if ( R <= 0)
74-
mexErrMsgIdAndTxt("slag_analysis_mex:InvalidInput:RLimitNonInt",
75-
"Radial limit R must be positive real.");
72+
tau = mxGetScalar(prhs[iin]);
73+
if ( tau <= 0)
74+
mexErrMsgIdAndTxt("slag_analysis_mex:InvalidInput:tauLimitNonInt",
75+
"Radial scale factor tau must be positive real.");
7676

7777
nodes = (double*)calloc(N, sizeof(double));
7878
weights = (double*)calloc(N, sizeof(double));
79-
flag_spherlaguerre_sampling(nodes, weights, R, N);
79+
flag_spherlaguerre_sampling(nodes, weights, tau, N);
8080

8181
// Run spherical Laguerre analysis
8282
fn = (double*)calloc(N, sizeof(double));
83-
flag_spherlaguerre_analysis(fn, f, nodes, weights, N);
83+
flag_spherlaguerre_analysis(fn, f, nodes, weights, tau, N);
8484

8585
iout = 0;
8686
plhs[iout] = mxCreateDoubleMatrix(1, N, mxREAL);

src/main/matlab/slag_synthesis.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
% fn is a vector of size P,
1111
% the output f is a vector of size P,
1212
% You must specify either the noded of the sampling
13-
% or the radial limit R (default: 1.0)
13+
% or the radial scale factor tau (default: 1.0)
1414
%
1515
% Options :
1616
% 'P' = { Band-limit; P > 1 (default=guessed) }
17-
% 'R' = { double (default=1.0) }
17+
% 'tau' = { double (default=1.0) }
1818
% 'nodes' = { double (default=0.0) }
1919
%
2020
% FLAG package to perform 3D Fourier-Laguerre Analysis
@@ -28,10 +28,10 @@
2828
p.addRequired('fn', @isnumeric);
2929
p.addParamValue('P', Pguessed, @isnumeric);
3030
p.addParamValue('Nodes', 0.0, @isnumeric);
31-
p.addParamValue('R', 1.0, @isnumeric);
31+
p.addParamValue('tau', 1.0, @isnumeric);
3232
p.parse(fn, varargin{:});
3333
args = p.Results;
3434

35-
[f, nodes] = slag_synthesis_mex(fn, args.P, args.R, args.Nodes);
35+
[f, nodes] = slag_synthesis_mex(fn, args.P, args.tau, args.Nodes);
3636

3737
end

0 commit comments

Comments
 (0)