Exemple #1
0
    def test_multiecho(self):
        me = {'MultiEcho': {'TR': 10, 'TE1': 0.01, 'ESP': 0.01, 'ETL': 5}}
        me_file = 'sim_me.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.0),
                 out_file='PD.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.04, 0.1),
                 out_file='T2.nii.gz',
                 verbose=vb).run()

        MultiechoSim(sequence=me,
                     out_file=me_file,
                     PD_map='PD.nii.gz',
                     T2_map='T2.nii.gz',
                     noise=noise,
                     verbose=vb).run()
        Multiecho(sequence=me, in_file=me_file, verbose=vb).run()

        diff_T2 = Diff(in_file='ME_T2.nii.gz',
                       baseline='T2.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_PD = Diff(in_file='ME_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_T2.outputs.out_diff, 3)
        self.assertLessEqual(diff_PD.outputs.out_diff, 2)
Exemple #2
0
    def test_fm(self):
        seq = {
            'SSFP': {
                'TR': 5e-3,
                'FA': [15, 15, 60, 60],
                'PhaseInc': [180, 0, 180, 0]
            }
        }
        ssfp_file = 'sim_ssfp.nii.gz'
        img_sz = [16, 16, 16]
        noise = 0.001

        NewImage(img_size=img_sz, fill=1.0, out_file='PD.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.2),
                 out_file='T1.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.04, 0.1),
                 out_file='T2.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(-100, 100),
                 out_file='f0.nii.gz',
                 verbose=vb).run()

        sim = FMSim(sequence=seq,
                    out_file=ssfp_file,
                    asym=False,
                    T1_map='T1.nii.gz',
                    noise=noise,
                    verbose=vb,
                    PD_map='PD.nii.gz',
                    T2_map='T2.nii.gz',
                    f0_map='f0.nii.gz')
        sim.run()
        FM(sequence=seq,
           in_file=ssfp_file,
           asym=False,
           T1_map='T1.nii.gz',
           verbose=vb,
           residuals=True).run()

        diff_T2 = Diff(in_file='FM_T2.nii.gz',
                       baseline='T2.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_PD = Diff(in_file='FM_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_T2.outputs.out_diff, 20)
        self.assertLessEqual(diff_PD.outputs.out_diff, 10)
Exemple #3
0
    def test_oef(self):
        # Use MultiEchoFlex as a proxy for ASE
        seq = {
            'MultiEcho': {
                'TR':
                2.5,
                'TE': [
                    -0.07, -0.06, -0.05, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01,
                    0.02, 0.03, 0.04, 0.05, 0.06, 0.07
                ]
            }
        }
        ase_file = 'sim_ase.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(img_size=img_sz,
                 grad_dim=0,
                 fill=100.,
                 out_file='S0.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(-0.01, 0.01),
                 out_file='dT.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(1.0, 3.0),
                 out_file='R2p.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.005, 0.025),
                 out_file='DBV.nii.gz',
                 verbose=vb).run()

        ASEDBVSim(sequence=seq,
                  out_file=ase_file,
                  noise=noise,
                  verbose=vb,
                  S0_map='S0.nii.gz',
                  dT_map='dT.nii.gz',
                  R2p_map='R2p.nii.gz',
                  DBV_map='DBV.nii.gz').run()
        ASE(sequence=seq, in_file=ase_file, verbose=vb).run()

        diff_R2p = Diff(in_file='ASE_R2p.nii.gz',
                        baseline='R2p.nii.gz',
                        noise=noise,
                        verbose=vb).run()
        diff_DBV = Diff(in_file='ASE_DBV.nii.gz',
                        baseline='DBV.nii.gz',
                        noise=noise,
                        verbose=vb).run()
        self.assertLessEqual(diff_R2p.outputs.out_diff, 12)
        self.assertLessEqual(diff_DBV.outputs.out_diff, 50)
