v1.2.2:

 - The command line tool 'PSDCreate' now offers the possibility to process only a subset of the input molecules that
   can be specified by means of a start (option -s) and an end molecule index (option -e)
 - Fixed an issue leading to a segmentation fault in the course of parsing (invalid) SMILES/SMARTS strings that occurs
   if a ring closure at a chiral atom cannot be completed due to either missing or erroneously placed closure numbers
 - Added new setter/getter method pair outputZeroBasedIndices(bool)/outputZeroBasedIndices() to class Pharm::FileScreeningHitCollector
   that allows to control whether any indices (mol. index, conf. index, etc.) stored to mol. SD entries shall be zero- or one-based
 - The command line tool 'PSDScreen' now offers a new option -r that allows to specify a report file in which
   sceening hit information gets written as lines of tab-separated values (without any mol. structure data).
   The new option can be used in additon or instead of option -o which, as before, specifies an output file for saving
   structural hit molecule data
 - Reduction of RAM consumption when querying pharmacophore feature count data stored in PSD files
 - Reduction of pharmacophore screening database (PSD) file sizes by ~55% due to the introduction of more compact
   molecule/pharmacophore data storage formats
 - Fixed a bug in the command line tool 'StructGen' that led to process termination caused by a Base::ItemNotFound
   exception which was thrown when exceeding the set time limit without having generated a set of 3D atom coordinates

V1.2.1:

 - New implementation of Greene's algorithm for the calculation of atom hydrophobicities which
   is now more correct and ~100 times faster than the previous one
 - All disk space consumed by an existing pharmacophore screening database (PSD) that is specified as
   destination file for a new database to be created by the program 'PSDCreate' is now
   completely freed and not just internally marked as unallocated space
 - Fixed a bug in function Pharm::removePositionalDuplicates(Pharmacophore&) that resulted in the
   duplicate features (that should be removed) to be retained instead of the non-duplicated ones
 - Sphinx documentation updates

