Releases: deepanshs/mrsimulator
v1.0
What's new
Features
- New feature supporting 2D sideband-sideband correlation simulations.
- New feature supporting user defined two-angle orientations for powder averaging, with
added support of ASG triangular mesh integration. - Support for gamma angle averaging.
sim.confignow holds a newnumber_of_gamma_anglesattribute. - Adds a new
is_complexattribute to the ConfigSimulator class. Default value is True. When False,
only the real part of the spectral is simulated. It provides a faster computation speed for simulations
where imaginary part is always zero. - Support for quadrupolar-shielding cross frequency interactions.
freq_contribincludes
newQuad_Shielding_cross_0,Quad_Shielding_cross_2,Quad_Shielding_cross_4literals. - Support for user-defined isotopes using the
Isotope.register()method. See the simulation gallery for use cases and examples. - Shortcuts for frequency contributions, such as
Shielding,Isotropic, andcross.
Sets of contributions can also be excluded by placing an exclamation mark in front of the string, for example"!Shielding"excludes shielding interactions. - New functions for fitting Czjzek and Extended Czjzek tensor distribution models to experimental spectra.
See the examples gallery for more information. - A new
DelayEventadded to the events library. - A collection of utility functions for converting Cartesian tensor to Haeberlen, Mehring, and
Maryland conventions and vice-versa. - Support for python 3.11, 3.12, and 3.13
Simulator
- New instance method for the
Simulatorclass --.optimize()-- which pre-computes transition pathways before least-squares minimization. This improves the efficiency of least-squares minimization.
Czjzek and Extended Czjzek
- The Czjzek model now uses an analytical expression for calculating the probability distribution greatly improving quality and calculation speed.
Bug Fixes
- Fixed bug where
MixingEnumclass had no attributejson(Issue #260) - Fixed 0Hz crash issue in apodization.
- Fix bug related to pydantic v2.0 validation.
- Fix latex build error in pdf docs.
- Fixed the bug where the csdm object origin offset was incorrectly set. The origin offset is now
w_ref. - Fix bug when calculating ppm scale for large reference offsets.
Additional updates
- Dropped support for python 3.7, 3.8, and 3.9 because they reached the end of their lifetime.
What's Changed
- Post-release updates by @deepanshs in #218
- djs/Gamma orientation averaging by @deepanshs in #175
- STMAS pathway fix by @pjgrandinetti in #229
- Bump codecov/codecov-action from 3.1.0 to 3.1.1 by @dependabot in #233
- djs/Linux build error fix by @deepanshs in #236
- Add check for experimental data by @mgiammar in #234
- Skip docs/introduction/fitting_example.rst test by @deepanshs in #239
- djs/fix missing and outdated links by @deepanshs in #237
- Update pre-commit .yaml file by @mgiammar in #235
- djs/Setup cleanup by @deepanshs in #241
- Add rotation function for tensors and parent objects by @mgiammar in #238
- Windows bug fix by @mgiammar in #247
- Allow np.inf for 2D named methods by @mgiammar in #231
- djs/Fix large reference offset issue by @deepanshs in #248
- Bump codecov/codecov-action from 3.1.1 to 3.1.3 by @dependabot in #246
- Pre-compute pathways for fitting by @mgiammar in #242
- Store spin_multiplicity instead of spin for all Isotopes by @mgiammar in #252
- Quadrupolar cross-term interactions. by @deepanshs in #221
- djs/test binaries build by @deepanshs in #254
- Bump codecov/codecov-action from 3.1.3 to 3.1.4 by @dependabot in #251
- Exclude zero weight pathways by @mgiammar in #255
- Convert spectral dimension to periodic dimension by @deepanshs in #261
- djs/Tests for 1st order quad. by @deepanshs in #259
- Simplify Frequency Contributions by @mgiammar in #262
- Update documentation by @deepanshs in #266
- Implement custom isotope as lookup table by @mgiammar in #257
- Implement DelayEvent objects by @mgiammar in #253
- djs/Fix
latexpdfbuilds by @deepanshs in #276 - djs/w_ref is the origin offset by @deepanshs in #274
- djs/Update readme files links by @deepanshs in #277
- Undo skip test (check why windows GitHub runner fail with SSL error) by @deepanshs in #240
- Update astropy requirement from <=5.1 to <=5.3 by @dependabot in #279
- Disallow pydantic 2.0 by @mgiammar in #282
- fixed 0Hz bug in apodization by @mVenetos97 in #286
- Bug fix for Mixing Enum class by @mgiammar in #270
- djs/Undo forced py3.7.16 for mac by @deepanshs in #280
- djs/Cancel concurrent jobs by @deepanshs in #281
- Update version requirements by @deepanshs in #296
- Update read the docs config by @deepanshs in #295
- Bump docker/setup-qemu-action from 2 to 3 by @dependabot in #293
- Bump actions/checkout from 3 to 4 by @dependabot in #292
- Bump conda-incubator/setup-miniconda from 2 to 3 by @dependabot in #304
- djs/update requirements and skip 3.12 from built by @deepanshs in #303
- Bump actions/setup-python from 4 to 5 by @dependabot in #306
- Bump github/codeql-action from 2 to 3 by @dependabot in #309
- Bump actions/upload-artifact from 3 to 4 by @dependabot in #310
- djs/Include sphere option for volume integration by @deepanshs in #311
- Support for python 3.12 and drop support for python 3.7 by @deepanshs in #298
- djs/update astropy version by @deepanshs in #312
- djs/rc0.8 build test by @deepanshs in #313
- Cross terms by @pjgrandinetti in #307
- Sphinx version update for RTD by @deepanshs in #318
- Auto generate pdf test report by @deepanshs in #317
- Bump codecov/codecov-action from 3.1.4 to 3.1.6 by @dependabot in #320
- Bump codecov/codecov-action from 3.1.6 to 4.0.0 by @dependabot in #321
- Bump codecov/codecov-action from 4.0.0 to 4.0.1 by @dependabot in #324
- Djs/update code to match the draft by @deepanshs in #319
- djs/add comments and code cleanup by @deepanshs in #326
- Add support for analytical czjzek distribution by @deepanshs in #327
- Bump codecov/codecov-action from 4.0.1 to 4.1.0 by @dependabot in #328
- djs/Allow user defined 3d spatial averaging scheme by @deepanshs in #330
- djs/Add tests for mqmas, stmas affine matrix by @deepanshs in #332
- Add not to each freq contrib by @deepanshs in #334
- Djs/quad csa cross tests by @deepanshs in #333
- Bump codecov/codecov-action from 4.1.0 to 4.1.1 by @dependabot in #335
- Add Extended Czjzek fitting example by @mgiammar in #189
- fix amplitude scaling by @deepanshs in #337
- code unit test coverage by @deepanshs in #336
- [WIP] Add least-squares minimization capabiliy for Czjzek and Extended Czjzek by @mgiammar in #285
- Djs/Code Optimization by @deepanshs in https://github.com/deepa...
v0.7.0
What's new
Features
- Support for complex amplitude simulation.
- New isotropic interpolation schemes. Added
isotropic_interpolationas asim.configparameter. Allowed values arelinearandGaussian. - A new
larmor_freq(B0)function is added to theIsotopeclass, which returns the Larmor frequency of the isotope, given a magnetic flux density. For example,H1.larmor_freq(B0=9.40) - New weak J and dipolar coupling enumerations are added to
freq_contrib. - New command-line interface (CLI) tools for mrsimulator.
- Added 200+ NMR active isotopes to the library.
- Support for python 3.10
Method
- New Event classes---
SpectralEventandMixingEvent. The MixingEvent controls the transition amplitude mixing in a multi-event method. - New
TotalMixingandNoMixingmixing query enumerations for quick scripting of common mixing events. - New weights attribute for the
TransitionPathwayobject, which holds the probability of the transition pathway based on the mixing events defined within the method. - New
plot()function in Method class, which generates a visual representation of the method's events, transition pathways, rotor angle, etc. - Support for concurrent mixing events.
- Support for negative spectral width in a spectral dimension.
- Deprecated
Method1DandMethod2Dclasses. Use the genericmrsimulator.method.Methodobject for custom 1D and 2D methods.
SpinSystem
- New function
simplify()to simplify a spin system object to a list of irreducible spin systems. - New function
site_generator()added to the utility collection sub-module, which simplifies the process of creating Site objects in bulk. - Added gyromagnetic ratio and quadrupole moment metadata for all isotopes, including unstable isotopes.
SignalProcessor
- New
SkewGaussian,TopHat, andMaskapodization functions were added to the signal processor module.
Documentation
- Restructured documentation layout
- Improved troubleshooting section.
- Added section User Guide detailing the use and attributes of most objects.
- Added section Method demonstrating how to create custom Method objects.
- Condensed simulation/fitting gallery by removing redundant examples.
- New gallery demonstrating signal processing functions.
Changes
reduced_dictfunction is deprecated, usejson(units=False)instead.- The
mrsimulator.signal_processingmodule is renamed tomrsimulator.signal_processor - Drop support for Python version 3.6
- Added Channel validation for named methods #177
- Optimized memory usage and performance of the
single_site_system_generatorutility function.
Bug fixes
- Fixed bug where spectral interpolation resulted in a segmentation fault.
- Fixed memory leak issue in the C code.
- Fixed bug in query combination involving multiple quadrupolar queries. #188.
- Fixed bug related to unsigned/signed integers crashing on M1 macs.
Breaking changes
For most users
Mrsimulator is currently in development, and the new release includes breaking changes from v0.6.
Please review these changes and make changes according.
- The
mrsimulator.methodsmodule is renamed asmrsimulator.method.lib. - The
mrsimulator.signal_processingmodule is renamed tomrsimulator.signal_processor. - The
dataattribute ofSignalProcessor.apply_operations(data=...)is renamed todataset. UseSignalProcessor.apply_operations(dataset=...) - The
transition_queryattribute of themrsimulator.method.SpectralEventclass is renamed totransition_queries. - The
mrsimulator.method.query.RotationalQueryclass is renamed tomrsimulator.method.query.RotationQuery
For advanced users
- Complete redesign of the
TransitionQueryobject. Please refer to the documentation for details.
v0.6.1post1
Merge branch 'v0.6.x' of https://github.com/DeepanshS/MRsimulator int…
v0.6.1
v0.6.0
What's new
- ⭐ Improved simulation performance. ⭐ See our benchmark.
- Simulation of one-dimensional spectra of coupled spin systems. The frequency contributions from the coupled sites include weak J-couplings and weak dipolar couplings.
- New Coupling class.
- Added a new
Sitesclass that holds a list of Site objects. The Sites class method,to_pd(), exports the sites as a pandas data frame. - A new method,
sites(), is added to the Simulator object, which returns a list of uniqueSiteobjects within the Simulator object across multiple spin systems. - Added three new arguments to the
single_site_system_generator()method,
'site_labels', 'site_names', and 'site_descriptions'.
Changes
- The SpinSystem.get_isotopes method from the SpinSystem object will now return Isotope objects by default. Use the
symbol=Trueargument of the method to get a list of string isotopes. - The
to_freq_dict()function is deprecated. - The
Dsymmetry of thetransition_queryattribute from theMethod2Dmethod is now None by default. BlochDecayCTSpectrumis an alias forBlochDecayCentralTransitionSpectrumclass.
Bug fixes
- Fixed a bug related to the
get_spectral_dimensions()utility method in cases when CSDM dimension objects have negative increment. - Fixed a bug resulting in the non-conserved spectral area after a Gaussian apodization.
- Fixed a bug in Gaussian apodization, which raised an error when the FWHM argument is a scalar.
- Fixed bug causing multi-dataset fit to fail.
v0.5.1
Bug fixes
- Fixed a bug that was causing incorrect spectral binning when the frequency
contribution is pure isotropic.
Other changes
- More fitting examples.
- The
to_dict_with_units()method is deprecated and is replaced withjson() - The
json()function returns a python dictionary object with minimal required keywords,
where the event keys are globally serialized at the root method object. In the case where
the event key value is different from the global value, the respective key is serialized
within the event object. - The
json()function will no longer serialize thetransition_queryobjects for the
named objects.
v0.5.0
What's new
- ⭐ Improved simulation performance. ⭐ See our benchmark.
The update introduces various two-dimensional methods for simulating NMR spectrum.
-
Introduces a generic one-dimensional method, Method1D.
-
Introduces a generic two-dimensional method, Method2D.
-
Specialized two-dimensional methods for multi-quantum variable-angle spinning with build-in affine transformations.
-
Specialized two-dimensional methods for satellite-transition variable-angle spinning with build-in affine transformations.
-
Specialized two-dimensional isotropic/anisotropic sideband correlation method,
SSB2D.
v0.4.0
What's new!
- ⭐ Improved simulation performance. ⭐
- Added Czjzek and extended Czjzek second-rank symmetric tensor parameter distribution models for creating spin systems for amorphous materials.
- Add a new utility function,
single_site_system_generator, for generating a list of single-site spin systems from a 1D list/array of respective tensor parameters.
v0.3.0
Mrsimulator
mrsimulator is an open-source python package for computing fast and versatile solid-state NMR simulator of one-dimensional static, MAS, and VAS spectra of nuclei experiencing chemical shift (nuclear shielding) and quadrupolar coupling interactions. The library is optimized for computing both crystalline and amorphous materials and is compatible with modern python packages, such as scikit-learn, Keras, etc. The core of the mrsimulator library is written in C, wrapped, and made available in python.
What's new!
- ⭐ Improved simulation performance. ⭐.
- Removed the
Dimensionclass and added a newMethodclass instead. - New methods for simulating the NMR spectrum:
BlochDecaySpectrumandBlochDecayCentralTransitionSpectrum.
The Bloch decay spectrum method simulates all p=Δm=-1 transition pathways, while the Bloch decay central transition selective spectrum method simulates all transition pathways with p=Δm=-1 and d=0.
- New
Isotope,Transition, andZeemanStateclasses. - Every class now includes a
reduced_dict()method. The reduced_dict method returns a dictionary with minimal key-value pairs required to simulate the spectrum. Note, this may cause metadata loss, if any. - Added a
labelanddescriptionattributes to theSiteclass. - Added a new
labelattribute to theSpinSystemclass. - New
SignalProcessorclass for post-simulation signal processing. - Improved usage of least-squares minimization using python LMFIT package.
- Added a new
get_spectral_dimensionsutility function to extract the spectral dimensions information from the CSDM object.
Bug fixes
- Fixed bug resulting from the rotation of the fourth rank tensor with non-zero euler angles.
- Fixed bug causing a change in the spectral area as the sampling points change. Now the area is constant.
- Fixed bug resulting in an incorrect spectrum when non-coincidental quad and shielding tensors are given.
- Fixed bug causing incorrect generation of transition pathways when multiple events are present.
Other changes
- Renamed the
decomposeattribute from theConfigSimulatorclass todecompose_spectrum. The attribute is an enumeration with the following literals:none: Computes a spectrum which is an integration of the spectra from all spin systems.spin_system: Computes a series of spectra each corresponding to a single spin system.
- Renamed
Isotopomerclass toSpinSystem. - Renamed
isotopomersattribute fromSimulatorclass tospin_systems. - Renamed
dimensionsattribute fromSimulatorclass tomethods. - Changed the default value of
nameanddescriptionattribute from theSpinSystemclass from""toNone.