Exemple #4
0
    def test_despot2(self, gs=False, tol=20):
        seq = {
            'SSFP': {
                'TR': 10e-3,
                'FA': [15, 30, 45, 60],
                'PhaseInc': [180, 180, 180, 180]
            }
        }
        ssfp_file = 'sim_ssfp.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.0),
                 out_file='PD.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.8, 1.2),
                 out_file='T1.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.04, 0.1),
                 out_file='T2.nii.gz',
                 verbose=vb).run()

        DESPOT2Sim(sequence=seq,
                   out_file=ssfp_file,
                   ellipse=gs,
                   noise=noise,
                   verbose=vb,
                   PD_map='PD.nii.gz',
                   T2_map='T2.nii.gz',
                   T1_map='T1.nii.gz').run()
        DESPOT2(sequence=seq,
                in_file=ssfp_file,
                T1_map='T1.nii.gz',
                ellipse=gs,
                verbose=vb,
                residuals=True).run()

        diff_T2 = Diff(in_file='D2_T2.nii.gz',
                       baseline='T2.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_PD = Diff(in_file='D2_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_T2.outputs.out_diff, tol)
        self.assertLessEqual(diff_PD.outputs.out_diff, tol)
Exemple #5
0
    def test_poly(self):
        sz = 16
        scale = sqrt(3 * (sz/2)**2)
        poly = {'center': [0, 0, 0],
                'scale':  scale,
                'coeffs': [1, 1, 2, 4, 1, 0, 0, 1, 0, 1]
                }
        poly_sim = 'poly_sim.nii.gz'
        mask_file = 'poly_mask.nii.gz'

        NewImage(img_size=[sz, sz, sz], grad_dim=0, grad_vals=(0, 1), grad_steps=1,
                 out_file=mask_file, verbose=vb).run()
        PolyImage(ref_file=mask_file, out_file=poly_sim,
                  order=2, poly=poly, verbose=vb).run()
        fit = PolyFit(in_file=poly_sim, order=2, robust=True).run()

        terms_diff = sum([abs(x - y) for x,
                          y in zip(poly['coeffs'], fit.outputs.poly['coeffs'])])
        self.assertLessEqual(terms_diff, 1.e-6)

        PolyImage(ref_file=mask_file, out_file='poly_sim2.nii.gz',
                  order=2, poly=fit.outputs.poly, verbose=vb).run()
        img_diff = Diff(baseline=poly_sim,
                        in_file='poly_sim2.nii.gz', noise=1).run()
        self.assertLessEqual(img_diff.outputs.out_diff, 1.e-3)
Exemple #6
0
    def test_asl(self):
        seq = {
            'CASL': {
                'TR': 4.0,
                'label_time': 3.0,
                'post_label_delay': [0.3]
            }
        }
        asl_file = 'sim_asl.nii.gz'

        NewImage(img_size=[32, 32, 32, 2],
                 grad_dim=3,
                 grad_vals=(1, 1.06),
                 grad_steps=1,
                 out_file=asl_file,
                 verbose=vb).run()
        NewImage(img_size=[32, 32, 32],
                 fill=147.355,
                 out_file='ref_cbf.nii.gz',
                 verbose=vb).run()

        ASL(sequence=seq, in_file=asl_file, verbose=vb).run()

        diff_CBF = Diff(in_file='CASL_CBF.nii.gz',
                        baseline='ref_cbf.nii.gz',
                        verbose=vb).run()
        self.assertLessEqual(diff_CBF.outputs.out_diff, 0.1)
Exemple #7
0
 def test_rfprofile(self):
     NewImage(out_file='rf_b1plus.nii.gz', img_size=[32, 32, 32],
              fill=1.0, verbose=vb).run()
     RFProfile(in_file='rf_b1plus.nii.gz', out_file='rf_slab.nii.gz',
               rf={'rf_pos': [0, 1], 'rf_vals': [0, 1]}, verbose=vb).run()
     NewImage(out_file='rf_ref.nii.gz', img_size=[32, 32, 32], grad_dim=2,
              grad_vals=(-16, 15), verbose=vb).run()
     rf_diff = Diff(baseline='rf_ref.nii.gz', in_file='rf_slab.nii.gz',
                    noise=1, abs_diff=True, verbose=vb).run()
     self.assertLessEqual(rf_diff.outputs.out_diff, 1.e-3)
