Esempio n. 1
0
def test_resample_coil_rotate():
    coil_dipole_pos = np.array(
        np.meshgrid(np.linspace(-1, 1, 11), np.linspace(-.5, .5, 5),
                    np.linspace(-.2, .2, 3))).reshape(3, -1).T
    coil_dipole_weights = np.zeros_like(coil_dipole_pos)
    coil_dipole_weights[:, 1] = np.linalg.norm(coil_dipole_pos, axis=1)

    coil_dir = []
    for angle in np.linspace(np.pi / 2, np.pi, 7):
        coil_dir.append([-np.sin(angle), np.cos(angle), 0])
    coil_dir = np.array(coil_dir)

    resampled_positions, resampled_weights = ADMlib.resamplecoil(
        coil_dipole_pos.T, coil_dipole_weights.T, [17, 17, 2], len(coil_dir),
        coil_dir.T)
    resampled_positions = resampled_positions

    # Define some arbitrary function to be integrated
    def func(pos):
        return np.array([
            pos[0]**2 + pos[1],
            pos[1]**3 + pos[2],
            pos[0]**3 + pos[2],
        ])

    z = np.array([0, 0, 1])
    for i, cd in enumerate(coil_dir):
        rotation_matrix = np.array([np.cross(cd, z), cd, z]).T
        positions_rotated = rotation_matrix.dot(coil_dipole_pos.T)
        weights_rotated = rotation_matrix.dot(coil_dipole_weights.T)

        assert np.isclose(
            np.sum(weights_rotated * func(positions_rotated)),
            np.sum(resampled_weights[:, :, i] * func(resampled_positions)))
Esempio n. 2
0
def test_resample_coil_no_rotation():
    coil_dipole_pos = np.array(
        np.meshgrid(np.linspace(-1, 1, 11), np.linspace(-1, 1, 11),
                    np.linspace(-.2, .2, 3))).reshape(3, -1).T
    coil_dipole_weights = np.ones_like(coil_dipole_pos)

    resampled_positions, resampled_weights = ADMlib.resamplecoil(
        coil_dipole_pos.T, coil_dipole_weights.T, [17, 17, 2], 1,
        np.array([[0, 1, 0]]).T)
    resampled_positions = resampled_positions.T
    resampled_weights = resampled_weights[..., 0].T

    # Define some arbitrary function to be integrated
    def func(pos):
        return np.array([
            pos[:, 0]**2 + pos[:, 1],
            pos[:, 1]**3 + pos[:, 2],
            pos[:, 0]**3 + pos[:, 2],
        ]).T

    assert np.isclose(np.sum(coil_dipole_weights * func(coil_dipole_pos)),
                      np.sum(resampled_weights * func(resampled_positions)))