Changelog
Additions
- Improved MOL/SDF file support in `biotite.structure.mol`
- CTAB `V3000` blocks can be read and written in addition to `V2000` in `MOLFile` (575)
- `M CHG` lines in CTAB `V2000` block can can be read and written in `MOLFile` (589)
- Added `biotite.structure.SDFile` for full support of SD files (589)
- SD files with multiple records (i.e. multiple molecules) ca be read and written
- Metadata in SD files can be read and written
- Intra-residue bonds can now be read/written to CIF/BinaryCIF files in `biotite.structure.io.pdbx` (567)
The bonds are written to the `chem_comp_bond` category, if `include_bonds=True` in `set_structure()`
- Previously Intra-residue bonds were obtained from the *Chemical Component Dictionary* which only works for residues in the PDB
- Added repair functions for `AtomArray` objects with missing or irregular annotations
- `structure.create_continuous_res_ids()` renumbers residue IDs to make them continuous for each chain (576)
- `structure.infer_elements()` guesses chemical elements from atom names in case the `element` annotation is missing (576)
- `structure.create_atom_names()` names atoms based on their element in case the `atom_name` annotation is missing (581)
- Canonical amino acids/nucleotides can be found for arbitrary residues
- `structure.info.one_letter_code()` obtains the most appropriate one-letter code (if existing) for a residue name, based on information from the *Chemical Component Dictionary* (572)
- `structure.to_sequence()` converts an `AtomArray` into a `Sequence` based on codes obtained via `structure.info.one_letter_code()` (587)
- Added new superimposition functions (587)
- `structure.superimpose_without_outliers()` allows superimposition with iterative conformational outlier removal to decrease the RMSD of the remaining atoms
- `structure.superimpose_homologs()` finds corresponding atoms via sequence alignment and optional outlier removal
- This function is quite robust for simply superimposing homologous proteins/nucleic acids without the need of atom filtering
- `structure.AffineTransform` can be converted into a *4x4* transformation matrix containing both, translation and rotation (576)
- `sequence.align.write_alignment_to_cigar()` now includes terminal gaps in the segment sequence (usually the shorter sequence) in the CIGAR string, if `include_terminal_gaps` is set to `True` (563)
- The default behavior is unchanged
Changes
- Deprecated `get_header()` and `set_header()` in `biotite.structure.io.mol.MOLFile`
- `MOLFile.header` attribute should be used instead (589)
- Deprecated `structure.renumber_atom_ids()` and `structure.renumber_res_ids()`
- `renumber_res_ids()` can be substituted with `create_continuous_res_ids()`
Fixes
- Fixed parsing multi-line values in PDBx NextGen files in `structure.io.pdbx.CIFFile` (555)
- Fixed parsing of some operation expressions in `structure.io.pdbx.get_assembly()` (555)
- `structure.io.pdb.PDBFile.set_structure()` checks if input annotations exceed the fixed number of columns, preventing writing malformed PDB files (588)
- Trying to write malformed CIF files with categories containing no rows now raises an exception (586)
- Added more descriptive error message, if `structure.residue()` cannot find the requested residue (580)
- `sequence.io.fasta.get_sequence()` converts pyrrolyine (`O`) into lysine (`K`) when creating the `Sequence` object (587)
- Fixed indexing with an `Annotation` in `sequence.AnnotatedSequence` if annotation is on the minus strand (577)
- Fixed exception in `biotite.structure.base_pairs()` and `biotite.structure.dot_bracket_from_structure()` if no base paris were found (573)