需要分析的文件,放进列表中。
file_list = ['A.dump','B.dump']
建立空列表,统计所有的voronoi多面体指数
total_index = []
导入文件,使用vorono 进行分析。
for file_id,file_ou in zip(file_list,file_out):
# 加载dump文件
pipeline = import_file('..//'+file_id)
# 设置VoronoiAnalysisModifier分析参数
voro = VoronoiAnalysisModifier(
compute_indices = True,
use_radii = False,
edge_threshold = 0
)
#VoronoiAnalysisModifier分析添加到pipeline
pipeline.modifiers.append(voro)
#计算pipeline,Voronoi Index即为Voronoi多面体指数
data = pipeline.compute()
# 查看粒子属性
# print(data.particles)
voro_indices = data.particles['Voronoi Index']
# 3 4 5 6 7 8面
voro_indices = numpy.array([item[2:8] for item in voro_indices])
for item in voro_indices:
# 3 4 5 6 7 8面
item = tuple(item)
if(item not in total_index):
total_index.append(item)
建立三个二维列表,用于存放数据。
matrix_total = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
matrix_total_1 = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
matrix_total_2 = [[0 for _ in range(len(file_list)+1)] for _ in range(len(total_index))]
for index,item in enumerate(total_index):
matrix_total[index][0] = item
for index,item in enumerate(total_index):
matrix_total_1[index][0] = item
for index,item in enumerate(total_index):
matrix_total_2[index][0] = item
再次循环,统计分析,并且将分析结果写入文件。
rows_data = 0
for file_id,file_ou in zip(file_list,file_out):
rows_data = rows_data + 1
# 加载dump文件
pipeline = import_file('..//'+file_id)
# 设置VoronoiAnalysisModifier分析参数
voro = VoronoiAnalysisModifier(
compute_indices = True,
use_radii = False,
edge_threshold = 0
)
#VoronoiAnalysisModifier分析添加到pipeline
pipeline.modifiers.append(voro)
#计算pipeline,Voronoi Index即为Voronoi多面体指数
data = pipeline.compute()
# 查看粒子属性
# print(data.particles)
voro_indices = data.particles['Voronoi Index']
# 3 4 5 6 7 8面
voro_indices = numpy.array([item[2:8] for item in voro_indices])
atom_type = data.particles['Particle Type']
voro_indices_1 = [voro_indices[index] for index,item in enumerate(atom_type) if item==1]
voro_indices_2 = [voro_indices[index] for index,item in enumerate(atom_type) if item==2]
#定义Voronoi指数统计函数
def row_histogram(a):
ca = numpy.ascontiguousarray(a).view([('', a.dtype)] * a.shape[1])
unique, indices, inverse = numpy.unique(ca, return_index=True, return_inverse=True)
counts = numpy.bincount(inverse)
sort_indices = numpy.argsort(counts)[::-1]
return (a[indices[sort_indices]], counts[sort_indices])
# 调用函数统计Voronoi指数
unique_indices, counts = row_histogram(voro_indices)
unique_indices_1, counts_1 = row_histogram(numpy.array(voro_indices_1))
unique_indices_2, counts_2 = row_histogram(numpy.array(voro_indices_2))
for item1, item2 in zip(unique_indices, counts):
item1 = tuple(item1)
for value in range(len(matrix_total)):
if(item1==matrix_total[value][0]):
matrix_total[value][rows_data] = item2
for item1, item2 in zip(unique_indices_1, counts_1):
item1 = tuple(item1)
for value in range(len(matrix_total_1)):
if(item1==matrix_total_1[value][0]):
matrix_total_1[value][rows_data] = item2
for item1, item2 in zip(unique_indices_2, counts_2):
item1 = tuple(item1)
for value in range(len(matrix_total_2)):
if(item1==matrix_total_2[value][0]):
matrix_total_2[value][rows_data] = item2
print(file_id)
def write_matrix(filename,matrix_id):
with open(filename, 'w') as file:
# 遍历列表并写入文件
file.write('voro_indices; ')
for item in file_out:
file.write(str(item)+'; ')
file.write('\n')
for row in matrix_id:
# 将每行的元素转换为字符串,并用逗号分隔
row_string = '; '.join(map(str, row))
# 写入文件,并在每行后添加换行符
file.write(row_string + '\n')
write_matrix('.//voro index//'+'matrix_total',matrix_total)
write_matrix('.//voro index//'+'matrix_total_1',matrix_total_1)
write_matrix('.//voro index//'+'matrix_total_2',matrix_total_2)
因为本体系是双原子体系,所以共有三个文件:
分别对应总的,类型1,类型2。
文件中的数据格式,大概如下,不过我的文件多余两个。
列与导入文件的顺序一致,第一个文件对应第一列…….
数据经过排序后,导入origin中可作图。