# 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()