compneuro-ncu/fmridenoise

conf_raw = list(map(lambda d: d['conf_raw'].path, entities_files)) \ TypeError: 'NoneType' object is not subscriptable

Closed this issue · 5 comments

Running on windows 10 using docker on preprecessed data (fmriprep).

It looks like fmridenoise is not able to find the confounds file for all the participants.

docker run -it --rm -v D:\Andrea\fov\BIDS:/BIDS -v D:\Andrea\fov\BIDS\derivatives\fmriprep:/derivatives fmridenoise compare /BIDS --MultiProc --debug
201219-08:14:15,969 nipype.utils DEBUG:
Running a newer version (1.6.0) of nipy/nipype than available (1.5.1)
201219-08:14:15,971 nipype.workflow INFO:
[Node] Setting-up "BidsValidate" in "/tmp/tmp7bubnm5b/BidsValidate".
201219-08:14:15,971 nipype.workflow DEBUG:
[Node] Not cached "/tmp/tmp7bubnm5b/BidsValidate".
201219-08:14:15,972 nipype.utils DEBUG:
Removing contents of /tmp/tmp7bubnm5b/BidsValidate
201219-08:14:15,972 nipype.workflow DEBUG:
[Node] Writing pre-exec report to "/tmp/tmp7bubnm5b/BidsValidate/_report/report.rst"
201219-08:14:15,973 nipype.workflow INFO:
[Node] Running "BidsValidate" ("fmridenoise.interfaces.bids.BIDSValidate")
201219-08:14:15,988 nipype.interface DEBUG:
Creating a ResourceMonitor on a BIDSValidate interface, PID=6.
/usr/local/lib/python3.8/dist-packages/pybids-0.12.4-py3.8.egg/bids/layout/validation.py:46: UserWarning: The ability to pass arguments to BIDSLayout that control indexing is likely to be removed in future; possibly as early as PyBIDS 0.14. This includes the config_filename, ignore, force_index, and index_metadata arguments. The recommended usage pattern is to initialize a new BIDSLayoutIndexer with these arguments, and pass it to the BIDSLayout via the indexer argument.
warnings.warn("The ability to pass arguments to BIDSLayout that control "
missing file(s) for {'subject': '02', 'task': 'exp', 'run': 1}
missing file(s) for {'subject': '02', 'task': 'exp', 'run': 2}
missing file(s) for {'subject': '02', 'task': 'exp', 'run': 3}
missing file(s) for {'subject': '02', 'task': 'exp', 'run': 4}
missing file(s) for {'subject': '02', 'task': 'exp', 'run': 5}
missing file(s) for {'subject': '02', 'task': 'loc', 'run': 1}
missing file(s) for {'subject': '02', 'task': 'loc', 'run': 2}
missing file(s) for {'subject': '02', 'task': 'loc', 'run': 3}
missing file(s) for {'subject': '02', 'task': 'loc', 'run': 4}
missing file(s) for {'subject': '02', 'task': 'loc', 'run': 5}
missing file(s) for {'subject': '03', 'task': 'exp', 'run': 1}
missing file(s) for {'subject': '03', 'task': 'exp', 'run': 2}
missing file(s) for {'subject': '03', 'task': 'exp', 'run': 3}
missing file(s) for {'subject': '03', 'task': 'exp', 'run': 4}
missing file(s) for {'subject': '03', 'task': 'exp', 'run': 5}
missing file(s) for {'subject': '03', 'task': 'loc', 'run': 1}
missing file(s) for {'subject': '03', 'task': 'loc', 'run': 2}
missing file(s) for {'subject': '03', 'task': 'loc', 'run': 3}
missing file(s) for {'subject': '03', 'task': 'loc', 'run': 4}
missing file(s) for {'subject': '03', 'task': 'loc', 'run': 5}
missing file(s) for {'subject': '04', 'task': 'exp', 'run': 1}
missing file(s) for {'subject': '04', 'task': 'exp', 'run': 2}
missing file(s) for {'subject': '04', 'task': 'exp', 'run': 3}
missing file(s) for {'subject': '04', 'task': 'exp', 'run': 4}
missing file(s) for {'subject': '04', 'task': 'exp', 'run': 5}
missing file(s) for {'subject': '04', 'task': 'loc', 'run': 1}
missing file(s) for {'subject': '04', 'task': 'loc', 'run': 2}
missing file(s) for {'subject': '04', 'task': 'loc', 'run': 3}
missing file(s) for {'subject': '04', 'task': 'loc', 'run': 4}
missing file(s) for {'subject': '04', 'task': 'loc', 'run': 5}
missing file(s) for {'subject': '05', 'task': 'exp', 'run': 1}
missing file(s) for {'subject': '05', 'task': 'exp', 'run': 2}
missing file(s) for {'subject': '05', 'task': 'exp', 'run': 3}
missing file(s) for {'subject': '05', 'task': 'exp', 'run': 4}
missing file(s) for {'subject': '05', 'task': 'exp', 'run': 5}
missing file(s) for {'subject': '05', 'task': 'loc', 'run': 1}
missing file(s) for {'subject': '05', 'task': 'loc', 'run': 2}
missing file(s) for {'subject': '05', 'task': 'loc', 'run': 3}
missing file(s) for {'subject': '05', 'task': 'loc', 'run': 4}
missing file(s) for {'subject': '05', 'task': 'loc', 'run': 5}
missing file(s) for {'subject': '06', 'task': 'exp', 'run': 1}
missing file(s) for {'subject': '06', 'task': 'exp', 'run': 2}
missing file(s) for {'subject': '06', 'task': 'exp', 'run': 3}
missing file(s) for {'subject': '06', 'task': 'exp', 'run': 4}
missing file(s) for {'subject': '06', 'task': 'exp', 'run': 5}
missing file(s) for {'subject': '06', 'task': 'loc', 'run': 1}
missing file(s) for {'subject': '06', 'task': 'loc', 'run': 2}
missing file(s) for {'subject': '06', 'task': 'loc', 'run': 3}
missing file(s) for {'subject': '06', 'task': 'loc', 'run': 4}
missing file(s) for {'subject': '06', 'task': 'loc', 'run': 5}
201219-08:14:35,36 nipype.workflow DEBUG:
Saving results file: '/tmp/tmp7bubnm5b/BidsValidate/result_BidsValidate.pklz'
201219-08:14:35,36 nipype.workflow WARNING:
Storing result file without outputs
201219-08:14:35,37 nipype.workflow WARNING:
[Node] Error on "BidsValidate" (/tmp/tmp7bubnm5b/BidsValidate)
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/fmridenoise-src/fmridenoise/main.py", line 236, in
main()
File "/fmridenoise-src/fmridenoise/main.py", line 228, in main
compare(args)
File "/fmridenoise-src/fmridenoise/main.py", line 177, in compare
workflow = init_fmridenoise_wf(input_dir,
File "/fmridenoise-src/fmridenoise/workflows/base.py", line 455, in init_fmridenoise_wf
result = bids_validate.run()
File "/usr/local/lib/python3.8/dist-packages/nipype-1.6.0-py3.8.egg/nipype/pipeline/engine/nodes.py", line 516, in run
result = self._run_interface(execute=True)
File "/usr/local/lib/python3.8/dist-packages/nipype-1.6.0-py3.8.egg/nipype/pipeline/engine/nodes.py", line 635, in _run_interface
return self._run_command(execute)
File "/usr/local/lib/python3.8/dist-packages/nipype-1.6.0-py3.8.egg/nipype/pipeline/engine/nodes.py", line 741, in _run_command
result = self._interface.run(cwd=outdir)
File "/usr/local/lib/python3.8/dist-packages/nipype-1.6.0-py3.8.egg/nipype/interfaces/base/core.py", line 434, in run
runtime = self._run_interface(runtime)
File "/fmridenoise-src/fmridenoise/interfaces/bids.py", line 401, in _run_interface
conf_raw = list(map(lambda d: d['conf_raw'].path, entities_files))
File "/fmridenoise-src/fmridenoise/interfaces/bids.py", line 401, in
conf_raw = list(map(lambda d: d['conf_raw'].path, entities_files))
TypeError: 'NoneType' object is not subscriptable

After some debugging I realised that in get_entity_files inside bids.py is looking for older versions of fmriprep output.

Specifically, lines 296 and 301 of bids.py should be changed from 'suffix': 'regressors', to 'suffix': 'timeseries', to comply with newer fmriprep output filenames.

This does not solve the issue however.

Tbh. BidsValidate is a candidate for refactor.
Can you provide zip file with dummy dataset (you can create such file structure with fmridenoise dummy {bids_dir} {output_dir}? it will help me with debug problem as I currently have no access to output data structure from latest fmriprep RC.

fmriprep_dummy.zip

Here you go.

Is there any ETA for this fix (or any reasonable workaround I can use here)? I am running my analysis now, just wondering if I should wait to get this fixed?

I will try fix this until end of the day, but i cannot make any promises now.

Awesome, thanks!