function [ affinity ] = CalcPHsAffinityByRCN( data, actual_graph_size, num_missing_nodes)
    % sigal 29.10.13 
    % based on CalcAffinityByCommonNeighbors_Sparse

    %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);
    end
    
    firstPH = actual_graph_size-num_missing_nodes+1;
    
    % give the #common neighbors per node pair (nxn)
    % sigal - oct 12 - bug fix by ron - include the node itself as its friend
    affinity = data(firstPH:end,:) * data(:,firstPH:end) + data(firstPH:end,firstPH:end)*2;     
    s_rows = sum(data(:,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