Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nipype.interfaces.spm.model use_vox_fdr_correction attribute error #3669

Open
Claar727 opened this issue Sep 10, 2024 · 2 comments
Open

nipype.interfaces.spm.model use_vox_fdr_correction attribute error #3669

Claar727 opened this issue Sep 10, 2024 · 2 comments
Labels

Comments

@Claar727
Copy link

Claar727 commented Sep 10, 2024

Summary

In the documentation for the Threshold method within the nipype SPM interface it shows use_vox_fdr_correction as an optional input with description "Whether to use voxel-based FDR correction for initial threshold (height_threshold_type has to be set to q-value)." Whenever I set this to True and set height_threshold_type to 'q-value' I get the error
TraitError: Cannot set the undefined 'use_vox_fdr_correction' attribute of a 'ThresholdInputSpec' object.
I tried importing ThresholdInputSpec directly and creating an instance to check its available attributes via dir and did not see use_vox_fdr_correction. I also tried setting the height_threshold_type to 'q-value' without including the use_vox_fdr_correction and got an error stating that 'q-value' was not a valid value for height_threshold_type. My workflow works perfectly if I use Topographical FDR or FWE. I can replicate the error using the code snippet below.

Using the inspect module to look at the Threshold definition (i.e., inspect.getsource(spm.Threshold) I can see that there is no use_vox_fdr_correction attribute but when I look through the github it appears in the Threshold class definition. Should I be using a different NiPyPe version to use this capability or should I clone the github instead of installing NiPyPe via pip? Any help is appreciated!

Actual behavior

TraitError

Expected behavior

Voxel-wise FDR correction of contrast images with significance level set via q-value.

How to replicate the behavior

import nipype.interfaces.spm as spm
matlab_cmd = 'path/to/standalone/SPM12 path/to/mcr script'
spm.SPMCommand.set_mlab_paths(matlab_cmd=matlab_cmd, use_mcr=True)
spm.Threshold(height_threshold=0.05, height_threshold_type='q-value', use_vox_fdr_correction=True)

Script/Workflow details

NA
Please put URL to code or code here (if not too long).
import nipype.interfaces.spm as spm
matlab_cmd = 'path/to/standalone/SPM12 path/to/mcr script'
spm.SPMCommand.set_mlab_paths(matlab_cmd=matlab_cmd, use_mcr=True)
spm.Threshold(height_threshold=0.05, height_threshold_type='q-value', use_vox_fdr_correction=True)

Platform details:

SPM version: 12.7771
MCR: v910
Python: 3.10.14
NiPyPe: 1.8.6
OS: Linux

{'commit_hash': '<not found>',
 'commit_source': '(none found)',
 'networkx_version': '3.3',
 'nibabel_version': '5.2.1',
 'nipype_version': '1.8.6',
 'numpy_version': '1.26.4',
 'pkg_path': '/blue/vabfmc/data/working/robert727/.conda/envs/cda2_nipype_wf/lib/python3.10/site-packages/nipype',
 'scipy_version': '1.13.0',
 'sys_executable': '/blue/vabfmc/data/working/robert727/.conda/envs/cda2_nipype_wf/bin/python',
 'sys_platform': 'linux',
 'sys_version': '3.10.14 | packaged by conda-forge | (main, Mar 20 2024, '
                '12:45:18) [GCC 12.3.0]',
 'traits_version': '6.3.2'}

Execution environment

Choose one

  • Container [Tag: ???]
  • My python environment inside container [Base Tag: ???]
  • My python environment outside container
@effigies
Copy link
Member

Is this resolved in 1.9.0?

@Claar727
Copy link
Author

Thanks for getting back to me and for what you do with NiPype, it's been super helpful with my PhD research.

I created a new conda environment with python version 3.11.10 just nipype 1.9.0 and its dependencies and ran my simple working example from above

import nipype.interfaces.spm as spm matlab_cmd = 'path/to/standalone/SPM12 path/to/mcr script' spm.SPMCommand.set_mlab_paths(matlab_cmd=matlab_cmd, use_mcr=True) spm.Threshold(height_threshold=0.05, height_threshold_type='q-value', use_vox_fdr_correction=True)

This raised the error

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/blue/vabfmc/data/working/robert727/.conda/envs/test_nipype/lib/python3.11/site-packages/nipype/interfaces/spm/base.py", line 303, in __init__ super().__init__(**inputs) File "/blue/vabfmc/data/working/robert727/.conda/envs/test_nipype/lib/python3.11/site-packages/nipype/interfaces/base/core.py", line 204, in __init__ self.inputs.trait_set(**inputs) File "/blue/vabfmc/data/working/robert727/.conda/envs/test_nipype/lib/python3.11/site-packages/traits/has_traits.py", line 1509, in trait_set setattr(self, name, value) File "/blue/vabfmc/data/working/robert727/.conda/envs/test_nipype/lib/python3.11/site-packages/traits/base_trait_handler.py", line 74, in error raise TraitError( traits.trait_errors.TraitError: The 'height_threshold_type' trait of a ThresholdInputSpec instance must be 'p-value' or 'stat', but a value of 'q-value' <class 'str'> was specified.

Looking at the 1.9.0 documentation it still states

use_vox_fdr_correction (a boolean) – Whether to use voxel-based FDR correction for initial threshold (height_threshold_type has to be set to q-value). (Nipype default value: False)

and when I ran

>>> spm.Threshold(height_threshold=0.05, use_vox_fdr_correction=True)

it returned

<nipype.interfaces.spm.model.Threshold object at 0x1474eb8803d0>

with no error. So perhaps this issue was partially fixed, or maybe it was completely fixed and the documentation does not reflect it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants