This notebook provides a step-by-step walk through of the processing of hysteresis loops. Each processing step is illustrated and described. This walk through can enable more granular data processing and illustrates the decision tree that is automatically implemented in the hysteresis
Install and import packages¶
import pmagpy.rockmag as rmag
import pmagpy.ipmag as ipmag
import pmagpy.contribution_builder as cb
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
output_notebook(hide_banner=True)Import local data in MagIC format¶
In this demonstration we will be using local data.
The data is from the following publication:
Swanson-Hysell, N. L., Avery, M. S., Zhang, Y., Hodgin, E. B., Sherwood, R. J., Apen, F. E., et al. (2021). The paleogeography of Laurentia in its early years: New constraints from the Paleoproterozoic East-Central Minnesota Batholith. Tectonics, 40, e2021TC006751. https://
doi .org /10 .1029 /2021TC006751
# set the dir_path to the directory where the measurements.txt file is located
dir_path = '../example_data/ECMB'
# set the name of the MagIC file
ipmag.unpack_magic('magic_contribution_20213.txt',
dir_path = dir_path,
input_dir_path = dir_path,
print_progress=False)
# create a contribution object from the tables in the directory
contribution = cb.Contribution(dir_path)
measurements = contribution.tables['measurements'].df1 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/contribution.txt
1 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/locations.txt
90 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/sites.txt
312 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/samples.txt
1574 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/specimens.txt
17428 records written to file /Users/hematite/Documents/GitHub/RockmagPy-notebooks/example_data/ECMB/measurements.txt
-I- Using online data model
-I- Getting method codes from earthref.org
-I- Using cached vocabularies
-I- Using cached suggested vocabularies
Get hysteresis data from the measurements dataframe¶
The method codes relevant to hysteresis loops are:
LP-HYSfor regular hysteresis loopsLP-HYS-Ofor hysteresis loops as a function of orientationLP-HYS-Tfor hysteresis loops as a function of temperature
Inspect the original measurement level data¶
Below we investigate all the available specimens that have hysteresis data in the database for this contribution.
We extract the experimental data for an individual specimen.
measurements = measurements[measurements['method_codes'] == 'LP-HYS']
measurements.specimen.unique()<StringArray>
['NED1-5c', 'NED18-2c', 'NED2-8c', 'NED4-1c', 'NED6-6c']
Length: 5, dtype: str# filter and isolate specimen specific hysteresis loop data by specimen name
NED1_5c_hyst = measurements[measurements['specimen'] == 'NED1-5c'].reset_index(drop=True)
NED18_2c_hyst = measurements[measurements['specimen'] == 'NED18-2c'].reset_index(drop=True)
NED2_8c_hyst = measurements[measurements['specimen'] == 'NED2-8c'].reset_index(drop=True)
NED4_1c_hyst = measurements[measurements['specimen'] == 'NED4-1c'].reset_index(drop=True)
NED6_6c_hyst = measurements[measurements['specimen'] == 'NED6-6c'].reset_index(drop=True)Let’s take a look at the columns relevant to hysteresis data processing
magn_massis mass normalized magnetization (in Am^2/kg)meas_field_dcis the applied DC field (in T)
NED18_2c_hyst[['magn_mass', 'meas_field_dc']]Visualize the raw data with plot_hyst_loop¶
The function returns a Bokeh plot object which can be further customized before displaying
NED18_2c_plot = rmag.plot_hyst_loop(NED18_2c_hyst['meas_field_dc'], NED18_2c_hyst['magn_mass'],
'NED18-2c', line_color='orange', line_width=1, label='NED18-2c', return_figure=True)Loop processing¶
rockmagpy calculates the hysteresis loop parameters as available in the IRMDB software. Summary parameters can then be exported into the MagIC specimen data table.

The processing functions implement the protocol of Jackson and Solheid (2010) as realized in the hysteresis processing software of the Institute for Rock Magnetism (IRM). Paterson et al. (2018) present a related treatment of hysteresis data processing (implemented in HystLab) that is a complementary resource. This flowchart shows the decision tree for data processing.

