wolffd@0: function lam = prod_lambda_msgs(n, cs, msg, msg_type, except) wolffd@0: wolffd@0: if nargin < 5, except = -1; end wolffd@0: wolffd@0: lam = msg{n}.lambda_from_self; wolffd@0: switch msg_type wolffd@0: case 'd', wolffd@0: for i=1:length(cs) wolffd@0: c = cs(i); wolffd@0: if c ~= except wolffd@0: lam = lam .* msg{n}.lambda_from_child{i}; wolffd@0: end wolffd@0: end wolffd@0: case 'g', wolffd@0: if isinf(lam.precision) % isfield(lam, 'observed_val') wolffd@0: return; % pass on the observed msg wolffd@0: end wolffd@0: for i=1:length(cs) wolffd@0: c = cs(i); wolffd@0: if c ~= except wolffd@0: m = msg{n}.lambda_from_child{i}; wolffd@0: lam.precision = lam.precision + m.precision; wolffd@0: lam.info_state = lam.info_state + m.info_state; wolffd@0: end wolffd@0: end wolffd@0: end wolffd@0: wolffd@0: wolffd@0: