Source code for nigsp.blocks

#!/usr/bin/env python3
"""
Blocks of code for workflows.

Attributes
----------
LGR
    Logger
"""

import logging

from . import io, viz
from .operations import nifti

LGR = logging.getLogger(__name__)


[docs] def nifti_to_timeseries(fname, atlasname): """Read a nifti file and returns a normalised timeseries from an atlas. Parameters ---------- fname : str | os.PathLike Filename (and path) of a functional timeseries nifti dataset. atlasname : str | os.PathLike Filename (and path) of an atlas nifti dataset. Returns ------- numpy.ndarray The average parcel timeseries from the given atlas. numpy.ndarray The atlas data. 3D Nifti1Image The full nifti image of the atlas. """ _, fname = io.check_ext(io.EXT_NIFTI, fname, scan=True) _, atlasname = io.check_ext(io.EXT_NIFTI, atlasname, scan=True) data, mask, _ = io.load_nifti_get_mask(fname) atlas, amask, img = io.load_nifti_get_mask(atlasname, is_mask=True, ndim=3) mask *= amask timeseries = nifti.apply_atlas(data, atlas, mask) return timeseries, atlas, img
[docs] def export_metric(scgraph, outext, outprefix): """Export the metrics computed within the library. Parameters ---------- scgraph : SCGraph object The native object of this library. outext : str The desired extension for export - it will force the type of file created. outprefix : str The desired prefix for the export. Returns ------- 0 If everything goes well. """ if outext in io.EXT_NIFTI: try: import nibabel as _ # noqa: F401 except ImportError: LGR.warning( "The necessary library for nifti export (nibabel) " "was not found. Exporting metrics in TSV format instead." ) outext = ".tsv.gz" if scgraph.img is None: LGR.warning( "A necessary atlas nifti image was not found. " "Exporting metrics in TSV format instead." ) outext = ".tsv.gz" if scgraph.sdi is not None: if outext in io.EXT_NIFTI: data = nifti.unfold_atlas(scgraph.sdi, scgraph.atlas) io.export_nifti(data, scgraph.img, f"{outprefix}sdi{outext}") else: io.export_mtx(scgraph.sdi, f"{outprefix}sdi{outext}") elif scgraph.gsdi is not None: for k in scgraph.gsdi.keys(): if outext in io.EXT_NIFTI: data = nifti.unfold_atlas(scgraph.gsdi[k], scgraph.atlas) io.export_nifti(data, scgraph.img, f"{outprefix}gsdi_{k}{outext}") else: io.export_mtx(scgraph.gsdi[k], f"{outprefix}gsdi_{k}{outext}") return 0
[docs] def plot_metric(scgraph, outprefix, atlas=None, thr=None): """If possible, plot metrics as markerplot. Parameters ---------- scgraph : SCGraph object The internal object containing all data. outprefix : str The prefix of the png file to export. img : 3DNiftiImage | None The nifti image of the atlas. atlas : 3D Nifti1Image, numpy.ndarray, or None, optional Either a nifti image containing a valid atlas or a set of parcel coordinates. thr : float or None, optional The threshold to use in plotting the nodes. """ # Check that atlas format is supported. try: atlas_plot = atlas except AttributeError: try: atlas.min() if atlas.ndim == 2 and atlas.shape[1] == 3: atlas_plot = atlas except AttributeError: LGR.warning( "The provided atlas is not in a format supported for markerplots." ) atlas_plot = None # If it is, plot. if atlas_plot is not None: if scgraph.sdi is not None: viz.plot_nodes( scgraph.sdi, atlas_plot, filename=f"{outprefix}sdi.png", thr=thr ) elif scgraph.gsdi is not None: for k in scgraph.gsdi.keys(): viz.plot_nodes( scgraph.gsdi[k], atlas_plot, filename=f"{outprefix}gsdi_{k}.png", thr=thr, ) return 0
""" Copyright 2022, Stefano Moia. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """