diff --git a/src/reader/mol2/parser.ts b/src/reader/mol2/parser.ts index b63939f64dc64c074df26984d63961118d19e618..035f1f5da8e85dde5c9a280bb39e0e8abf1a6a92 100644 --- a/src/reader/mol2/parser.ts +++ b/src/reader/mol2/parser.ts @@ -6,6 +6,17 @@ import Result from '../result' import Computation from '../../utils/computation' ////////// not using this +/*////////////////////////// NOTES ////////////////////////////// + Not using async, wait, promises, computation, chunker. + Formatting is not clear, different exmaples mol2 files has different field sizes, so making +columns using col() is not possible. Need to implement checks for optional columns, but not clear +about the names of each entry in a row in the example files. + Don't know when to use str and when to use pooledStr + Unlike gro file, mol2 file don't save 'hasSomthing' properties in the header-like Molecule +///////////////////////////////////////////////////////////////*/ + + + interface State { tokenizer: Tokenizer, diff --git a/src/reader/mol2/schema.d.ts b/src/reader/mol2/schema.d.ts index 7f1e73fb2077b0b647b5d13d62662e104bad6b0b..a34dc9f9e74da330d55af7abc2f11fdc5c7b4e08 100644 --- a/src/reader/mol2/schema.d.ts +++ b/src/reader/mol2/schema.d.ts @@ -25,6 +25,7 @@ export interface Molecule { charge_type: string status_bits: string mol_comment: string + ///////////// precisions are not saved for later use, and there is not 'hasSomthing' properties } export interface Atoms { diff --git a/src/reader/spec/mol2.spec.ts b/src/reader/spec/mol2.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..675f41a69149a4c005345ab4914fd8046be14bc1 --- /dev/null +++ b/src/reader/spec/mol2.spec.ts @@ -0,0 +1,67 @@ + + +import Mol2 from '../mol2/parser' + +const Mol2String = `@<TRIPOS>MOLECULE +5816 + 26 26 0 0 0 +SMALL +GASTEIGER + +@<TRIPOS>ATOM + 1 O 1.7394 -2.1169 -1.0894 O.3 1 LIG1 -0.3859 + 2 O -2.2941 1.0781 -1.7979 O.3 1 LIG1 -0.5033 +@<TRIPOS>BOND + 1 1 5 1 + 2 1 21 1` + + +////////// nothing works until add async and await and promise to parser.mol2 file. +describe('mol2 reader', () => { + it('basic', async () => { + const parsed = await Mol2(Mol2String)(); + + if (parsed.isError) { + console.log(parsed) + return; + } + + const mol2File = parsed.result; + const data = mol2File.structures[0]; + + const { molecule, atoms, bonds } = data; + + expect(molecule.mol_name).toBe(5816) + expect(molecule.num_atoms).toBe(26) + expect(molecule.num_bonds).toBe(26); + expect(molecule.num_subst).toBe(0); + expect(molecule.num_feat).toBe(0); + expect(molecule.num_sets).toBe(0); + expect(molecule.mol_type).toBe("") + expect(molecule.charge_type).toBe(""); + expect(molecule.status_bits).toBe(""); + expect(molecule.mol_comment).toBe(""); + + expect(atoms.count).toBe(2); + expect(atoms.atom_id.value(0)).toBe(1); + expect(atoms.atom_name.value(0)).toBe('o'); + expect(atoms.x.value(0)).toBeCloseTo(1.7394, 0.001); + expect(atoms.y.value(0)).toBeCloseTo(-2.1169, 0.0001); + expect(atoms.z.value(0)).toBeCloseTo(-1.0893, 0.0001); + expect(atoms.atom_type.value(0)).toBe(''); + ///// optionals + expect(atoms.subst_id.value(0)).toBe(0); + expect(atoms.subst_name.value(0)).toBe(''); + expect(atoms.charge.value(0)).toBeCloseTo(0.000); + expect(atoms.status_bits.value(0)).toBe(''); + + expect(bonds.count).toBe(2); + expect(bonds.bond_id.value(0)).toBe(1); + expect(bonds.origin_atom_id.value(0)).toBe(1); + expect(bonds.target_atom_id.value(0)).toBe(5); + expect(bonds.bond_type.value(0)).toBe('1'); + /////// optional + expect(bonds.status_bits.value(0)).toBe(''); + + }); +});