function [Ppos,Pneg]=participation_coef_sign(W,Ci)
%PARTICIPATION_COEF_SIGN     Participation coefficient
%
%   [Ppos Pneg] = participation_coef_sign(W,Ci);
%
%   Participation coefficient is a measure of diversity of intermodular
%   connections of individual nodes.
%
%   Inputs:     W,      undirected connection matrix with positive and
%                       negative weights
%
%               Ci,     community affiliation vector
%
%   Output:     Ppos,   participation coefficient from positive weights
%
%               Pneg,   participation coefficient from negative weights
%
%   Reference: Guimera R, Amaral L. Nature (2005) 433:895-900.
%
%
%   2011, Mika Rubinov, UNSW

%   Modification History:
%   Mar 2011: Original
%   Sep 2012: Fixed treatment of nodes with no negative strength
%             (thanks to Alex Fornito and Martin Monti)


n=length(W);                                %number of vertices

Ppos = pcoef( W.*(W>0));
Pneg = pcoef(-W.*(W<0));

    function P=pcoef(W_)
        S   = sum(W_,2);                    %strength
        Gc  = (W_~=0)*diag(Ci);             %neighbor community affiliation
        Sc2 = zeros(n,1);                   %community-specific neighbors
        
        for i = 1:max(Ci)
            Sc2 = Sc2 + (sum(W_.*(Gc==i),2).^2);
        end
        
        P = ones(n,1) - Sc2./(S.^2);
        P(isnan(P)) = 0;
        P(~P) = 0;                            %p_ind=0 if no (out)neighbors
    end
end
