示例#1
0
    def _run_interface(self, runtime):

        # Load the zstat data
        z_img = nib.load(self.inputs.zstat_file)
        z_data = z_img.get_data()

        # Load the peaks
        peaks_df = pd.read_table(self.inputs.localmax_file, "\t")
        peaks = peaks_df[["x", "y", "z"]].values

        # Possibly do the segmentation, if there are peaks
        if len(peaks):
            seg, markers = self.segment(z_data, peaks)
        else:
            seg, markers = np.zeros_like(z_data), np.zeros_like(z_data)

        # Set up the output names
        seg_fname = op.basename(add_suffix(self.inputs.zstat_file, "seg"))
        peak_fname = op.basename(add_suffix(self.inputs.zstat_file, "peaks"))
        lut_fname = seg_fname.replace(".nii.gz", ".txt")

        self._seg_fname = seg_fname
        self._peak_fname = peak_fname
        self._lut_fname = lut_fname

        # Write the output images
        self.write_output(seg, seg_fname)
        self.write_output(markers, peak_fname)

        # Create a LUT and save it
        lut_data = self.create_lut(markers)
        lut_data.to_csv(lut_fname, "\t", index=False)

        return runtime
示例#2
0
    def _run_interface(self, runtime):

        # Load the zstat data
        z_img = nib.load(self.inputs.zstat_file)
        z_data = z_img.get_data()

        # Load the peaks
        peaks_df = pd.read_table(self.inputs.localmax_file, "\t")
        peaks = peaks_df[["x", "y", "z"]].values

        # Possibly do the segmentation, if there are peaks
        if len(peaks):
            seg, markers = self.segment(z_data, peaks)
        else:
            seg, markers = np.zeros_like(z_data), np.zeros_like(z_data)

        # Set up the output names
        seg_fname = op.basename(add_suffix(self.inputs.zstat_file, "seg"))
        peak_fname = op.basename(add_suffix(self.inputs.zstat_file, "peaks"))
        lut_fname = seg_fname.replace(".nii.gz", ".txt")

        self._seg_fname = seg_fname
        self._peak_fname = peak_fname
        self._lut_fname = lut_fname

        # Write the output images
        self.write_output(seg, seg_fname)
        self.write_output(markers, peak_fname)

        # Create a LUT and save it
        lut_data = self.create_lut(markers)
        lut_data.to_csv(lut_fname, "\t", index=False)

        return runtime
示例#3
0
    def _run_interface(self, runtime):

        n_runs = len(self.inputs.rigids)
        if isdefined(self.inputs.first_rigid):
            first_rigid = self.inputs.first_rigid
        else:
            first_rigid = self.inputs.rigids[0]

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Combine the transformations
            run_rigid = self.inputs.rigids[i]
            runtime, full_rigid = self.combine_rigids(runtime,
                                                      first_rigid,
                                                      run_rigid)

            # Warp the timeseries files
            run_timeseries = self.inputs.timeseries[i]
            name = "res4d" if self.inputs.residual else "timeseries"
            out_timeseries = op.join(out_dir, name + "_xfm.nii.gz")
            runtime = self.apply_fsl_rigid(runtime, run_timeseries,
                                           out_timeseries, full_rigid)

            # Warp the mask file
            run_mask = self.inputs.masks[i]
            out_mask_fname = op.basename(add_suffix(run_mask, "xfm"))
            out_mask = op.join(out_dir, out_mask_fname)
            runtime = self.apply_fsl_rigid(runtime, run_mask,
                                           out_mask, full_rigid)

            # Warp the mean file
            run_mean = self.inputs.means[i]
            out_mean_fname = op.basename(add_suffix(run_mean, "xfm"))
            out_mean = op.join(out_dir, out_mean_fname)
            runtime = self.apply_fsl_rigid(runtime, run_mean,
                                           out_mean, full_rigid)

            # Copy the matrix to go from this space to the anatomy
            if not i:
                tkreg_fname = op.basename(self.inputs.tkreg_rigid)
                out_tkreg = op.join(out_dir, tkreg_fname)
                shutil.copyfile(self.inputs.tkreg_rigid, out_tkreg)

        self.out_files = out_files
        return runtime
