Skip to content
Zvi Baratz edited this page Oct 29, 2025 · 2 revisions

CSA Header Documentation

Parse CSA header information from Siemens MRI acquisitions with Python.

PyPI - Version Tests codecov


What Are CSA Headers?

Siemens MRI scans include CSA (Common Siemens Architecture) headers - proprietary data structures stored in DICOM private tags that contain crucial acquisition parameters not available in standard DICOM fields.

Why CSA Headers Matter:

  • Slice timing for fMRI preprocessing (SPM, FSL, AFNI)
  • B-values and gradient directions for diffusion imaging (DTI/DWI)
  • Complete scanner protocol parameters for QA and verification
  • Advanced acquisition details for research and analysis

Quick Installation

pip install csa_header

Choose Your Path

🚀 I want to get started quickly

Quick Start - Extract slice timing in 5 minutes with a simple example

📖 I need to understand CSA format details

Technical Reference - Deep dive into CSA1/CSA2 binary formats, DICOM tags, and ASCCONV protocol

👩‍💻 I'm integrating CSA parsing into my pipeline

User Guide - Practical examples for fMRI, DWI, and common use cases Integration with NiBabel - Complete workflows combining csa_header with neuroimaging tools

🔧 I'm contributing to the library

Developer Guide - Architecture, implementation details, and contribution guidelines GitHub Repository - Source code and issue tracker

❓ I'm having issues

Troubleshooting - FAQ, common errors, and debugging tips


What Can You Do With CSA Headers?

flowchart LR
    A[Siemens DICOM] --> B[CSA Header]
    B --> C[Slice Timing]
    B --> D[B-values & Gradients]
    B --> E[Protocol Parameters]
    B --> F[QA Metrics]

    C --> G[fMRI Preprocessing]
    D --> H[DTI/DWI Analysis]
    E --> I[Protocol Verification]
    F --> J[Quality Assurance]

    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#e8f5e9
    style D fill:#e8f5e9
    style E fill:#e8f5e9
    style F fill:#e8f5e9
Loading

Example: Extract Slice Timing

import pydicom
from csa_header import CsaHeader

# Load Siemens DICOM file
dcm = pydicom.dcmread('fmri_scan.dcm')

# Extract and parse CSA Series Header
series_header = CsaHeader(dcm[0x0029, 0x1010].value).read()

# Get slice timing for fMRI preprocessing
slice_times = series_header['MosaicRefAcqTimes']['value']
print(f"Slice times: {slice_times}")

→ See Quick Start for complete working examples


Key Features

  • Fast and Lightweight - Minimal dependencies (numpy, pydicom)
  • Comprehensive - Supports both CSA1 and CSA2 formats
  • ASCCONV Parsing - Automatic extraction of scanner protocol parameters
  • Type-Safe - Complete type hints for all public APIs
  • Well-Tested - 96% coverage with 161 tests
  • Python 3.9-3.13 - Modern Python with wide version support
  • NiBabel Compatible - Seamless neuroimaging workflow integration

Documentation Pages

Getting Started

  • Quick Start - 5-minute tutorial for beginners
  • User Guide - Practical usage examples and common patterns

Technical Documentation

Reference


Community & Support


Related Tools

  • pydicom - Read and write DICOM files in Python
  • NiBabel - Access neuroimaging file formats
  • dcm2niix - Convert DICOM to NIfTI with metadata extraction

License: MIT

Maintained by: The open-dicom community