V1.2.0:

 - Added new setter/getter method pair groupReferenceFeatures()/referenceFeaturesGrouped() to class Pharm::PharmacophoreFitScore for controlling
   whether multiple directed features of the same type at the same position shall be considered as independent individual features or as different
   orientation options of a single feature
 - New utility functions Pharm::clearOrientations(), Pharm::removePositionalDuplicates(), Pharm::removeFeaturesWithType() for the
   manipulation of pharmacophore data
 - Fixed an issue concerning the calculation of pharmacophore fit scores that previously also considered mappings
   of multiple query features to the same target feature. Now, more correctly, the best score that could be calculated
   for all possible one-to-one feature mappings is reported.
 - Improved the visual appearance of command line tool progress bars
 - Sphinx documentation updates
 - New command line tool 'SubSearch' for performing substructure searching on molecular data files with support
   for multiple query substructures and customizable logical expressions
 - Unified the naming of control-parameters and associated functions in namespaces Chem, Pharm, Grid, and Biomol
 - Improved support for different Python installation flavors on macOS (the help provided by Yakov Pechersky is greatly appreciated)
 - Added support for the I/O of molecular structure data in CML format
 - Fallback perception of atom/bond stereochemistry from input 3D coordinates during conformer generation molecule preprocessing
   now does not require the presence of explicit hydrogens anymore
 - Renamed function MolProp::isCarbonylLikeAtom() into MolProp::isCarbonylLike()
 - Renamed function MolProp::isAmideCenterAtom() into MolProp::isAmideCenter()
 - New atom classification functions MolProp::isBridgehead() and MolProp::isSpiroCenter()
 - CDPL Python bindings wheel files for Linux are now built on manylinux_2_28
 - Added support for the I/O of molecular structure data in mmCIF format
 - Added new constants to namespace Biomol::ResidueType which now fully cover the set of residue types defined by the mmCIF/PDBX specification
 - Added method to classes Biomol::ResidueDictionary/Biomol::ResidueDictionary::Entry for the lookup of residue parent structure information
 - Added method to classes Biomol::ResidueDictionary/Biomol::ResidueDictionary::Entry for the lookup of residue single letter codes
 - Renamed some previously PDB format-specific control-parameters and associated functions in namespace Biomol for their
   future dual-use by the mmCIF data I/O code
 - Added new control-parameters, atom properties and associated functions to namespace Biomol
 - Updated embedded MessagePack library to version 6.1.1
 - Updated embedded SQLite3 database to version 3.46.1
 - Updated embedded MMTF library to version 1.1.0
 - Updated PDB residue dictionary which now features 44906 chemical components
 - CDPL Python bindings now support NumPy V>=2.0
 - Removed function Biomol::convertMOL2ToPDBResidueInfo(): if possible, the conversion of MOL2 substructure to
   PDB residue/sequence information is now carried out automatically
 - Fixed a bug in program 'ChOX' that prevented the successful saving of data to PSD files
 - Program 'ChOX' now uses the same file open/save dialog instance for all opened main windows 
 - New class Chem::MultiSubstructureSearch for performing substructure searching with multiple query substructures that
   can be combined in the form of boolean expressions
 - Program 'ChOX' now supports basic cut/copy/paste as well as drag and drop operations
 - New feature of the program 'ChOX' that allows to perform substructure searching with logical combinations of SMARTS patterns
 - New feature of the program 'ChOX' that allows to highlight substructures defined by SMARTS patterns
 - New classes Descr::NPoint2DPharmacophoreFingerprintGenerator and Descr::NPoint3DPharmacophoreFingerprintGeneratorfor
   for the generation of variably sized hashed 2D and 3D pharmacophore fingerprints
 - Removed methods setNumBits() and getNumBits() in class Descr::PathFingerprintGenerator (fp-length now
   implicitly given by the size of the bitset provided as argument to method generate())
 - New class Descr::PubChemFingerprintGenerator for the generation of 881 bit PubChem fingerprints
 - New class Chem::ExtendedSSSR for the perception extended smallest sets of smallest rings
 - The SDF reader now also accepts input data that do not end with a newline character
 - Made the MOL2 reader implementation more tolerant regarding missing sections
 - Fixed missing support for certain chemical element symbols in class Chem::SMARTSMoleculeReader
 - Extended the set of supported chemical elements to atomic number 114
 - New class Descr::MACCSFingerprintGenerator for the generation of 166 bit MACCS key fingerprints
 - Fixed a bug in Math::RegularSpatialGrid that caused an erroneous transformation of world to grid-local coordinates
 - Fixed a problem in Chem::RECAPFragmentGenerator that led to the generation of too few fragments for H-depleted molecules
 - Fixed a problem in Chem::BRICSFragmentGenerator that led to the generation of too few fragments for H-depleted molecules
 - Control-parameter Vis::BACKGROUND_COLOR was replaced by Vis::BACKGROUND_BRUSH which now allows to also
   specify a background fill pattern (see Vis::Brush) for 2D structure renderings
 - New unit test case for Vis::TextBlockPrimitive2D and CDPL::Vis test case updates
 - Vis::CairoRenderer2D now supports the rendering of overlined, underlined and striked-out text
 - Fixed an issue with the calculation of text bounds by Vis::CairoFontMetrics and Vis::QtFontMetrics
   that led to too small bounding boxes in the presence of leading and/or trailing whitespace
 - Updated the internally used 'rapidxml' XML-parser library to the lastest version and fixed an issue with
   whitespace-only data elements that were missing in the generated DOM-trees
 - New 2D graphics primitive Vis::TextBlockPrimitive2D for the rendering of multi-line text blocks supporting
   several options for the styling of individual text fragments
 - Support for setting the image output scaling factor in the program 'ChOX'
 - New control-parameter Vis::OUTPUT_SCLAING_FACTOR that allows to achieve higher resolutions of 2D structure/reaction
   depictions saved in pixel-based output formats
 - Fixed an issue in program 'ChOX' where the background color setting of 2D structure/reaction depictions was ignored on
   file output
 - New class Vis::StructureGridView2D for the visualization of multiple molecules as 2D structure diagrams 
   arranged in a grid of arbitrary size
 - Support for atom and bond highlighting in 2D structure/reaction depictions
 - Fixed several minor bugs in Python example scripts
 - Support for fully customizable atom and bond labels in 2D structure/reaction depictions

V1.1.1:

 - Significantly improved the generation of 2D coordinates for macrocyclic structures
 - Fixed an issue with the generation of conformers under application of a fixed substructure template where the generated
   conformers sometimes displayed the mirror image of the specified 3D template structure
 - The command line tools 'structgen' and 'confgen' erroneously used the already reserved letter 'p' as shortcut for
   the option '--fixed-substr-min-atoms'. The new shortcut is '~'
 - Support for Python version 3.12 in Manylinux2014-based pip package builds
 - Rewrote code that uses the boost filesystem library to use C++17 equivalents (conditional, only if a proper std::filesystem
   implementation is available)
 - Compiling CDPKit now requires a compiler with C++17 support

