46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from ase.build import bulk, add_adsorbate, fcc100
|
|
from msspec.calculator import MSSPEC
|
|
from msspec.utils import cut_cylinder
|
|
import numpy as np
|
|
|
|
cluster = fcc100('Ni', size=(2, 2, 2))
|
|
add_adsorbate(cluster, 'Se', 1.55, 'hollow')
|
|
#add_adsorbate(cluster, 'Se', 2.34, 'ontop')
|
|
cluster = cluster.repeat((10,10,1))
|
|
|
|
|
|
def get_index_close_to_origin():
|
|
iSe = [atom.index for atom in cluster if atom.symbol == 'Se']
|
|
R = np.linalg.norm(cluster.positions[iSe], axis=1)
|
|
i = iSe[np.argmin(R)]
|
|
return i
|
|
|
|
cluster.center(about=(0,0,0))
|
|
i = get_index_close_to_origin()
|
|
cluster.positions -= cluster[i].position
|
|
|
|
cluster = cut_cylinder(cluster, radius=10)
|
|
emitter = get_index_close_to_origin()
|
|
cluster.emitter = emitter
|
|
|
|
if False:
|
|
cluster.edit()
|
|
exit()
|
|
|
|
calc = MSSPEC(spectroscopy='PED', algorithm='expansion')
|
|
calc.set_atoms(cluster)
|
|
|
|
calc.source_parameters.theta = -60
|
|
calc.calculation_parameters.scattering_order = 3
|
|
calc.calculation_parameters.path_filtering = 'forward_scattering'
|
|
[a.set('forward_angle', 30) for a in cluster]
|
|
calc.muffintin_parameters.interstitial_potential = 13.2
|
|
|
|
data = calc.get_energy_scan(level='3d', kinetic_energy=[50,110,20], theta=0, phi=0)
|
|
data = calc.get_energy_scan(level='3d', kinetic_energy=[50,110,20], theta=0, phi=45, data=data)
|
|
|
|
data.view()
|
|
|
|
|
|
#cluster.edit()
|