function cat = spm_cfg_cat
% SPM Configuration file for 3D to 4D volumes conversion
%__________________________________________________________________________
% Copyright (C) 2008-2016 Wellcome Trust Centre for Neuroimaging

% John Ashburner
% $Id: spm_cfg_cat.m 6918 2016-11-02 14:33:11Z guillaume $

%--------------------------------------------------------------------------
% vols 3D Volumes
%--------------------------------------------------------------------------
vols         = cfg_files;
vols.tag     = 'vols';
vols.name    = '3D Volumes';
vols.help    = {'Select the volumes to concatenate'};
vols.filter  = 'image';
vols.ufilter = '.*';
vols.num     = [1 Inf];

%--------------------------------------------------------------------------
% dtype Data Type
%--------------------------------------------------------------------------
dtype        = cfg_menu;
dtype.tag    = 'dtype';
dtype.name   = 'Data Type';
dtype.help   = {'Data-type of output image. SAME indicates the same datatype as the original images.'};
dtype.labels = {'SAME'
                'UINT8   - unsigned char'
                'INT16   - signed short'
                'INT32   - signed int'
                'FLOAT32 - single prec. float'
                'FLOAT64 - double prec. float'}';
dtype.values = {0 spm_type('uint8') spm_type('int16') spm_type('int32') spm_type('float32') spm_type('float64')};
dtype.val    = {spm_type('int16')}; % to match previous behaviour

%--------------------------------------------------------------------------
% name Output Filename
%--------------------------------------------------------------------------
name         = cfg_entry;
name.tag     = 'name';
name.name    = 'Output Filename';
name.help    = {'Specify the name of the output 4D volume file.'
                'Unless explicit, the output folder is the one containing the first image.'
                'A ''.nii'' extension will be added if not specified.'}';
name.strtype = 's';
name.num     = [1 Inf];
name.val     = {'4D.nii'};

%--------------------------------------------------------------------------
% cat 3D to 4D File Conversion
%--------------------------------------------------------------------------
cat      = cfg_exbranch;
cat.tag  = 'cat';
cat.name = '3D to 4D File Conversion';
cat.val  = {vols name dtype};
cat.help = {'Concatenate a number of 3D volumes into a single 4D file.'};
cat.prog = @(job)spm_run_cat('run',job);
cat.vout = @(job)spm_run_cat('vout',job);


%==========================================================================
function out = spm_run_cat(cmd, job)

switch lower(cmd)
    case 'run'
        V                 = char(job.vols{:});
        dt                = job.dtype;
        fname             = job.name;
        V4                = spm_file_merge(V,fname,dt);
        out.mergedfile    = {V4(1).fname};
        
    case 'vout'
        out(1)            = cfg_dep;
        out(1).sname      = 'Concatenated 4D Volume';
        out(1).src_output = substruct('.','mergedfile');
        out(1).tgt_spec   = cfg_findspec({{'filter','image','strtype','e'}});
end
