Code covered by the BSD License  

Highlights from
Read SPIDER files

from Read SPIDER files by Bill Baxter
Read and write files in SPIDER format

writeSPIDERdoc(filename, A, varargin)
function writeSPIDERdoc(filename, A, varargin)
% Write data out in the format of a SPIDER document file.
% Column headings may be specified.
%
% Examples
% writeSPIDERdoc('doc001.dat', A)
% writeSPIDERdoc('coords.snd', A, {'X axis'; 'Y axis'})
%
% Where A is a 2D matrix of float values.
%
% Optional 3rd arg is a cell array of column header strings,
% created by e.g., hdrs = { 'column1'; 'column2'; 'column3'}
% Note the curly braces and semicolons.
%
% SPIDER files do not have a specific file extension.
%
% version 1.0 (Feb 2009) B. Baxter
% Copyright (C) 2009 Health Research Inc.
% Tested in Matlab 7.7.0 (R2008b, R2008a)

[fp, errmsg] = fopen(filename, 'w');
if fp == -1
  disp(errmsg)
  return
end

hdrstr = makeDocfileHeader(filename);
fprintf(fp,'%s\n', hdrstr);

if nargin > 2
    %celldisp(varargin)
    colheaders = makeColumnHeaders(varargin);
    %disp(colheaders)
    fprintf(fp,'%s\n', colheaders);
end

ndimsa = ndims(A);

if ndimsa > 2
  disp('writeSPIDERdoc: input matrix must be 1 or 2 dimensions')
  fclose(fp);
end

[nrows ncols] = size(A);

for key = 1:nrows
    s = sprintf('%5d %2d', key, ncols);
    for i = 1:ncols
        s1 = sprintf('%11g',A(key,i));
        s = [s s1];
    end
    %disp(s)
    fprintf(fp,'%s\n', s);
end

fclose(fp);

% ===========================================================
% If the array of header strings is created by the command:
%    hdrs = { 'column1'; 'column2'; 'column3'}
% then varargin is a cell array and the results of 
% celldisp(varargin) look something like:
%    varargin{1}{1} = AMPLITUDE
%    varargin{1}{2} = X-AXIS
%    varargin{1}{3} = SPAT.FREQ
%
% The 1st element of varargin (right-hand index) is a cell
% array of strings, where each element is a character array:
% h =  varargin{1,1}
% celldisp(h)
%    h{1} = AMPLITUDE
%    h{2} = X-AXIS
%    h{3} = SPAT.FREQ
% ischar(h{1}) == 1   % the h{i} are your column header strings.
%

function docstr=makeColumnHeaders(aCellArray)

docstr = '';

if iscell(aCellArray) && iscellstr(aCellArray{1,1})
    headers = aCellArray{1,1};
    numheaders = length(headers);
    %disp(sprintf('there are %d headers:', numheaders));
    %for i =1:numheaders
    %   disp(sprintf('  %s', headers{i}));
    %end
else
    return
end

docstr = ' ; /    ';

for i =1:numheaders
    s = sprintf('%11s', headers{i});
    docstr = [docstr s];
end

% ===========================================================
%
%
function hdr=makeDocfileHeader(filename)

[pathstr, basename, dext, ver] = fileparts(filename);

name = [basename dext];

ne = length(dext);
ext = dext(2:ne);  % remove the dot from the extension

idate = date;
t = clock;  % YY MM DD HH MM SS(not an int)
hr  = sprintf('%02d', t(4));
min = sprintf('%02d', t(5));
sec = sprintf('%02d', round(t(6)));
itime = strcat(hr,':',min,':',sec);

hdr = [' ;mat/' ext '   ' idate ' AT ' itime '   ' name];

Contact us at files@mathworks.com