Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
13a2d44
Merge tag '25.2.0'
effigies Oct 1, 2025
00ddefa
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Sep 29, 2025
ea1c962
[pre-commit.ci] pre-commit autoupdate (#3539)
effigies Oct 2, 2025
8720e13
Merge branch 'maint/25.2.x'
effigies Oct 3, 2025
b7ef69f
Merge tag '25.2.2'
effigies Oct 6, 2025
eccc071
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Oct 6, 2025
54b9792
[pre-commit.ci] pre-commit autoupdate (#3548)
effigies Oct 7, 2025
1eb822c
chore(deps): bump astral-sh/setup-uv from 6 to 7
dependabot[bot] Oct 13, 2025
9e56317
chore(deps): bump astral-sh/setup-uv from 6 to 7 (#3551)
effigies Oct 13, 2025
2cedf76
Bump tedana version.
tsalo Oct 17, 2025
dc65095
Ignore non-steady-state volumes in T2* estimation.
tsalo Oct 17, 2025
e02d2d3
Merge tag '25.2.3'
effigies Oct 17, 2025
dde664c
chore(deps): bump prefix-dev/setup-pixi from 0.9.1 to 0.9.2
dependabot[bot] Oct 20, 2025
fdc3e14
chore(ci): Minimize uv cache
effigies Oct 27, 2025
615b7ba
fix: Import LinAlgError from a stable location
effigies Oct 27, 2025
6bd3e27
Merge branch 'master' into dependabot/github_actions/prefix-dev/setup…
effigies Oct 27, 2025
fc51405
[DATALAD RUNCMD] pixi lock
effigies Oct 28, 2025
9aeab65
Merge remote-tracking branch 'upstream/master' into t2smap-nss
effigies Oct 28, 2025
6455beb
chore(deps): bump prefix-dev/setup-pixi from 0.9.1 to 0.9.2 (#3557)
effigies Oct 28, 2025
3aa2fcc
Apply suggestions from code review
tsalo Oct 28, 2025
a1c53ad
feat: Ignore non-steady-state volumes in T2*/S0 estimation (#3556)
effigies Oct 28, 2025
e7ce550
chore(ci): Add workflow to update pixi lock on PRs
effigies Oct 28, 2025
d7e5307
chore(ci): Always run, commit only dependency updates
effigies Oct 28, 2025
de1344d
chore(ci): Add workflow to update pixi lock on PRs (#3560)
effigies Oct 28, 2025
d0047f0
chore(deps): bump prefix-dev/setup-pixi from 0.9.2 to 0.9.3
dependabot[bot] Nov 10, 2025
b74324e
chore(deps): bump prefix-dev/setup-pixi from 0.9.2 to 0.9.3 (#3564)
effigies Nov 10, 2025
61094d4
Raise error if two-echo data are provided.
tsalo Nov 24, 2025
8ddb0ee
Raise error if two-echo data are provided.
tsalo Nov 24, 2025
6715881
Merge branch 'raise-error-on-two-echo' of https://github.com/tsalo/fm…
tsalo Nov 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,6 @@ env:
FORCE_COLOR: true

jobs:
check-pixi:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 200
fetch-tags: true
ref: ${{ github.ref }}
- uses: prefix-dev/[email protected]
with:
pixi-version: v0.55.0
run-install: false
- run: pixi lock --check

build-container:
runs-on: ubuntu-latest
permissions:
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/pixi-lock.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
on:
pull_request_target

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check-lockfile:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout pull request
uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha }}
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- name: Find submitting repository
id: get-source-repo
uses: actions/github-script@v8
env:
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.repository }}
PULL: ${{ github.event.number }}
with:
script: |
const { data } = await github.rest.pulls.get({
owner: process.env.OWNER,
repo: process.env.REPO.split('/')[1],
pull_number: process.env.PULL,
});
core.setOutput('remote', data.head.repo.html_url)
core.setOutput('branch', data.head.ref)
- name: Set git identity
run: |
git config --global user.name "nipreps[bot]"
git config --global user.email "[email protected]"
- uses: prefix-dev/[email protected]
with:
pixi-version: v0.58.0
run-install: false
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v7
- name: Update lockfile
run: >
uvx datalad run -i pixi.lock -i pyproject.toml -o pixi.lock --
bash -c '! pixi lock --check || git checkout .'
- name: Push updated lockfile, if needed
run: |
git push $REMOTE HEAD:$BRANCH
env:
REMOTE: ${{ steps.get-source-repo.outputs.remote }}
BRANCH: ${{ steps.get-source-repo.outputs.branch }}
10 changes: 8 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
sudo apt update
sudo apt install -y --no-install-recommends graphviz
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v6
uses: astral-sh/setup-uv@v7
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
Expand All @@ -72,6 +72,9 @@ jobs:
run: tox c
- name: Run tox
run: tox -v --exit-and-dump-after 1200
- name: Minimize uv cache
run: uv cache prune --ci
if: ${{ always() }}
- uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -89,10 +92,13 @@ jobs:
with:
persist-credentials: false
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v6
uses: astral-sh/setup-uv@v7
- name: Install tox
run: uv tool install tox --with=tox-uv
- name: Show tox config
run: tox c -e ${{ matrix.check }}
- name: Run check
run: tox -e ${{ matrix.check }}
- name: Minimize uv cache
run: uv cache prune --ci
if: ${{ always() }}
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ repos:
- id: check-toml
- id: check-added-large-files
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.13.1
rev: v0.13.3
hooks:
- id: ruff-check
args: [ --fix ]
Expand Down
5 changes: 5 additions & 0 deletions fmriprep/interfaces/multiecho.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ class T2SMapInputSpec(CommandLineInputSpec):
'monoexponential model is fit to the raw data.'
),
)
n_exclude = traits.Int(
argstr='--exclude 0:%d',
position=5,
desc='Number of volumes from the beginning of the run to exclude from T2*/S0 estimation.',
)


class T2SMapOutputSpec(TraitedSpec):
Expand Down
2 changes: 1 addition & 1 deletion fmriprep/interfaces/patches.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import nipype.interfaces.io as nio
from nipype.algorithms import confounds as nac
from nipype.interfaces.base import File, traits
from numpy.linalg.linalg import LinAlgError
from numpy.linalg import LinAlgError


class RobustACompCor(nac.ACompCor):
Expand Down
10 changes: 10 additions & 0 deletions fmriprep/workflows/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,16 @@ def init_single_subject_wf(
fieldmap_id = estimator_map.get(bold_file)
jacobian = False

if len(bold_series) == 2:
# This should only be reached if two-echo data are provided and echo-idx is not.
# Raise an error in this case, until we figure out how to support two-echo data.
bold_series_str = '\n\t'.join(bold_series)
raise RuntimeError(
'This BOLD series contains two echoes, which fMRIPrep does not support:\n'
f'\t{bold_series_str}\n'
'Please set "--echo-idx" to process one echo at a time.'
)

if fieldmap_id:
if 'fmap-jacobian' in config.workflow.force:
jacobian = True
Expand Down
5 changes: 4 additions & 1 deletion fmriprep/workflows/bold/fit.py
Original file line number Diff line number Diff line change
Expand Up @@ -981,7 +981,10 @@ def init_bold_native_wf(
# Do NOT set motion_xfm on outputnode
# This prevents downstream resamplers from double-dipping
workflow.connect([
(inputnode, bold_t2s_wf, [('bold_mask', 'inputnode.bold_mask')]),
(inputnode, bold_t2s_wf, [
('bold_mask', 'inputnode.bold_mask'),
('dummy_scans', 'inputnode.skip_vols'),
]),
(boldref_bold, join_echos, [('out_file', 'bold_files')]),
(join_echos, bold_t2s_wf, [('bold_files', 'inputnode.bold_file')]),
(join_echos, outputnode, [('bold_files', 'bold_echos')]),
Expand Down
10 changes: 8 additions & 2 deletions fmriprep/workflows/bold/t2s.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ def init_bold_t2s_wf(
The optimally combined time series was carried forward as the *preprocessed BOLD*.
"""

inputnode = pe.Node(niu.IdentityInterface(fields=['bold_file', 'bold_mask']), name='inputnode')
inputnode = pe.Node(
niu.IdentityInterface(fields=['bold_file', 'bold_mask', 'skip_vols']),
name='inputnode',
)

outputnode = pe.Node(niu.IdentityInterface(fields=['bold', 't2star_map']), name='outputnode')

Expand All @@ -122,7 +125,10 @@ def init_bold_t2s_wf(
)
workflow.connect([
(inputnode, dilate_mask, [('bold_mask', 'in_mask')]),
(inputnode, t2smap_node, [('bold_file', 'in_files')]),
(inputnode, t2smap_node, [
('bold_file', 'in_files'),
('skip_vols', 'n_exclude'),
]),
(dilate_mask, t2smap_node, [('out_mask', 'mask_file')]),
(t2smap_node, outputnode, [('optimal_comb', 'bold'),
('t2star_map', 't2star_map')]),
Expand Down
26 changes: 13 additions & 13 deletions pixi.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ dependencies = [
"requests >= 2.27",
"sdcflows >= 2.15.0",
"smriprep >= 0.19.2",
"tedana >= 25.0.0",
"tedana >= 25.1.0",
"templateflow >= 24.2.2",
"transforms3d >= 0.4.2",
"toml >= 0.10",
Expand Down
Loading