import numpy as np from ase.io import read from nomadcore.atoms2nomad import ase_atoms_to_section_system class CubeError(OSError): pass def read_cube_file(backend, file_name): try: d = read(file_name, format = 'cube', full_output = True) except Exception as err: raise CubeError(err) data = d['data'] atoms = d['atoms'] origin = d['origin'] nx, ny, nz = data.shape displacements = np.array([atoms.cell[i]/data.shape[i] for i in range(3)]) system = ase_atoms_to_section_system(backend, atoms) singleconfig = backend.openSection('section_single_configuration_calculation') volumetric = backend.openSection('section_volumetric_data') backend.addValue('volumetric_data_nx', nx) backend.addValue('volumetric_data_ny', ny) backend.addValue('volumetric_data_nz', nz) backend.addArrayValues('volumetric_data_origin', origin) backend.addArrayValues('volumetric_data_displacements', displacements) backend.addValue('volumetric_data_multiplicity', 1) backend.addArrayValues('volumetric_data_values', data[None]) backend.closeSection('section_volumetric_data', volumetric) backend.addValue('single_configuration_calculation_to_system_ref', system) backend.closeSection('section_single_configuration_calculation', singleconfig)