epam / epam/Indigo

Support for Markush bonds

Open
#3,731 0 comments 0 reactions 0 assignees View on GitHub
CDX-ChemDraw Export to CDXML Export to MOL Import from CDXML Import from MOL
Dominant language
C++
Stars
406
Forks
134
Avg merge
2d 11h
Merged PRs (30d)
24

Description

**Background**

A Markush bond is a bond between a specific atom and one atom in a group of possible atoms.

A haptic bond also involves a group of atoms, but it represents a connection to all the atoms in a group. This distinction is important because Markush and haptic bonds can look similar in formats, but they do not represent the same case.

---

An SVG/PNG render ticket should be written in the future to complete Indigo's support for Markush bonds.
Ketcher ticket TBD.

---

**Requirement**

1. Indigo should support conversion between KET and MOL V3000 (and variants), CDX, and CDXML.

**MOL V3000**

MOL V3000 supports Markush bonds through multiple bond endpoints.
According to the CTfile specification, ENDPTS defines multiple endpoints for a bond. The same specification defines two attachment modes: ANY for one-to-any attachment and ALL for one-to-all attachment.

For Markush bonds, the relevant representation is:
ENDPTS=(...)
ATTACH=ANY

For haptic bonds, the relevant representation is:
ENDPTS=(...)
ATTACH=ALL

**CDX**

CDX is a ChemDraw binary format. For this analysis, the relevant point is that CDX can contain variable attachment and multi-center attachment information. Variable attachment is the relevant case for Markush bonds, while multi-center attachment is relevant for haptic bonds.

**CDXML**

CDXML is a ChemDraw XML format. As with CDX, the relevant cases for this analysis are variable attachment and multi-center attachment. Variable attachment should be treated as the Markush bond case, while multi-center attachment should be treated separately as the haptic bond case.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing Indigo’s existing conversion paths for KET, MOL V3000, CDX, and CDXML, then compare how those paths represent Markush and haptic bonds. Use the CTfile ENDPTS and ATTACH=ANY/ALL distinctions and the CDX/CDXML variable-attachment cases as the requirements; done means the specified formats convert Markush bonds without conflating them with haptic bonds.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.