Dear Joey,
you could use Chem.RenumberAtoms() to enforce Hs to always follow heavy
atoms in the atom list, e.g.:
from rdkit import Chem
from rdkit.Chem.Draw import IPythonConsole
IPythonConsole.drawOptions.addAtomIndices = True
IPythonConsole.molSize = (400, 400)
mol1 = Chem.AddHs(Chem.MolFromSmiles("CCN"))
mol2 = Chem.AddHs(Chem.MolFromSmiles("OCC"))
mol3 = Chem.CombineMols(mol1, mol2)
print(Chem.MolToMolBlock(mol3))
RDKit 2D
19 17 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0000 -1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 -1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 1.2990 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 -1.2990 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 4.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 4.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 4.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.2500 2.7010 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 5.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0000 2.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 4.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 2.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 5.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
1 4 1 0
1 5 1 0
1 6 1 0
2 7 1 0
2 8 1 0
3 9 1 0
3 10 1 0
11 12 1 0
12 13 1 0
11 14 1 0
12 15 1 0
12 16 1 0
13 17 1 0
13 18 1 0
13 19 1 0
M END
mol3
[image: image.png]
new_order = [a.GetIdx() for a in mol3.GetAtoms() if a.GetAtomicNum() > 1] +
[a.GetIdx() for a in mol3.GetAtoms() if a.GetAtomicNum() == 1]
mol4 = Chem.RenumberAtoms(mol3, new_order)
print(Chem.MolToMolBlock(mol4))
RDKit 2D
19 17 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 4.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 4.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 4.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.5000 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0000 -1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 -1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 1.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 1.2990 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.7500 -1.2990 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.2500 2.7010 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 5.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0000 2.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
3.0000 4.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 2.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1.5000 5.5000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
1 7 1 0
1 8 1 0
1 9 1 0
2 10 1 0
2 11 1 0
3 12 1 0
3 13 1 0
4 5 1 0
5 6 1 0
4 14 1 0
5 15 1 0
5 16 1 0
6 17 1 0
6 18 1 0
6 19 1 0
M END
mol4
[image: image.png]
Cheers,
p.
On Tue, Mar 1, 2022 at 6:36 AM Storer, Joey (J) via Rdkit-discuss <
[email protected]> wrote:
> Dear All,
>
>
>
> I have experienced a few consistency problems in 3D coordinate output with
> H’s not always at the end of the coordinate list.
>
>
>
> RDKit mostly does this by default except in a few cases every few thousand
> and even with simple organics.
>
>
>
> How can I check/verify/enforce “H’s at the end” on coordinate output?
>
>
>
> *Example sequence is:*
>
> mol_1 = Chem.MolFromSmiles(smile)
>
> mol_2 = Chem.AddHs(mol_1)
>
> AllChem.EmbedMolecule(mol_2)
>
> symbols = [a.GetSymbol() for a in mol_2.GetAtoms()] *# need H’s to be
> last in the list (always)*
>
>
>
> Thanks!
>
> Joey Storer
>
> Dow, Inc.
>
> General Business
> _______________________________________________
> Rdkit-discuss mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss