从SCFT获得的浓度结果自动识别相的种类

从SCFT获得的浓度结果自动识别相的种类

要自动识别相的种类,首先要确定的是各个嵌段的极值点所对应的位置,以及这些位置所对应的模式。为了获得一个浓度数据中各嵌段浓度极值点的位置,首先将计算获得的浓度数据转为三维矩阵。为了降低计算量,对三维矩阵进行三个方向的经过矩阵中心(为了防止无法分辨PS相和BCC相)的切片处理,获得三个二维矩阵。在二维向量中分别找出各个嵌段浓度的极值点,将极值点的值设为1,其他点设为0,获得三个二维点云矩阵。接下来就可以对这三个点云矩阵的模式进行识别,来获得该相的种类。点云矩阵的模式识别方法仍待解决。

def classify():
    result=[]
    for i in range(len(labels)):
        result.append(entry[i].get().strip())

    nx=int(result[18])
    ny=int(result[19])
    nz=int(result[20])

    phafile = open('pha.dat', 'r')
    phalines = phafile.readlines()
    pha = [[], [], []]
    sf = [[], [], []]
    sfid = [[], [], []]
    for item in phalines:
        if not item == '\n':
            list = item.split(' ')
            pha[0].append(float(list[0]))
            pha[1].append(float(list[1]))
            pha[2].append(float(list[2]))
    phafile.close()

    pha = [np.array(item).reshape(nx, ny, nz) for item in pha]

    sf[0] = [item[int(nx / 2),::,::] for item in pha]
    sfid[0] = [np.zeros((ny, nz)) for item in pha]
    sf[1] = [item[::,int(ny / 2),::] for item in pha]
    sfid[1] = [np.zeros((nx, nz)) for item in pha]
    sf[2] = [item[::,::,int(nz / 2)] for item in pha]
    sfid[2] = [np.zeros((nx, ny)) for item in pha]

    for x in range(len(sf)):
        for y in range(len(sf[x])):
            for i in range(len(sf[x][y])):
                for j in range(len(sf[x][y][i])):
                    if (sf[x][y][i][j]-sf[x][y][i][j-1]) >= 0 and (sf[x][y][i][(j+1)%len(sf[x][y][i])]-sf[x][y][i][j]) <= 0 and \ (sf[x][y][i][j]-sf[x][y][i-1][j]) >= 0 and (sf[x][y][(i+1)%len(sf[x][y])][j]-sf[x][y][i][j]) <= 0:
                        sfid[x][y][i][j] = 1

发表评论