128 lines
3.2 KiB
Python
128 lines
3.2 KiB
Python
# Authors: The MNE-Python contributors.
|
|
# License: BSD-3-Clause
|
|
# Copyright the MNE-Python contributors.
|
|
|
|
"""Anonymize raw fif file.
|
|
|
|
To anonymize other file types call :func:`mne.io.anonymize_info` on their
|
|
:class:`~mne.Info` objects and resave to disk.
|
|
|
|
Examples
|
|
--------
|
|
.. code-block:: console
|
|
|
|
$ mne anonymize -f sample_audvis_raw.fif
|
|
|
|
"""
|
|
|
|
import os.path as op
|
|
import sys
|
|
|
|
import mne
|
|
|
|
ANONYMIZE_FILE_PREFIX = "anon"
|
|
|
|
|
|
def mne_anonymize(fif_fname, out_fname, keep_his, daysback, overwrite):
|
|
"""Call *anonymize_info* on fif file and save.
|
|
|
|
Parameters
|
|
----------
|
|
fif_fname : path-like
|
|
Raw fif File
|
|
out_fname : path-like | None
|
|
Output file name
|
|
relative paths are saved relative to parent dir of fif_fname
|
|
None will save to parent dir of fif_fname with default prefix
|
|
daysback : int | None
|
|
Number of days to subtract from all dates.
|
|
If None will default to move date of service to Jan 1 2000
|
|
keep_his : bool
|
|
If True his_id of subject_info will NOT be overwritten.
|
|
defaults to False
|
|
overwrite : bool
|
|
Overwrite output file if it already exists
|
|
"""
|
|
raw = mne.io.read_raw_fif(fif_fname, allow_maxshield=True)
|
|
raw.anonymize(daysback=daysback, keep_his=keep_his)
|
|
|
|
# determine out_fname
|
|
dir_name = op.split(fif_fname)[0]
|
|
if out_fname is None:
|
|
fif_bname = op.basename(fif_fname)
|
|
out_fname = op.join(dir_name, f"{ANONYMIZE_FILE_PREFIX}-{fif_bname}")
|
|
elif not op.isabs(out_fname):
|
|
out_fname = op.join(dir_name, out_fname)
|
|
|
|
raw.save(out_fname, overwrite=overwrite)
|
|
|
|
|
|
def run():
|
|
"""Run *mne_anonymize* command."""
|
|
from mne.commands.utils import get_optparser
|
|
|
|
parser = get_optparser(__file__)
|
|
|
|
parser.add_option(
|
|
"-f",
|
|
"--file",
|
|
type="string",
|
|
dest="file",
|
|
help="Name of file to modify.",
|
|
metavar="FILE",
|
|
default=None,
|
|
)
|
|
parser.add_option(
|
|
"-o",
|
|
"--output",
|
|
type="string",
|
|
dest="output",
|
|
help="Name of anonymized output file."
|
|
"`anon-` prefix is added to FILE if not given",
|
|
metavar="OUTFILE",
|
|
default=None,
|
|
)
|
|
parser.add_option(
|
|
"--keep_his",
|
|
dest="keep_his",
|
|
action="store_true",
|
|
help="Keep the HIS tag (not advised)",
|
|
default=False,
|
|
)
|
|
parser.add_option(
|
|
"-d",
|
|
"--daysback",
|
|
type="int",
|
|
dest="daysback",
|
|
help="Move dates in file backwards by this many days.",
|
|
metavar="N_DAYS",
|
|
default=None,
|
|
)
|
|
parser.add_option(
|
|
"--overwrite",
|
|
dest="overwrite",
|
|
action="store_true",
|
|
help="Overwrite input file.",
|
|
default=False,
|
|
)
|
|
|
|
options, args = parser.parse_args()
|
|
if options.file is None:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
fname = options.file
|
|
out_fname = options.output
|
|
keep_his = options.keep_his
|
|
daysback = options.daysback
|
|
overwrite = options.overwrite
|
|
if not fname.endswith(".fif"):
|
|
raise ValueError(f"{fname} does not seem to be a .fif file.")
|
|
|
|
mne_anonymize(fname, out_fname, keep_his, daysback, overwrite)
|
|
|
|
|
|
is_main = __name__ == "__main__"
|
|
if is_main:
|
|
run()
|