function [ affinity ] = CalcPHsAffinityByRCN( data, actual_graph_size, num_missing_nodes, num_attr_nodes, attWeight, addMissingAtt)
    % sigal 29.10.13 
    % based on CalcAffinityByCommonNeighbors_Sparse
    if nargin < 4
        num_attr_nodes = 0;
        addMissingAtt = 0;
        attWeight = 0;
        fprintf('run ConnectMissingNodesToNeighborsNeighbors without attributes nodes\n');
    end

    %since missing nodes are only connected to one node we will artificially
    %connect them to their only neighbor's neighbors, and keep the connection to
    %the neighbor itself.
    if nargin > 1
        data = ConnectMissingNodesToNeighborsNeighbors(data, actual_graph_size, num_missing_nodes,  num_attr_nodes, addMissingAtt);
    end
    
    firstPH = actual_graph_size-num_missing_nodes+1;

    % Sigal 10.2.14: normalizeWeight
    % make sure that ratio att/link is same w/1-w
    if attWeight < 1 && attWeight >= 0
        normalizeWeight = attWeight/(1-attWeight);
    else
        normalizeWeight = 1;
    end
    data1 = data;
    if num_attr_nodes > 0
        data1(:, 1:num_attr_nodes) = normalizeWeight * data1(:, 1:num_attr_nodes);
        data1(1:num_attr_nodes, :) = normalizeWeight * data1(1:num_attr_nodes, :);
    end
    
    % give the #common neighbors per node pair (nxn)
    % sigal - oct 12 - bug fix by ron - include the node itself as its friend
    affinity = data1(firstPH:end,:) * data(:,firstPH:end) + data(firstPH:end,firstPH:end)*2;     
    s_rows = sum(data1(:,firstPH:end)) + 1;         % give the #neighbors per PH node (nx1)?
    %%s_cols = sum(data,2);
    
    affinity = NormalizeCommonNeighbors(affinity, s_rows); %new mex function
    
    %sigal 29.10.13 - normolize by diagonal min
    v = diag(affinity);
    max_val = min(v);
    %max_val = max(max(affinity));

    affinity = affinity ./ max_val;

    for i = 1 : size(affinity,1)
        affinity(i,i) = 1;
    end
    %sigal 29.10.13 - end 
    
end