in core/indigo-core/molecule/src/elements.cpp [271:455]
int Element::calcValenceOfAromaticAtom(int elem, int charge, int n_arom, int min_conn)
{
if (elem == ELEM_C)
return 4;
if (elem == ELEM_N)
return (charge == 1 ? 4 : 3);
if (elem == ELEM_O)
return (charge >= 1 ? 3 : 2);
if (elem == ELEM_S && charge == 0)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
// There are no cases of implicit hydrogens in that condition
// (PubChem search [sHD2] gives no hits)
return 2; // ergo, valence is 2
if (min_conn == 3) // one single external bond
// there can be a radical (see CID 11972190),
// or an implicit hydrogen (see CID 20611310)
return 4; // either way, the valence is 4
if (min_conn == 4) // two single or one double external bond
// PubChem has no examples of 6-valent aromatic sulphur
// (searching [sv6] gives no hits)
return 4; // ergo, valence is 4
if (min_conn > 4)
// OK, suppose we have an case of 6-valent aromatic sulphur here
return 6;
}
else if (n_arom == 3)
{
if (min_conn <= 4) // no external bonds or one single external bond
// For one external bond, see CID 10091381
// For no external bonds, see CID 20756501, although aromaticity
// there is questionable. Anyway, no hydrogens are possible.
return 4;
else
// 6-valent aromatic sulphur?
return 6;
}
else if (n_arom == 4)
{
if (min_conn == 4)
// Happened only on CID 10882272 and CID 24829837
return 4; // Valence = 4 in both structures
else
// 6-valent aromatic sulphur?
return 6;
}
}
else if (elem == ELEM_S && charge == 1)
{
if (n_arom == 2)
{
if (min_conn == 2) // common case: "=[S+]-" in an aromatic ring
return 3;
if (min_conn <= 4) // CID 9922592
return 5;
}
}
else if (elem == ELEM_P && charge == 0)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
// implicit hydrogen (CID 164575) or radical (CID 10568539) is present
return 3; // in any case, the valence is 3
if (min_conn == 3) // one single external bond
return 3;
if (min_conn == 4) // two single on one double external bond
// two single: CID 140786, CID 341499
// one double: CID 17776485, CID 20207916
return 5; // valence is 5 in any case
}
if (n_arom == 3) // three aromatic bonds
{
if (min_conn == 3) // no external bonds
return 3; // CID 15973306; no known examples with valence 5
if (min_conn == 5) // two single or one double external bond
return 5; // the only known example is CID 10887416
}
if (n_arom == 4) // four aromatic bonds?
{
if (min_conn == 4) // no external bonds
return 5; // the only known example is CID 10887416,
// yet the aromaticity of the smaller ring is questionable
}
}
else if (elem == ELEM_P && charge == 1)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 3) // one single external bond
return 4; // common case: "=[P+]([*])-" in an aromatic ring
}
}
else if (elem == ELEM_P && charge == -1)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
return 2; // CID 10932222
}
}
else if (elem == ELEM_Se && charge == 0)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
return 2; // common case
if (min_conn == 3) // one external bond
return 4; // CID 10262587
if (min_conn == 4)
// CID 21204858, two single external bonds
// CID 14984497, one double aromatic bond
return 4;
}
}
else if (elem == ELEM_Se && charge == 1)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
return 3; // CID 10872228
if (min_conn == 3) // one external bond
return 3; // CID 11115581
}
}
else if (elem == ELEM_As && charge == 0)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
return 3; // CID 136132
if (min_conn == 3) // one external bond
return 3; // CID 237687
// no other cases known from PubChem
}
}
else if (elem == ELEM_Te && charge == 0)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 2) // no external bonds
return 3; // CID 136053
if (min_conn == 4)
// CID 3088544, two single external bonds
// CID 11457076, one double external bonds
return 4;
}
else if (n_arom == 4)
{
if (min_conn == 4)
// CID 11070061, four aromatic external bonds
return 4;
}
// no other cases known from PubChem
}
else if (elem == ELEM_Te && charge == 1)
{
if (n_arom == 2) // two aromatic bonds
{
if (min_conn == 3) // one external bond
return 3; // CID 20802344
}
// no other cases known from PubChem
}
else if (elem == ELEM_B)
{
if (n_arom == 2)
{
if (min_conn == 3) // one external bond
return 3; // CID 574072
}
}
else if (elem == ELEM_Si)
{
if (n_arom == 2)
{
if (min_conn == 3) // one external bond
return 4; // CID 18943170
}
}
return -1;
}