コード例 #1
0
def do_scan(S,
            K,
            max_ai_clock_rate,
            ai_task,
            ao_task,
            do_task,
            N,
            M,
            pixel_time,
            scan_speed,
            pixel_size_x,
            alpha,
            roi,
            cache=None):

    key = (S, K, N, M, pixel_time, scan_speed, alpha, roi)

    flyback_ratio = K / N
    flystart_ratio = S / K
    sample_clock = SampleClock(pixel_time=pixel_time * 1e-6,
                               pixel_size=pixel_size_x * 1e-6)
    T, clock_rate, min_clock_rate = sample_clock.get_optimal_scanning_parameters(
        verbose=False)
    mirror = MirrorDriver(image_size=(N, M),
                          T=T,
                          flyback_ratio=flyback_ratio,
                          flystart_ratio=flystart_ratio,
                          alpha=alpha,
                          roi=roi,
                          clock_rate=clock_rate,
                          verbose=False)

    output_input_clock_ratio = min(int(clock_rate / max_ai_clock_rate) + 1, T)
    while mirror.T % output_input_clock_ratio:
        output_input_clock_ratio += 1

    ai_clock_rate = clock_rate // output_input_clock_ratio

    result = None
    if cache is not None:
        result = cache.data.get(key)
    if result is None:
        vx_target = mirror.vx_t_array()
        vy_target = mirror.vy_t_array()
        i_target = mirror.i_t_array()
        j_target = mirror.j_t_array()

        ai_task.configure_timing_sample_clock(
            rate=ai_clock_rate,
            active_edge='rising',
            sample_mode='finite',
            samples_per_channel=vx_target.size)
        ao_task.configure_timing_sample_clock(
            rate=clock_rate,
            active_edge='rising',
            sample_mode='finite',
            samples_per_channel=vx_target.size)

        # first iteration
        vx_input = vx_target
        vy_input = vy_target
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task,
                                                     vx_input, vy_input,
                                                     output_input_clock_ratio)
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(
            i_target, j_target, i_pos, j_pos)

        # second iteration
        mirror.set_params(t_offset=toffset + mirror.t_offset)
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task,
                                                     vx_input, vy_input,
                                                     output_input_clock_ratio)
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(
            i_target, j_target, i_pos, j_pos)

        # third iteration
        mirror.set_params(
            i_offset=ioffset + mirror.i_offset,
            j_offset=joffset + mirror.j_offset,
        )
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task,
                                                     vx_input, vy_input,
                                                     output_input_clock_ratio)
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        i_input = mirror.i_v(vx_input, vy_input)
        j_input = mirror.j_v(vx_input, vy_input)

        result = vx_target, vy_target, i_target, j_target, vx_input, vy_input, i_input, j_input, vx_pos, vy_pos, i_pos, j_pos, vx_err, vy_err
        if cache is not None:
            cache.data[key] = result
            cache.dump()

    else:
        print 'Using cache for key=', key

    vx_target, vy_target, i_target, j_target, vx_input, vy_input, i_input, j_input, vx_pos, vy_pos, i_pos, j_pos, vx_err, vy_err = result

    toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(
        i_target, j_target, i_pos, j_pos)

    print 'XXX:', pixel_time, scan_speed, N, M, K, T, '->', toffset, ioffset, joffset, ioffset_std, joffset_std

    from ioc.microscope.regress import regress
    regress_scale = min(1, 20 / N)
    i_pos, i_pos_grad = regress(i_pos, (regress_scale, ), method='average')
    j_pos, j_pos_grad = regress(j_pos, (regress_scale, ), method='average')
    vx_pos, vx_pos_grad = regress(vx_pos, (regress_scale, ), method='average')
    vy_pos, vy_pos_grad = regress(vy_pos, (regress_scale, ), method='average')

    plt = mk_figure(vx_target, vy_target, i_target, j_target, vx_input,
                    vy_input, i_input, j_input, vx_pos, vy_pos, i_pos, j_pos,
                    vx_err, vy_err, mirror, sample_clock,
                    output_input_clock_ratio)
    plt.xlabel('ioffset=%s(%.3f,%.3f), joffset=%s(%.3f,%.3f), toffset=%s' %
               (ioffset, ioffset_std, ioffset_max, joffset, joffset_std,
                joffset_max, toffset))
    plt.draw()
    plt.show()

    return ioffset_max