示例#4
0
    def _run_interface(self, runtime):

        n_runs = len(self.inputs.rigids)
        if isdefined(self.inputs.first_rigid):
            first_rigid = self.inputs.first_rigid
        else:
            first_rigid = self.inputs.rigids[0]

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Combine the transformations
            run_rigid = self.inputs.rigids[i]
            runtime, full_rigid = self.combine_rigids(runtime, first_rigid,
                                                      run_rigid)

            # Warp the timeseries files
            run_timeseries = self.inputs.timeseries[i]
            name = "res4d" if self.inputs.residual else "timeseries"
            out_timeseries = op.join(out_dir, name + "_xfm.nii.gz")
            runtime = self.apply_fsl_rigid(runtime, run_timeseries,
                                           out_timeseries, full_rigid)

            # Warp the mask file
            run_mask = self.inputs.masks[i]
            out_mask_fname = op.basename(add_suffix(run_mask, "xfm"))
            out_mask = op.join(out_dir, out_mask_fname)
            runtime = self.apply_fsl_rigid(runtime, run_mask, out_mask,
                                           full_rigid)

            # Warp the mean file
            run_mean = self.inputs.means[i]
            out_mean_fname = op.basename(add_suffix(run_mean, "xfm"))
            out_mean = op.join(out_dir, out_mean_fname)
            runtime = self.apply_fsl_rigid(runtime, run_mean, out_mean,
                                           full_rigid)

            # Copy the matrix to go from this space to the anatomy
            if not i:
                tkreg_fname = op.basename(self.inputs.tkreg_rigid)
                out_tkreg = op.join(out_dir, tkreg_fname)
                shutil.copyfile(self.inputs.tkreg_rigid, out_tkreg)

        self.out_files = out_files
        return runtime
示例#5
0
    def apply_ants_warp(self, runtime, in_file, out_file, rigid):

        out_rigid = op.basename(add_suffix(out_file, "anat"))

        continuous_interp = dict(trilinear="trilin",
                                 spline="cubic")[self.interp]
        interp = "nearest" if "mask" in in_file else continuous_interp
        cmdline_rigid = ["mri_vol2vol",
                         "--mov", in_file,
                         "--reg", rigid,
                         "--fstarg",
                         "--" + interp,
                         "--o", out_rigid,
                         "--no-save-reg"]
        runtime = submit_cmdline(runtime, cmdline_rigid)

        continuous_interp = dict(trilinear="trilin",
                                 spline="BSpline")[self.interp]
        interp = "NN" if "mask" in in_file else continuous_interp
        cmdline_warp = ["WarpImageMultiTransform",
                        "3",
                        out_rigid,
                        out_file,
                        self.inputs.warpfield,
                        self.inputs.affine,
                        "-R", self.ref_file]
        if interp != "trilin":
            cmdline_warp.append("--use-" + interp)
        runtime = submit_cmdline(runtime, cmdline_warp)
        return runtime
示例#6
0
    def combine_rigids(self, runtime, first_rigid, second_rigid):
        """Invert the first rigid and combine with the second.

        This creates a transformation from run n to run 1 space,
        through the anatomical coregistration.

        """
        first_inv = op.basename(add_suffix(first_rigid, "inv"))
        cmdline_inv = [
            "convert_xfm", "-omat", first_inv, "-inverse", first_rigid
        ]
        runtime = submit_cmdline(runtime, cmdline_inv)

        full_rigid = op.basename(add_suffix(second_rigid, "to_epi"))
        cmdline_full = [
            "convert_xfm", "-omat", full_rigid, "-concat", first_inv,
            second_rigid
        ]
        runtime = submit_cmdline(runtime, cmdline_full)

        return runtime, full_rigid
示例#7
0
    def _run_interface(self, runtime):

        n_runs = len(self.inputs.rigids)
        if isdefined(self.inputs.first_rigid):
            first_rigid = self.inputs.first_rigid
        else:
            first_rigid = self.inputs.rigids[0]

        # Unpack the long file lists to be ordered by run
        copes = self.unpack_files("copes", n_runs)
        varcopes = self.unpack_files("varcopes", n_runs)
        sumsquares = self.unpack_files("sumsquares", n_runs)

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Combine the transformations
            run_rigid = self.inputs.rigids[i]
            runtime, full_rigid = self.combine_rigids(runtime,
                                                      first_rigid,
                                                      run_rigid)

            # Select the files for this run
            run_copes = copes[i]
            run_varcopes = varcopes[i]
            run_sumsquares = sumsquares[i]
            run_mask = [self.inputs.masks[i]]
            run_mean = [self.inputs.means[i]]
            all_files = (run_copes + run_varcopes +
                         run_sumsquares + run_mask + run_mean)

            # Apply the transformation to each file
            for in_file in all_files:

                out_fname = op.basename(add_suffix(in_file, "xfm"))
                out_file = op.join(out_dir, out_fname)
                runtime = self.apply_fsl_rigid(runtime, in_file,
                                               out_file, full_rigid)

            # Copy the matrix to go from this space to the anatomy
            if not i:
                tkreg_fname = op.basename(self.inputs.tkreg_rigid)
                out_tkreg = op.join(out_dir, tkreg_fname)
                shutil.copyfile(self.inputs.tkreg_rigid, out_tkreg)

        self.out_files = out_files
        return runtime
