SpectroscopySchool/Activity03/adsorbate.py

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()