KarrLab/SynNetGen

View on GitHub
lib/RBN/initRules.m

Summary

Maintainability
Test Coverage
function rule = initRules(varargin)

% INITRULES Generate a 2^k x n or 2^kMax x n matrix containing logic transition 
% rules for each node.
%   
%   INITRULES(N,K) generates a 2^K x N matrix defining logic transition rules 
%   for each of the N nodes. A node with K incoming connections has 2^K possible 
%   input vectors. Corresponding output (0 or 1) for each input vector is assigned 
%   at random.
%
%   INITRULES(RULESMATRIX) assigns given RULESMATRIX to rule.
%
%   INITRULES(N, KMIN, KMAX, CONNECTIONMATRIX) generates a 2^KMAX x N matrix defining 
%   logic transition rules for each of the N nodes. KMIN and KMAX define the minimum/
%   maximum incoming connections per node. The actual number of incoming connections 
%   is determined by inspection of CONNECTIONMATRIX.
%
%
%   Inputs:
%       n                  - (Optional) Number of nodes
%       k                  - (Optional) Number of connections per node
%       kMin               - (Optional) Minimal number of connections per node
%       kMax               - (Optional) Maximal number of connections per node
%       rulesMatrix        - (Optional) 2^k x n matrix containing logic transition rules for each node
%       connectionMatrix   - (Optional) n x n adjacent matrix (defined as in graph theory)
%
%   Output: 
%       rule                - 2^k x n (2^kMax x n) matrix containing transition logic rules for each node
%


%   Author: Christian Schwarzer - SSC EPFL
%   CreationDate: 6.11.2002 LastModified: 20.01.2003

% one argument: rulesMatrix
if(nargin == 1)
    
    rule = int8(varargin{1});
    
% two arguments: n,k
elseif(nargin == 2)
    
    n = varargin{1};
    k = varargin{2};
    rule = int8(randint(2^k,n,[0,1]));    
    
% four arguments: n,kMin,kMax,connectionMatrix
elseif(nargin == 4)
    
    n = varargin{1};
    kMin = varargin{2};
    kMax = varargin{3};
    connectionMatrix = varargin{4};
    
    rule = int8(zeros(2^kMax,n));
    for i=1:n
        s = sum(connectionMatrix(:,i));        
        rule(:,i)= [randint(1,2^s,[0,1]) zeros(1,2^kMax-2^s)]';       
    end
    
else
    error('Wrong number of arguments. Type: help initRules')
end