コード例 #2
0
ファイル: run_mirrors.py プロジェクト: pearu/iocbio
def do_scan(S, K, max_ai_clock_rate, ai_task, ao_task, do_task, N, M, pixel_time, scan_speed, pixel_size_x, alpha, roi,
            cache = None):

    key = (S, K, N, M, pixel_time, scan_speed, alpha, roi)

    

    flyback_ratio = K/N
    flystart_ratio = S/K
    sample_clock = SampleClock(pixel_time = pixel_time * 1e-6,
                               pixel_size = pixel_size_x * 1e-6)
    T, clock_rate, min_clock_rate = sample_clock.get_optimal_scanning_parameters(verbose=False)
    mirror = MirrorDriver(image_size = (N,M),
                          T=T, flyback_ratio = flyback_ratio,
                          flystart_ratio = flystart_ratio,
                          alpha = alpha,
                          roi = roi,
                          clock_rate = clock_rate,
                          verbose=False)

    output_input_clock_ratio = min(int(clock_rate / max_ai_clock_rate)+1, T)
    while mirror.T % output_input_clock_ratio:
        output_input_clock_ratio += 1

    ai_clock_rate = clock_rate // output_input_clock_ratio
    
    result = None
    if cache is not None:
        result = cache.data.get(key)
    if result is None:
        vx_target = mirror.vx_t_array()
        vy_target = mirror.vy_t_array()
        i_target = mirror.i_t_array()
        j_target = mirror.j_t_array()

        ai_task.configure_timing_sample_clock(rate = ai_clock_rate,
                                              active_edge = 'rising',
                                              sample_mode = 'finite',
                                              samples_per_channel = vx_target.size
                                              )
        ao_task.configure_timing_sample_clock(rate = clock_rate,
                                              active_edge = 'rising',
                                              sample_mode = 'finite',
                                              samples_per_channel = vx_target.size
                                              )

        # first iteration
        vx_input = vx_target
        vy_input = vy_target
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task, 
                                                     vx_input, vy_input, output_input_clock_ratio)
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(i_target, j_target, i_pos, j_pos)
        
        
        # second iteration
        mirror.set_params(t_offset=toffset + mirror.t_offset)
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task, 
                                                 vx_input, vy_input, output_input_clock_ratio)                
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(i_target, j_target, i_pos, j_pos)
        
        # third iteration
        mirror.set_params(i_offset=ioffset + mirror.i_offset,
                          j_offset=joffset + mirror.j_offset,
                          )
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task, 
                                                     vx_input, vy_input, output_input_clock_ratio)
        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        i_input = mirror.i_v(vx_input, vy_input)
        j_input = mirror.j_v(vx_input, vy_input)

        result = vx_target, vy_target, i_target, j_target, vx_input, vy_input, i_input, j_input, vx_pos, vy_pos, i_pos, j_pos, vx_err, vy_err
        if cache is not None:
            cache.data[key] = result
            cache.dump()

    else:
        print 'Using cache for key=', key

    vx_target, vy_target, i_target, j_target, vx_input, vy_input, i_input, j_input, vx_pos, vy_pos, i_pos, j_pos, vx_err, vy_err = result

    toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(i_target, j_target, i_pos, j_pos)

    print 'XXX:', pixel_time, scan_speed, N,M,K,T,'->',toffset, ioffset, joffset, ioffset_std, joffset_std

    from ioc.microscope.regress import regress
    regress_scale = min(1, 20/N)
    i_pos, i_pos_grad = regress(i_pos, (regress_scale,), method='average')
    j_pos, j_pos_grad = regress(j_pos, (regress_scale,), method='average')
    vx_pos, vx_pos_grad = regress(vx_pos, (regress_scale,), method='average')
    vy_pos, vy_pos_grad = regress(vy_pos, (regress_scale,), method='average')

    plt = mk_figure(vx_target, vy_target, i_target, j_target, vx_input, vy_input,
                    i_input, j_input,
                    vx_pos, vy_pos,  i_pos, j_pos, vx_err, vy_err,
                    mirror, sample_clock, output_input_clock_ratio
                    )
    plt.xlabel('ioffset=%s(%.3f,%.3f), joffset=%s(%.3f,%.3f), toffset=%s' % (ioffset, ioffset_std, ioffset_max, joffset, joffset_std, joffset_max, toffset))
    plt.draw()
    plt.show()

    return ioffset_max
コード例 #3
0
        ai_task.configure_trigger_digital_edge_start(
            options.start_trigger_terminal, edge='rising')

        start_time = time.time()
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        print 'Computing mirror input took %.3f sec' % (time.time() -
                                                        start_time)

        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task,
                                                     vx_input, vy_input,
                                                     output_input_clock_ratio)

        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(
            i_target, j_target, i_pos, j_pos)
        mirror.set_params(t_offset=toffset + mirror.t_offset)
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task,
                                                     vx_input, vy_input,
                                                     output_input_clock_ratio)

        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(
            i_target, j_target, i_pos, j_pos)
        mirror.set_params(
            i_offset=ioffset + mirror.i_offset,
            j_offset=joffset + mirror.j_offset,
        )
コード例 #4
0
ファイル: run_mirrors.py プロジェクト: pearu/iocbio
                                                      edge='rising')
        ai_task.configure_trigger_digital_edge_start (options.start_trigger_terminal,
                                                      edge='rising')


        start_time = time.time()
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        print 'Computing mirror input took %.3f sec' % (time.time () - start_time)
        
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task, 
                                                     vx_input, vy_input, output_input_clock_ratio)

        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(i_target, j_target, i_pos, j_pos)
        mirror.set_params(t_offset=toffset + mirror.t_offset)
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()
        vx_pos, vy_pos, vx_err, vy_err = run_mirrors(ao_task, ai_task, do_task, 
                                                     vx_input, vy_input, output_input_clock_ratio)

        i_pos = mirror.i_v(vx_pos, vy_pos)
        j_pos = mirror.j_v(vx_pos, vy_pos)
        toffset, ioffset, joffset, ioffset_std, joffset_std, ioffset_max, joffset_max = mirror.estimate_offsets(i_target, j_target, i_pos, j_pos)
        mirror.set_params(i_offset=ioffset + mirror.i_offset,
                          j_offset=joffset + mirror.j_offset,
                          )
        vx_input = mirror.vx_t_array()
        vy_input = mirror.vy_t_array()