Skip to main content

BIDS-Aid

Latest Version Python Versions Source Code License Test Status codecov Code style: black Documentation Status

A toolkit for creating and managing BIDS-compliant fMRI datasets without original DICOMs. Intended for cases that require custom code and flexibility, such as when NIfTI source files lack consistent naming conventions, organized folder hierarchies, or sidecar metadata. Includes utilities for metadata reconstruction from NIfTI headers, file renaming, neurobehavioral log parsing (for E-Prime and Presentation), and JSON sidecar generation.

Installation

Standard Installation

pip install bidsaid[all]

Development Version

git clone --depth 1 https://github.com/donishadsmith/bidsaid/
cd bidsaid
pip install -e .[all]

Features

  • File renaming: Convert arbitrary filenames to BIDS-compliant naming

  • File creation: Generate dataset_description.json and participants.tsv

  • Metadata utilities: Extract header metadata (e.g., TR, orientation, scanner info) and generate slice timing for singleband and multiband acquisitions

  • Log parsing: Load Presentation (e.g., .log) and E-Prime 3 (e.g, .edat3, .txt) files as DataFrames, or use extractor classes to generate BIDS events for block and event designs:

    Class Software Design Description
    PresentationBlockExtractor Presentation Block Extracts block-level timing with mean RT and accuracy
    PresentationEventExtractor Presentation Event Extracts trial-level timing with individual responses
    EPrimeBlockExtractor E-Prime 3 Block Extracts block-level timing with mean RT and accuracy
    EPrimeEventExtractor E-Prime 3 Event Extracts trial-level timing with individual responses
  • Auditing: Generate a table of showing the presence or abscence of certain files for each subject and session

  • QC: Creation and computation of certain quality control metrics (e.g., framewise displacement)

Quick Start

Creating BIDS-Compliant Filenames

from bidsaid.bids import create_bids_file

create_bids_file(
    src_file="101_mprage.nii.gz",
    subj_id="101",
    ses_id="01",
    desc="T1w",
    dst_dir="/data/bids/sub-101/ses-01/anat",
)

Extracting Metadata from NIfTI Headers

from bidsaid.metadata import get_tr, create_slice_timing, get_image_orientation

tr = get_tr("sub-01_bold.nii.gz")
slice_timing = create_slice_timing(
    "sub-01_bold.nii.gz",
    slice_acquisition_method="interleaved",
    multiband_factor=4,
)
orientation_map, orientation = get_image_orientation("sub-01_bold.nii.gz")

Loading Raw Log Files

from bidsaid.parsers import (
    load_presentation_log,
    load_eprime_log,
    convert_edat3_to_txt,
)

presentation_df = load_presentation_log("sub-01_task.log", convert_to_seconds=["Time"])

# E-Prime 3: convert .edat3 to text first, or load .txt directly
eprime_txt_path = convert_edat3_to_txt("sub-01_task.edat3")
eprime_df = load_eprime_log(eprime_txt_path, convert_to_seconds=["Stimulus.OnsetTime"])

Creating BIDS Events from Presentation Logs

from bidsaid.bids import PresentationBlockExtractor
import pandas as pd

extractor = PresentationBlockExtractor(
    "sub-01_task-faces.log",
    trial_types=("Face", "Place"),  # Can use regex ("Fa.*", "Pla.*")
    scanner_event_type="Pulse",
    scanner_trigger_code="99",
    convert_to_seconds=["Time"],
    rest_block_codes="crosshair",
    rest_code_pattern="fixed",
    split_cue_from_block=True,
)

events_df = pd.DataFrame(
    {
        "onset": extractor.extract_onsets(),
        "duration": extractor.extract_durations(),
        "trial_type": extractor.extract_trial_types(),
        "mean_rt": extractor.extract_mean_reaction_times(),
    }
)

Creating BIDS Events from E-Prime Logs

from bidsaid.bids import EPrimeEventExtractor
import pandas as pd

extractor = EPrimeEventExtractor(
    "sub-01_task-gonogo.txt",
    trial_types="Go|NoGo",  # Can also use ("Go", "NoGo")
    onset_column_name="Stimulus.OnsetTime",
    procedure_column_name="Procedure",
    trigger_column_name="ScannerTrigger.RTTime",
    convert_to_seconds=[
        "Stimulus.OnsetTime",
        "Stimulus.OffsetTime",
        "ScannerTrigger.RTTime",
    ],
)