Interpolate the raw data and re-grid them into an upper and a lower branch with exactly the same and symmetric field steps¶
The applied DC field values through the upper and lower branches during experiments are usually not exactly symmetric about the origin. We need to correct for the slight mismatching between the field steps by splitting the loop into an upper branch and a lower branch, interpolating the branches and unifying their field axis to be the same and be symmetric about 0.
The function
rmag.grid_hyst_loopaccomplishes this task.
NED18_2c_hyst_grid_field, NED18_2c_hyst_grid_magnetization = rmag.grid_hyst_loop(NED18_2c_hyst['meas_field_dc'],
NED18_2c_hyst['magn_mass'])
NED18_2c_plot_grid = rmag.plot_hyst_loop(NED18_2c_hyst_grid_field, NED18_2c_hyst_grid_magnetization, specimen_name='NED18-2c',
p=NED18_2c_plot, line_color='goldenrod', label='NED18-2c gridded', legend_location='top_left', return_figure=True)Perform linearity test on the whole loop¶
If the whole loop is linear, the sample is dominated by paramagnetic or diamagnetic materials and no ferromagnetic parameters can be estimated (the high-field slope is the result to report).
If the whole loop is not linear, we should move on to further processing.
The
FNLstatistic is a lack-of-fit F ratio from an ANOVA partition in which the upper branch and the inverted lower branch are treated as replicate measurements (Jackson and Solheid, 2010).FNLvalues above ~1.25 reject whole-loop linearity at 95% confidence for typical loop sizes.The resulting stats dictionary from the
hyst_linearity_testfunction has a keyloop_is_linearwith a boolean value that signals whether the loop is linear or not.process_hyst_loopimplements this as a decision-tree exit: a statistically linear loop terminates with only χHF reported (from the whole-loop regression) and the ferromagnetic parameters as NaN. Passingfit_linear_loop=Trueoverrides the exit and processes the loop in full, which can be useful when a weak ferromagnetic signal near the noise level is of interest.
loop_linearity = rmag.hyst_linearity_test(NED18_2c_hyst_grid_field, NED18_2c_hyst_grid_magnetization)
loop_linearity{'SST': 31.31588187151477,
'SSR': 29.911856290407343,
'SSD': 1.404025581107423,
'R_squared': 0.9551657019633689,
'SSPE': 0.000117113729198881,
'SSLF': 1.403908467378224,
'MSPE': 2.927843229972025e-07,
'MSLF': 0.0035274082094930255,
'MSR': 29.911856290407343,
'MSD': 0.0017594305527661941,
'FL': 17000.87351750237,
'FNL': 12047.804245061063,
'slope': 0.33421603926557925,
'intercept': 3.292628865865779e-05,
'F_critical': 1.1792380924257342,
'p_value': 0.0,
'alpha': 0.05,
'loop_is_linear': False}Loop centering¶
In the example case, the loop is not linear, so we need to isolate the ferromagnetic component from the paramagnetic component.
We need to center the loop to remove any offset in the field and moment axes that could be present in the data.
centering_results = rmag.hyst_loop_centering(NED18_2c_hyst_grid_field, NED18_2c_hyst_grid_magnetization)
NED18_2c_hyst_centered_H, NED18_2c_hyst_centered_M = centering_results['centered_H'], centering_results['centered_M']
NED18_2c_plot_centered = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_centered_M, specimen_name='NED18-2c', p=NED18_2c_plot_grid, line_color='red', label='NED18-2c offset corrected', legend_location='top_left', return_figure=True)Quality factor Q¶
Once the loop has been centered, the quality factor Q can be calculated. Following Jackson and Solheid (2010), Q is the decimal log of the signal/noise ratio, where the noise is quantified from the mean square mismatch between symmetrically equivalent moments of the offset-corrected loop. The convention used is , matching the IRM’s processing software and HystLab (Paterson et al., 2018, eq. 4); note that the corresponding equation as printed in Jackson and Solheid (2010) omits the square root, although the values reported in that paper include it (see Paterson et al., 2018). A higher value indicates better quality data. Note this value can deviate from that currently calculated in the IRM VSM Ferret as that value is estimated from the FNL statistic.
High Q values (e.g., 2 or greater) indicate that deviations from inversion symmetry due to all possible sources (noise, drift, and inherent asymmetry) are small. Conversely, low values indicate that at least one of these is significant. When Q falls below ~0.3 (signal/noise ~2) it becomes difficult to compute meaningful parameters for the loop, and when Q < 2 the automated processing skips the horizontal (field) offset correction because it cannot be robustly determined.
centering_results['Q']2.4287561471446177Loop drift correction¶
Sometimes spurious changes occur in measured signal strength on time scales comparable to that of the loop measurement. Drift is typically manifested by failure of loops to close, by lack of even symmetry in Mrh, and/or by failure of Mrh to decrease to zero in large (positive or negative) fields.
In many cases a correction is not strictly necessary as the drift signal is small. The default approach is to examine the smoothed error curve Me (the mismatch between the upper branch and the inverted lower branch) and determine whether a high-field drift correction or an upper branch drift correction is appropriate.
If you zoom in on the ~1 T region of the loop above, you will find that there is a slight difference between the beginning and end points.
The
Me_drift_correctionfunction corrects the drift by subtracting a smoothed Me curve either in the high-field region (when the largest errors occur above 75% of the maximum field) or over the entire upper branch of the loop.
NED18_2c_hyst_drift_corr_magnetization = rmag.Me_drift_correction(NED18_2c_hyst_centered_H, NED18_2c_hyst_centered_M)NED18_2c_plot_drift_corr = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization, specimen_name='NED18-2c', p=NED18_2c_plot_centered, line_color='blue', label='NED18-2c drift corrected', legend_location='top_left', return_figure=True)Calculate the Mr (remanent magnetization), Mrh (remanence component), Mih (induced component), Me (error), Brh (field corresponding to 1/2 Mr)¶
The function
calc_Mr_Mrh_Mih_Brhcalculates these values and curves.Mrh = (M+ - M-)/2 and Mih = (M+ + M-)/2 where M+ and M- are the upper and lower branches; for a well-behaved loop, Mrh is an even function of field and Mih is odd (Jackson and Solheid, 2010).
Below we print out the Mr value and Brh value.
H, Mr, Mrh, Mih, Me, Brh = rmag.calc_Mr_Mrh_Mih_Brh(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization)
print('Mr: ', Mr, 'Brh: ', Brh)Mr: 0.013721758647117336 Brh: 0.03653374612762557
NED18_2c_plot_drift_corr.line(H, Mrh, line_color='green', legend_label='Mrh', line_width=1)
NED18_2c_plot_drift_corr.line(H, Mih, line_color='purple', legend_label='Mih', line_width=1)
NED18_2c_plot_drift_corr.line(H, Me, line_color='brown', legend_label='Me', line_width=1)
show(NED18_2c_plot_drift_corr)Test loop saturation (high-field linearity test)¶
Next we test the loop saturation. This test allows us to determine the appropriate approach for fitting the high-field portion of the loop and determining Ms.
The lack of saturation can cause a loop to deviate from linearity at high fields. Although such a deviation from linearity can be subtle to the eye, it can have a significant effect on estimates of Ms. As developed in Jackson and Solheid (2010), a linearity test is conducted over high-field windows starting at 60%, 70%, and 80% of the maximum field. Each window’s lack-of-fit F ratio (
FNL60,FNL70,FNL80) is compared with the critical value of the F distribution at the window’s degrees of freedom (F_critical60etc., atalpha=0.05by default, as in Jackson and Solheid, 2010, and HystLab); the p-values are returned as well. If every window rejects linearity, a linear fit to the high-field data would be inappropriate for correcting the paramagnetic or diamagnetic slope and an approach-to-saturation fit is required; otherwise the linear fit is taken over the widest window that is statistically linear (thesaturation_cutoff,Nonewhen no window is linear). Because the drift correction subtracts a smoothed version of the branch mismatch that the test estimates its pure error from,process_hyst_looppasses the fraction of the pure-error degrees of freedom that the smoothing leaves (pure_error_df_fraction, reported byMe_drift_correction); windows in which the loop was measured at fewer than 12 points are reported as untestable rather than tested on interpolated points.In the example case, the loop is not saturated at 60%, 70%, and 80% of the maximum field range. Therefore, an approach to saturation fit needs to be used for isolating the ferromagnetic loop and then calculating the Ms and the high field susceptibility values.
loop_saturation_test_result = rmag.hyst_loop_saturation_test(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization)
loop_saturation_test_result{'alpha': 0.05,
'pure_error_df_fraction': 1.0,
'n_measured60': None,
'FNL60': 98.71245833061079,
'p60': 9.412460150139256e-106,
'F_critical60': 1.3126794568367575,
'n_pairs60': 148,
'n_measured70': None,
'FNL70': 25.24999808936752,
'p70': 5.027684730409133e-47,
'F_critical70': 1.3760039055928475,
'n_pairs70': 108,
'n_measured80': None,
'FNL80': 17.47848462911585,
'p80': 2.6515566134261793e-25,
'F_critical80': 1.4979633177780256,
'n_pairs80': 68,
'testable': True,
'saturation_cutoff': None,
'loop_is_saturated': False}Fit high-field slope and get the intercept as Ms¶
In this case, the loop is not saturated at high fields and we should use an approach to saturation fit to calculate the Ms value.
But to show the difference between a linear fit and a saturation fit, we will also perform a linear fit on the high-field data and use it to correct the loop. Since no window is statistically linear here (
saturation_cutoffisNone), the linear fit is taken over the window from 70% of the peak field, the routine default of most instrument software.We use the
linear_HF_fitfunction to estimate the high-field susceptibility (and the Ms intercept in the case where the loop is saturated). Note that the returnedchi_HFis the fitted slope converted to SI units (multiplied by ).We then use the resultant
chi_HFto correct the loop using thehyst_slope_correctionfunction (which applies the inverse unit conversion internally).
# the loop has no statistically linear window (saturation_cutoff is None), so for
# illustration the linear fit is taken over 70-97% of the peak field, the routine default
linear_window = loop_saturation_test_result['saturation_cutoff'] or 0.7
chi_HF, Ms = rmag.linear_HF_fit(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization, linear_window)
NED18_2c_hyst_linear_ferro_M = rmag.hyst_slope_correction(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization, chi_HF)
print('Ms based on linear fitting: ', Ms)Ms based on linear fitting: 0.11404747381251495
NED18_2c_plot_linear_ferro = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_linear_ferro_M,
specimen_name='NED18-2c', p=NED18_2c_plot_drift_corr,
line_color='dodgerblue', label='NED18-2c linear high-field corrected', return_figure=True)Perform approach-to-saturation fit and estimate a more appropriate Ms¶
In this example case, a linear fit would underestimate the Ms value.
A more appropriate Ms value can be estimated using a nonlinear approach-to-saturation fit with the
hyst_HF_nonlinear_optimizationfunction.By default (
fit_type='IRM'), the model used at the IRM is fit:Alternative model forms of (Fabian, 2006) are available with
fit_type='Fabian'(free ) andfit_type='Fabian_fixed_beta'().These models are linear in their parameters apart from , so they are solved by least squares (Jackson and Solheid, 2010, section 7) with the sign constraints that describe an approach to saturation imposed as bounds; no starting values are involved. For the free- form, is searched on a grid over with a linear solve at each value, as Jackson and Solheid (2010) and HystLab do; is confined to that interval because the and constant basis functions become indistinguishable as .
The high-field fitting problem is ill-conditioned (the basis functions are strongly correlated over a typical window), so the uncertainty of Ms and χHF is estimated by the bootstrap of Jackson and Solheid (2010): with
n_bootstrapset, the high-field points are resampled with replacement and refit that many times, and the standard deviation (Ms_se,chi_HF_se) and 2.5–97.5% range (Ms_ci95,chi_HF_ci95) of the refits are returned.The returned
Fnl_linstatistic (Jackson and Solheid, 2010, eq. 21) tests whether the nonlinear fit significantly improves on a linear fit; it is compared with the F distribution at the fit’s degrees of freedom and its p-value is returned asFnl_lin_p(Jackson and Solheid quote ~3–3.5 as the critical value for typical numbers of points).
NL_fit_result = rmag.hyst_HF_nonlinear_optimization(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization,
HF_cutoff=0.6, fit_type='IRM', n_bootstrap=1000, rng=0)
{key: value for key, value in NL_fit_result.items() if key != 'bootstrap'}{'chi_HF': 2.0311887040321416e-07,
'Ms': 0.12081554380034831,
'a_1': 0.0,
'a_2': -0.0016026252532279593,
'Fnl_lin': 150.8840986783382,
'Fnl_lin_p': 9.950023990768676e-46,
'Ms_se': 0.0004911170110490937,
'chi_HF_se': 5.249086502764928e-10,
'Ms_ci95': (0.11984611213248587, 0.12177713388684609),
'chi_HF_ci95': (2.0209195285255882e-07, 2.0417164339855059e-07),
'beta_ci95': None,
'n_bootstrap': 1000,
'n_points': 296,
'fit_success': True,
'fit_message': 'bounded linear least squares'}Test loop closure¶
When there are significant high coercivity components in the sample such as hematite or goethite, the hysteresis branches will not be overlapping at the highest applied fields. The unsaturated fraction then biases the high-field fit, and so the Ms and χHF estimated from it, which is why the test is applied after the fit: the opening is expressed relative to the fitted Ms.
The
loop_closure_testfunction quantifies the opening with the statistic (HF_Mrh_fraction): the mean of the field-reflection average of Mrh, , over the high-field window (80--99% of the peak field by default), divided by the fitted Ms. Mrh is an even function of field for a well-behaved loop and falls to zero once the branches have merged, so is the unswitched irreversible moment within the window as a fraction of the ferromagnetic moment, which is also the approximate relative error the opening induces in Ms: zero for a closed loop, positive for an open one, and negative when the branches cross (usually residual drift). The same quantity relative to Mr (HF_Mrh_fraction_Mr, the fraction of the saturation remanence still unswitched) is returned as well; it does not depend on the fit but overstates the opening for material with a small Mr/Ms. Called directly,loop_closure_testestimates the noise from the odd part of Mrh, , which is zero for a symmetric loop and carries only the noise. Because gridding correlates neighboring points and the drift correction’s smoothing adds a slowly varying component to the even part that the odd part does not see,process_hyst_loopinstead obtains the standard error by propagation (closure_mean_se_by_noise_propagation): the measurement noise is estimated on the measured branches, white noise of that size is generated at the measured fields, gridded and passed through the same drift correction the loop received, and the scatter of the resulting window means is the standard error (the odd-part value is returned alongside asHF_Mrh_mean_se_odd_part). When the approach-to-saturation fit leaves Ms on its bound — a loop so far from saturation that no model describes its high-field branches — is undefined and the opening is sized against the largest moment the loop reaches, Mmax (HF_Mrh_fraction_Mmax); whether any high-field Mrh is detectable above the noise is decided first (if none is, the loop is closed), and since Mmax includes the paramagnetic moment the sized fraction can only confirm that a loop is open, never declare it closed; the results record which normalization the verdict used (closure_normalization). Because the value depends on the window, the window is returned with it.The verdict (
closure_state) is'open'when exceeds theopenness_tolerance(2% of Ms by default) by more than two standard errors,'closed'when it is below the tolerance by more than two standard errors, and'indeterminate'when the data do not resolve the question. The signal-to-noise ratio (SNR) and high-field area ratio (HAR) statistics of HystLab (Paterson et al., 2018, section 4.5) are also returned, and can be selected as the decision rule withcriterion='SNR_HAR'; they are not the default because they measure whether an opening is detectable above the noise rather than how large it is.Loop closure does not stop processing.
process_hyst_loopcomputes every parameter for every loop, returnsclosure_state,HF_Mrh_fractionand its standard error alongside them, and prints a-W-line for loops that are open or of unresolved closure. Whether a given opening is acceptable is left to the analyst; when writing results to a MagIC specimens table,add_hyst_stats_to_specimens_table(..., exclude_open=True)withholds the slope-dependent parameters (Ms, Bc, χHF) of open loops while keeping the slope-independent Mr and Brh.In the example case, the loop is closed.
loop_closure_test = rmag.loop_closure_test(H, Mrh, Me=Me, Ms=NL_fit_result['Ms'])
{key: loop_closure_test[key] for key in ('closure_state', 'normalization', 'HF_Mrh_fraction', 'HF_Mrh_fraction_se', 'HF_Mrh_fraction_Mr', 'SNR', 'HAR')}{'closure_state': 'closed',
'normalization': 'Ms',
'HF_Mrh_fraction': 0.00024913950629633434,
'HF_Mrh_fraction_se': 0.00011580440083624483,
'HF_Mrh_fraction_Mr': 0.00219359090255281,
'SNR': 3.6192913081540556,
'HAR': -36.939968763237275}Now let’s use the approach-to-saturation fit result to correct the loop.
NED18_2c_hyst_NL_ferro_M = rmag.hyst_slope_correction(NED18_2c_hyst_centered_H, NED18_2c_hyst_drift_corr_magnetization,
NL_fit_result['chi_HF'])Plot the ferromagnetic component together with the previous intermediate products¶
You may click on the legend items to hide the curves
The preferred final ferromagnetic component is shown in pink
NED18_2c_plot_NL_ferro = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_NL_ferro_M,
specimen_name='NED18-2c', p=NED18_2c_plot_drift_corr,
line_color='pink', label='NED18-2c non-linear high-field correction',
legend_location='bottom_right', return_figure=True)Inspect the differences between applying a linear high field slope fit vs. an approach-to-saturation fit¶
high_field_fit_inspection_plot = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_NL_ferro_M,
specimen_name='NED18-2c',
line_color='pink', label='NED18-2c non-linear high-field correction',
legend_location='bottom_right')
high_field_fit_inspection_plot = rmag.plot_hyst_loop(NED18_2c_hyst_centered_H, NED18_2c_hyst_linear_ferro_M,
specimen_name='NED18-2c', p=high_field_fit_inspection_plot,
line_color='dodgerblue', label='NED18-2c linear high-field corrected', return_figure=True)Calculate the quality factor of the ferromagnetic component loop¶
Qf is the quality factor Q recomputed on the slope-corrected (ferromagnetic component) loop (the of Jackson and Solheid, 2010). The high-field slope correction affects the mean square signal strength but not the noise, so Qf quantifies the signal/noise of the isolated ferromagnetic loop.
M_sn_f, Qf = rmag.calc_Q(NED18_2c_hyst_centered_H, NED18_2c_hyst_NL_ferro_M)
print('Qf: ', Qf)Qf: 3.435942857149203
Calculate Bc¶
This calculation is based on the ferromagnetic component loop.
There will be a difference if you use the loops before high-field slope correction.
The Bc value is calculated as the average of the lower and upper branch.
The value shown is in unit of Tesla.
Bc = rmag.calc_Bc(NED18_2c_hyst_centered_H, NED18_2c_hyst_NL_ferro_M)
print('Bc: ', Bc)Bc: 0.010038809582170015
The process_hyst_loop function¶
The process_hyst_loop function applies all of the above steps using the decision tree to process the data. The summary table includes the parameters developed above as well as the hysteresis shape parameter of Fabian (2003), where is the area of the ferromagnetic loop. Options include NL_fit=True to force an approach-to-saturation fit, centering_protocol='iterative' for weak ferromagnetic loops superimposed on a strong linear background, fit_linear_loop=True to fully process a loop that passes the whole-loop linearity test (the one decision-tree exit), openness_tolerance to set the level of (as a fraction of the fitted Ms) at which a loop is flagged as open, quality_threshold to set the quality factor below which a loop is flagged as low quality, and n_bootstrap (default 1000; 0 to skip) for the number of bootstrap refits behind the uncertainties Ms_se and chi_HF_se of the approach-to-saturation fit. The summary table shows Ms with its standard error, and the results record which high-field fit was used (hf_fit).
NED18_2c_hyst_process_result = rmag.process_hyst_loop(NED18_2c_hyst['meas_field_dc'].values, NED18_2c_hyst['magn_mass'].values, 'NED18-2c')References¶
Fabian, K. (2003). Some additional parameters to estimate domain state from isothermal magnetization measurements. Earth and Planetary Science Letters, 213(3-4), 337–345. https://
Fabian, K. (2006). Approach to saturation analysis of hysteresis measurements in rock magnetism and evidence for stress dominated magnetic anisotropy in young mid-ocean ridge basalt. Physics of the Earth and Planetary Interiors, 154, 299–307. https://
Jackson, M., & Solheid, P. (2010). On the quantitative analysis and evaluation of magnetic hysteresis data. Geochemistry, Geophysics, Geosystems, 11(4), Q04Z15. https://
Paterson, G. A., Zhao, X., Jackson, M., & Heslop, D. (2018). Measuring, processing, and analyzing hysteresis data. Geochemistry, Geophysics, Geosystems, 19(7), 1925–1945. https://
Swanson-Hysell, N. L., Avery, M. S., Zhang, Y., Hodgin, E. B., Sherwood, R. J., Apen, F. E., et al. (2021). The paleogeography of Laurentia in its early years: New constraints from the Paleoproterozoic East-Central Minnesota Batholith. Tectonics, 40, e2021TC006751. https://