Hi Madeleine,
It might be helpful to start a GitHub Issue where you upload example files.
I believe the main issue here is Gaussian files do not contain bond
information and so OpenBabel has to infer them with ConnectTheDots
(identifying bonding atoms) and PerceiveBondOrders. These functions have
a lot of ad hoc heuristics to try to figure out the right answer from
perhaps inadequate information.
The failure with azete is in PerceiveBondOrders where a C=C double bond
is preferred over the C=N bond because no hybridization was set on the
N. Specifically, line 3494 in mol.cpp:
if ( (b->GetHyb() == 2 || b->GetExplicitDegree() == 1)
&& b->GetExplicitValence() + 1 <=
static_cast<unsigned int>(OBElements::GetMaxBonds(b->GetAtomicNum()))
&& (GetBond(atom, b))->IsDoubleBondGeometry()
&& (currentElNeg > maxElNeg ||
(IsApprox(currentElNeg,maxElNeg, 1.0e-6)) ) )
b is the N, which is a neighbor atom of the C that is under
consideration. The b->GetHyb() == 2 check fails, so the C=C is formed
instead of C=N to get the valence to add up.
The hybridization of the N isn't set because the angle is too small for
the hybridization estimation code (lines 3204-3224) to set it:
if (angle > 155.0)
atom->SetHyb(1);
else if (angle <= 155.0 && angle > 115.0)
atom->SetHyb(2);
// special case for imines
if (atom->GetAtomicNum() == OBElements::Nitrogen
&& atom->ExplicitHydrogenCount() == 1
&& atom->GetExplicitDegree() == 2
&& angle > 109.5)
atom->SetHyb(2);
We could extend this with:
else if(atom->GetAtomicNum() == OBElements::Nitrogen
&& atom->GetExplicitDegree() == 2
&& atom->IsInRing()) //azete
atom->SetHyb(2);
and this particular problem is fixed. It isn't clear to me if a less
stringent criteria can't be applied.
David Koes
Associate Professor
Computational & Systems Biology
University of Pittsburgh
On 6/3/21 11:13 AM, Marie-Madeleine Walz wrote:
Hello,
I would like to share another example that illustrates that OB does not
seem to take charges into account when assigning bonds.
Processing azete (neutral) using a Gaussian output file with OB, I
obtain the following charged azete analog.
Is there any part in the code that should take care of charges when
assigning bonds?
With kind regards,
Madeleine
On 28 May 2021, at 11:41, Marie-Madeleine Walz
<marie-madeleine.w...@icm.uu.se
<mailto:marie-madeleine.w...@icm.uu.se>> wrote:
Hello,
I’m working on processing Gaussian output files (g09) with OB to set
bond orders.
I noticed that the compound's charge information does not seem to be
taken into account when setting bond orders.
For example, I obtain for neutral compounds structures that are
charged, e.g. carbon atoms with only three single bonds, or nitrogens
with only two bonds.
One of the most obvious examples is sulfite (SO_3^(2-)) vs. sulfur
trioxide (SO_3).
Both have their bond orders coded in bondtyp.txt.
# Sulfite
[#16D3]([#8D1])([#8D1-])([#8D1-]) 0 1 2 0 2 1 0 3 1
# Sulfur trioxide
[#16D3]([#8D1])([#8D1])([#8D1]) 0 1 2 0 2 2 0 3 2
However, OB does not recognise sulfite as charged, and instead it
assigns three double bonds (i.e. it uses the sulfur trioxide definition).
If I remove the charge information from the sulfite SMARTS structure,
it assigns the correct bond order. However, obviously, sulfur trioxide
is also assigned this bond order as now the SMARTS structures are
identical.
# Sulfite
[#16D3]([#8D1])([#8D1])([#8D1]) 0 1 2 0 2 1 0 3 1
Any ideas on how to solve this issue are highly appreciated.
With kind regards,
Madeleine
Page Title
När du har kontakt med oss på Uppsala universitet med e-post så innebär
det att vi behandlar dina personuppgifter. För att läsa mer om hur vi
gör det kan du läsa här: http://www.uu.se/om-uu/dataskydd-personuppgifter/
E-mailing Uppsala University means that we will process your personal
data. For more information on how this is performed, please read here:
http://www.uu.se/en/about-uu/data-protection-policy
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel
_______________________________________________
OpenBabel-Devel mailing list
OpenBabel-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-devel