File: jsnirfcreate.m

package info (click to toggle)
octave-iso2mesh 1.9.8%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 11,128 kB
  • sloc: cpp: 11,982; ansic: 10,158; sh: 365; makefile: 59
file content (78 lines) | stat: -rw-r--r-- 3,003 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function jsn = jsnirfcreate(varargin)
%
%    jsn=jsnirfcreate
%       or
%    jsn=jsnirfcreate(option)
%    jsn=jsnirfcreate('Format',format,'Param1',value1, 'Param2',value2,...)
%
%    Create an empty JSNIRF data structure defined in the JSNIRF
%    specification: https://github.com/NeuroJSON/jsnirf or a SNIRF data structure
%    based on https://github.com/fNIRS/snirf
%
%    author: Qianqian Fang (q.fang <at> neu.edu)
%
%    input:
%        option (optional): option can be ignored. If it is a string with a
%             value 'snirf', this creates a default SNIRF data structure;
%             otherwise, a JSNIRF data structure is created.
%        format: same as option.
%        param/value:   a list of name/value pairs specify
%             additional subfields to be stored under the /nirs object.
%
%    output:
%        jsn: a default SNIRF or JSNIRF data structure.
%
%    example:
%        jsn=jsnirfcreate('data',mydata,'aux',myauxdata,'comment','test');
%
%    this file is part of JSNIRF specification: https://github.com/NeuroJSON/jsnirf
%
%    License: GPLv3 or Apache 2.0, see https://github.com/NeuroJSON/jsnirf for details
%

% define empty SNIRF data structure with all required fields

defaultmeta = struct('SubjectID', 'default', 'MeasurementDate', datestr(now, 29), ...
                     'MeasurementTime', datestr(now, 'hh:mm:ss'), 'LengthUnit', 'mm', ...
                     'TimeUnit', 's', 'FrequencyUnit', 'Hz');
defaultsrcmap = struct('sourceIndex', [], 'detectorIndex', [], ...
                       'wavelengthIndex', [], 'dataType', 1, 'dataTypeIndex', 1);
defaultdata = struct('dataTimeSeries', [], 'time', [], 'measurementList', defaultsrcmap);
defaultaux = struct('name', '', 'dataTimeSeries', [], 'time', [], 'timeOffset', 0);
defaultstim = struct('name', '', 'data', []);
defaultprobe = struct('wavelengths', [], 'sourcePos2D', [], 'detectorPos2D', []);

nirsdata = struct('metaDataTags', defaultmeta, ...
                  'data', defaultdata, ...
                  'aux', defaultaux, ...
                  'stim', defaultstim, ...
                  'probe', defaultprobe);

% read user specified data fields - will validate format in future updates

if (nargin > 1 && bitand(nargin, 1) == 0)
    for i = 1:nargin * 0.5
        key = varargin{2 * i - 1};
        if (strcmpi(key, 'format'))
            key = 'format';
        end
        nirsdata.(key) = varargin{2 * i};
    end
end

jsn = struct();

% return either a SNIRF data structure, or JSNIRF data (enclosed in SNIRFData tag)

if ((nargin == 1 && strcmpi(varargin{1}, 'snirf')) || ...
    (isfield(nirsdata, 'format') && strcmpi(nirsdata.format, 'snirf')))
    if (isfield(nirsdata, 'format'))
        nirsdata = rmfield(nirsdata, 'format');
    end
    jsn = struct('formatVersion', '1.0', 'nirs', nirsdata);
else
    nirsdata.formatVersion = '1.0';
    len = length(fieldnames(nirsdata));
    nirsdata = orderfields(nirsdata, [len, 1:len - 1]);
    jsn = struct('SNIRFData', nirsdata);
end