def test_mcflirt_run_copy_image(image_fmri_nii, image_copy_fmri_nii, tmpdir):
    file_inp, image_inp, data_inp = image_fmri_nii
    filename_copy, data_copy = image_copy_fmri_nii

    mcflt = MCFLIRT()
    #pdb.set_trace()
    mcflt.inputs.in_file = filename_copy
    mcflt.inputs.out_file = str(tmpdir.join("output_mcf_copy_im.nii.gz"))
    mcflt.basedir = "test"

    mcflt.run()

    img_out = nb.load(mcflt.inputs.out_file)
    data_out = img_out.get_data()
    #pdb.set_trace()
    # since all images are the same mcflirt shouldn't do anything
    assert (data_copy == data_out).all()
def test_mcflirt_run(image_fmri_nii, cost_function, tmpdir):
    file_inp, _, data_inp = image_fmri_nii

    mcflt = MCFLIRT()

    mcflt.inputs.in_file = file_inp
    mcflt.inputs.out_file = str(tmpdir.join("output_mcf.nii.gz"))
    mcflt.basedir = "test"
    setattr(mcflt.inputs, "cost", cost_function)

    mcflt.run()

    data_out = nb.load(mcflt.inputs.out_file).get_data()

    # the middle image shouldn't change
    assert (data_inp[:, :, :, data_inp.shape[3] //
                     2] == data_out[:, :, :, data_inp.shape[3] // 2]).all()

    # i'm assuming that the sum shouldn't change "too much"
    for i in range(data_inp.shape[3]):
        assert np.allclose(data_inp[:, :, :, i].sum(),
                           data_out[:, :, :, i].sum(),
                           rtol=5e-3)
def test_mcflirt_translate_image(image_fmri_nii, tmpdir):
    file_inp, image_inp, data_inp = image_fmri_nii

    mcflt = MCFLIRT()

    filename_trans, data_trans = image_translate_nii(data_inp, image_inp)

    mcflt.inputs.in_file = filename_trans
    mcflt.inputs.out_file = str(tmpdir.join("output_mcf_translate.nii.gz"))
    mcflt.basedir = "test"
    mcflt.inputs.smooth = 0.

    mcflt.run()

    img_out = nb.load(mcflt.inputs.out_file)
    data_out = img_out.get_data()

    # should think about some other error metric
    # this one gives a big error
    # mcflt.inputs.smooth = 0. doesn't really change
    for i in [0, 2]:
        assert np.allclose(data_out[:, :, :, i],
                           data_out[:, :, :, 1],
                           rtol=1e-1)