示例#8
0
    def combine_rigids(self, runtime, first_rigid, second_rigid):
        """Invert the first rigid and combine with the second.

        This creates a transformation from run n to run 1 space,
        through the anatomical coregistration.

        """
        first_inv = op.basename(add_suffix(first_rigid, "inv"))
        cmdline_inv = ["convert_xfm",
                       "-omat", first_inv,
                       "-inverse",
                       first_rigid]
        runtime = submit_cmdline(runtime, cmdline_inv)

        full_rigid = op.basename(add_suffix(second_rigid, "to_epi"))
        cmdline_full = ["convert_xfm",
                        "-omat", full_rigid,
                        "-concat", first_inv,
                        second_rigid]
        runtime = submit_cmdline(runtime, cmdline_full)

        return runtime, full_rigid
示例#9
0
    def _run_interface(self, runtime):

        n_runs = len(self.inputs.rigids)
        if isdefined(self.inputs.first_rigid):
            first_rigid = self.inputs.first_rigid
        else:
            first_rigid = self.inputs.rigids[0]

        # Unpack the long file lists to be ordered by run
        copes = self.unpack_files("copes", n_runs)
        varcopes = self.unpack_files("varcopes", n_runs)
        sumsquares = self.unpack_files("sumsquares", n_runs)

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Combine the transformations
            run_rigid = self.inputs.rigids[i]
            runtime, full_rigid = self.combine_rigids(runtime, first_rigid,
                                                      run_rigid)

            # Select the files for this run
            run_copes = copes[i]
            run_varcopes = varcopes[i]
            run_sumsquares = sumsquares[i]
            run_mask = [self.inputs.masks[i]]
            run_mean = [self.inputs.means[i]]
            all_files = (run_copes + run_varcopes + run_sumsquares + run_mask +
                         run_mean)

            # Apply the transformation to each file
            for in_file in all_files:

                out_fname = op.basename(add_suffix(in_file, "xfm"))
                out_file = op.join(out_dir, out_fname)
                runtime = self.apply_fsl_rigid(runtime, in_file, out_file,
                                               full_rigid)

            # Copy the matrix to go from this space to the anatomy
            if not i:
                tkreg_fname = op.basename(self.inputs.tkreg_rigid)
                out_tkreg = op.join(out_dir, tkreg_fname)
                shutil.copyfile(self.inputs.tkreg_rigid, out_tkreg)

        self.out_files = out_files
        return runtime
示例#10
0
    def _run_interface(self, runtime):

        # Get a reference to either the ANTS or FSL function
        method_name = "apply_{}_warp".format(self.inputs.method)
        warp_func = getattr(self, method_name)

        n_runs = len(self.inputs.rigids)
        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Warp the timeseries files
            run_timeseries = self.inputs.timeseries[i]
            name = "res4d" if self.inputs.residual else "timeseries"
            out_timeseries = op.join(out_dir, name + "_warp.nii.gz")
            run_rigid = self.inputs.rigids[i]
            runtime = warp_func(runtime, run_timeseries,
                                out_timeseries, run_rigid)

            # Warp the mask file
            run_mask = self.inputs.masks[i]
            out_mask_fname = op.basename(add_suffix(run_mask, "warp"))
            out_mask = op.join(out_dir, out_mask_fname)
            runtime = warp_func(runtime, run_mask, out_mask, run_rigid)

            # Warp the mean file
            run_mean = self.inputs.means[i]
            out_mean_fname = op.basename(add_suffix(run_mean, "warp"))
            out_mean = op.join(out_dir, out_mean_fname)
            runtime = warp_func(runtime, run_mean, out_mean, run_rigid)

        self.out_files = out_files
        return runtime
