spm_dcm_load.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. function DCM = spm_dcm_load(P, save_mem)
  2. % Load a cell array of DCM filenames into a subjects x models cell array
  3. % FORMAT DCM = spm_dcm_load(P)
  4. %
  5. % P - a DCM's filename or
  6. % - a GCM's filename (which contains a cell array of DCM files) or
  7. % - a cell array of DCM filenames or
  8. % - a character array of DCM filenames
  9. % save_mem - (Optional) if true, only loads priors, posteriors and F for
  10. % models 2-N
  11. %
  12. %__________________________________________________________________________
  13. % Copyright (C) 2016 Wellcome Trust Centre for Neuroimaging
  14. % Peter Zeidman
  15. % $Id: spm_dcm_load.m 7479 2018-11-09 14:17:33Z peter $
  16. if ischar(P)
  17. if size(P,1) > 1
  18. % A character array was provided
  19. P = cellstr(P);
  20. else
  21. % A GCM / DCM filename was provided
  22. x = load(P);
  23. if isfield(x,'GCM')
  24. P = x.GCM;
  25. elseif isfield(x,'DCM')
  26. P = {x.DCM};
  27. else
  28. error('Unknown DCM file type');
  29. end
  30. end
  31. end
  32. if nargin < 2
  33. save_mem = false;
  34. end
  35. DCM = cell(size(P));
  36. fprintf('Loading DCMs...');
  37. for s = 1:size(P,1)
  38. for m = 1:size(P,2)
  39. if isstruct(P{s,m})
  40. % DCM already a structure - leave unchanged
  41. dcm = P{s,m};
  42. else
  43. % Load DCM from filename
  44. try
  45. model = load(P{s,m});
  46. dcm = model.DCM;
  47. catch
  48. fprintf('File: %s\n',P{s,m});
  49. error('Failed to load model for subject %d model %d', s, m);
  50. end
  51. end
  52. if save_mem && (m>1)
  53. % Onlt import basic structures
  54. DCM{s,m} = struct();
  55. if isfield(dcm,'a'), DCM{s,m}.a = dcm.a; end
  56. if isfield(dcm,'b'), DCM{s,m}.b = dcm.b; end
  57. if isfield(dcm,'c'), DCM{s,m}.c = dcm.c; end
  58. if isfield(dcm,'d'), DCM{s,m}.d = dcm.d; end
  59. if isfield(dcm,'F'), DCM{s,m}.F = dcm.F; end
  60. if isfield(dcm,'Ep'), DCM{s,m}.Ep = dcm.Ep; end
  61. if isfield(dcm,'Cp'), DCM{s,m}.Cp = dcm.Cp; end
  62. if isfield(dcm,'options'), DCM{s,m}.options = dcm.options; end
  63. if isfield(dcm,'M')
  64. if isfield(dcm.M,'pE'), DCM{s,m}.M.pE = dcm.M.pE; end
  65. if isfield(dcm.M,'pC'), DCM{s,m}.M.pC = dcm.M.pC; end
  66. end
  67. else
  68. % Import the whole DCM
  69. DCM{s,m} = dcm;
  70. end
  71. end
  72. end
  73. fprintf('Done\n');