writing atom information using the mol2 atom order.

Dear all, I have a mol2 file and I would like to generate an input for an external program using chimera. For a great ease in practicability, I would like the mol2 order to be kept. I used the following artefact to get to what I want: def input(molecule): ##for compatibility with mol2 atom ordering I use the doble loop as follow ##makes the writing substantially slower, but yet the compatibility with mol2 format seems absolute. for i in range(len(molecule.atoms)): for atoms in molecule.atoms: if atoms.serialNumber == i: text=str(atoms.element)+"-"+str(atoms.gaffType)+"-"+str(atoms.charge)+" "+str(atoms.flex)+" "+str(atoms.coord()) +"\n" filename.write(text) i=i+1 I think I could order directly the writing in function of the serialNumber (which is preserved regarding the mol2) file. But how could I do this? Best, JD Dr. Jean-Didier Maréchal Lecturer Computational Biotechnological Chemistry @ Transmet Unitat de Química Física Departament de Química Universitat Autònoma de Barcelona Edifici C.n. 08193 Cerdanyola (Barcelona) Tel: +34.935814936 e-mail: JeanDidier.Marechal@uab.es

Hi JD, One typically takes the list of atoms, sorts them, and then runs through the sorted list. Like this: atoms = molecule.atoms atoms.sort(lambda a1, a2: cmp(a1.serialNumber, a2.serialNumber)) for atom in atoms: etc. --Eric Note that 'molecule.atoms' always returns a copy of the atom list, so you can't do this: molecule.atoms.sort(blah) for atom in molecule.atoms: because the first line sorted a _copy_ of the atom list, and the second line returns another copy of the original (unsorted) list. On Nov 3, 2009, at 6:20 AM, Jean Didier Pie Marechal wrote:
Dear all,
I have a mol2 file and I would like to generate an input for an external program using chimera. For a great ease in practicability, I would like the mol2 order to be kept.
I used the following artefact to get to what I want: def input(molecule): ##for compatibility with mol2 atom ordering I use the doble loop as follow ##makes the writing substantially slower, but yet the compatibility with mol2 format seems absolute. for i in range(len(molecule.atoms)): for atoms in molecule.atoms: if atoms.serialNumber == i: text=str(atoms.element)+"-"+str(atoms.gaffType) +"-"+str(atoms.charge)+" "+str(atoms.flex)+" "+str(atoms.coord()) +"\n" filename.write(text) i=i+1
I think I could order directly the writing in function of the serialNumber (which is preserved regarding the mol2) file. But how could I do this?
Best, JD
participants (2)
-
Eric Pettersen
-
Jean Didier Pie Marechal