@sjcrh/proteinpaint-server 2.58.0 → 2.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjcrh/proteinpaint-server",
3
- "version": "2.58.0",
3
+ "version": "2.59.0",
4
4
  "type": "module",
5
5
  "description": "a genomics visualization tool for exploring a cohort's genotype and phenotype data",
6
6
  "main": "src/app.js",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@sjcrh/augen": "2.46.0",
64
- "@sjcrh/proteinpaint-rust": "2.58.0",
64
+ "@sjcrh/proteinpaint-rust": "2.59.0",
65
65
  "better-sqlite3": "^9.4.1",
66
66
  "body-parser": "^1.15.2",
67
67
  "canvas": "~2.11.2",
@@ -19,14 +19,7 @@ const api = {
19
19
  dslabel: "TermdbTest",
20
20
  embedder: "localhost",
21
21
  getcategories: 1,
22
- tid: "diaggrp",
23
- term1_q: {
24
- isAtomic: true,
25
- hiddenValues: {},
26
- type: "values",
27
- groupsetting: { disabled: true },
28
- mode: "discrete"
29
- },
22
+ term: { id: "diaggrp" },
30
23
  filter: {
31
24
  type: "tvslst",
32
25
  in: true,
@@ -85,22 +78,8 @@ function init({ genomes }) {
85
78
  };
86
79
  }
87
80
  async function trigger_getcategories(q, res, tdb, ds, genome) {
88
- if (!q.tid)
89
- throw ".tid missing";
90
- let term;
91
- if (q.type == "geneVariant") {
92
- term = { id: q.name, name: q.name, type: "geneVariant", isleaf: true };
93
- if (q.gene) {
94
- term.gene = q.gene;
95
- } else {
96
- term.chr = q.chr;
97
- term.start = q.start;
98
- term.stop = q.stop;
99
- }
100
- } else {
101
- term = tdb.q.termjsonByOneid(q.tid);
102
- }
103
- const tw = q.type == "geneVariant" ? { $id: q.gene || q.name || q.tid, term, q: { isAtomic: true } } : { $id: q.tid, id: q.tid, term, q: q.term1_q || getDefaultQ(term, q) };
81
+ const $id = Math.random().toString();
82
+ const tw = { $id, term: q.term, q: q.term1_q || getDefaultQ(q.term, q) };
104
83
  const arg = {
105
84
  filter: q.filter,
106
85
  terms: [tw],
@@ -113,7 +92,7 @@ async function trigger_getcategories(q, res, tdb, ds, genome) {
113
92
  if (data.error)
114
93
  throw data.error;
115
94
  const lst = [];
116
- if (q.type == "geneVariant") {
95
+ if (q.term.type == "geneVariant") {
117
96
  const samples = data.samples;
118
97
  const dtClassMap = /* @__PURE__ */ new Map();
119
98
  if (ds.assayAvailability?.byDt) {
@@ -125,7 +104,7 @@ async function trigger_getcategories(q, res, tdb, ds, genome) {
125
104
  }
126
105
  const sampleCountedFor = /* @__PURE__ */ new Set();
127
106
  for (const [sampleId, sampleData] of Object.entries(samples)) {
128
- const key = tw.$id;
107
+ const key = $id;
129
108
  const values = sampleData[key].values;
130
109
  sampleCountedFor.clear();
131
110
  for (const value of values) {
@@ -163,7 +142,7 @@ async function trigger_getcategories(q, res, tdb, ds, genome) {
163
142
  } else {
164
143
  const key2count = /* @__PURE__ */ new Map();
165
144
  for (const sid in data.samples) {
166
- const v = data.samples[sid][q.tid];
145
+ const v = data.samples[sid][$id];
167
146
  if (!v)
168
147
  continue;
169
148
  if (!("key" in v))
@@ -174,14 +153,14 @@ async function trigger_getcategories(q, res, tdb, ds, genome) {
174
153
  lst.push({
175
154
  samplecount: count,
176
155
  key,
177
- label: data.refs?.byTermId?.[q.tid]?.events?.find((e) => e.event === key).label || term?.values?.[key]?.label || key
156
+ label: data.refs?.byTermId?.[$id]?.events?.find((e) => e.event === key).label || q.term?.values?.[key]?.label || key
178
157
  });
179
158
  }
180
159
  }
181
160
  const orderedLabels = getOrderedLabels(
182
- term,
183
- data.refs?.byTermId?.[q.tid]?.bins || [],
184
- data.refs?.byTermId?.[q.tid]?.events,
161
+ q.term,
162
+ data.refs?.byTermId?.[$id]?.bins || [],
163
+ data.refs?.byTermId?.[$id]?.events,
185
164
  q.term1_q
186
165
  );
187
166
  if (orderedLabels.length) {
@@ -6,6 +6,7 @@ import { gdc_validate_query_geneExpression } from "#src/mds3.gdc.js";
6
6
  import { mayLimitSamples } from "#src/mds3.filter.js";
7
7
  import { dtgeneexpression } from "#shared/common.js";
8
8
  import { clusterMethodLst, distanceMethodLst } from "#shared/clustering.js";
9
+ import { getResult as getResultGene } from "#src/gene.js";
9
10
  const api = {
10
11
  endpoint: "termdb/cluster",
11
12
  methods: {
@@ -136,7 +137,7 @@ async function validate_query_geneExpression(ds, genome) {
136
137
  const q = ds.queries.geneExpression;
137
138
  if (!q)
138
139
  return;
139
- q.gene2density = {};
140
+ q.gene2bins = {};
140
141
  if (q.src == "gdcapi") {
141
142
  gdc_validate_query_geneExpression(ds, genome);
142
143
  return;
@@ -191,13 +192,13 @@ async function validateNative(q, ds, genome) {
191
192
  if (!g.gene)
192
193
  continue;
193
194
  if (!g.chr) {
194
- const lst = genome.genedb.getjsonbyname.all(g.gene);
195
- if (lst.length == 0)
196
- continue;
197
- const j = JSON.parse(lst.find((i) => i.isdefault).genemodel || lst[0].genemodel);
198
- g.start = j.start;
199
- g.stop = j.stop;
200
- g.chr = j.chr;
195
+ const re = getResultGene(genome, { input: g.gene, deep: 1 });
196
+ if (!re.gmlst || re.gmlst.length == 0)
197
+ throw "unknown gene";
198
+ const i = re.gmlst.find((i2) => i2.isdefault) || re.gmlst[0];
199
+ g.start = i.start;
200
+ g.stop = i.stop;
201
+ g.chr = i.chr;
201
202
  }
202
203
  const s2v = {};
203
204
  await utils.get_lines_bigfile({
@@ -1,5 +1,5 @@
1
- import { get_rows_by_one_key } from "../src/termdb.sql.js";
2
1
  import Summarystats from "../shared/descriptive.stats.js";
2
+ import { getData } from "#src/termdb.matrix.js";
3
3
  const api = {
4
4
  endpoint: "termdb/descrstats",
5
5
  methods: {
@@ -64,7 +64,7 @@ function init({ genomes }) {
64
64
  const tdb = ds.cohort.termdb;
65
65
  if (!tdb)
66
66
  throw "invalid termdb object";
67
- await trigger_getdescrstats(q, res, ds);
67
+ await trigger_getdescrstats(q, res, ds, g);
68
68
  } catch (e) {
69
69
  res.send({ error: e?.message || e });
70
70
  if (e instanceof Error && e.stack)
@@ -72,20 +72,16 @@ function init({ genomes }) {
72
72
  }
73
73
  };
74
74
  }
75
- async function trigger_getdescrstats(q, res, ds) {
76
- const term = ds.cohort.termdb.q.termjsonByOneid(q.tid);
77
- if (!term)
78
- throw "invalid termid";
79
- if (term.type != "float" && term.type != "integer")
80
- throw "not numerical term";
81
- const rows = await get_rows_by_one_key({
82
- ds,
83
- key: q.tid,
84
- filter: q.filter
85
- });
75
+ async function trigger_getdescrstats(q, res, ds, genome) {
76
+ const terms = [q.tw];
77
+ const data = await getData({ filter: q.filter, terms }, ds, genome);
78
+ if (data.error)
79
+ throw data.error;
86
80
  const values = [];
87
- for (const { value } of rows) {
88
- if (term.values?.[value]?.uncomputable) {
81
+ for (const key in data.samples) {
82
+ const sample = data.samples[key];
83
+ const value = sample[q.tw.$id].value;
84
+ if (q.tw.values?.[value]?.uncomputable) {
89
85
  continue;
90
86
  }
91
87
  if (q.settings?.violin?.unit === "log") {
@@ -93,7 +89,7 @@ async function trigger_getdescrstats(q, res, ds) {
93
89
  continue;
94
90
  }
95
91
  }
96
- values.push(value);
92
+ values.push(parseFloat(value));
97
93
  }
98
94
  res.send(Summarystats(values));
99
95
  }