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)))
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)))