Exemple #8
0
    def test_despot1(self):
        seq = {'SPGR': {'TR': 10e-3, 'FA': [3, 18]}}
        spgr_file = 'sim_spgr.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.0),
                 out_file='PD.nii.gz',
                 verbose=vb).run()
        NewImage(img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.8, 1.3),
                 out_file='T1.nii.gz',
                 verbose=vb).run()

        DESPOT1Sim(sequence=seq,
                   out_file=spgr_file,
                   noise=noise,
                   verbose=vb,
                   PD_map='PD.nii.gz',
                   T1_map='T1.nii.gz').run()
        DESPOT1(sequence=seq, in_file=spgr_file, verbose=vb,
                residuals=True).run()

        diff_T1 = Diff(in_file='D1_T1.nii.gz',
                       baseline='T1.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_PD = Diff(in_file='D1_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_T1.outputs.out_diff, 35)
        self.assertLessEqual(diff_PD.outputs.out_diff, 35)
Exemple #9
0
 def test_ZSpec(self):
     NewImage(out_file='zspec_linear.nii.gz',
              verbose=vb,
              img_size=[8, 8, 8, 4],
              grad_dim=3,
              grad_vals=(-3, 3)).run()
     NewImage(out_file='zspec_zero.nii.gz',
              verbose=vb,
              img_size=[8, 8, 8],
              fill=0).run()
     ZSpec(in_file='zspec_linear.nii.gz',
           in_freqs=[-3, -1, 1, 3],
           out_freqs=[0],
           verbose=vb).run()
     diff_zero = Diff(in_file='zspec_linear_interp.nii.gz',
                      abs_diff=True,
                      baseline='zspec_zero.nii.gz',
                      noise=1,
                      verbose=vb).run()
     self.assertLessEqual(diff_zero.outputs.out_diff, 0.01)
Exemple #10
0
 def test_zshim(self):
     nshims = 8
     sz = 32
     ref_val = sqrt(sum([x**2 for x in range(1, nshims + 1)]))
     NewImage(out_file='zshim.nii.gz',
              img_size=[sz, sz, sz, nshims],
              grad_dim=3,
              grad_vals=(1, nshims),
              grad_steps=7,
              verbose=vb).run()
     NewImage(out_file='zshim_ref.nii.gz',
              img_size=[sz, sz, sz],
              fill=ref_val,
              verbose=vb).run()
     ZShim(in_file='zshim.nii.gz', zshims=nshims, verbose=vb).run()
     zdiff = Diff(in_file='zshim_zshim.nii.gz',
                  baseline='zshim_ref.nii.gz',
                  noise=1,
                  verbose=vb).run()
     self.assertLessEqual(zdiff.outputs.out_diff, 1.e-3)
