Skip to content

Commit 1110103

Browse files
#2739 - Wrong stereochemistry when reading cdxml reaction (#2740)
Co-authored-by: Aliakasndr Dziarkach <[email protected]>
1 parent eb09d37 commit 1110103

File tree

4 files changed

+463
-0
lines changed

4 files changed

+463
-0
lines changed

core/indigo-core/molecule/molecule_cdxml_loader.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ namespace indigo
189189
class BaseCDXProperty
190190
{
191191
public:
192+
virtual ~BaseCDXProperty() = default;
192193
virtual bool hasContent() const = 0;
193194
virtual std::unique_ptr<BaseCDXProperty> copy() = 0;
194195
virtual std::unique_ptr<BaseCDXProperty> next() = 0;
@@ -375,6 +376,7 @@ namespace indigo
375376
class BaseCDXElement
376377
{
377378
public:
379+
virtual ~BaseCDXElement() = default;
378380
virtual bool hasContent() = 0;
379381
virtual std::unique_ptr<BaseCDXElement> copy() = 0;
380382
virtual std::unique_ptr<BaseCDXProperty> firstProperty() = 0;

core/indigo-core/molecule/src/molecule_stereocenters.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ MoleculeStereocenters::MoleculeStereocenters()
3838
void MoleculeStereocenters::clear()
3939
{
4040
_stereocenters.clear();
41+
_atropocenters.clear();
4142
}
4243

4344
void MoleculeStereocenters::buildFromBonds(BaseMolecule& baseMolecule, const StereocentersOptions& options, int* sensible_bonds_out)

core/indigo-core/tests/tests/formats.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include <molecule/sdf_loader.h>
4747
#include <molecule/smiles_loader.h>
4848
#include <molecule/smiles_saver.h>
49+
#include <reaction/reaction_cdxml_loader.h>
4950

5051
#include "common.h"
5152

@@ -559,6 +560,39 @@ TEST_F(IndigoCoreFormatsTest, mol_to_document)
559560
}
560561
}
561562

563+
TEST_F(IndigoCoreFormatsTest, wrong_stereochemistry_2739)
564+
{
565+
FileScanner scanner(dataPath("reactions/basic/wrong_stereochemistry_2739.cdxml").c_str());
566+
Reaction reaction;
567+
ReactionCdxmlLoader loader(scanner);
568+
loader.loadReaction(reaction);
569+
570+
std::vector<std::pair<int, int>> testData = {{1, 1}, {1, 2}, {2, 1}};
571+
572+
std::vector<std::pair<int, int>> bondDirections;
573+
for (int i = reaction.begin(); i != reaction.end(); i = reaction.next(i))
574+
{
575+
const Molecule& mol = reaction.getMolecule(i);
576+
int bondUp = 0;
577+
int bondDown = 0;
578+
for (int j = mol.edgeBegin(); j != mol.edgeEnd(); j = mol.edgeNext(j))
579+
{
580+
int direction = mol.getBondDirection(j);
581+
if (direction == BOND_UP)
582+
{
583+
++bondUp;
584+
}
585+
else if (direction == BOND_DOWN)
586+
{
587+
++bondDown;
588+
}
589+
}
590+
bondDirections.push_back({bondUp, bondDown});
591+
}
592+
593+
ASSERT_EQ(testData, bondDirections);
594+
}
595+
562596
#ifdef _MSC_VER
563597
#pragma warning(pop)
564598
#endif

0 commit comments

Comments
 (0)