(1): I am not familiar with swig, I thought it might do most of the work by itself but obviously there is more work to it. I guess I was a bit impatient there.
As for (2), It was my mistake, I added duplicate bonds Here is the code I use: OBElementTable elementTable = new OBElementTable(); OBMol myOBMol = new OBMol(); foreach (TAtom myAtom in Compound.Atoms) { OBAtom newAtom = new OBAtom(); int num = elementTable.GetAtomicNum(myAtom.Atom.Trim()); newAtom.SetAtomicNum(num); myOBMol.AddAtom(newAtom); } for (int i = 0; i < Compound.Atoms.Count; i++) { foreach (TBond myBond in Compound.Bonds) { int atom1 = Compound.Atoms.FindIndex(0, b => (b as ILightAtom) == (myBond.AtomOne as ILightAtom)); int atom2 = Compound.Atoms.FindIndex(0, b => (b as ILightAtom) == (myBond.AtomTwo as ILightAtom)); myOBMol.AddBond(atom1 + 1, atom2 + 1, myBond.BondOrder); } } OBAtomTyper atomTyper = new OBAtomTyper(); atomTyper.AssignTypes(myOBMol); myOBMol.AddHydrogens(false, true, pH); Despite having added too many bonds, the OBMol object has the right amount of bonds, this is why I didn't notice it at first. This code worked also for many other molecules without crashing before so open babel seems to handle duplicate bonds quite well normally. If you want to see how this exception occurs the code above won't be of any use so I created the following test using the molecule that created the error: OBElementTable elementTable = new OBElementTable(); OBMol myOBMol = new OBMol(); OBAtom newAtom1 = new OBAtom(); int num1 = elementTable.GetAtomicNum("C"); newAtom1.SetAtomicNum(num1); myOBMol.AddAtom(newAtom1); OBAtom newAtom2 = new OBAtom(); int num2 = elementTable.GetAtomicNum("C"); newAtom2.SetAtomicNum(num2); myOBMol.AddAtom(newAtom2); OBAtom newAtom3 = new OBAtom(); int num3 = elementTable.GetAtomicNum("C"); newAtom3.SetAtomicNum(num3); myOBMol.AddAtom(newAtom3); OBAtom newAtom4 = new OBAtom(); int num4 = elementTable.GetAtomicNum("C"); newAtom4.SetAtomicNum(num4); myOBMol.AddAtom(newAtom4); OBAtom newAtom5 = new OBAtom(); int num5 = elementTable.GetAtomicNum("C"); newAtom5.SetAtomicNum(num5); myOBMol.AddAtom(newAtom5); OBAtom newAtom6 = new OBAtom(); int num6 = elementTable.GetAtomicNum("C"); newAtom6.SetAtomicNum(num6); myOBMol.AddAtom(newAtom6); OBAtom newAtom7 = new OBAtom(); int num7 = elementTable.GetAtomicNum("O"); newAtom7.SetAtomicNum(num7); myOBMol.AddAtom(newAtom7); OBAtom newAtom8 = new OBAtom(); int num8 = elementTable.GetAtomicNum("C"); newAtom8.SetAtomicNum(num8); myOBMol.AddAtom(newAtom8); OBAtom newAtom9 = new OBAtom(); int num9 = elementTable.GetAtomicNum("C"); newAtom9.SetAtomicNum(num9); myOBMol.AddAtom(newAtom9); OBAtom newAtom10 = new OBAtom(); int num10 = elementTable.GetAtomicNum("C"); newAtom10.SetAtomicNum(num10); myOBMol.AddAtom(newAtom10); OBAtom newAtom11 = new OBAtom(); int num11 = elementTable.GetAtomicNum("C"); newAtom11.SetAtomicNum(num11); myOBMol.AddAtom(newAtom11); OBAtom newAtom13 = new OBAtom(); int num13 = elementTable.GetAtomicNum("C"); newAtom13.SetAtomicNum(num13); myOBMol.AddAtom(newAtom13); OBAtom newAtom14 = new OBAtom(); int num14 = elementTable.GetAtomicNum("C"); newAtom14.SetAtomicNum(num14); myOBMol.AddAtom(newAtom14); OBAtom newAtom15 = new OBAtom(); int num15 = elementTable.GetAtomicNum("C"); newAtom15.SetAtomicNum(num15); myOBMol.AddAtom(newAtom15); OBAtom newAtom16 = new OBAtom(); int num16 = elementTable.GetAtomicNum("C"); newAtom16.SetAtomicNum(num16); myOBMol.AddAtom(newAtom16); OBAtom newAtom17 = new OBAtom(); int num17 = elementTable.GetAtomicNum("C"); newAtom17.SetAtomicNum(num17); myOBMol.AddAtom(newAtom17); OBAtom newAtom18 = new OBAtom(); int num18 = elementTable.GetAtomicNum("C"); newAtom18.SetAtomicNum(num18); myOBMol.AddAtom(newAtom18); OBAtom newAtom19 = new OBAtom(); int num19 = elementTable.GetAtomicNum("O"); newAtom19.SetAtomicNum(num19); myOBMol.AddAtom(newAtom19); OBAtom newAtom20 = new OBAtom(); int num20 = elementTable.GetAtomicNum("H"); newAtom20.SetAtomicNum(num20); myOBMol.AddAtom(newAtom20); OBAtom newAtom21 = new OBAtom(); int num21 = elementTable.GetAtomicNum("C"); newAtom21.SetAtomicNum(num21); myOBMol.AddAtom(newAtom21); OBAtom newAtom22 = new OBAtom(); int num22 = elementTable.GetAtomicNum("C"); newAtom22.SetAtomicNum(num22); myOBMol.AddAtom(newAtom22); OBAtom newAtom23 = new OBAtom(); int num23 = elementTable.GetAtomicNum("H"); newAtom23.SetAtomicNum(num23); myOBMol.AddAtom(newAtom23); OBAtom newAtom24 = new OBAtom(); int num24 = elementTable.GetAtomicNum("0"); newAtom24.SetAtomicNum(num24); myOBMol.AddAtom(newAtom24); OBAtom newAtom25 = new OBAtom(); int num25 = elementTable.GetAtomicNum("O"); newAtom25.SetAtomicNum(num25); myOBMol.AddAtom(newAtom25); OBAtom newAtom26 = new OBAtom(); int num26 = elementTable.GetAtomicNum("O"); newAtom26.SetAtomicNum(num26); myOBMol.AddAtom(newAtom26); OBAtom newAtom27 = new OBAtom(); int num27 = elementTable.GetAtomicNum("C"); newAtom27.SetAtomicNum(num27); myOBMol.AddAtom(newAtom27); OBAtom newAtom28 = new OBAtom(); int num28 = elementTable.GetAtomicNum("H"); newAtom28.SetAtomicNum(num28); myOBMol.AddAtom(newAtom28); OBAtom newAtom29 = new OBAtom(); int num29 = elementTable.GetAtomicNum("H"); newAtom29.SetAtomicNum(num29); myOBMol.AddAtom(newAtom29); myOBMol.AddBond(1, 2, 2); myOBMol.AddBond(2, 3, 1); myOBMol.AddBond(3, 4, 2); myOBMol.AddBond(4, 5, 1); myOBMol.AddBond(5, 6, 2); myOBMol.AddBond(1, 6, 1); myOBMol.AddBond(4, 7, 1); myOBMol.AddBond(7, 8, 1); myOBMol.AddBond(8, 9, 2); myOBMol.AddBond(9, 10, 1); myOBMol.AddBond(5, 10, 1); myOBMol.AddBond(9, 11, 1); myOBMol.AddBond(11, 12, 1); myOBMol.AddBond(12, 13, 1); myOBMol.AddBond(13, 14, 1); myOBMol.AddBond(10, 14, 1); myOBMol.AddBond(11, 15, 1); myOBMol.AddBond(15, 16, 1); myOBMol.AddBond(16, 17, 1); myOBMol.AddBond(17, 18, 1); myOBMol.AddBond(12, 18, 1); myOBMol.AddBond(2, 19, 1); myOBMol.AddBond(10, 20, 1); myOBMol.AddBond(14, 21, 1); myOBMol.AddBond(14, 22, 1); myOBMol.AddBond(12, 23, 1); myOBMol.AddBond(15, 24, 2); myOBMol.AddBond(18, 25, 1); myOBMol.AddBond(17, 26, 1); myOBMol.AddBond(13, 27, 1); myOBMol.AddBond(17, 27, 1); myOBMol.AddBond(11, 28, 1); myOBMol.AddBond(13, 29, 1); myOBMol.AddBond(1, 2, 2); myOBMol.AddBond(2, 3, 1); myOBMol.AddBond(3, 4, 2); myOBMol.AddBond(4, 5, 1); myOBMol.AddBond(5, 6, 2); myOBMol.AddBond(1, 6, 1); myOBMol.AddBond(4, 7, 1); myOBMol.AddBond(7, 8, 1); myOBMol.AddBond(8, 9, 2); myOBMol.AddBond(9, 10, 1); myOBMol.AddBond(5, 10, 1); myOBMol.AddBond(9, 11, 1); myOBMol.AddBond(11, 12, 1); myOBMol.AddBond(12, 13, 1); myOBMol.AddBond(13, 14, 1); myOBMol.AddBond(10, 14, 1); myOBMol.AddBond(11, 15, 1); myOBMol.AddBond(15, 16, 1); myOBMol.AddBond(16, 17, 1); myOBMol.AddBond(17, 18, 1); myOBMol.AddBond(12, 18, 1); myOBMol.AddBond(2, 19, 1); myOBMol.AddBond(10, 20, 1); myOBMol.AddBond(14, 21, 1); myOBMol.AddBond(14, 22, 1); myOBMol.AddBond(12, 23, 1); myOBMol.AddBond(15, 24, 2); myOBMol.AddBond(18, 25, 1); myOBMol.AddBond(17, 26, 1); myOBMol.AddBond(13, 27, 1); myOBMol.AddBond(17, 27, 1); myOBMol.AddBond(11, 28, 1); myOBMol.AddBond(13, 29, 1); OBAtomTyper atomTyper = new OBAtomTyper(); atomTyper.AssignTypes(myOBMol); myOBMol.AddHydrogens(false, true, 7.0); Thanks for your help -- View this message in context: http://forums.openbabel.org/OBDotNet-tp3044429p3044581.html Sent from the openbabel-devel mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ OpenBabel-Devel mailing list OpenBabel-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbabel-devel