import numpy as np
import escape as esc
esc.require("0.9.8")
Loading material database from C:\dev\escape-core\python\src\escape\scattering\..\data\mdb\materials.db
Interfacial Roughness and Proximity Effects in Superconductor/Ferromagnet CuNi/Nb Heterostructures¶
This notebook fits a multilayer specular X-ray reflectivity example with interfacial roughness and proximity effects. It is a good reference for how structural parameters, roughness, and resolution corrections enter a realistic reflectivity workflow.
Authors: Yu. Khaydukov, R. Morari, O. Soltwedel, T. Keller, G. Christiani, G. Logvenov, M. Kupriyanov, A. Sidorenko, and B. Keimer
Citation: Journal of Applied Physics 118, 213905 (2015); doi: 10.1063/1.4936789
In this study, we present the results of fitting experimental data from the publication mentioned above. We selected data from two samples, where the CuNi layers differ in terms of thickness and roughness, to showcase the capabilities of a simultaneous fit with shared parameters. Rather than fitting the Scattering Length Densities (SLDs), we will focus on fitting the mass densities of the layer compounds.
This notebook also demonstrates how to add temporary records to the default material database. This approach allows new material records to be kept within the notebook alongside the code, rather than creating a new local material database.
src = esc.xrays(0.1540562, "nm")
Capping = {
"name": "Capping",
"type": "amorphous",
"density": 2.32,
"atoms": [
{"Si": {"repeat": 1}},
],
}
CuNi = {
"name": "CuNi",
"type": "amorphous",
"density": 8.93,
"atoms": [
{"Cu": {"repeat": 1}},
{"Ni": {"repeat": 1}},
],
}
SiO2 = {
"name": "SiO2",
"type": "amorphous",
"density": 2.62,
"atoms": [
{"Si": {"repeat": 1}},
{"O": {"repeat": 2}},
],
}
from escape.scattering.mdb import default_mdb
default_mdb.add(Capping)
default_mdb.add(CuNi)
default_mdb.add(SiO2)
Cap_common = esc.amorphous("Capping", density="mdb")
CuNi_common = esc.amorphous("CuNi", density="mdb")
SiO2Lay = esc.layer(
"SiO2", thkn="3+-2nm", rough="1+-1nm", bydensity=True
)
NbLay = esc.layer("Nb", thkn="10+-2nm", rough="1+-1nm", bydensity=True)
Sub = esc.substrate("Si", rough="1+-1nm", bydensity=True)
sample_10 = esc.multilayer(
formula="Cap_common(10+-8nm,1+-1nm)/CuNi_common(10+-5nm,1+-1nm)/NbLay/SiO2Lay//Sub",
bydensity=True,
globals=globals(),
)
sample_21 = esc.multilayer(
formula="Cap_common(10+-8nm,1+-1nm)/CuNi_common(30+-5nm,1+-1nm)/NbLay/SiO2Lay//Sub",
bydensity=True,
globals=globals(),
)
w10 = sample_10.show(source=src)
w21 = sample_21.show(source=src)
esc.show(w10, w21)
Qz = esc.var("qz")
fwhm_10 = esc.par("FWHM_10", 0.005, userlim=[0.003, 0.03], fixed=False)
fwhm_21 = esc.par("FWHM_21", 0.005, userlim=[0.003, 0.03], fixed=False)
specrefl_10 = esc.specrefl(Qz, sample_10, "matrix", source=src)
specrefl_10 = esc.average_normal(specrefl_10, fwhm_10, Qz)
specrefl_21 = esc.specrefl(Qz, sample_21, "matrix", source=src)
specrefl_21 = esc.average_normal(specrefl_21, fwhm_21, Qz)
B10 = esc.par("Bgr 10", 1, scale=1e-6, userlim=[0, 5])
B21 = esc.par("Bgr 21", 1, scale=1e-6, userlim=[0, 5])
I10 = specrefl_10 + B10
I21 = specrefl_21 + B21
qz, y, err = np.loadtxt(
"data/JAP15/XRR/Silicon/s10/ASCII/Si10.dat", unpack=True, skiprows=2
)
qz = qz * 10
dobj10 = esc.data(qz, y, err, copy=True)
qz, y, err = np.loadtxt(
"data/JAP15/XRR/Silicon/s21/ASCII/Si21.dat", unpack=True, skiprows=2
)
qz = qz * 10
dobj21 = esc.data(qz, y, err, copy=True)
mobj10 = esc.model(I10, dobj10, residuals_scale="sqrt", weight_type="none", cost_weight=1.0, normalize_cost=True)
mobj21 = esc.model(I21, dobj21, residuals_scale="sqrt", weight_type="none", cost_weight=1.0, normalize_cost=True)
opt = esc.diffevol(
[mobj10, mobj21],
popsize=7,
maxiter=50,
ftol=1e-3,
nupdate=1,
strategy="best1bin",
polish_final_maxiter=50,
polish_candidate_maxiter=0,
)
opt()
opt.show().config_model(ylog=True)
opt
Name: Differential Evolution Parameters number: 22 Parameter Value +- Error Units Fixed FWHM_10 0.03 +- 0 0 Capping density 2.8253 +- 0.0047955 g/cm^3 0 Cap_common Thickness 11.854 +- 0.0092045 nm 0 Cap_common Roughness 1.5 +- 0 nm 0 CuNi density 9.5021 +- 0.00099659 g/cm^3 0 CuNi_common Thickness 14.928 +- 0.068059 nm 0 CuNi_common Roughness 1.3757 +- 0.0033019 nm 0 Nb Density 9.0763 +- 0.0064756 0 Layer: Thickness 10.647 +- 0.07029 nm 0 Layer: Roughness Sigma 2 +- 0 nm 0 SiO2 Density 2.511 +- 0.01943 0 Layer: Thickness 5 +- 0 nm 0 Layer: Roughness Sigma 0.52908 +- 0.0035743 nm 0 Si Density 1.165 +- 0.093389 0 Substrate: Roughness Sigma 1.3825 +- 0.044904 nm 0 Bgr 10 1.2467 +- 0.16691 x1e-06 0 FWHM_21 0.027573 +- 0.00020305 0 Cap_common Thickness 8.6646 +- 0.0084593 nm 0 Cap_common Roughness 1.2905 +- 0.007585 nm 0 CuNi_common Thickness 33.967 +- 0.068873 nm 0 CuNi_common Roughness 1.2103 +- 0.003472 nm 0 Bgr 21 3.6594 +- 0.25611 x1e-06 0
w10 = sample_10.show(source=src)
w21 = sample_21.show(source=src)
esc.show(w10, w21)