From 2afc8cc3083637c246d7718f976168a5e19fa4b5 Mon Sep 17 00:00:00 2001 From: CPernet Date: Sat, 24 Jul 2021 12:05:30 +0200 Subject: [PATCH 1/6] if no jsondecode use jsonread --- pop_importbids.m | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pop_importbids.m b/pop_importbids.m index f37bf1d..2927369 100644 --- a/pop_importbids.m +++ b/pop_importbids.m @@ -136,7 +136,11 @@ dataset_descriptionFile = fullfile(bidsFolder, 'dataset_description.json'); bids.dataset_description = ''; if exist(dataset_descriptionFile,'File') - bids.dataset_description = jsondecode(importalltxt( dataset_descriptionFile )); + if exist('jsondecode.m','file') + bids.dataset_description = jsondecode(importalltxt( dataset_descriptionFile )); + else + bids.dataset_description = jsonread(dataset_descriptionFile); + end end % load participant file @@ -155,7 +159,11 @@ participantsJSONFile = fullfile(bidsFolder, 'participants.json'); bids.participantsJSON = ''; if exist(participantsJSONFile,'File') - bids.participantsJSON = jsondecode(importalltxt( participantsJSONFile )); + if exist('jsondecode.m','file') + bids.participantsJSON = jsondecode(importalltxt( participantsJSONFile )); + else + bids.participantsJSON = jsonread(participantsJSONFile); + end end % scan participants @@ -601,13 +609,21 @@ if strcmpi(ext, '.tsv') data = importtsv( fullfile(localFile(1).folder, localFile(1).name)); else - data = jsondecode( importalltxt( fullfile(localFile(1).folder, localFile(1).name) )); + if exist('jsondecode.m','file') + data = jsondecode( importalltxt( fullfile(localFile(1).folder, localFile(1).name) )); + else + data = jsonread(fullfile(localFile(1).folder, localFile(1).name)); + end end elseif ~isempty(globalFile) if strcmpi(ext, '.tsv') data = importtsv( fullfile(globalFile(1).folder, globalFile(1).name)); else - data = jsondecode( importalltxt( fullfile(globalFile(1).folder, globalFile(1).name) )); + if exist('jsondecode.m','file') + data = jsondecode( importalltxt( fullfile(globalFile(1).folder, globalFile(1).name) )); + else + data = jsonread(fullfile(globalFile(1).folder, globalFile(1).name)); + end end end From 8918ff26e505398235948bbb1a8d08b238f879a7 Mon Sep 17 00:00:00 2001 From: CPernet Date: Wed, 28 Jul 2021 08:00:51 +0200 Subject: [PATCH 2/6] update JSONio library --- JSONio/{LICENCE => LICENSE} | 4 +-- JSONio/README | 45 ---------------------------- JSONio/README.md | 30 +++++++------------ JSONio/jsonread.mexw32 | Bin 12800 -> 0 bytes JSONio/jsonwrite.m | 8 +++-- JSONio/{ => tests}/test_jsonread.m | 0 JSONio/{ => tests}/test_jsonwrite.m | 0 7 files changed, 19 insertions(+), 68 deletions(-) rename JSONio/{LICENCE => LICENSE} (91%) delete mode 100644 JSONio/README delete mode 100644 JSONio/jsonread.mexw32 rename JSONio/{ => tests}/test_jsonread.m (100%) rename JSONio/{ => tests}/test_jsonwrite.m (100%) diff --git a/JSONio/LICENCE b/JSONio/LICENSE similarity index 91% rename from JSONio/LICENCE rename to JSONio/LICENSE index 5a82a3e..5e803a3 100644 --- a/JSONio/LICENCE +++ b/JSONio/LICENSE @@ -1,5 +1,5 @@ -JSONio: a MATLAB JSON library -Copyright (c) 2015-2019 Guillaume Flandin +JSONio: a MATLAB/Octave JSON library +Copyright (c) 2015-2021 Guillaume Flandin The MIT License (MIT) diff --git a/JSONio/README b/JSONio/README deleted file mode 100644 index 08afa87..0000000 --- a/JSONio/README +++ /dev/null @@ -1,45 +0,0 @@ -Difference with the version distributed at https://www.artefact.tk/software/matlab/jsonio/ - ================================= - - In this version, Matlab structures with fields xNumber (such as x2 or x12129) - are converted to JSON keys Number (such as 2 or 12129). This because numbers - may not be used as field in Matlab structures. This also follows the convension - used by the Matlab jsondecode function. - -JSONio: a MATLAB JSON library (v1.1) - modified as explained above - ==================================== - - Copyright (C) 2015-2018 Guillaume Flandin - https://www.artefact.tk/software/matlab/jsonio/ - - JSONio is a MATLAB library to read/write data in the JSON (JavaScript Object - Notation) data-interchange format. - - JSON: http://www.json.org/ - - It relies on the JSON parser jsmn written by Serge Zaitsev: - - jsmn: http://zserge.com/jsmn.html - - This library is also part of SPM: - - SPM: http://www.fil.ion.ucl.ac.uk/spm/ - - INSTALLATION - ============ - - Simply add the JSONio directory to the MATLAB path: - - >> addpath /home/login/Documents/MATLAB/JSONio - - EXAMPLE - ======= - - >> json = jsonread(filename) - - >> jsonwrite(filename, json) - - ------------------------------------------------------------------------------- - MATLAB is a Registered Trademark of The Mathworks, Inc. - - Copyright (C) 2015-2018 Guillaume Flandin diff --git a/JSONio/README.md b/JSONio/README.md index f26c3ca..b73bda2 100644 --- a/JSONio/README.md +++ b/JSONio/README.md @@ -1,42 +1,34 @@ - JSONio: a MATLAB/Octave JSON library - ==================================== +# JSONio: a MATLAB/Octave JSON library - https://www.artefact.tk/software/matlab/jsonio/ - - JSONio is a MATLAB/Octave library to read/write data in the JSON (JavaScript Object Notation) data-interchange format. +JSONio is a MATLAB/Octave library to read/write data in the JSON (JavaScript Object Notation) data-interchange format. - * JSON: https://www.json.org/ +* JSON: https://www.json.org/ - It relies on the JSON parser jsmn written by Serge Zaitsev: +It relies on the JSON parser jsmn written by [Serge Zaitsev](https://zserge.com/): - * jsmn: https://zserge.com/jsmn.html +* jsmn: https://zserge.com/jsmn/ - This library is also part of SPM: +This library is also part of SPM: - * SPM: https://www.fil.ion.ucl.ac.uk/spm/ +* SPM: https://www.fil.ion.ucl.ac.uk/spm/ - INSTALLATION - ------------ +## INSTALLATION - Simply add the JSONio directory to the MATLAB path: +Simply add the JSONio directory to the MATLAB path: ```matlab addpath /home/login/Documents/MATLAB/JSONio ``` - A compiled MEX file is provided for 64-bit MATLAB platforms. It needs to be compiled for Octave with: +A compiled MEX file is provided for 64-bit MATLAB platforms. It needs to be compiled for Octave with: ``` mkoctfile --mex jsonread.c jsmn.c -DJSMN_PARENT_LINKS ``` - EXAMPLE - ------- +## EXAMPLE ```matlab json = jsonread(filename) jsonwrite(filename, json) ``` - - ------------------------------------------------------------------------------- - Copyright (C) 2015-2020 Guillaume Flandin diff --git a/JSONio/jsonread.mexw32 b/JSONio/jsonread.mexw32 deleted file mode 100644 index a8f857e28968295c8218eadaccbc91dc44a158c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 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 D`nXNO diff --git a/JSONio/jsonwrite.m b/JSONio/jsonwrite.m index b35c69b..dca5265 100644 --- a/JSONio/jsonwrite.m +++ b/JSONio/jsonwrite.m @@ -10,7 +10,7 @@ % % FORMAT [...] = jsonwrite(...,opts) % opts - structure or list of name/value pairs of optional parameters: -% indent: string to use for indentation [Default: ''] +% prettyPrint: indent output [Default: false] % replacementStyle: string to control how non-alphanumeric % characters are replaced {'underscore','hex','delete','nop'} % [Default: 'underscore'] @@ -22,13 +22,14 @@ % jsonencode: https://www.mathworks.com/help/matlab/ref/jsonencode.html % Guillaume Flandin -% $Id: jsonwrite.m 7526 2019-02-06 14:33:18Z guillaume $ +% $Id: spm_jsonwrite.m 8031 2020-12-10 13:37:00Z guillaume $ %-Input parameters %-------------------------------------------------------------------------- opts = struct(... 'indent','',... + 'prettyprint',false,... 'replacementstyle','underscore',... 'convertinfandnan',true); opt = {struct([])}; @@ -61,6 +62,9 @@ if ~isfield(opts,lower(fn{i})), warning('Unknown option "%s".',fn{i}); end opts.(lower(fn{i})) = opt.(fn{i}); end +if opts.prettyprint + opts.indent = ' '; +end optregistry(opts); %-JSON serialization diff --git a/JSONio/test_jsonread.m b/JSONio/tests/test_jsonread.m similarity index 100% rename from JSONio/test_jsonread.m rename to JSONio/tests/test_jsonread.m diff --git a/JSONio/test_jsonwrite.m b/JSONio/tests/test_jsonwrite.m similarity index 100% rename from JSONio/test_jsonwrite.m rename to JSONio/tests/test_jsonwrite.m From 971858660e0c95ac2901504962b5f5e98e4d11a0 Mon Sep 17 00:00:00 2001 From: CPernet Date: Wed, 28 Jul 2021 09:09:09 +0200 Subject: [PATCH 3/6] parent folder to be passed if empty --- pop_importbids.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pop_importbids.m b/pop_importbids.m index 2927369..84b9b11 100644 --- a/pop_importbids.m +++ b/pop_importbids.m @@ -566,7 +566,7 @@ parent = fileparts(parent); end if isempty(outFile) - outFile = filterHiddenFile(folder, dir(fullfile(parent, fileName))); + outFile = filterHiddenFile(parent, dir(fullfile(parent, fileName))); end function fileList = filterHiddenFile(folder, fileList) From b6efa86590114e2f24b6501fa22ca8f16d021e55 Mon Sep 17 00:00:00 2001 From: CPernet Date: Wed, 28 Jul 2021 09:11:45 +0200 Subject: [PATCH 4/6] bidstask header info --- pop_importbids.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pop_importbids.m b/pop_importbids.m index 84b9b11..fb7cd03 100644 --- a/pop_importbids.m +++ b/pop_importbids.m @@ -21,6 +21,8 @@ % 'eventtype' - [string] BIDS event column to use for EEGLAB event types. % common choices are usually 'trial_type' or 'value'. % Default is 'value'. +% 'bidstask' - [string] value of a key task- allowing to analyze some +% tasks only % % Outputs: % STUDY - EEGLAB STUDY structure From 69682cb2e941528458dc5726371f34719441c97d Mon Sep 17 00:00:00 2001 From: CPernet Date: Wed, 28 Jul 2021 09:30:21 +0200 Subject: [PATCH 5/6] do not report missing file if filtered by task --- pop_importbids.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pop_importbids.m b/pop_importbids.m index fb7cd03..6c2230b 100644 --- a/pop_importbids.m +++ b/pop_importbids.m @@ -246,7 +246,7 @@ ind = strmatch( '.fif', cellfun(@(x)x(end-3:end), allFiles, 'uniformoutput', false) ); % FIF if isempty(ind) ind = strmatch( '.gz', cellfun(@(x)x(end-2:end), allFiles, 'uniformoutput', false) ); % FIF - if isempty(ind) + if isempty(ind) && ~isempty(allFiles) fprintf(2, 'No EEG file found for subject %s\n', bids.participants{iSubject,1}); end end From 71816ef9ec1973705fefeb4701b71f2315acc345 Mon Sep 17 00:00:00 2001 From: CPernet Date: Wed, 28 Jul 2021 09:36:11 +0200 Subject: [PATCH 6/6] make sure JSONio is seen --- pop_importbids.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pop_importbids.m b/pop_importbids.m index 6c2230b..7dd24bb 100644 --- a/pop_importbids.m +++ b/pop_importbids.m @@ -116,6 +116,10 @@ }, 'pop_importbids'); if isstr(opt), error(opt); end +if ~exist('jsondecode.m','file') + addpath([fileparts(which('pop_importbids.m')) filesep 'JSONio']) +end + % Options: % - copy folder % - use channel location and event