示例#11
0
    def _run_interface(self, runtime):

        # Get a reference to either the ANTS or FSL function
        method_name = "apply_{}_warp".format(self.inputs.method)
        warp_func = getattr(self, method_name)

        n_runs = len(self.inputs.rigids)
        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Warp the timeseries files
            run_timeseries = self.inputs.timeseries[i]
            name = "res4d" if self.inputs.residual else "timeseries"
            out_timeseries = op.join(out_dir, name + "_warp.nii.gz")
            run_rigid = self.inputs.rigids[i]
            runtime = warp_func(runtime, run_timeseries, out_timeseries,
                                run_rigid)

            # Warp the mask file
            run_mask = self.inputs.masks[i]
            out_mask_fname = op.basename(add_suffix(run_mask, "warp"))
            out_mask = op.join(out_dir, out_mask_fname)
            runtime = warp_func(runtime, run_mask, out_mask, run_rigid)

            # Warp the mean file
            run_mean = self.inputs.means[i]
            out_mean_fname = op.basename(add_suffix(run_mean, "warp"))
            out_mean = op.join(out_dir, out_mean_fname)
            runtime = warp_func(runtime, run_mean, out_mean, run_rigid)

        self.out_files = out_files
        return runtime
示例#12
0
    def _run_interface(self, runtime):

        # Get a reference to either the ANTS or FSL function
        method_name = "apply_{}_warp".format(self.inputs.method)
        warp_func = getattr(self, method_name)

        # Unpack the long file lists to be ordered by run
        n_runs = len(self.inputs.rigids)
        copes = self.unpack_files("copes", n_runs)
        varcopes = self.unpack_files("varcopes", n_runs)
        sumsquares = self.unpack_files("sumsquares", n_runs)

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Select the files for this run
            run_rigid = self.inputs.rigids[i]
            run_copes = copes[i]
            run_varcopes = varcopes[i]
            run_sumsquares = sumsquares[i]
            run_mask = [self.inputs.masks[i]]
            run_mean = [self.inputs.means[i]]
            all_files = (run_copes + run_varcopes +
                         run_sumsquares + run_mask + run_mean)

            # Apply the transformation to each file
            for in_file in all_files:

                out_fname = op.basename(add_suffix(in_file, "warp"))
                out_file = op.join(out_dir, out_fname)
                runtime = warp_func(runtime, in_file, out_file, run_rigid)

        self.out_files = out_files
        return runtime
示例#13
0
    def _run_interface(self, runtime):

        # Get a reference to either the ANTS or FSL function
        method_name = "apply_{}_warp".format(self.inputs.method)
        warp_func = getattr(self, method_name)

        # Unpack the long file lists to be ordered by run
        n_runs = len(self.inputs.rigids)
        copes = self.unpack_files("copes", n_runs)
        varcopes = self.unpack_files("varcopes", n_runs)
        sumsquares = self.unpack_files("sumsquares", n_runs)

        out_files = []
        for i in range(n_runs):

            # Set up the output directory
            out_dir = "run_{}/".format(i + 1)
            os.mkdir(out_dir)
            out_files.append(op.realpath(out_dir))

            # Select the files for this run
            run_rigid = self.inputs.rigids[i]
            run_copes = copes[i]
            run_varcopes = varcopes[i]
            run_sumsquares = sumsquares[i]
            run_mask = [self.inputs.masks[i]]
            run_mean = [self.inputs.means[i]]
            all_files = (run_copes + run_varcopes + run_sumsquares + run_mask +
                         run_mean)

            # Apply the transformation to each file
            for in_file in all_files:

                out_fname = op.basename(add_suffix(in_file, "warp"))
                out_file = op.join(out_dir, out_fname)
                runtime = warp_func(runtime, in_file, out_file, run_rigid)

        self.out_files = out_files
        return runtime
示例#14
0
    def apply_ants_warp(self, runtime, in_file, out_file, rigid):

        out_rigid = op.basename(add_suffix(out_file, "anat"))

        continuous_interp = dict(trilinear="trilin",
                                 spline="cubic")[self.interp]
        interp = "nearest" if "mask" in in_file else continuous_interp
        cmdline_rigid = [
            "mri_vol2vol", "--mov", in_file, "--reg", rigid, "--fstarg",
            "--" + interp, "--o", out_rigid, "--no-save-reg"
        ]
        runtime = submit_cmdline(runtime, cmdline_rigid)

        continuous_interp = dict(trilinear="trilin",
                                 spline="BSpline")[self.interp]
        interp = "NN" if "mask" in in_file else continuous_interp
        cmdline_warp = [
            "WarpImageMultiTransform", "3", out_rigid, out_file,
            self.inputs.warpfield, self.inputs.affine, "-R", self.ref_file
        ]
        if interp != "trilin":
            cmdline_warp.append("--use-" + interp)
        runtime = submit_cmdline(runtime, cmdline_warp)
        return runtime