%find which option is chosen
NUMRADIOS = 4;
%determine the active iRadio
for iRadio=1:NUMRADIOS
tagstring = sprintf('radio%d', iRadio);
guiobject = getfield(handles, tagstring);
if (get(guiobject, 'Value'))
break; %iRadio becomes what's active
end
end
%read values and validate
try
%read j1, j2 and other inputs
tagstringj1 = sprintf('r%dj1', iRadio);
tagstringj2 = sprintf('r%dj2', iRadio);
j1 = str2num(get(getfield(handles, tagstringj1), 'String'));
j2 = str2num(get(getfield(handles, tagstringj2), 'String'));
if ~((j1 >= 0) && (j2 >= 0)), error('validerr'); end
switch iRadio
case 2
m1 = str2num(get(handles.r2m1, 'String'));
m2 = str2num(get(handles.r2m2, 'String'));
%validate
if ~((j1 >= m1 && m1 >= -j1) && (j2 >= m2 && m2 >= -j2)), error('validerr'); end
case 3
J = str2num(get(handles.r3J, 'String'));
M = str2num(get(handles.r3M, 'String'));
%validate
if ~((j1+j2 >= J && J >= abs(j1-j2)) && (J >= M && M >= -J)), error('validerr'); end
case 4
J = str2num(get(handles.r4J, 'String'));
M = str2num(get(handles.r4M, 'String'));
m1 = str2num(get(handles.r4m1, 'String'));
m2 = str2num(get(handles.r4m2, 'String'));
%validate
if ~((j1+j2 >= J && J >= abs(j1-j2)) && (J >= M && M >= -J) && (M == m1+m2) && (j1 >= m1 && m1 >= -j1) && (j2 >= m2 && m2 >= -j2)), error('validerr'); end
end
catch
errordlg('Recheck your input');
return;
end
%calculate
if exist('prevj1') && exist('prevj2')
if (prevj1 == j1) && (prevj2 == j2) %reuse the totalresults
%reuse totalresults
end
else
[resultstr resulttable ] = calcallcgcoef( j1, j2 );
end
%output
switch iRadio
case 1
set(handles.editOutput, 'String', resultstr);
%update j1, j2 for other options
for iRadio=2:4
tagstringj1 = sprintf('r%dj1', iRadio);
tagstringj2 = sprintf('r%dj2', iRadio);
set(getfield(handles, tagstringj1), 'String', num2str(j1));
set(getfield(handles, tagstringj2), 'String', num2str(j2));
end
prevj1 = j1; prevj2 = j2;
case 2 %filter output with m1, m2
iIndex = findrecord(resulttable(:, [3,4]), [m1, m2]);
set(handles.editOutput, 'String', resultstr(iIndex));
case 3 %filter output with J, M
iIndex = findrecord(resulttable(:, [1,2]), [J, M]);
set(handles.editOutput, 'String', resultstr(iIndex));
case 4 %filter output with m1, m2, J, M
iIndex = findrecord(resulttable(:, [1,2, 3, 4]), [J, M, m1, m2]);
set(handles.editOutput, 'String', resultstr(iIndex));
end