123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- function [DCM] = spm_dem2dcm(DEM,DCM)
- % reorganisation of posteriors and priors into DCM format
- % FORMAT [DCM] = spm_dem2dcm(DEM)
- % FORMAT [DEM] = spm_dem2dcm(DEM,DCM)
- %
- % DEM - structure array (hierarchicial model)
- % DCM - structure array (flat model)
- %
- % -------------------------------------------------------------------------
- % DCM.M.pE - prior expectation of parameters
- % DCM.M.pC - prior covariances of parameters
- % DCM.Ep - posterior expectations
- % DCM.Cp - posterior covariance
- % DCM.F - free energy
- %
- % For hierarchical models (DEM.M) the first level with non-zero prorior
- % varaince on the paramters will be extracted.
- %__________________________________________________________________________
- % Copyright (C) 2005 Wellcome Trust Centre for Neuroimaging
- % Karl Friston
- % $Id: spm_dem2dcm.m 6508 2015-07-25 15:23:25Z karl $
- % check for arrays
- %--------------------------------------------------------------------------
- if iscell(DEM)
- for i = 1:size(DEM,1)
- for j = 1:size(DEM,2)
- if nargin < 2
- DCM{i,j} = spm_dem2dcm(DEM{i,j});
- else
- DCM{i,j} = spm_dem2dcm(DEM{i,j},DCM{i,j});
- end
- end
- end
- return
- end
- % get level
- %--------------------------------------------------------------------------
- for j = 1:length(DEM.M)
- if any(any(DEM.M(j).pC)), break, end
- end
- % get indices for covariance
- %--------------------------------------------------------------------------
- k = spm_length(DEM.qP.P(j));
- k = spm_length(DEM.qP.P(1:(j - 1))) + (1:k);
- % re-organise
- %--------------------------------------------------------------------------
- if nargin < 2
-
- DCM.M.pE = DEM.M(j).pE;
- DCM.M.pC = DEM.M(j).pC;
- DCM.Ep = DEM.qP.P{j};
- DCM.Cp = DEM.qP.C(k,k);
- DCM.F = DEM.F(end);
-
- else
-
- DEM.M(j).pE = spm_unvec(DCM.M.pE,DEM.M(j).pE);
- DEM.M(j).pC = DCM.M.pC;
- DEM.qP.P{j} = spm_unvec(DCM.Ep,DEM.qP.P{j});
- DEM.qP.C(k,k) = DCM.Cp;
- DEM.F = DCM.F;
-
- % output argument
- %----------------------------------------------------------------------
- DCM = DEM;
- end
|