def recip_ex(detector_size, pixel_size, calibrated_center, dist_sample,
             ub_mat, wavelength, motors, i_stack, H_range, K_range, L_range):
    # convert to Q space
    q_values = recip.process_to_q(motors, detector_size, pixel_size,
                                  calibrated_center, dist_sample,
                                  wavelength, ub_mat)

    # minimum and maximum values of the voxel
    q_min = np.array([H_range[0], K_range[0], L_range[0]])
    q_max = np.array([H_range[1], K_range[1], L_range[1]])

    # no. of bins
    dqn = np.array([40, 40, 1])

    # process the grid values
    (grid_data, grid_occu, std_err,
     grid_out, bounds) = grid3d(q_values, i_stack, dqn[0], dqn[1],
                                            dqn[2])

    grid = np.mgrid[0:dqn[0], 0:dqn[1], 0:dqn[2]]
    r = (q_max - q_min) / dqn

    X = grid[0] * r[0] + q_min[0]
    Y = grid[1] * r[1] + q_min[1]
    Z = grid[2] * r[2] + q_min[2]

    # creating a mask
    _mask = grid_occu <= 10
    grid_mask_data = ma.masked_array(grid_data, _mask)
    grid_mask_std_err = ma.masked_array(std_err, _mask)
    grid_mask_occu = ma.masked_array(grid_occu, _mask)

    return X, Y, Z, grid_mask_data
Beispiel #2
0
def test_process_to_q():
    detector_size = (256, 256)
    pixel_size = (0.0135*8, 0.0135*8)
    calibrated_center = (256/2.0, 256/2.0)
    dist_sample = 355.0

    energy = 640  # (  in eV)
    # HC_OVER_E to convert from Energy to wavelength (Lambda)
    hc_over_e = 12398.4
    wavelength = hc_over_e / energy  # (Angstrom )

    ub_mat = np.array([[-0.01231028454, 0.7405370482, 0.06323870032],
                       [0.4450897473, 0.04166852402, -0.9509449389],
                       [-0.7449130975, 0.01265920962, -0.5692399963]])

    setting_angles = np.array([[40., 15., 30., 25., 10., 5.],
                              [90., 60., 0., 30., 10., 5.]])
    # delta=40, theta=15, chi = 90, phi = 30, mu = 10.0, gamma=5.0
    pdict = {}
    pdict['setting_angles'] = setting_angles
    pdict['detector_size'] = detector_size
    pdict['pixel_size'] = pixel_size
    pdict['calibrated_center'] = calibrated_center
    pdict['dist_sample'] = dist_sample
    pdict['wavelength'] = wavelength
    pdict['ub'] = ub_mat
    # ensure invalid entries for frame_mode actually fail

    # todo test frame_modes 1, 2, and 3
    # test that the values are coming back as expected for frame_mode=4
    hkl = recip.process_to_q(**pdict)

    # Known HKL values for the given six angles)
    # each entry in list is (pixel_number, known hkl value)
    known_hkl = [(32896, np.array([-0.15471196, 0.19673939, -0.11440936])),
                 (98432, np.array([0.10205953,  0.45624416, -0.27200778]))]

    for pixel, kn_hkl in known_hkl:
        npt.assert_array_almost_equal(hkl[pixel], kn_hkl, decimal=8)

    # smoketest the frame_mode variable
    pass_list = recip.process_to_q.frame_mode
    pass_list.append(None)
    for passes in pass_list:
        recip.process_to_q(frame_mode=passes, **pdict)
Beispiel #3
0
def _process_to_q_exception(param_dict, frame_mode):
    recip.process_to_q(frame_mode=frame_mode, **param_dict)