I am a physics undergrad and I have MOKE data for a magnetic material (thin permalloy film on a silicon substrate).

Here is one of the hysteresis loops I obtained, plotted using Python: Loop

The form of the $y$-axis is irrelevant since I am just going to normalise the signal. I am also going to shift the loop horizontally and vertically so that it is centered around zero but that should not be hard to do. My data is just in a standard text file so it boils down to $x$ and $y$ data points.

How would I obtain the following properties from this?

  • $M_s$ - saturation magnetisation
  • $M_r$ - remanent magnetisation
  • $H_c$ - coercive field
  • $H_\text{sat}$ - saturation field

For example, $M_s$ is just where the graph appears to start being linear at the top but of course it looks very fuzzy with this data, so how would I see where this "linearity" begins? Using the data file of course.

Also any advice on correcting for the sloping saturation at either end of the graph would be appreciated, because in theory of course the saturation should be parallel to the x-axis but various optical effects result in this sloping.

  • $\begingroup$ Welcome to SciComp.SE. What do you mean by "MOKE"? $\endgroup$
    – nicoguaro
    Feb 2, 2016 at 21:49

2 Answers 2


First, you can replace the hysteresis plot with either smooth or piecewise-linear model presented in the article “An improved parametric model for hysteresis loop approximation” (R. V. Lapshin, Review of Scientific Instruments, vol. 91, iss. 6, no. 065106, 31 pp., 2020, DOI: 10.1063/5.0012931). In the case of the smooth model, I would recommend using a triple loop, where two outer loops are the required horizontal “whiskers”. You can fit the data simply by eye or by using the least-mean squares approach (eye-fitting will provide results suitable for the most practical cases).

Take a note of the “Supplementary material” that accompanies this article:

  1. Zip archive with Mathcad 2001i worksheets (34 MB) where all aspects of the original and improved parametric models of hysteresis loop are considered in detail (definitions, proofs, illustrating graphs, comments, notes).

  2. Those who do not have Mathcad software may take advantage of the enclosed readable Mathcad worksheets as a PDF-document (76 MB).

Due to the restriction on the length of the article, it presents only the most common hysteresis loops. If the required loop is absent in the article, it makes sense to search in the supplementary material.

Simulation of a single Classical (a) smooth and (b) hybrid loop with long whiskers by means of a triple hysteresis loop. Whiskers are the outside pair of (a) smooth and (b) piecewise-linear unsplit loops of Leaf type

enter image description here


I'm not really sure about the sloping saturation at the ends. I think a bit of slope at either end is normal. In theory, the saturation is flat, but in practice, I would say the saturation is usually a little angled. A simple trick you could use is to fit a logistic model to your data, and use the saturated value of the model as the saturated magnetic field strength.

The remnant magnetization is the magnetization that remains when the applied magnetic field goes to zero. You could, in fact, use the logistic model to find the remnant magnetization by just subtracting the value of your logistic function at the mean $x$ value from the value of your data in the neighborhood of that value. In MATLAB, you could do this by finding the indices of your $x$ vector (in your case Field) such that $x$ is within some tolerance; dividing those into two groups that contain $y$ (Kerr signal) above and below its mean; averaging the $y$'s that are in each of those subgroups; and subtracting the value of the logistic function from each of those means (both values should be about the same but of opposite sign).

The coercive field is the field that must be applied in order to get the magnetization back to zero (or twice that, depending on how you define it). You can simply look at the $x$ value at the mean value of your fitted $y$. To do this in MATLAB, you have to do something very similar to the above but replace the $y$'s with $x$'s and vice versa.

For the saturation field, the best way to do it is probably to differentiate your logistic model and find where the derivative with respect to $x$ equals zero. The derivative of the logistic function can be found here; just substitute $\mathbf{x}^T\boldsymbol{\beta}$ for $\mathbf{x}$ (using a vector for $\mathbf{x} = [1 \:x]^T$ since the data may have a nonzero intercept) and don't forget to use the chain rule. Once you find $x:f'(\mathbf{x}^T\boldsymbol{\beta}) = 0$, just evaluate that $x$ in your model or take the mean of the $y$'s around that value of $x$.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.