Skip to content
Back to skills

Data Preparation

ASecurity

"Prepare, validate, and troubleshoot DeepMedic 0.8.4 NIFTI

  • 247 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
businessrusttestingdatabasedocumentation

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill data-preparation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Data Preparation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Data Preparation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-data-preparation-0a8eb7ef/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-data-preparation-0a8eb7ef)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: data-preparation
description: "Prepare, validate, and troubleshoot DeepMedic 0.8.4 NIFTI
  subjects, modality manifests, labels, ROI masks, CSV inputs, and intensity
  normalization before training, validation, or inference."
disable-model-invocation: true
metadata:
  disco-role: operating
license: NOASSERTION
---

# DeepMedic data preparation

Use this skill when a Researcher must turn a new multi-modal NIFTI dataset into
DeepMedic input, or diagnose a path, list, grid, label, ROI, or normalization
failure. Establish the subject ordering and spatial contract first; only then
hand the prepared inputs to the session-specific skill.

## Route by need

- Read [references/data-formats.md](references/data-formats.md) for the
  canonical NIFTI, manifest, CSV, label, ROI, and normalization contracts.
- Read [references/troubleshooting.md](references/troubleshooting.md) when a
  preflight check, loader warning, shape error, label error, or z-score result
  is unexpected.
- Run the safe standalone checker at
  [scripts/validate_nifti_manifest.py](scripts/validate_nifti_manifest.py) for
  explicit channel list files. It does not import DeepMedic or mutate data.
- After data passes this skill, route architecture decisions to
  [../model-architecture/SKILL.md](../model-architecture/SKILL.md), training
  execution to [../training/SKILL.md](../training/SKILL.md), and testing/output
  handling to [../inference/SKILL.md](../inference/SKILL.md).

## Required preparation workflow

1. **Define the subject table.** Give every subject one row/order. For each
   row, record the modality paths in fixed channel order, and optionally one
   label and one ROI path. Never independently sort one modality list after
   assembling the table.
2. **Choose one input representation.** Use classic per-channel list files or
   the supported dataframe branch. For list files, put one data path per line;
   relative data paths are relative to that list file. For CSV, use
   `channel_<name>` columns and remember that the implementation sorts those
   column names alphabetically. See the data-formats reference for required
   `ground_truth`, optional `roi_mask`, and optional `prediction_filename`
   signals.
3. **Prepare the spatial grid.** All modalities, labels, and ROI masks for a
   subject must be co-registered and have the same voxel-array shape and voxel
   size. Resample/crop/orient the complete subject set together before making
   manifests. Use one voxel size throughout the database. Do not expect
   DeepMedic to register or resample files at load time.
4. **Prepare labels and ROI.** Training labels are required. Background is `0`
   and task classes are contiguous increasing integers (`0, 1, 2, ...`); with
   `N` output classes, values must be in `[0, N)`. ROI is optional: absent ROI
   means whole-volume sampling/inference and whole-volume normalization
   statistics. A provided ROI uses positive voxels as inside.
5. **Validate without changing data.** Run the bundled checker once for all
   channel list files, with optional labels/ROI. It checks list lengths, file
   existence, NIFTI loading/dimensionality, per-subject shape and voxel-size
   agreement, and optional affine and label constraints. Use
   `--read-data` for a full payload read. Also inspect voxel-size consistency
   across subjects and verify co-registration visually or with a trusted
   imaging QA process; those are not fully proven by a header check.
6. **Decide normalization explicitly.** Prefer data whose intensity policy is
   known. If applying runtime z-score, configure one mode only: all channels or
   a boolean per-channel list. Statistics use positive ROI voxels, or the full
   volume without ROI; cutoffs only control statistic estimation. Check for an
   empty/constant selected region and avoid double-normalizing exported data.
7. **Record the handoff.** Preserve the final channel order, case count, input
   representation, grid/resampling policy, label set/class count, ROI policy,
   normalization parameters, validator result, and any intentional missing
   modality (`-`) in the task notes. A later session skill should consume this
   record rather than reconstructing it from filenames.

## Exact runtime contracts

The source-backed data I/O and preprocessing signatures are:

```text
load_volume(filepath)

saveImgToNiiWithOriginalHdr(imgToSave, filepathTarget,
                            filepathOriginToCopyHeader,
                            npDtype=np.dtype(np.float32), log=None)

savePredImgToNiiWithOriginalHdr(labelImageCreatedByPredictions,
                                namesForSavingPreds,
                                listOfFilepathsToEachChannelOfEachPatient,
                                case_i, suffixToAdd="",
                                npDtype=np.dtype(np.float32), log=None)

saveFmImgToNiiWithOriginalHdr(fmImageCreatedByVisualisation,
                              namesForSavingPreds,
                              listOfFilepathsToEachChannelOfEachPatient,
                              image_i, index_of_typeOfPathway_to_visualize,
                              index_of_layer_in_pathway_to_visualize,
                              index_of_FM_in_pathway_to_visualize, log=None)

save4DImgWithAllFmsToNiiWithOriginalHdr(multidimImageWithAllVisualisedFms,
                                        namesForSavingFms,
                                        listOfFilepathsToEachChannelOfEachPatient,
                                        image_i, log=None)

normalize_zscore_subj(log, channels, roi_mask, prms,
                      verbose_lvl=0, job_id='', in_place=True)

parse_filelist(filelist_path, make_abs=False)
parse_fpaths_of_channs_from_filelists(list_of_filelists, abs_path_root)
get_paths_from_df(log, df, abs_path, req_gt=True)
```

`load_volume` returns a 3-D NumPy array: 2-D becomes `x,y,1`; 4-D is allowed
only with singleton fourth dimension. The NIFTI save helpers copy the source
header affine and relevant zooms; the generic helper creates parent folders
and appends `.nii.gz` when the target does not already end in that suffix.
Prediction/feature helpers derive output names from per-case name tokens and
use the first channel as the header source. They are output helpers, not a
replacement for input registration.

`normalize_zscore_subj` expects channels shaped `[channels, x, y, z]` and an
ROI shaped `[x, y, z]` or `None`. `prms` contains
`apply_to_all_channels`, `apply_per_channel`, `cutoff_percents`,
`cutoff_times_std`, and `cutoff_below_mean`; incompatible all/per-channel
selection is rejected. It returns `(channels, applied)`, mutating the input
by default. The long-form behavior and failure cases are in the references.

## Scope boundary

This sub-skill does not choose CNN pathways, class-head architecture, patch
sizes, optimizer settings, training schedules, checkpoint loading, or feature
map inference. Do not “repair” a data error by changing those settings. Use
the three linked sibling skills only after this input contract is satisfied.

## Evidence and version caveat

This operating contract follows DeepMedic 0.8.4 source behavior for I/O,
manifest parsing, dataframe extraction, subject loading, label checks, and
normalization. The prose documentation calls dataframe input new/not yet
used, while the 0.8.4 parser contains active dataframe branches; follow the
code when the two conflict. The prose also says `.nii`, while the bundled
examples use `.nii.gz`; the loader delegates to NiBabel and the examples show
that both common NIFTI suffixes are an intended safe contract. The bundled
example names illustrate two modalities, labels, and brain masks only; they
are not a requirement that a new task have exactly two channels or a brain
ROI.

Files in this skill

  • SKILL.md7.6 KB
  • references/data-formats.md10.7 KB
  • references/troubleshooting.md8.6 KB
  • scripts/validate_nifti_manifest.py12.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.