Added:
quick_index()now accepts alength_minparameter (default: 2.5 Å)
to control the minimum unit cell length explored during indexing.
* Exposed ReflectionProfile methods (GetProfile, GetFullProfileWidth, XMLOutput, XMLInput) via Python bindings. Added unit tests.
* The binding to ReflectionProfile.GetProfile(x, xcenter, h, k, l) accepts python sequences / numpy arrays for the x argument, thanks to the helper function assignCrystVector.
* Expose PowderPattern.GetPowderPatternObsSigma and PowderPattern.SetPowderPatternObsSigma from objcryst
* Add AGENTS.md documenting contribution guidelines for AI coding agents
(dependency chain, commit conventions, news-item policy, human-review
requirement).
* Add support for Python 3.14.
* Exposed Radiation.GetLinearPolarRate(), Radiation.SetLinearPolarRate(),
Radiation.GetClockWavelength(), and Radiation.GetClockRadiation() via
Python bindings. Closes #38.
Radiation.GetClockLinearPolarRate() is also bound and will be available once
diffpy/libobjcryst picks up vincefn/objcryst PR #79, which adds the dedicated
polarisation clock and fixes the polarisation-correction recalculation trigger.
Changed:
quick_index()default minimum unit cell length lowered from 3 Å to 2.5 Å,
allowing correct indexing of compact structures such as α-Fe, B, or ZRNCl (issue #47).
Deprecated:
Fixed:
- Exposed the correctly spelled ORTHORHOMBIC while preserving ORTHOROMBIC as temporary backend compatible alias
- Building with pip install . now uses sysconfig to locate ObjCryst++` libraries outside conda environments.
- Missing definition of ScatteringData in powderpatterndiffraction_ext.ccp
- Fixed PowderPattern.AddPowderPatternDiffraction() so a no-reflections failure does not leave a failed diffraction component attached to the powder pattern.
- quick_fit_profile(displ_transl=True) now correctly enables refinement of 2ThetaDispl and 2ThetaTransp by unfixing both parameters.
Removed:
- Remove support for Python 3.11.
Security:
Fixed:
- Code brought up to scikit-package level 5 standards with automated release workflows
Removed:
- Removed fallback version handling in src/pyobjcryst/version.py.
Fixed:
- Correct powder pattern plotting with a non-empty name
Changed:
- PowderPattern:
* Fix reusing a matplotlib figure when plotting
* Add
figureproperty
Changed:
- DiffractionDataSingleCrystal: add
SetHklIobs,SetIobs,SetSigma,GetSigma,GetChi2,FitScaleFactorForRwandFitScaleFactorForR(issue #42) - Add a single crystal data notebook example
- Online documentation notebooks now include the plots https://pyobjcryst.readthedocs.io/en/latest/examples
Fixed:
- From libobjcryst: update the ScatteringComponentList when a Scatterer is removed from a Crystal (issue #41)
Changed:
- Add python access to MolZAtom, for
Molecule.AsZMatrix()
Changed:
- Support for Windows and Python>=3.8
- Added a zoom limit for 3D crystal views
Fixed:
- Correct error preventing pyobjcryst import for Windows and Python>=3.8 (issue #33)
- Fix for matplotlib >=3.7.0 when removing hkl labels
Changed:
- Raise an exception if
alpha,betaorgammaare not within]0;pi[when changing lattice angles - Add
UnitCell.ChangeSpaceGroup()
Fixed:
- Avoid duplication of plots when using ipympl (aka
%matplotlib widget) - Correct powder pattern tests to avoid warnings
Deprecated:
loadCrystal– usecreate_crystal_from_cif()instead
Changed:
- The list of HKL reflections will now be automatically re-generated for a
PowderPatternDiffractionwhen the Crystal's spacegroup changes, or the lattice parameters are modified by more than 0.5%
Fixes:
- Fixed the powder pattern indexing test
Added:
- Support for Windows install (works with Python 3.7, and with PyPy 3.8 and 3.9)
- Native support for Apple arm64 (M1, M2) processors
- Fourier maps calculation
- Add
gDiffractionDataSingleCrystalRegistryto globals
Changed:
- Add correct wrapping for C++-instantiated objects available through global registries, e.g. when loading an XML file. The objects are decorated with the python functions when accessed through the global registries
GetObj() - Moved global object registries to
pyobjcryst.globals - Update documentation
Fixed:
- Fix access to
PRISM_TETRAGONAL_DICAP,PRISM_TRIGONAL,ICOSAHEDRONandTRIANGLE_PLANE - Fix powder pattern plot issues (NaN and update of hkl text with recent matplotlib versions)
- Add quantitative phase analysis with
PowderPattern.qpa(), including an example notebook using the QPA Round-Robin data - Correct import of
urllib.request.urllopen()when loading CIF or z-matrix files from HTTP URLs - Fix blank line javascript output when updating the Crystal 3D view
- Add
RefinableObj.xml()to directly get the XMLOutput as a string - Add example notebooks to the sphinx-generated html documentation
- Fix issue when using
Crystal.XMLInput()for a non-empty structure. Existing scattering power will be reused when possible, and otherwise not deleted anymore (which could lead to crashes)
- Add access to
Radiationclass & functions to change RadiationType, wavelength inPowderPatternandScatteringData(and henceDiffractionDataSingleCrystal) classes - Fix the custodian_ward when creating a
PowderPatternDiffraction:PowderPatternDiffractionmust persist whilePowderPatternexists, and Crystal must persist whilePowderPatternDiffractionexists - Add 3D Crystal viewer
pyobjcryst.crystal.Crystal.widget_3d
Added:
- Support for Python 3.7
- Validation of compiler options from
python-config - Make scons scripts compatible with Python 3 and Python 2
- Support
np.arrayarguments forSetPowderPatternX,SetPowderPatternObs - Declare compatible version requirements for client Anaconda packages
- Facility for silencing spurious console output from libobjcryst
Changed:
- Build Anaconda package with Anaconda C++ compiler
- Update to libobjcryst 2017.2.x
Deprecated:
- Variable
__gitsha__in theversionmodule, renamed to__git_commit__
Removed:
- Support for Python 3.4
Fixed:
- Ambiguous use of boost::python classes and functions
- Name suffix resolution of
boost_pythonshared library SetPowderPatternXcrash for zero-length argument- Incorrectly doubled return value from
GetInversionCenter