events_df = pd.DataFrame(
    {
        "onset": extractor.extract_onsets(),
        "duration": extractor.extract_durations(
            offset_column_name="Stimulus.OffsetTime"
        ),
        "trial_type": extractor.extract_trial_types(),
        "reaction_time": extractor.extract_reaction_times(
            reaction_time_column_name="Stimulus.RT"
        ),
    }
)

Audit BIDS Dataset

from bidsaid.audit import BIDSAuditor
from bidsaid.simulate import simulate_bids_dataset

bids_root = simulate_bids_dataset()

auditor = BIDSAuditor(bids_root)
auditor.check_raw_nifti_availability()
auditor.check_raw_sidecar_availability()
auditor.check_events_availability()
auditor.check_preprocessed_nifti_availability()

analysis_dir = bids_root / "first_level"
analysis_sub_dir = analysis_dir / "sub-1" / "ses-1"
analysis_sub_dir.mkdir(parents=True, exist_ok=True)

with open(analysis_sub_dir / "sub-1_task-rest_desc-betas.nii.gz", "w") as f:
    pass

auditor.check_first_level_availability(analysis_dir=analysis_dir, desc="betas")

Compute QC

from bidsaid.qc import create_censor_mask, compute_consecutive_censor_stats

censor_mask = create_censor_mask(
    "confounds.tsv",
    column_name="framewise_displacement",
    threshold=0.5,
    n_dummy_scans=4,
)

consecutive_censor_mean, consecutive_censor_std = compute_consecutive_censor_stats(
    censor_mask, n_dummy_scans=4
)

See the API documentation for full parameter details and additional utilities.

Metadata

Release files for bidsaid 0.31.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bidsaid 0.31.0
File Size Uploaded
bidsaid-0.31.0.tar.gz 95.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for bidsaid 0.31.0
File
bidsaid-0.31.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
bidsaid-0.31.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
bidsaid-0.31.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
bidsaid-0.31.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 1.6 MB

Release files / bidsaid-0.31.0.tar.gz

Download URL bidsaid-0.31.0.tar.gz
Size 95.4 kB
Tags Source
SHA-256 checksum
How to use checksums
cf3cc4f34621f412872dfa798e38fa4462eb66aef2dd02e9912b9ab3de02d356
BLAKE2b-256 checksum
How to use checksums
b30657a1bf0f55817b942f95cda9704aba07e684d6bb98405e7c42c7ae19c852
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / bidsaid-0.31.0-cp310-abi3-win_amd64.whl

Download URL bidsaid-0.31.0-cp310-abi3-win_amd64.whl
Size 288.8 kB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
4e6fb7d3d96c86be7309ce207a93894175167a7291732b34247d425f30447055
BLAKE2b-256 checksum
How to use checksums
18aae48df873151d093d1bc2f25c4504ba16d75d2aa607d39ab01c5cc8059dab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / bidsaid-0.31.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL bidsaid-0.31.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 445.5 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
0922688137cac3e856cc19b061f7277bf5f799815c47854ca2553bb746b838aa
BLAKE2b-256 checksum
How to use checksums
edc82f42d21815f5c663cae87ff32ce1ddf6a8a3ed5c4a47b36c0d654aa5e90f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / bidsaid-0.31.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL bidsaid-0.31.0-cp310-abi3-macosx_11_0_arm64.whl
Size 396.5 kB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
64f3a0f392666d7187e2160900548c05aa58602f6539fa09c51e920115a50017
BLAKE2b-256 checksum
How to use checksums
2fa040b4e53795e79f18f842b90be8ff7a6afef9e0478d70de8a1bc65f62d4a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release files / bidsaid-0.31.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL bidsaid-0.31.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 398.2 kB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e5446e191b73496a51eb97bd3dae01fde21b4829a04f55e5240a5238a83062e4
BLAKE2b-256 checksum
How to use checksums
2338bf5ec671ec2fde9f00e4710876c0c553b68b14bd8999b5bb469174efd7df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release history Release notifications | RSS feed

This release

0.31.0 This release

5 release files

0.30.0

5 release files

0.29.0

5 release files

0.28.0

5 release files

0.25.1

2 release files

0.25.0

2 release files

0.24.0

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.22.1

2 release files

0.22.0

2 release files

0.21.0

2 release files

0.20.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page