Example #1
0
    def _run_interface(self, runtime):
        mask = None
        if isdefined(self.inputs.in_mask):
            mask = self.inputs.in_mask

        title = self.inputs.title
        if isdefined(self.inputs.subject):
            title += ', subject %s' % self.inputs.subject

        if isdefined(self.inputs.metadata):
            title += ' (' + '_'.join(self.inputs.metadata) + ')'

        if isdefined(self.inputs.figsize):
            fig = plot_mosaic(
                self.inputs.in_file,
                title=title,
                overlay_mask=mask,
                figsize=self.inputs.figsize)
        else:
            fig = plot_mosaic(
                self.inputs.in_file,
                title=title,
                overlay_mask=mask)

        fig.savefig(self.inputs.out_file, dpi=self.inputs.dpi)

        return runtime
Example #2
0
def plot_anat_mosaic_helper(in_file, subject_id, session_id,
                            run_id, out_name, bbox_mask_file=None,
                            title='T1w session: {session_id} run: {run_id}',
                            only_plot_noise=False):
    from mriqc.interfaces.viz_utils import plot_mosaic
    import os
    title = title.format(**{"session_id": session_id,
                          "run_id": run_id})
    fig = plot_mosaic(in_file, bbox_mask_file=bbox_mask_file, title=title,
                      only_plot_noise=only_plot_noise)
    fig.savefig(out_name, format=out_name.split('.')[-1], dpi=300)

    return os.path.abspath(out_name)
Example #3
0
    def _subject_plots(self, subid):
        # Get subject-specific info
        subdf = self.dataframe.loc[self.dataframe['subject_id'] == subid]
        sessions = sorted(pd.unique(subdf.session_id.ravel()))
        subject_plots = []

        # Create figure here to avoid too many figures
        fig = plt.Figure(figsize=DINA4_LANDSCAPE)
        # Re-build mosaic location
        for sesid in sessions:
            sesdf = subdf.loc[subdf['session_id'] == sesid]
            scans = sorted(pd.unique(sesdf.run_id.ravel()))

            # Each scan has a volume and (optional) fd plot
            for scanid in scans:
                nii_paths = op.join(self.report_dir, self.qctype[:4],
                                      '{}_ses-{}_{}/mosaic*.nii.gz'.format(subid, sesid, scanid))
                nii_files = sorted(glob(nii_paths))
                log.info('Found mosaic files: %s', nii_files)

                for mosaic in nii_files:
                    fname, ext = op.splitext(op.basename(mosaic))
                    if ext == '.gz':
                        fname, _ = op.splitext(fname)
                    fname = fname[7:]
                    out_mosaic = op.join(
                        self.work_dir, 'mosaic_{}_{}_ses-{}_run-{}_{}.pdf'.format(
                            self.qctype[:4], subid, sesid, scanid, fname))
                    title = 'Filename: {}, session: {}, other: {}'.format(fname, sesid, scanid)
                    fig = plot_mosaic(mosaic, fig=fig, title=title)
                    fig.savefig(out_mosaic, dpi=self.dpi)
                    fig.clf()
                    subject_plots.append(out_mosaic)

                plots = op.join(self.report_dir, self.qctype[:4],
                                '{}_ses-{}_{}/plot_*.pdf'.format(subid, sesid, scanid))

                for fname in sorted(glob(plots)):
                    if op.isfile(fname):
                        subject_plots.append(fname)

        plt.close()

        # Summary cover
        sfailed = []
        if self.failed:
            sfailed = ['%s (%s)' % (s[1], s[2])
                       for s in self.failed if subid == s[0]]
        out_sum = op.join(self.work_dir, '%s_summary_%s.pdf' % (self.qctype, subid))
        self.summary_cover(sub_id=subid, out_file=out_sum)
        subject_plots.insert(0, out_sum)

        # Summary (violinplots) of QC measures
        qc_ms = op.join(self.work_dir, '%s_measures_%s.pdf' % (self.qctype, subid))

        func = getattr(self, '_report_' + self.qctype)
        func(subject=subid, out_file=qc_ms)
        subject_plots.append(qc_ms)

        sub_path = None
        if len(subject_plots) > 0:
            # Generate final report with collected pdfs in plots
            sub_path = op.join(self.out_dir, '{}_{}.pdf'.format(self.qctype, subid))
            concat_pdf(subject_plots, sub_path)
            self.result[subid] = {'success': True, 'path': sub_path}
        return sub_path