Exemple #11
0
    def test_hifi(self):
        seqs = {
            'SPGR': {
                'TR': 5e-3,
                'FA': [3, 18]
            },
            'MPRAGE': {
                'FA': 5,
                'TR': 5e-3,
                'TI': 0.45,
                'TD': 0,
                'eta': 1,
                'ETL': 64,
                'k0': 0
            },
        }
        spgr_file = 'sim_spgr.nii.gz'
        mprage_file = 'sim_mprage.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(out_file='PD.nii.gz',
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.0),
                 verbose=vb).run()
        NewImage(out_file='T1.nii.gz',
                 img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.5, 1.5),
                 verbose=vb).run()
        NewImage(out_file='B1.nii.gz',
                 img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.8, 1.2),
                 verbose=vb).run()

        HIFISim(sequence=seqs,
                spgr_file=spgr_file,
                mprage_file=mprage_file,
                noise=noise,
                verbose=vb,
                PD_map='PD.nii.gz',
                T1_map='T1.nii.gz',
                B1_map='B1.nii.gz').run()
        HIFI(sequence=seqs,
             spgr_file=spgr_file,
             mprage_file=mprage_file,
             verbose=vb,
             residuals=True).run()

        diff_T1 = Diff(in_file='HIFI_T1.nii.gz',
                       baseline='T1.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_PD = Diff(in_file='HIFI_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_B1 = Diff(in_file='HIFI_B1.nii.gz',
                       baseline='B1.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_T1.outputs.out_diff, 60)
        self.assertLessEqual(diff_PD.outputs.out_diff, 35)
        self.assertLessEqual(diff_B1.outputs.out_diff, 60)
Exemple #12
0
    def test_planet(self):
        ellipse_seq = {
            "SSFP": {
                "FA": [15, 15, 15, 15, 15, 15],
                "PhaseInc": [180, 240, 300, 0, 60, 120],
                "TR": 0.01
            }
        }
        planet_seq = {"SSFP": {"FA": [15], "PhaseInc": [0], "TR": 0.01}}
        ellipse_file = 'planet_ellipse.nii.gz'
        planet_G = 'planet_G.nii.gz'
        planet_a = 'planet_a.nii.gz'
        planet_b = 'planet_b.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(out_file='PD.nii.gz', verbose=vb, img_size=img_sz,
                 fill=1).run()
        NewImage(out_file='T1.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.3)).run()
        NewImage(out_file='T2.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.05, 0.1)).run()
        NewImage(out_file='zero.nii.gz', verbose=vb, img_size=img_sz,
                 fill=0).run()

        PLANETSim(sequence=planet_seq,
                  G_file=planet_G,
                  a_file=planet_a,
                  b_file=planet_b,
                  noise=0,
                  verbose=vb,
                  PD_map='PD.nii.gz',
                  T1_map='T1.nii.gz',
                  T2_map='T2.nii.gz').run()
        EllipseSim(sequence=ellipse_seq,
                   out_file=ellipse_file,
                   noise=noise,
                   verbose=vb,
                   G_map=planet_G,
                   a_map=planet_a,
                   b_map=planet_b,
                   theta_0_map='zero.nii.gz',
                   phi_rf_map='zero.nii.gz').run()
        Ellipse(sequence=ellipse_seq, in_file=ellipse_file, verbose=vb).run()
        PLANET(sequence=planet_seq,
               G_map=planet_G,
               a_map=planet_a,
               b_map=planet_b,
               verbose=vb).run()

        diff_G = Diff(in_file='ES_G.nii.gz',
                      baseline=planet_G,
                      noise=noise,
                      verbose=vb).run()
        diff_a = Diff(in_file='ES_a.nii.gz',
                      baseline=planet_a,
                      noise=noise,
                      verbose=vb).run()
        diff_b = Diff(in_file='ES_b.nii.gz',
                      baseline=planet_b,
                      noise=noise,
                      verbose=vb).run()
        diff_PD = Diff(in_file='PLANET_PD.nii.gz',
                       baseline='PD.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_T1 = Diff(in_file='PLANET_T1.nii.gz',
                       baseline='T1.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_T2 = Diff(in_file='PLANET_T2.nii.gz',
                       baseline='T2.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        self.assertLessEqual(diff_G.outputs.out_diff, 3.5)
        self.assertLessEqual(diff_a.outputs.out_diff, 3)
        self.assertLessEqual(diff_b.outputs.out_diff, 7)
        self.assertLessEqual(diff_PD.outputs.out_diff, 4)
        self.assertLessEqual(diff_T1.outputs.out_diff, 1)
        self.assertLessEqual(diff_T2.outputs.out_diff, 1)
Exemple #13
0
    def test_emt(self):
        ellipse_sim = {
            "SSFP": {
                "FA": [1, 1, 1, 1, 1, 1],
                "PhaseInc": [180, 240, 300, 0, 60, 120],
                "TR": 0.01
            }
        }
        ellipse_fit = {
            "SSFP": {
                "FA": [1, 1, 1, 1, 1, 1],
                "PhaseInc": [180, 240, 300, 0, 60, 120],
                "TR": 0.01
            }
        }
        emt_seq = {
            "SSFPMT": {
                "FA": [30],
                "PhaseInc": [180, 240, 300, 0, 60, 120],
                "TR": [0.01],
                "Trf": [0.00025],
                "pulse": {
                    "p1": 0.250629,
                    "p2": 0.201183,
                    "bandwidth": 2
                }
            }
        }
        ellipse_file = 'emt_ellipse.nii.gz'
        emt_G = 'emt_G.nii.gz'
        emt_a = 'emt_a.nii.gz'
        emt_b = 'emt_b.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(out_file='PD.nii.gz', verbose=vb, img_size=img_sz,
                 fill=1).run()
        NewImage(out_file='T1_f.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(0.8, 1.3)).run()
        NewImage(out_file='T2_f.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.05, 0.1)).run()
        NewImage(out_file='f_b.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.01, 0.15)).run()
        NewImage(out_file='k_bf.nii.gz', verbose=vb, img_size=img_sz,
                 fill=2).run()
        NewImage(out_file='zero.nii.gz', verbose=vb, img_size=img_sz,
                 fill=0).run()

        eMTSim(sequence=emt_seq,
               G_file=emt_G,
               a_file=emt_a,
               b_file=emt_b,
               noise=0,
               verbose=vb,
               PD_map='PD.nii.gz',
               T1_f_map='T1_f.nii.gz',
               T2_f_map='T2_f.nii.gz',
               f_b_map='f_b.nii.gz',
               k_bf_map='k_bf.nii.gz').run()
        EllipseSim(sequence=ellipse_sim,
                   out_file=ellipse_file,
                   noise=noise,
                   verbose=vb,
                   G_map=emt_G,
                   a_map=emt_a,
                   b_map=emt_b,
                   theta_0_map='zero.nii.gz',
                   phi_rf_map='zero.nii.gz').run()
        Ellipse(sequence=ellipse_fit, in_file=ellipse_file, verbose=vb).run()
        eMT(sequence=emt_seq,
            G_map=emt_G,
            a_map=emt_a,
            b_map=emt_b,
            verbose=vb).run()

        # Currently the simulation framework does not support blocked algorithms
        # Hence simulating a proper eMT dataset would involve individually simulating
        # the different TR/Trf combinations and then merging them. I'm not doing that
        # now, so a proper test will have to wait

        diff_G = Diff(in_file='ES_G.nii.gz',
                      baseline=emt_G,
                      noise=noise,
                      verbose=vb).run()
        diff_a = Diff(in_file='ES_a.nii.gz',
                      baseline=emt_a,
                      noise=noise,
                      verbose=vb).run()
        diff_b = Diff(in_file='ES_b.nii.gz',
                      baseline=emt_b,
                      noise=noise,
                      verbose=vb).run()
        self.assertLessEqual(diff_G.outputs.out_diff, 3.5)
        self.assertLessEqual(diff_a.outputs.out_diff, 3.5)
        self.assertLessEqual(diff_b.outputs.out_diff, 10)
Exemple #14
0
    def test_lorentzian2(self):
        sat_f0 = [
            *np.linspace(-40, 40, 12).squeeze().tolist(), -0.5, -0.25, 0, 0.25,
            0.5
        ]
        sequence = {
            'MTSat': {
                'pulse': {
                    'p1': 0.4,
                    'p2': 0.3,
                    'bandwidth': 0.39
                },
                'TR': 4,
                'Trf': 0.02,
                'FA': 5,
                'sat_f0': sat_f0,
                'sat_angle': np.repeat(180.0, 17).squeeze().tolist()
            }
        }
        pools = [{
            'name': 'DS',
            'df0': [0, -2.5, 2.5],
            'fwhm': [1.0, 1.e-6, 3.0],
            'A': [0.2, 1.e-3, 1.0],
            'use_bandwidth': True
        }, {
            'name': 'MT',
            'df0': [-2.5, -5.0, -0.5],
            'fwhm': [50.0, 35.0, 200.0],
            'A': [0.3, 1.e-3, 1.0]
        }]

        lorentz_file = 'lorentz_sim.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(out_file='PD.nii.gz', verbose=vb, img_size=img_sz,
                 fill=1.0).run()
        NewImage(out_file='f0.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(-0.25, 0.25)).run()

        NewImage(out_file='fwhm.nii.gz', verbose=vb, img_size=img_sz,
                 fill=1.8).run()
        NewImage(out_file='A.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.3, 0.4)).run()

        NewImage(out_file='MTf0.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 fill=-2.2).run()
        NewImage(out_file='MTfwhm.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 fill=90).run()
        NewImage(out_file='MTA.nii.gz', verbose=vb, img_size=img_sz,
                 fill=0.4).run()

        L2Sim = LorentzianSim(pools)
        L2Sim(sequence=sequence,
              out_file=lorentz_file,
              noise=noise,
              verbose=vb,
              DS_f0_map='f0.nii.gz',
              DS_fwhm_map='fwhm.nii.gz',
              DS_A_map='A.nii.gz',
              MT_fwhm_map='MTfwhm.nii.gz',
              MT_f0_map='f0.nii.gz',
              MT_A_map='MTA.nii.gz').run()
        L2Fit = Lorentzian(pools)
        L2Fit(sequence=sequence, in_file=lorentz_file, verbose=vb).run()

        diff_fwhm = Diff(in_file='LTZ_DS_fwhm.nii.gz',
                         baseline='fwhm.nii.gz',
                         noise=noise,
                         verbose=vb).run()
        diff_A = Diff(in_file='LTZ_DS_A.nii.gz',
                      baseline='A.nii.gz',
                      noise=noise,
                      verbose=vb).run()

        diff_MTfwhm = Diff(in_file='LTZ_MT_fwhm.nii.gz',
                           baseline='MTfwhm.nii.gz',
                           noise=noise,
                           verbose=vb).run()
        diff_MTA = Diff(in_file='LTZ_MT_A.nii.gz',
                        baseline='MTA.nii.gz',
                        noise=noise,
                        verbose=vb).run()

        self.assertLessEqual(diff_fwhm.outputs.out_diff, 15)
        self.assertLessEqual(diff_A.outputs.out_diff, 300)
        self.assertLessEqual(diff_MTfwhm.outputs.out_diff, 15)
        self.assertLessEqual(diff_MTA.outputs.out_diff, 300)
Exemple #15
0
    def test_lorentzian(self):
        sequence = {
            'MTSat': {
                'pulse': {
                    'p1': 0.4,
                    'p2': 0.3,
                    'bandwidth': 0.39
                },
                'TR': 4,
                'Trf': 0.02,
                'FA': 5,
                'sat_f0': np.linspace(-5, 5, 21).squeeze().tolist(),
                'sat_angle': np.repeat(180.0, 21).squeeze().tolist()
            }
        }
        pools = [{
            'name': 'DS',
            'df0': [0, -2.5, 2.5],
            'fwhm': [1.0, 1.e-6, 3.0],
            'A': [0.2, 1.e-3, 1.0],
            'use_bandwidth': True
        }]
        lorentz_file = 'lorentz_sim.nii.gz'
        img_sz = [32, 32, 32]
        noise = 0.001

        NewImage(out_file='f0.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(-0.5, 0.5)).run()
        NewImage(out_file='fwhm.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=1,
                 grad_vals=(0.5, 2.5)).run()
        NewImage(out_file='A.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=2,
                 grad_vals=(0.5, 1)).run()

        L1Sim = LorentzianSim(pools)
        L1Sim(sequence=sequence,
              out_file=lorentz_file,
              noise=noise,
              verbose=vb,
              DS_f0_map='f0.nii.gz',
              DS_fwhm_map='fwhm.nii.gz',
              DS_A_map='A.nii.gz').run()
        L1Fit = Lorentzian(pools)
        L1Fit(sequence=sequence, in_file=lorentz_file, verbose=vb).run()

        diff_f0 = Diff(in_file='LTZ_DS_f0.nii.gz',
                       baseline='f0.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_fwhm = Diff(in_file='LTZ_DS_fwhm.nii.gz',
                         baseline='fwhm.nii.gz',
                         noise=noise,
                         verbose=vb).run()
        diff_A = Diff(in_file='LTZ_DS_A.nii.gz',
                      baseline='A.nii.gz',
                      noise=noise,
                      verbose=vb).run()
        self.assertLessEqual(diff_f0.outputs.out_diff, 100)
        self.assertLessEqual(diff_fwhm.outputs.out_diff, 20)
        self.assertLessEqual(diff_A.outputs.out_diff, 25)
Exemple #16
0
    def test_qMT(self):
        qmt = {
            'MTSat': {
                'TR':
                0.032,
                'Trf':
                0.020,
                'FA':
                5,
                'sat_f0': [
                    1000, 1000, 2236, 2236, 5000, 5000, 11180, 11180, 250000,
                    250000
                ],
                'sat_angle':
                [750, 360, 750, 360, 750, 360, 750, 360, 750, 360],
                'pulse': {
                    'name': 'Gauss',
                    'p1': 0.416,
                    'p2': 0.295,
                    'bandwidth': 200
                }
            }
        }
        qmt_file = 'qmt_sim.nii.gz'
        t1app = 'qmt_t1app.nii.gz'
        img_sz = [32, 32, 1]
        noise = 0.001

        lineshape_file = '_qmt_lineshape.json'

        Lineshape(out_file=lineshape_file,
                  lineshape='SuperLorentzian',
                  frq_start=500,
                  frq_space=500,
                  frq_count=150).run()

        NewImage(out_file='M0_f.nii.gz', verbose=vb, img_size=img_sz,
                 fill=1.0).run()
        NewImage(out_file='F_over_R1_f.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 fill=0.1).run()
        NewImage(out_file='T2_b.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 fill=12e-6).run()
        NewImage(out_file='T1_f_over_T2_f.nii.gz',
                 verbose=vb,
                 img_size=img_sz,
                 grad_dim=0,
                 grad_vals=(5, 15)).run()
        NewImage(out_file='k.nii.gz', verbose=vb, img_size=img_sz,
                 fill=4.0).run()
        NewImage(out_file=t1app, verbose=vb, img_size=img_sz, fill=1.0).run()

        qMTSim(sequence=qmt,
               out_file=qmt_file,
               T1_map=t1app,
               lineshape=lineshape_file,
               noise=noise,
               verbose=vb,
               M0_f_map='M0_f.nii.gz',
               F_over_R1_f_map='F_over_R1_f.nii.gz',
               T2_b_map='T2_b.nii.gz',
               T1_f_over_T2_f_map='T1_f_over_T2_f.nii.gz',
               k_map='k.nii.gz').run()
        qMT(sequence=qmt,
            in_file=qmt_file,
            T1_map=t1app,
            lineshape=lineshape_file,
            verbose=vb).run()

        diff_PD = Diff(in_file='QMT_M0_f.nii.gz',
                       baseline='M0_f.nii.gz',
                       noise=noise,
                       verbose=vb).run()
        diff_F = Diff(in_file='QMT_F_over_R1_f.nii.gz',
                      baseline='F_over_R1_f.nii.gz',
                      noise=noise,
                      verbose=vb).run()
        diff_k = Diff(in_file='QMT_k.nii.gz',
                      baseline='k.nii.gz',
                      noise=noise,
                      verbose=vb).run()
        self.assertLessEqual(diff_PD.outputs.out_diff, 10)
        self.assertLessEqual(diff_F.outputs.out_diff, 30)
        self.assertLessEqual(diff_k.outputs.out_diff, 35)