No BSD License  

Highlights from
Clebsch Gordan Coefficient Solver GUI

image thumbnail
from Clebsch Gordan Coefficient Solver GUI by james jun
Easy to use Clebsch-Gordan coefficient solver for adding two angular momentums.

GUI_MAIN.m
%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

Contact us at files@mathworks.com