From 16e66b83185cd55f05d2a4af7e666d777c140182 Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Thu, 5 Oct 2017 11:11:44 +0200
Subject: [PATCH] Added mol2 schema

---
 package-lock.json           | Bin 131693 -> 141339 bytes
 src/reader/mol2/schema.d.ts |  67 ++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)
 create mode 100644 src/reader/mol2/schema.d.ts

diff --git a/package-lock.json b/package-lock.json
index e211546c2e17aecf72e79eabc20961af48563ceb..65edb5b9cf7b351137a82ca276ff669f2ff6c1ec 100644
GIT binary patch
delta 5787
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
W4zCL#j$1(Q?OX2u`$wR!pZq^ia|uZR

delta 2662
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

diff --git a/src/reader/mol2/schema.d.ts b/src/reader/mol2/schema.d.ts
new file mode 100644
index 000000000..7f1e73fb2
--- /dev/null
+++ b/src/reader/mol2/schema.d.ts
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author Alexander Rose <alexander.rose@weirdbyte.de>
+ */
+
+import { Column } from '../common/column'
+
+// Full format http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf
+// there are many records but for now ignore (pass over) all but the following
+// @<TRIPOS>MOLECULE
+// @<TRIPOS>ATOM
+// @<TRIPOS>BOND
+//
+// note that the format is not a fixed column format but white space separated
+
+export interface Molecule {
+    mol_name: string
+    num_atoms: number
+    num_bonds: number
+    num_subst: number
+    num_feat: number
+    num_sets: number
+    mol_type: string
+    charge_type: string
+    status_bits: string
+    mol_comment: string
+}
+
+export interface Atoms {
+    count: number,
+
+    atom_id: Column<number>,
+    atom_name: Column<string>,
+    x: Column<number>,
+    y: Column<number>,
+    z: Column<number>,
+    atom_type: Column<string>,
+
+    // optional in the format, assign UndefinedColumn if not available
+    subst_id: Column<number>,
+    subst_name: Column<string>,
+    charge: Column<number>,
+    status_bit: Column<string>
+}
+
+export interface Bonds {
+    count: number,
+
+    bond_id: Column<number>,
+    origin_atom_id: Column<number>,
+    target_atom_id: Column<number>,
+    bond_type: Column<string>,
+
+    // optional in the format, assign UndefinedColumn if not available
+    status_bits: Column<string>
+}
+
+export interface Structure {
+    molecule: Readonly<Molecule>,
+    atoms: Readonly<Atoms>,
+    bonds: Readonly<Bonds>
+}
+
+export interface File {
+    structures: Structure[]
+}
\ No newline at end of file
-- 
GitLab