function [post,exp_r,xp,pxp,bor,F] = spm_dcm_bmc(DCM)
% Bayesian model comparison
% FORMAT [post,exp_r,xp,pxp,bor] = spm_dcm_bmc(DCM)
%
% DCM     - {subjects x models} cell array of DCMs
% ------------------------------------------------
%     DCM{i,j}.F  - free energy
%
% OUTPUTS
% -------
% post    - FFX posterior model probabilities p(m|y)
% exp_r   - RFX expectation of the posterior  p(m|y)
% xp      - RFX exceedance probabilities
% pxp     - RFX protected exceedance probabilities
% bor     - RFX Bayes Omnibus Risk (probability that model frequencies 
%           are equal)
% F       - matrix of free energies (subjects x models)
%
% This routine computes fixed and random effects posterior probabilities
% over models. It also returns exceedance  probabilities and protected
% statistics.
% 
% See also: spm_dcm_bma.m and spm_BMS.m
%__________________________________________________________________________
% 
% References:
%
% Stephan KE, Penny WD, Daunizeau J, Moran RJ, Friston KJ (2009)
% Bayesian Model Selection for Group Studies. NeuroImage 46:1004-1017
%
% Rigoux, L, Stephan, KE, Friston, KJ and Daunizeau, J. (2014)
% Bayesian model selection for group studies - Revisited. 
% NeuroImage 84:971-85. doi: 10.1016/j.neuroimage.2013.08.065
%__________________________________________________________________________
% Copyright (C) 2009-2015 Wellcome Trust Centre for Neuroimaging

% Will Penny
% $Id: spm_dcm_bmc.m 7479 2018-11-09 14:17:33Z peter $


% assemble log evidence
%--------------------------------------------------------------------------
[n,m] = size(DCM);
for i = 1:n
    for j = 1:m
        F(i,j) = DCM{i,j}.F;
    end
end

% FFX posterior over models
%--------------------------------------------------------------------------
P    = sum(F,1);
P    = P - max(P);
P    = exp(P);
post = P/sum(P);

% RFX posterior over models
%--------------------------------------------------------------------------
if nargout > 1
    [alpha,exp_r,xp,pxp,bor] = spm_BMS(F);
end