V1.1.0:

 - The tool 'tautgen' provides two new tautomer generation modes BEST_SCORING and BEST_SCORING_UNIQUE
   (the new default mode) for generating only the chemically most reasonable tautomers
 - New getter/setter method pair in class Chem::TautomerGenerator that allows to suppress the output of generated tautomers
   which represent just a different resonance structure of a previously reported tautomeric form
 - Overhaul of the tautomer generation code for increased efficiency and flexibility
 - Documentation updates and corrections
 - Versatile new Python example script for database preparation
 - New Python example script demonstrating how the torsion driving functionality can be used for conformer sampling
 - Fixed bugs in classes Chem::MaxCommonAtomSubstructureSearch and Chem::MaxCommonBondSubstructureSearch that led to a
   loss of expected matches
 - The visual molecule and reaction data inspection tool 'ChOX' now allows to display atom and bond configuration labels
 - The 2D molecule structure rendering code (implemented by class Vis::StructureView2D) now
   allows to display atom and bond configuration labels
 - Full implementation of the CIP sequence rule stack for the correct labeling of atom and bond stereocenters
 - New 3D structure generator feature that allows to enforce a particular 3D structure for defined parts of the input molecules
 - New conformer generator feature that allows to specify substructures of the input molecules that
   shall adopt a particular conformation which is then kept 'fixed' during conformer generation
 - Renamed all ForceField::MMFF94XXXInteractionData data structures into ForceField::MMFF94XXXInteractionList
   (XXX = force field interaction type)
 - New class ForceField::ElasticPotential plus elastic potential energy and gradient calculation functions
 - Conformer generator settings now allow to specify rotatable bond count dependent values for RMSD threshold, energy window and
   max. output ensemble size
 - The output conformer ensemble compilation process now strives for higher energetic diversity among the picked conformers which, on average,
   leads to higher accuracy in the reproduction of experimental structures
 - Update of the torsion library used for systematic conformer generation
 - The pharmacophore screening application 'psdscreen' provides a new option '--unique-hits'
   which enforces that a database molecule matched by multiple query pharmacophores is saved only once to the output hit list
 - Fix for a bug in the SMARTS parser that led to the storage of wrong bond directions
 - Bond direction specifications (up/down) in SMILES and SMARTS strings are now correctly interpreted
 - Support for reading/writing molecular structures in XYZ format 
 - Systematic conformer sampling speed optimizations
 - Reduction of the memory footprint of the conformer generation procedure which could become unacceptably large
   under some circumstances
 - Fixed a bug that may lead to the generation of conformers with wrong geometries at exocyclic double bonds
 - Refactoring of stereochemistry related code
 - New command line application 'isogen' for the enumeration of R/S and E/Z stereoisomers of molecules
 - New class (Chem::StereoisomerGenerator) for the exhaustive enumeration of R/S and E/Z stereoisomers
 - New 2D drawing primitives (Vis::Path2D and Vis::PathPrimitive2D) and support for clipping operations
   (class Vis::ClipPathPrimitive2D)
 - Fixed a bug in the 'shapescreen' tool that led to the calculation of erroneous similarity scores
   when option '--score-only' was specified
 - Fix for a minor bug that affected the indentation of SD-file property entries
 - New class (Chem::BemisMurckoAnalyzer) for the extraction of Bemis-Murcko scaffolds
 - New CDPL::Chem functions for the alignment of conformers
 - Function overload resolution order fixes in the CDPL.Math Python package
 - Prevented the throwing of exceptions when the env. variable LC_ALL has not been initialized
 - Python exports of Util::Map and Util::MultiMap do not provide the properties 'keys', 'values', and 'entries' anymore.
   They were replaced by the corresponding methods keys(), values() and items()
 - MolProp::getAtomCount() function has been extended by a 'strict' argument which, if set to 'false', instructs
   the accounting procedure to regard the meaning of generic atom types (e.g. any halogen)
 - New utility functions Chem::calcBasicProperties() enabling a more comfortable initialization of Chem::MolecularGraph
   and Chem::Reaction instances for further processing
 - CDPL Python bindings code cleanup
 - CDPL API cleanup
 - When deep copying Chem::Reaction or Chem::Molecule instances, values of properties referencing atoms and/or bonds (e.g. stereodescriptors, SSSR)
   now get automatically translated to values referencing the corresponding atoms/bonds of the copying target
 - The calculation of GRAIL descriptors (classes GRAIL::GRAIL(X)DescriptorCalculator) now only considers heavy atoms which do not represent
   a complementary feature type in the calculation of environment HBA/HBD occupation scores 
 - Class GRAIL::GRAILDescriptorCalculator now calculates a shorter descriptor (35 elements) with
   not further subdivided H-bond donor/acceptor feature types
 - Class GRAIL::GRAILDescriptorCalculator renamed into GRAILXDescriptorCalculator

V1.0.2:

 - Manylinux2014 wheel files now support Python3.11
 - Added support for building CDPL Python bindings wheel files under Windows
 - Build system cleanup
 
V1.0.1:

 - Added support for building manylinux2014 compliant CDPL Python bindings wheel files
 - Documentation updates

V1.0.0:

 - Initial release
