magnetism - Magnetic Models¶

 BaseMagnetism Magnetic properties of the layer. FreeMagnetism Spline change in magnetism throughout layer. Magnetism Region of constant magnetism. MagnetismStack Magnetic slabs within a magnetic layer. MagnetismTwist Linear change in magnetism throughout layer.

Magnetic modeling for 1-D reflectometry.

Magnetic properties are tied to the structural description of the but only loosely.

There may be dead regions near the interfaces of magnetic materials.

Magnetic behaviour may be varying in complex ways within and across structural boundaries. For example, the ma Indeed, the pattern may continue across spacer layers, going to zero in the magnetically dead region and returning to its long range variation on entry to the next magnetic layer. Magnetic multilayers may exhibit complex magnetism throughout the repeated section while the structural components are fixed.

The scattering behaviour is dependent upon net field strength relative to polarization direction. This arises from three underlying quantities: the strength of the individual dipole moments in the layer, the degree of alignment of these moments, and the net direction of the alignment. The strength of the dipole moment depends on the details of the electronic structure, so unlike the nuclear scattering potential, it cannot be readily determined from material composition. Similarly, net magnetization depends on the details of the magnetic domains within the material, and cannot readily be determined from first principles. The interaction potential of the net magnetic moment depends on the alignment of the field with respect to the beam, with a net scattering length density of $$\rho_M \cos(\theta_M)$$. Clearly the scattering measurement will not be able to distinguish between a reduced net magnetic strength $$\rho_M$$ and a change in orientation $$\theta_M$$ for an individual measurement, as should be apparent from the correlated uncertainty plot produced when both parameters are fit.

Magnetism support is split into two parts: describing the layers and anchoring them to the structure.

class refl1d.magnetism.BaseMagnetism(extent=1, dead_below=0, dead_above=0, interface_below=None, interface_above=None, name='LAYER')[source]

Bases: object

Magnetic properties of the layer.

Magnetism is attached to set of nuclear layers by setting the magnetism property of the first layer to the rendered for the magnetic profile, and setting extent to the number of nuclear layers attached to the magnetism object.

dead_below and dead_above are dead regions within the magnetic extent, which allow you to shift the magnetic interfaces relative to the nuclear interfaces.

interface_below and interface_above are the interface widths for the magnetic layer, which default to the interface widths for the corresponding nuclear layers if no interfaces are specified. For consecutive layers, only interface_above is used; any value for interface_below is ignored.

parameters()[source]
set_layer_name(name)[source]

Update the names of the magnetic parameters with the name of the layer if it has not already been set. This is necessary since we don’t know the layer name until after we have constructed the magnetism object.

to_dict()[source]
class refl1d.magnetism.FreeMagnetism(z=(), rhoM=(), thetaM=(), name='LAYER', **kw)[source]

Spline change in magnetism throughout layer.

Defines monotonic splines for rhoM and thetaM with shared knot positions.

z is position of the knot in [0, 1] relative to the magnetic layer thickness. The z coordinates are automatically sorted before rendering, leading to multiple equivalent solutions if knots are swapped.

rhoM gives the magnetic scattering length density for each knot.

thetaM gives the magnetic angle for each knot.

name is the base name for the various layer parameters.

dead_above and dead_below define magnetically dead layers at the nuclear boundaries. These can be negative if magnetism extends beyond the nuclear boundary.

interface_above and interface_below define the magnetic interface at the boundaries, if it is different from the nuclear interface.

magnetic = True
parameters()[source]
profile(Pz, thickness)[source]
render(probe, slabs, thickness, anchor, sigma)[source]
set_layer_name(name)

Update the names of the magnetic parameters with the name of the layer if it has not already been set. This is necessary since we don’t know the layer name until after we have constructed the magnetism object.

to_dict()[source]
class refl1d.magnetism.Magnetism(rhoM=0, thetaM=270.0, name='LAYER', **kw)[source]

Region of constant magnetism.

rhoM is the magnetic SLD the layer. Default is rhoM=0.

thetaM is the magnetic angle for the layer. Default is thetaM=270.

name is the base name for the various layer parameters.

extent defines the number of nuclear layers covered by the magnetic layer.

dead_above and dead_below define magnetically dead layers at the nuclear boundaries. These can be negative if magnetism extends beyond the nuclear boundary.

interface_above and interface_below define the magnetic interface at the boundaries, if it is different from the nuclear interface.

parameters()[source]
render(probe, slabs, thickness, anchor, sigma)[source]
set_layer_name(name)

Update the names of the magnetic parameters with the name of the layer if it has not already been set. This is necessary since we don’t know the layer name until after we have constructed the magnetism object.

to_dict()[source]
class refl1d.magnetism.MagnetismStack(weight=None, rhoM=None, thetaM=None, interfaceM=None, name='LAYER', **kw)[source]

Magnetic slabs within a magnetic layer.

weight is the relative thickness of each layer relative to the nuclear stack to which it is anchored. Weights are automatically normalized to 1. Default is weight=[1] equal size layers.

rhoM is the magnetic SLD for each layer. Default is rhoM=[0] for shared magnetism in all the layers.

thetaM is the magnetic angle for each layer. Default is thetaM=[270] for no magnetic twist.

Not yet implemented. interfaceM is the magnetic interface for all but the last layer. Default is interfaceM=[0] for equal width interfaces in all layers.

name is the base name for the various layer parameters.

extent defines the number of nuclear layers covered by the magnetic layer.

dead_above and dead_below define magnetically dead layers at the nuclear boundaries. These can be negative if magnetism extends beyond the nuclear boundary.

interface_above and interface_below define the magnetic interface at the boundaries, if it is different from the nuclear interface.

parameters()[source]
render(probe, slabs, thickness, anchor, sigma)[source]
set_layer_name(name)

Update the names of the magnetic parameters with the name of the layer if it has not already been set. This is necessary since we don’t know the layer name until after we have constructed the magnetism object.

to_dict()[source]
class refl1d.magnetism.MagnetismTwist(rhoM=(0, 0), thetaM=(270.0, 270.0), name='LAYER', **kw)[source]

Linear change in magnetism throughout layer.

rhoM contains the (left, right) values for the magnetic scattering length density. The number of steps is determined by the model dz.

thetaM contains the (left, right) values for the magnetic angle.

name is the base name for the various layer parameters.

extent defines the number of nuclear layers covered by the magnetic layer.

dead_above and dead_below define magnetically dead layers at the nuclear boundaries. These can be negative if magnetism extends beyond the nuclear boundary.

interface_above and interface_below define the magnetic interface at the boundaries, if it is different from the nuclear interface.

magnetic = True
parameters()[source]
render(probe, slabs, thickness, anchor, sigma)[source]
set_layer_name(name)

Update the names of the magnetic parameters with the name of the layer if it has not already been set. This is necessary since we don’t know the layer name until after we have constructed the magnetism object.

to_dict()[source]