forked from NeuroJSON/jsnirfy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jsnirfcreate.m
78 lines (70 loc) · 2.79 KB
/
jsnirfcreate.m
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