Input and output¶
odatse-SXRD
module is a Solver
for ODAT-SE that uses sxrdcalc
to calculate the Rocking curve by giving atomic positions \(x\) , atomic occupancies, and Debye-Waller factor, and returnes the deviation \(f(x)\) from the experimental Rocking curve.
In this section, the input parameters, the input data, and the output data are explained.
The input parameters are taken from the solver
entry of the Info
class.
The parameters are specified in [solver]
section when they are given from a TOML file.
If the parameters are given in the dictionay format, they should be prepared as a nested dict under the solver
key.
In the following, the parameter items are described in the TOML format.
The input data consist of target reference data, and the bulk structure data. The output data consist of files containing the result of optimization. Their contents will be shown in this section.
Input parameters¶
Input parameters are specified in subsections config
, post
, param
, and reference
in the solver
section.
[config
] section¶
sxrd_exec_file
Format: string
Description: Path to the solver
sxrdcalc
.bulk_struc_in_file
Format: string
Description: Input file name of the bulk structure.
An example of the input input is given as follows:
[config]
sxrd_exec_file = "../../sxrdcalc"
bulk_struc_in_file = "sic111-r3xr3.blk"
[param
] section¶
scale_factor
Format: float (default: 1.0)
Description: The scale factor of the target Rocking Curve and the Rocking Curve obtained from the simulation.
opt_scale_factor
Format: bool (default: false)
Description: Flag to specify whether
scale_factor
should be optimized or not.type_vector
Format: list
Description: A list of positive numbers which specifies the type of variables to be optimized. This list corresponds to the types specified in the [
param.atom
] subsection. If the type is the same, they are treated as the same variable.
[param.domain
] subsection¶
In this section, parameters to create domains are specified.
You will need to define the domains you want to create.
In the [param.domain.atom
] sub-subsection, paramters of the information in the domain are specified.
domain_occupancy
Format: float
Description: Occupancy of the whole domain.
[param.domain.atom
] subsection¶
This section needs to be defined as many times as the number of atoms you want to optimize belonging to the domain. Note that the type, which represents the type of variable, must be a positive number.
name
Format: string (can be duplicated)
Description: The name of the atom to be optimized.
pos_center
Format: list
Description: Center coordinates of the atom. Describe in format of [\(x_0, y_0, z_0\)] (\(x_0, y_0, z_0\) are float).
DWfactor
Format: float
Description: Debye-Waller factor (in the unit of \(\text{\AA}^{2}\) ).
occupancy
Format: float (default: 1.0)
Description: Atom occupancy.
displace_vector
(can be omitted)Format: list of lists
Description: A vector that defines the direction in which the atoms are moved. A maximum of three directions can be specified. Define displacement vectors and initial values in each list as [type, \(D_{i1}, D_{i2}, D_{i3}\) ](type is int, \(D_{i1}, D_{i2}, D_{i3}\) is float type). Follwing the specified information, \(l_{type}\) is varied as \(dr_i = (D_{i1} \vec{a} + D_{i2} \vec{b} + D_{i3} \vec{c}) * l_{type}\) (\(\vec{a}, \vec{b}, \vec{c}\) is a unit lattice vector defined in
bulk_struc_in_file
orstruc_in_file
).opt_DW
(can be omitted)Format: list
Description: Sets the scale at which the Debye-Waller coefficient is varied. It is defined as [type, scale].
opt_occupancy
Format: int
Description: If defined, the occupancy changes. The specified variable represents the type.
An example of an input file is given as follows:
[param]
scale_factor = 1.0
type_vector = [1, 2]
[[param.domain]]
domain_occupancy = 1.0
[[param.domain.atom]]
name = "Si"
pos_center = [0.00000000, 0.00000000, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.33333333, 0.66666667, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.66666667, 0.33333333, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.33333333, 0.33333333, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[2, 0.0, 0.0, 1.0]]
[reference
] section¶
f_in_file
Format: string
Description: Path to the input file for the target locking curve.
Reference file for Solver¶
Target reference file¶
The file containing the data to be targeted to fit. The path is specified by f_in_file
in the [reference
] section.
For each line, h k l F sigma
is written. Here, h, k, l
are the wavenumbers, F
is the intensity, and sigma
is the uncertainty of F
.
An example file is shown below.
0.000000 0.000000 0.050000 572.805262 0.1
0.000000 0.000000 0.150000 190.712559 0.1
0.000000 0.000000 0.250000 114.163340 0.1
0.000000 0.000000 0.350000 81.267319 0.1
0.000000 0.000000 0.450000 62.927325 0.1
...
Bulk structure file¶
The file containing the bulk structure data. The path is specified by bulk_struc_in_file
in the [config
] section.
The first line is a comment, the second line is a b c alpha beta gamma
.
Here, a
, b
, and c
are the lattice constants of the unit cells, and alpha
, beta
, and gamma
are their angles.
The third and subsequent lines specify the atomsymbol r1 r2 r3 DWfactor occupancy
.
Here, atomsymbol
is the atom species, r1
, r2
, and r3
are the position coordinates of the atom, DWfactor
is the Debye-Waller factor, and occupancy
is the occupancy rate.
An example file is given below.
# SiC(111) bulk
5.33940 5.33940 7.5510487 90.000000 90.000000 120.000000
Si 0.00000000 0.00000000 0.00000000 0.0 1.0
Si 0.33333333 0.66666667 0.00000000 0.0 1.0
Si 0.66666667 0.33333333 0.00000000 0.0 1.0
C 0.00000000 0.00000000 0.25000000 0.0 1.0
...
Output files¶
In sxrd
, the output files are stored in the folder with the rank number.
Here is a description of the files that are output by odatse-SXRD
.
stdout
¶
The standard output by sxrd
is described.
For sxrd’s Least square fitting, we give variables as initial parameters and calculate the Rfactor for a 1-shot calculation (number of iterations = 0).
The Rfactor is written in R under Fit results.
Here is an example of the output.
---------------------------------------
Program py2dmat/mapper_sxrd/sxrdcalc for surface x-ray diffraction calculations.
Version 3.3.3 - August 2019
Inputfile: lsfit.in
Least-squares fit of model to experimental structure factors.
...
Fit results:
Fit not converged after 0 iterations.
Consider increasing the maximum number of iterations or find better starting values.
chi^2 = 10493110.323318, chi^2 / (degree of freedom) = 223257.666454 (Intensities)
chi^2 = 3707027.897897, chi^2 / (degree of freedom) = 78872.933998 (Structure factors)
R = 0.378801
Scale factor: 1.00000000000000 +/- 0.000196
Parameter Nr. 1: 3.500000 +/- 299467640982.406067
Parameter Nr. 2: 3.500000 +/- 898402922947.218384
Covariance matrix:
0 1 2
0 0.0000000383 20107160.3315223120 -60321480.9945669472
1 20107160.3315223120 89680867995567253356544.0000000000 -269042603986701827178496.0000000000
2 -60321480.9945669472 -269042603986701827178496.0000000000 807127811960105615753216.0000000000