import numpy as np
from ovito.data import *
from ovito.io import *
from ovito.modifiers import *
ws = WignerSeitzAnalysisModifier(
per_type_occupancies=True,
eliminate_cell_deformation=True)
ws.reference.load("../../../WS_Ref/ws.dump")
def modify(frame, input, output):
occupancies = input.particle_properties['Occupancy'].array
site_type = input.particle_properties.particle_type.array
total_occupancy = np.sum(occupancies, axis=1) # you are also not using, also not using the frame parameter
selection1 = (site_type == 1) & (occupancies[:, 0] == 0) & (occupancies[:, 1] == 0)
output.attributes['Ca_Vac'] = np.count_nonzero(selection1)
import glob
for file in glob.glob('../*.glob'):
node = import_file(file, multiple_frames=True)
node.modifiers.append(ws)
node.modifiers.append(PythonScriptModifier(function=modify))
export_file(
node, "defects_200.txt", "txt",
columns=['Timestep', 'Ca_Vac'],
multiple_frames=True
)
Не зная больше, это лучшее, что я могу придумать, надеюсь, это сработает!
Добавление этой части согласно запросу ОП.
for index, file in enumerate(glob.glob('../*.glob')):
node = import_file(file, multiple_frames=True)
node.modifiers.append(ws)
node.modifiers.append(PythonScriptModifier(function=modify))
export_file(
node, "defects_{}.txt".format(index), "txt",
columns=['Timestep', 'Ca_Vac'],
multiple_frames=True
)
И снова, это предположение о том, как библиотека работает и будет работать, только если исходный код выдаст defetcs_200.txt
в результате.