File gemmi.changes of Package gemmi
-------------------------------------------------------------------
Sat Jul 5 19:40:33 UTC 2025 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.7.3:
* Library
- A breaking change in Op:
Until now parse_triplet("h,k,l") was equivalent to parse_triplet("x,y,z").
This is not how it's handled in cctbx and in, for example Pointless.
In the Pointless documentation of the REINDEX keyword there is
such a note:
Note that the real and reciprocal space operators correspond
to mutually transposed matrices, eg "x-y,-y,-z" corresponds to
"h,-h-k,-l".
Gemmi Op was changed to store the notation kind that was used at creation,
so now parse_triplet("h,k,l") .triplet() gives "h,k,l", not "x,y,z".
New Op methods have been added: is_hkl(), as_hkl() and as_xyz().
Apart from this, in case of hkl-Ops parse_triplet and triplet silently
transpose the rotation matrix. See #359 for details.
This change was extensively tested with Mtz::reindex() – against
Pointless. It could happen that it causes problems in other scenarios.
- DDL2: added alternate (deposition) checks
- Mtz:
* added C++ Mtz::write_to_buffer() and Python Mtz.write_to_bytes()
(used for streaming MTZ files from web servers) and C++ size_to_write().
These new C++ functions are currently undocumented, not sure if
they are useful.
* Changed Mtz::write_to_string() to clear the string instead of
appending to it. Probably nobody expected the latter.
* Reorganized MTZ reading to avoid fseek() – so we can read a
stream or gzipped file, without storing/unpacking it into memory
buffer as we did before (i.e. reading huge gzipped MTZ files uses
less memory)
- added UnitCell::find_nearest_pbc_images()
- CIF reading: added optional argument int check_level=1 (see docs
for details)
- Form factors: support for custom form factors (in the form of sums
of 5 Gaussians) – for a Cambridge project on chemistry-dependent
form factors.
- to_mmcif: write _atom_site_anisotrop.pdbx_PDB_model_num if there
are 2+ models
- to_pdb: split option use_linkr into use_linkr and use link_id
- the built-in residue list is now partly editable (example in docs)
- mmcif:
* workaround for a problem with reading 7pvv.cif (#369)
* occupancy and B_iso_or_equiv are now optional (because of #375)
- pdb: added option ignore_ter to PdbReadOptions
- started working on secondary structure determination – that's
unfinished and unusable yet
- renamed interpolate_grid_of_aligned_model2() to
interpolate_grid_around_model()
- added functions interpolate_points() and interpolate_grid_flexible()
(#363), needed in Pandda2
* Python
- added python bindings to Ccp4Base::ccp4_header and to some functions
related to gemmi::ChemComp
* Program
- gemmi-validate: new check for monomer files, and new option --depo
to check against PDB's deposition criteria (from DDL2)
-------------------------------------------------------------------
Tue Mar 25 10:57:49 UTC 2025 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.7.1:
* Library
- reading mmcif: added reading of TLS information
- writing mmcif: added a few new items
- using Logger also in classes Ddl and CifToMtz (Logger is now used
in all library functions that output warnings or messages)
- improved and documented mmCIF validation (with DDL2)
- added read_ccp4_header() for reading only map header when a map
is a huge file
- added a few functions related to TLS (will be documented later)
- documented: working with XDS files, normalization of amplitudes (F->E)
- calculating merging statistics (R-merge, R-meas, R-pim, CC1/2)
in various ways: Gemmi can calculate R-merge (and other R-*)
in 3 different ways that are present in the literature and other
programs; for CC1/2, the sigma-tau method is used
- internal refactoring of file reading
- misc bug fixes
* Python
- functions Mtz.filtered() and XdsAscii.filtered()
- a number of other additions and a few small changes/fixes
- all cif-reading function consistently read gzipped files
* Program
- gemmi fprime supports ranges of energies
- gemmi merge – added new options, most importantly --stats to print
quality metrics
- gemmi convert – option --add-tls to convert "residual" B-factors (from
Refmac) to full B-factors
- gemmi mask – solvent masking that takes into account alternative
conformers and atom occupancy (experimental)
-------------------------------------------------------------------
Sat Nov 30 20:42:37 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.7.0:
C++14 (or later) is required to build the library, C++17 (or later)
to build Python bindings.
Expect breaking changes, especially in Python bindings.
The lists below are not complete, but should cover most of the changes.
* Library
- added unified logging of warnings/errors from various gemmi
functions (class Logger)
- replaced string Model::name with int Model::num
- mmcif: better handling of null auth_comp_id
- fixes for mmJSON
- removed deprecated functions:
* UnitCell.fractionalization_matrix and orthogonalization_matrix;
use frac.mat and orth.mat
* count_hydrogen_sites(); use has_hydrogen() or
count_atom_sites(gemmi.Selection('[H,D]')
* Grid::resample_to(); use interpolate_grid()
- unified API of Grid interpolation functions. They now have parameter
order that can be 0 (nearest value), 1 (linear interpolation), or 3
(cubic). In C++ there are also functions such as
trilinear_interpolation() to ensure no overhead.
- to_pdb: write HET records
- extended selection syntax with: [metals] and [nonmetals]
- added function set_is_metal() intended for debatable metalloids
- improved interoperability with MMDB (a CCP4 library)
- MonLib: removed read_cif args
- mtz: fixed writing BATCH records
- hydrogen placement: fixes needed for new files with metals in CCP4
Monomer Library
- pdb: fixed reading TLS S tensor
- Structure metadata: expanded RefinementInfo
* Python
- Python bindings migrated from pybind11 to nanobind
* much lower runtime overhead, faster build times, better error
diagnostics
* built-in typing stubs
* only Python 3.8+
* sadly, no support for Buffer Protocol. It was replaced with
NumPy __array__ methods.
* for NumPy, you can also use .array properties that were available
also in the previous releases
* no implicit conversions from list to ndarray, and from bytes to
string (let me know where it causes problems)
* gemmi.ValueSigmaAsuData.value_array has now shape (N,2)
- added pickling support for Structure, Model, Chain, Residue, Atom,
cif.Document, cif.Block
- added function interpolate_position_array (#323)
- Python extension module is now installed into site-packages/gemmi/
(this change should be invisible to the user)
* Program
- gemmi convert --sifts-num is now more customizable
- gemmi sf2map: added option --check (see docs)
- gemmi cif2mtz: add a rule to spec to convert
pdbx_F_calc_with_solvent to F-model (+phase)
- gemmi xds2mtz: handles merged files from XSCALE
- gemmi mtz2cif and merge: recognize extension .ahkl as XDS file
-------------------------------------------------------------------
Tue Sep 10 15:16:27 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.6.7, primarily a bug-fix release:
* enhancements:
- new subcommand "gemmi set" for changing coordinates,
B-factors and occupancies in coordinate files
- improved anisotropic scaling of structure factors
* fixes:
- fixed reading of mmCIF files without _atom_site.auth_seq_id
- fixed a couple of bugs in Topology preparation
- fixed re-assignment of ATOM/HETATM record types
- fixed gemmi convert --sifts-num for UniProt seq numbers >5000
* various minor changes
- patches dropped as fixed upstream: gemmi-0.6.6-numpy2.patch,
gemmi-soversion.patch
-------------------------------------------------------------------
Fri Jun 28 13:52:51 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- add gemmi-0.6.6-numpy2.patch from upstream to fix tests w/ numpy2
-------------------------------------------------------------------
Tue Jun 11 14:52:21 UTC 2024 - Atri Bhattacharya <badshah400@gmail.com>
- Add gemmi-soversion.patch: Add shared object versioning
[gh#project-gemmi/gemmi#320].
- Split out shared library in keeping with shlib packaging policy.
- Build and run tests.
- Build python modules for multiple python flavours in separate
directories.
- Drop unnecessary hashbangs from example scripts not installed to
executable path.
-------------------------------------------------------------------
Mon Jun 10 19:41:47 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- package static library only, as upstream does not (yet ?) use
.so-versioning for shared library
-------------------------------------------------------------------
Mon Jun 10 19:16:38 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- to silence rpmlint wrt the examples, insert and fix python shebangs
and fix permissions
-------------------------------------------------------------------
Sun Jun 2 19:52:51 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.6.6
* Library:
- SmallStructure: changed how the space group is read and accessed.
- Relying on H-M space group names alone was not always sufficient.
The new mechanism uses the list of operations and Hall symbol in
preference to the H-M symbol – the order is configurable.
- symmetry triplets: parse decimal fractions (small molecule files
may use notation such as x+0.25 instead of x+1/4)
- tabulated space groups: a few more settings: B 1 2 1, B 1 21 1,
F 1 m 1, F 1 d 1, F 1 2 1
- X-ray scattering coefficients: changed the default value of
IT92::ignore_charge to true (i.e. charges are now ignored by
default; before version 0.6.3 they were always ignored)
- cif::Table: added method ensure_loop() that converts tag-value
pairs into a loop; might be needed before calling append_row()
- place_hydrogens(): fix for NH3-like configurations
- improved gemmi->mmdb conversion
- Grid: tweaked good_grid_size() to ensure that when creating a grid
up to a certain d_min, all reflections up to d_min are in the grid
(it matters when no oversampling is applied)
- DensityCalculator: deprecated function set_grid_cell_and_spacegroup(),
use grid.setup_from()
- fixed TNT-compatible reciprocal space ASU calculation for
non-standard settings
- infer_polymer_end(): complicate the heuristic even more, to detect
files that have HETATM incorrectly used for standard residues in a
polymer (such files were reported, they are either a result of
mutating from non-standard residues, or a buggy program)
- added function assign_het_flags() to re-set ATOM/HETATM flags
- Model: added funtions calculate_b_iso_range() and
calculate_b_aniso_range(); the first one can be used to detect if
pLDDT is in the range 0-100 (like from AlphaFold) or 0-1 (like
from ESMFold)
- writing mmCIF: write _entity_poly_seq.hetero
- added flag Entity::reflects_microhetero that shows if sequences
were read from SEQRES (and don't account for point mutations) or
from _entity_poly_seq; new function add_microhetero_to_sequences()
changes the former to the latter
* Program:
- gemmi sfcalc: added a few more options
- gemmi convert: added options --assign-records[=A|H],
improved --sifts-num, adding microheterogeneities to _entity_poly_seq
when converting from PDB
- gemmi cifdiff: added option -t for basic comparison of values for
a single tag
* Other:
- minimal WebAssembly port (C++ code compiled with emscripten) of
Structure, as a proof-of-concept and for reading mmCIF files in
UglyMol
- examples/to_rdkit.py: example of conversion of gemmi ChemCom
to RDKit Mol
-------------------------------------------------------------------
Wed Feb 21 18:34:37 UTC 2024 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.6.5
* Library
- gemmi can now be built with zlib-ng, a faster fork of zlib (good
for working with large, compressed files)
- experimental: binary serialization of Structure (contained objects,
such as Model, Chain or UnitCell, can also be serialized separately)
- finalized handling of 5-character monomer names; uses the
tilde-hetnam extension (ABCDE ↔ ~DE) for PDB files
- when atom names in the coordinate file match previous names
(_chem_comp_atom.alt_atom_id) from the monomer library (the names
in the CCD and therefore also in the ML change occasionally), print
better diagnostic; added function MonLib::update_old_atom_names()
to update the names in a Structure
- topology: fixed handling of two bonds between the same two residues
- options for handling mmCIF files with incorrect entities (modified
add_entity_ids() when called with overwrite=true)
- added function Intensities::prepare_merged_mtz()
- a few bug fixes (for instance, in handling of negative residue
numbers in the selection syntax)
* Python bindings
- generating type stubs - see #293
- python: cif.Loop.val() has been replaced with __getitem__/__setitem__
- fixed Mtz.Batch.ints and Mtz.Batch.floats
* Program
- subcommand diff has been renamed to cifdiff
- subcommand prep has been renamed to crd
- validate: more options for checking monomer files
- gemmi-grep: added option --extended-regexp
- mtz2cif: added column names Iplus/Iminus (used by ccp4i2) to the
default conversion spec
-------------------------------------------------------------------
Fri Dec 29 16:37:21 UTC 2023 - Friedrich Haubensak <hsk17@mail.de>
- update to version 0.6.4
* Library
- completely changed build system for Python module, from setuptools
to scikit-build-core
- optimized electron density calculation: single-precision version
is now about 2x faster and slightly less exact; some other
grid-based calculations also got optimized in the process
- as part of the above optimizations, some of the grid computations
require that the model is in the standard orientation (conventional
axis directions); in other cases (which are very rare after the
remediation of non-standard coordinate frames in the PDB) call
standardize_crystal_frame()
- CIF output: more flexible formatting
- mmCIF writing: category _entity_poly is included by default,
with pdbx_strand_id and pdbx_seq_one_letter_code
- minor changes in reading mmCIF coordinate files
- cif: added functions Loop::add_columns(), Loop::remove_column(),
Column::erase()
- MRC map format: ORIGIN record is ignored (previously, if ORIGIN was
non-zero, Ccp4::full_cell() returned false and some map properties
were not set)
- new function Grid::symmetrize_avg()
- fixed bug in ReciprocalGrid::prepare_asu_data()
- added function read_pir_or_fasta() for reading sequences (previously
it was undocumented and more limited)
- added function pdbx_one_letter_code() which returns a string like
AA(MSE)H…, for _entity_poly.pdbx_seq_one_letter_code
- new functions expand_one_letter() and expand_one_letter_sequence()
that take ResidueKind.AA/RNA/DNA as argument replaced
expand_protein_one_letter*()
- adjusted weights in align_sequence_to_polymer()
- added function assign_best_sequences()
- PDB reading: added Structure::ter_status flag to indicate if TER
records were: absent, present, clearly in wrong places
- experimental (not documented yet) new functions: Model::get_cra(),
Model::get_parent_of()
- Topo::Bond stores a flag for bonds between different symmetry images
- ChemComp::Atom: store _chem_comp_atom.alt_atom_id as old_id,
use it in new function update_old_atom_names()
- riding hydrogens: added H had wrong occupancy in special, rare cases
- added Vec3f – Vec3 with single-precision numbers
- minor API changes: Binner::setup() doesn't return anything,
changed argument types of Scaling::scale_data(), align_sequences()
* Program
- new tool gemmi-diff that compares categories and tags in two
(mm)CIF files
- gemmi-align prints vertical list with option --verbose
- gemmi-residues has new options: -e, -sss, --chains
- gemmi-rmsz: added option --missing to print missing atoms
- gemmi-validate: more options for validating monomer files
- gemmi-h: more options
- gemmi-mtz: prints info about SYMM records
-------------------------------------------------------------------
Sun Nov 26 19:39:56 UTC 2023 - Friedrich Haubensak <hsk17@mail.de>
- Initial package release at version 0.6.3