0001 function [f_cur_lmn, f_scal_lm] = s2let_transform_curvelet_analysis_lm2lmn(flm_init, cur_lm, scal_l, varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 sz = length(flm_init(:));
0040 Lguessed = sqrt(sz);
0041
0042 p = inputParser;
0043 p.addRequired('flm_init', @isnumeric);
0044 p.addRequired('cur_lm', @iscell);
0045 p.addRequired('scal_l', @isnumeric);
0046 p.addParamValue('B', 2, @isnumeric);
0047 p.addParamValue('L', Lguessed, @isnumeric);
0048 p.addParamValue('J_min', 0, @isnumeric);
0049 p.addParamValue('Spin', 0, @isnumeric);
0050 p.addParamValue('Reality', false, @islogical);
0051 p.addParamValue('Upsample', false, @islogical);
0052 p.addParamValue('SpinLowered', false, @islogical);
0053 p.addParamValue('SpinLoweredFrom', 0, @isnumeric);
0054 p.addParamValue('Sampling', 'MW', @ischar);
0055 p.parse(flm_init, cur_lm, scal_l, varargin{:});
0056 args = p.Results;
0057
0058 J = s2let_jmax(args.L, args.B);
0059
0060
0061
0062
0063
0064 for j = args.J_min:J,
0065 band_limit = min([ s2let_bandlimit(j,args.J_min,args.B,args.L) args.L ]);
0066
0067 Nj = band_limit;
0068 if (args.Reality == 0)
0069
0070 if (args.Upsample ~= 0)
0071 f_cur_lmn{j-args.J_min+1} = zeros((2*Nj-1)*args.L^2,1);
0072 else
0073 f_cur_lmn{j-args.J_min+1} = zeros((2*Nj-1)*band_limit^2,1);
0074 end
0075 for en = -Nj+1:Nj-1,
0076 for el = max(abs(args.Spin),abs(en)):band_limit-1,
0077 ind_ln = ssht_elm2ind(el, en);
0078 psi = 8.*pi*pi/(2.*el+1) *conj(cur_lm{j-args.J_min+1}(ind_ln));
0079 for m = -el:el,
0080 ind_lm = ssht_elm2ind(el, m);
0081 if (args.Upsample ~= 0)
0082 ind_lmn = so3_elmn2ind(el,m,en,args.L,Nj);
0083 else
0084 ind_lmn = so3_elmn2ind(el,m,en,band_limit,Nj);
0085 end
0086 f_cur_lmn{j-args.J_min+1}(ind_lmn) = flm_init(ind_lm) * psi;
0087 end
0088 end
0089 end
0090 else
0091 if (args.Upsample ~= 0)
0092 f_cur_lmn{j-args.J_min+1} = zeros(Nj*args.L^2,1);
0093 else
0094 f_cur_lmn{j-args.J_min+1} = zeros(Nj*band_limit^2,1);
0095 end
0096 for el = 1:band_limit-1,
0097 for m = -el:el,
0098 ind_lm = ssht_elm2ind(el, m);
0099
0100 ind_lnzero = ssht_elm2ind(el, 0);
0101 psizero = 8.*pi*pi/(2.*el+1) *conj(cur_lm{j-args.J_min+1}(ind_lnzero));
0102 ind_lmnzero = so3_elmn2ind(el,m,0,band_limit,Nj,'Reality', args.Reality);
0103 f_cur_lmn{j-args.J_min+1}(ind_lmnzero) = flm_init(ind_lm) *psizero;
0104
0105 for en = 1: Nj-1,
0106 if (el >= en)
0107 ind_ln = ssht_elm2ind(el, en);
0108 psi = 8.*pi*pi/(2.*el+1) *conj(cur_lm{j-args.J_min+1}(ind_ln));
0109 if (args.Upsample == 0)
0110 ind_lmn = so3_elmn2ind(el,m,en,band_limit,Nj,'Reality', args.Reality);
0111 else
0112 ind_lmn = so3_elmn2ind(el,m,en,args.L,Nj,'Reality', args.Reality);
0113 end
0114 f_cur_lmn{j-args.J_min+1}(ind_lmn) = flm_init(ind_lm) * psi;
0115 end
0116 end
0117 end
0118 end
0119 end
0120 end
0121
0122
0123
0124 if (args.Upsample ~= 0)
0125 band_limit = args.L ;
0126 else
0127 band_limit = min([ s2let_bandlimit(args.J_min-1, args.J_min, args.B,args.L) args.L ]);
0128 end
0129 f_scal_lm = zeros(band_limit^2,1);
0130 if (args.Reality == 0)
0131 for el = abs(args.Spin):band_limit-1,
0132 phi = sqrt(4.0*pi/(2.*el+1))*scal_l(el^2+el+1,1);
0133 for m = -el:el,
0134 lm_ind=ssht_elm2ind(el, m);
0135 f_scal_lm(lm_ind) = flm_init(lm_ind) * phi;
0136 end
0137 end
0138 else
0139 for el = 0 :band_limit-1,
0140 phi = sqrt(4.0*pi/(2.*el+1))*scal_l(el^2+el+1,1);
0141 for m = -el:el,
0142 lm_ind=ssht_elm2ind(el, m);
0143 f_scal_lm(lm_ind) = flm_init(lm_ind) * phi;
0144 end
0145 end
0146 end
0147
0148
0149 end
0150