aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-06-04 14:09:05 +1000
committerTerry Truong <terry06890@gmail.com>2022-06-04 14:09:05 +1000
commit3b105e543a0e2e7097e3156d3daa1bdc0bd3fc2b (patch)
tree53611a5f35d2adec7fc7a95e01cf6d315a994ec9
parent87a355da9c185e054d827e07a0f5729189a8e6d8 (diff)
Add tile-info otol links
-rwxr-xr-xbackend/data/genOtolData.py8
-rwxr-xr-xbackend/data/genReducedTreeData.py10
-rwxr-xr-xbackend/server.py5
-rw-r--r--src/components/TileInfoModal.vue4
-rw-r--r--src/tol.ts2
5 files changed, 19 insertions, 10 deletions
diff --git a/backend/data/genOtolData.py b/backend/data/genOtolData.py
index 2ea548a..cc2d854 100755
--- a/backend/data/genOtolData.py
+++ b/backend/data/genOtolData.py
@@ -32,7 +32,7 @@ nodeMap = {} # Maps node IDs to node objects
nameToFirstId = {} # Maps node names to first found ID (names might have multiple IDs)
dupNameToIds = {} # Maps names of nodes with multiple IDs to those node IDs
softChildLimit = 100
-keptNamesFile = "namesToKeep.txt" # Contains names to keep when doing node trimming
+keptNamesFile = "genOtolNamesToKeep.txt" # Contains names to keep when doing node trimming
# Parse treeFile
print("Parsing tree file")
@@ -289,12 +289,12 @@ for [id, node] in nodeMap.items():
print("Creating nodes and edges tables")
dbCon = sqlite3.connect(dbFile)
dbCur = dbCon.cursor()
-dbCur.execute("CREATE TABLE nodes (name TEXT PRIMARY KEY, tips INT)")
+dbCur.execute("CREATE TABLE nodes (name TEXT PRIMARY KEY, id TEXT UNIQUE, tips INT)")
dbCur.execute("CREATE INDEX nodes_idx_nc ON nodes(name COLLATE NOCASE)")
dbCur.execute("CREATE TABLE edges (node TEXT, child TEXT, p_support INT, PRIMARY KEY (node, child))")
dbCur.execute("CREATE INDEX edges_child_idx ON edges(child)")
-for node in nodeMap.values():
- dbCur.execute("INSERT INTO nodes VALUES (?, ?)", (node["name"], node["tips"]))
+for (otolId, node) in nodeMap.items():
+ dbCur.execute("INSERT INTO nodes VALUES (?, ?, ?)", (node["name"], otolId, node["tips"]))
childIds = node["children"]
for childId in childIds:
childNode = nodeMap[childId]
diff --git a/backend/data/genReducedTreeData.py b/backend/data/genReducedTreeData.py
index a88573d..7dc3acc 100755
--- a/backend/data/genReducedTreeData.py
+++ b/backend/data/genReducedTreeData.py
@@ -49,11 +49,12 @@ for name in minimalNames:
prevName = None
while name != None:
if name not in nodeMap:
- (tips,) = dbCur.execute("SELECT tips from nodes where name = ?", (name,)).fetchone()
+ (id, tips) = dbCur.execute("SELECT id, tips from nodes where name = ?", (name,)).fetchone()
row = dbCur.execute("SELECT node, p_support from edges where child = ?", (name,)).fetchone()
parent = None if row == None or row[0] == "" else row[0]
pSupport = 1 if row == None or row[1] == 1 else 0
nodeMap[name] = {
+ "id": id,
"children": [] if prevName == None else [prevName],
"parent": parent,
"tips": 0,
@@ -124,8 +125,10 @@ for (name, nodeObj) in nodeMap.items():
namesToAdd.extend(newChildNames)
for name in namesToAdd:
(parent, pSupport) = dbCur.execute("SELECT node, p_support from edges WHERE child = ?", (name,)).fetchone()
+ (id,) = dbCur.execute("SELECT id FROM nodes WHERE name = ?", (name,)).fetchone()
parent = None if parent == "" else parent
nodeMap[name] = {
+ "id": id,
"children": [],
"parent": parent,
"tips": 0,
@@ -145,12 +148,13 @@ def setTips(nodeName):
setTips(rootName)
# Add new nodes to db
print("Adding to db")
-dbCur.execute("CREATE TABLE r_nodes (name TEXT PRIMARY KEY, tips INT)")
+dbCur.execute("CREATE TABLE r_nodes (name TEXT PRIMARY KEY, id TEXT UNIQUE, tips INT)")
+dbCur.execute("CREATE INDEX r_nodes_idx_nc ON r_nodes(name COLLATE NOCASE)")
dbCur.execute("CREATE TABLE r_edges (node TEXT, child TEXT, p_support INT, PRIMARY KEY (node, child))")
dbCur.execute("CREATE INDEX r_edges_child_idx ON r_edges(child)")
for (name, nodeObj) in nodeMap.items():
parentName = "" if nodeObj["parent"] == None else nodeObj["parent"]
- dbCur.execute("INSERT INTO r_nodes VALUES (?, ?)", (name, nodeObj["tips"]))
+ dbCur.execute("INSERT INTO r_nodes VALUES (?, ?, ?)", (name, nodeObj["id"], nodeObj["tips"]))
for childName in nodeObj["children"]:
pSupport = 1 if nodeMap[childName]["pSupport"] else 0
dbCur.execute("INSERT INTO r_edges VALUES (?, ?, ?)", (name, childName, pSupport))
diff --git a/backend/server.py b/backend/server.py
index c564466..05cba2d 100755
--- a/backend/server.py
+++ b/backend/server.py
@@ -35,9 +35,10 @@ def lookupNodes(names, useReducedTree):
nodesTable = "nodes" if not useReducedTree else "r_nodes"
edgesTable = "edges" if not useReducedTree else "r_edges"
queryParamStr = ",".join(["?"] * len(names))
- query = f"SELECT name, tips FROM {nodesTable} WHERE name IN ({queryParamStr})"
- for (nodeName, tips) in cur.execute(query, names):
+ query = f"SELECT name, id, tips FROM {nodesTable} WHERE name IN ({queryParamStr})"
+ for (nodeName, otolId, tips) in cur.execute(query, names):
nodeObjs[nodeName] = {
+ "otolId": otolId,
"children": [],
"parent": None,
"tips": tips,
diff --git a/src/components/TileInfoModal.vue b/src/components/TileInfoModal.vue
index 1123387..6e1a8ab 100644
--- a/src/components/TileInfoModal.vue
+++ b/src/components/TileInfoModal.vue
@@ -123,7 +123,9 @@ export default defineComponent({
<h1 class="text-center text-xl font-bold mb-2">
{{displayName}}
<div v-if="tolNode != null">
- ({{tolNode.children.length}} children, {{tolNode.tips}} tips)
+ ({{tolNode.children.length}} children, {{tolNode.tips}} tips,
+ <a :href="'https://tree.opentreeoflife.org/opentree/argus/opentree13.4@' + tolNode.otolId">
+ OTOL Link</a>)
</div>
</h1>
<hr class="mb-4 border-stone-400"/>
diff --git a/src/tol.ts b/src/tol.ts
index aa9a9b1..59ecadc 100644
--- a/src/tol.ts
+++ b/src/tol.ts
@@ -6,6 +6,7 @@
export type TolMap = Map<string, TolNode>;
// Represents a tree-of-life node
export class TolNode {
+ otolId: string | null;
children: string[];
parent: string | null;
tips: number;
@@ -13,6 +14,7 @@ export class TolNode {
commonName: null | string;
imgName: null | string | [string, string] | [null, string] | [string, null];
constructor(children: string[] = [], parent = null, tips = 0, pSupport = false){
+ this.otolId = null;
this.children = children;
this.parent = parent;
this.tips = tips;