Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2016 13:54:00

ChiliC
Зарегистрирован: 2016-09-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простейшая программа для коммуникации с микроскопом

Суть в том что есть программа для коммуникации с микроскопом, который электронным пучком точечно выжигает квадратную матрицу. Нужно чтобы данная программа выжигала пяти или шестиугольную матрицу. Квадрат задается как высота и ширина + кол-во точек. И как задать чтоб кол-во точек в каждой линии можно было задать.

 import sem
def main():
    # parameters of exposition
    view_field = 0.1            # view field [mm]
    pxl_matrix_w = 28           # ширина квадрата в точках
    n_fields_x = 3              # количество линий (ширина)
    n_fields_y = 3              # количество линий (высота)
    field_spacing = 0.11        # расстояние между полями [mm]
    # pixel dwell time для единичной линии [ms], количество = n_fields_x * n_fields_y  
    dwell_list = [ 0.50, 1.0, 5.0, 10.0, 15.0, 30.0, 50.0, 500.0, 5000.0 ]
    # подключение к микроскопу SEM
    m = sem.Sem()
    res = m.Connect('localhost', 8300)    
    if res < 0:
        print("Error: unable to connect")
        return
    # important: stop the scanning before we start scanning or before automatic procedures
    m.ScStopScan()
    # view field = 100 um
    m.SetViewField(view_field)
    # vypnout akvizici obrazu behem skenovani (SEM ma 4 kanaly, vypnout vsechny)
    m.DtEnable(0, 0, 8)
    m.DtEnable(1, 0, 8)
    m.DtEnable(2, 0, 8)
    m.DtEnable(3, 0, 8)
    # elmag blanker je treba vypnout
    elbl = m.ScGetBlanker(1)
    m.ScSetBlanker(1, 0)
    # elstat blanker - on acquisition
    m.ScSetBlanker(0, 2)
	# каждую команду будет ждать до конца сканирования и перемещения манипулятора    m.SetWaitFlags(0x03)
    # оригинальная позиция манипулятора
    stg_orig_pos = m.StgGetPosition()
    # pole
    for fldyy in range (0, n_fields_y):
        for fldxx in range (0, n_fields_x):
 
            # dwell time
            pxl_dwell = dwell_list[fldyy * n_fields_x + fldxx]
            
            # rozdelit na skutecny dwell time [ns] a pixel count
            if pxl_dwell < 100.0:
                dwell = int(pxl_dwell * 100000) 
                pxlcount = 10
            else:
                dwell = int(pxl_dwell * 10) 
                pxlcount = 100000
                
            # manipulator
            m.StgMoveTo(stg_orig_pos[0] - fldxx * field_spacing, stg_orig_pos[1] + fldyy * field_spacing)
            # expozice
            for yy in range (0, pxl_matrix_w + 1):
                for xx in range (0, pxl_matrix_w + 1):
        
                    virtfld = 1000
                    xpos = virtfld * xx / pxl_matrix_w
                    ypos = virtfld * yy / pxl_matrix_w
        
                    # viz dokumentace
                    m.ScScanLine(0, virtfld, virtfld, xpos, ypos, xpos, ypos, dwell, pxlcount, 1)
        
                    # stop the scanning
                    m.ScStopScan()
        
                    # progress
                    print("field (%d %d) pixel: (%d %d)" % (fldxx, fldyy, xx, yy))
    # manipulator back
    m.StgMoveTo(stg_orig_pos[0], stg_orig_pos[1])
    
    # elmag blanker to begin
    m.ScSetBlanker(1, elbl)
    # wait for all process
    m.GetWD()
    # finish
    m.Disconnect()
if __name__ == '__main__':
    main()

Офлайн

#2 Сен. 8, 2016 14:07:44

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простейшая программа для коммуникации с микроскопом

ChiliC
pxl_matrix_w = 28 # ширина квадрата в точках
ну тут как то уже не согласовывается. если у вас задана ширина в 28 точек то изменив количество точек в строке вы измените ширину
как пример ……………….. это ширина в 20 точек
это в 10 ……….

Офлайн

#3 Сен. 8, 2016 15:46:49

ChiliC
Зарегистрирован: 2016-09-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простейшая программа для коммуникации с микроскопом

marvellik
pxl_matrix_w = 28
В том то и суть, что изменив кол-во точек я изменю сторону квадрата, а мне нужна другая фигура, пятиугольник то имеет не равные стороны.

Офлайн

#4 Сен. 8, 2016 20:54:21

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простейшая программа для коммуникации с микроскопом

задать то не проблема. проблема в том что нужно составить алгоритм смещения последующей строки для получения нужной фигуры. примерно так для простоты матрица задана в 9 столбцов и 4 строки

 def mark(str_matrix, points):
    for i in range(points):
        str_matrix[i] = '1'
    return ''.join(str_matrix)
          
matrix = [['0' for _ in range(9)] for _ in range(4)]
stroka = 1
list_points = []
for i in matrix:
    print('точек в строке',stroka)
    list_points.append(int(input()))
    stroka += 1
for str_matrix, points in zip(matrix, list_points):
          print(mark(str_matrix, points))
допустим наша матрица нам нужно вывести треугольник
 000000000                       000010000
000000000                        000111000
000000000                        001111100
000000000                        011111110
и введя количество точек по строкам 1,3,5,7 мы получим такую вот матрицу
 100000000
111000000
111110000
111111100
вот тут то и нужно реализовать алгоритм смещения единиц для получения правильной фигуры. но думаю понятно из мой писанины как задавать количество точек в каждой строке

Отредактировано marvellik (Сен. 8, 2016 20:57:16)

Офлайн

#5 Сен. 13, 2016 16:40:06

ChiliC
Зарегистрирован: 2016-09-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простейшая программа для коммуникации с микроскопом

marvellik
задать то не проблема. проблема в том что нужно составить алгоритм смещения последующей строки для получения нужной фигуры. примерно так для простоты матрица задана в 9 столбцов и 4 строки
спасибо большое!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version