def solve(self, field_pos=None):

        field = self._field
        tx_apertures = self._tx_apertures
        fs = self.fs
        result = self.result

        if field_pos is None:
            field_pos = self.field_pos
        field_pos = np.atleast_2d(field_pos)

        # iterate over field positions
        tx_p, tx_t0 = [], []

        for tx in tx_apertures:

            _p, _t0 = field.calc_hp(tx, field_pos)
            tx_p.append(_p.T)
            tx_t0.append(_t0)

        p, t0 = util.sum_with_padding(tx_p, tx_t0, fs)
        brightness = np.max(util.envelope(p,
                                          N=util.nextpow2(p.shape[1]),
                                          axis=1),
                            axis=1)

        # result['p'] = tx_p
        # result['t0'] = tx_t0
        result['brightness'] = brightness
Exemple #2
0
def process(job):

    job_id, (file, field_pos, rotation_rule) = job

    rotation_rule = rotation_rule[0] # remove enclosing list

    arrays = arrays_base.copy()  # make copy of array so following manipulations do not persist

    # rotate arrays based on rotation rule
    for array_id, dir, angle in rotation_rule:
        for array in arrays:
            if array['id'] == array_id:
                abstract.rotate_array(array, dir, np.deg2rad(angle))

    # create and run simulation

    kwargs, meta = Solver.connector(simulation, *arrays)
    solver = Solver(**kwargs)
    solver.solve(field_pos)

    # extract results and save
    rf_data = solver.result['rf_data']
    p = np.max(util.envelope(rf_data, axis=1), axis=1)
    angle = rotation_rule[0][2]

    with write_lock:
        with closing(sql.connect(file)) as con:
            update_image_table(con, angle, field_pos, p)
            util.update_progress(con, job_id)
Exemple #3
0
def process(job):

    job_id, (file, field_pos) = job

    solver.solve(field_pos)

    rf_data = solver.result['rf_data']
    b = np.max(util.envelope(rf_data, axis=1), axis=1)

    with write_lock:
        with closing(sql.connect(file)) as con:
            update_image_table(con, field_pos, b)
            util.update_progress(con, job_id)
Exemple #4
0
def process(job):

    job_id, (file, field_pos, rotation_rule) = job

    rotation_rule = rotation_rule[0]  # remove enclosing list
    arrays = arrays_base.copy()
    simulation = simulation_base.copy()

    # rotate arrays based on rotation rule
    for array_id, dir, angle in rotation_rule:
        for array in arrays:
            if array['id'] == array_id:
                abstract.rotate_array(array, dir, np.deg2rad(angle))

    # set focus delays while array is in rotated state
    focus = simulation['focus']
    if focus is not None:
        c = simulation['sound_speed']
        delay_quant = simulation['delay_quantization']
        for array in arrays:
            abstract.focus_array(array, focus, c, delay_quant, kind='both')

    arrays_plus = arrays.copy()
    arrays_minus = arrays.copy()

    # rotate arrays again based on plus and minus tolerance
    angle_tol = simulation['angle_tolerance']
    for array_id, dir, _ in rotation_rule:
        for array in arrays_plus:
            if array['id'] == array_id:
                abstract.rotate_array(array, dir, np.deg2rad(angle_tol))

        for array in arrays_minus:
            if array['id'] == array_id:
                abstract.rotate_array(array, dir, np.deg2rad(-angle_tol))

    # create and run simulation
    kwargs, meta = Solver.connector(simulation, *arrays_plus)
    solver_plus = Solver(**kwargs)
    solver_plus.solve(field_pos)

    # create and run simulation
    kwargs, meta = Solver.connector(simulation, *arrays_minus)
    solver_minus = Solver(**kwargs)
    solver_minus.solve(field_pos)

    # extract results and save
    angle = rotation_rule[0][2]

    with write_lock:
        with closing(sql.connect(file)) as con:

            rf_data = solver_plus.result['rf_data']
            b = np.max(util.envelope(rf_data, axis=1), axis=1)
            update_image_table(con, angle, angle_tol, 'plus', field_pos, b)

            rf_data = solver_minus.result['rf_data']
            b = np.max(util.envelope(rf_data, axis=1), axis=1)
            update_image_table(con, angle, angle_tol, 'minus', field_pos, b)

            util.update_progress(con, job_id)