Example #4
0
    def _subject_plots(self, subid):
        # Get subject-specific info
        subdf = self.dataframe.loc[self.dataframe['subject_id'] == subid]
        sessions = sorted(pd.unique(subdf.session_id.ravel()))
        subject_plots = []

        # Create figure here to avoid too many figures
        fig = plt.Figure(figsize=DINA4_LANDSCAPE)
        # Re-build mosaic location
        for sesid in sessions:
            sesdf = subdf.loc[subdf['session_id'] == sesid]
            scans = sorted(pd.unique(sesdf.run_id.ravel()))

            # Each scan has a volume and (optional) fd plot
            for scanid in scans:
                nii_paths = op.join(self.report_dir, self.qctype[:4],
                                    '{}_ses-{}_{}/mosaic*.nii.gz'.format(subid, sesid, scanid))
                nii_files = sorted(glob(nii_paths))

                if not nii_files:
                    nii_paths = op.join(
                        self.report_dir, self.qctype[:4], '{}_ses-[u]{}_[u]{}/mosaic*.nii.gz'.format(
                            subid, sesid, scanid))
                    nii_files = sorted(glob(nii_paths))

                if not nii_files:
                    MRIQC_REPORT_LOG.warning(
                        'No mosaic files were found for subject %s, session %s',
                        subid, sesid)

                for mosaic in nii_files:
                    fname, ext = op.splitext(op.basename(mosaic))
                    if ext == '.gz':
                        fname, _ = op.splitext(fname)
                    fname = fname[7:]
                    out_mosaic = op.join(
                        self.work_dir, 'mosaic_{}_{}_ses-{}_run-{}_{}.pdf'.format(
                            self.qctype[:4], subid, sesid, scanid, fname))
                    title = 'Filename: {}, session: {}, other: {}'.format(fname, sesid, scanid)
                    fig = plot_mosaic(mosaic, fig=fig, title=title)
                    fig.savefig(out_mosaic, dpi=self.dpi)
                    fig.clf()
                    subject_plots.append(out_mosaic)

                plots = op.join(self.report_dir, self.qctype[:4],
                                '{}_ses-{}_{}/plot_*.pdf'.format(subid, sesid, scanid))
                pdf_plots = sorted(glob(plots))

                if not pdf_plots:
                    plots = op.join(
                        self.report_dir, self.qctype[:4],
                        '{}_ses-[u]{}_[u]{}/plot_*.pdf'.format(subid, sesid, scanid))
                    pdf_plots = sorted(glob(plots))

                if not pdf_plots:
                    MRIQC_REPORT_LOG.warning(
                        'No PDF plots were found for subject %s, session %s', subid, sesid)
                for fname in sorted(pdf_plots):
                    if op.isfile(fname):
                        subject_plots.append(fname)

        plt.close()

        # Summary cover
        # sfailed = []
        # if self.failed:
        #     sfailed = ['%s (%s)' % (s[1], s[2])
        #                for s in self.failed if subid == s[0]]
        out_sum = op.join(self.work_dir, '%s_summary_%s.pdf' % (self.qctype, subid))
        self.summary_cover(sub_id=subid, out_file=out_sum)
        subject_plots.insert(0, out_sum)

        # Summary (violinplots) of QC measures
        qc_ms = op.join(self.work_dir, '%s_measures_%s.pdf' % (self.qctype, subid))

        func = getattr(self, '_report_' + self.qctype)
        func(subject=subid, out_file=qc_ms)
        subject_plots.append(qc_ms)

        sub_path = None
        if len(subject_plots) > 0:
            # Generate final report with collected pdfs in plots
            sub_path = op.join(self.out_dir, '{}_{}.pdf'.format(self.qctype, subid))
            concat_pdf(subject_plots, sub_path)
            self.result[subid] = {'success': True, 'path': sub_path}
            MRIQC_REPORT_LOG.info(
                'Generated individual %s report (%s) for subject %s',
                self.qctype, sub_path, subid)
        return sub_path