@sjcrh/proteinpaint-server 2.58.1-0 → 2.60.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.1-0",
3
+ "version": "2.60.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.60.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.gene2bins = {};
140
+ q.geneExpression2bins = {};
140
141
  if (q.src == "gdcapi") {
141
142
  gdc_validate_query_geneExpression(ds, genome);
142
143
  return;
@@ -168,7 +169,6 @@ async function validateNative(q, ds, genome) {
168
169
  throw "queries.geneExpression: unknown sample from header: " + l[i];
169
170
  q.samples.push(id);
170
171
  }
171
- console.log(q.samples.length, "samples from geneExpression of", ds.label);
172
172
  }
173
173
  q.get = async (param) => {
174
174
  const limitSamples = await mayLimitSamples(param, q.samples, ds);
@@ -191,13 +191,15 @@ async function validateNative(q, ds, genome) {
191
191
  if (!g.gene)
192
192
  continue;
193
193
  if (!g.chr) {
194
- const lst = genome.genedb.getjsonbyname.all(g.gene);
195
- if (lst.length == 0)
194
+ const re = getResultGene(genome, { input: g.gene, deep: 1 });
195
+ if (!re.gmlst || re.gmlst.length == 0) {
196
+ console.warn("unknown gene:" + g.gene);
196
197
  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;
198
+ }
199
+ const i = re.gmlst.find((i2) => i2.isdefault) || re.gmlst[0];
200
+ g.start = i.start;
201
+ g.stop = i.stop;
202
+ g.chr = i.chr;
201
203
  }
202
204
  const s2v = {};
203
205
  await utils.get_lines_bigfile({
@@ -224,6 +226,8 @@ async function validateNative(q, ds, genome) {
224
226
  gene2sample2value.set(g.gene, s2v);
225
227
  }
226
228
  const byTermId = {};
229
+ if (gene2sample2value.size == 0)
230
+ throw "no data available for the input " + param.genes?.map((g) => g.gene).join(", ");
227
231
  return { gene2sample2value, byTermId, bySampleId };
228
232
  };
229
233
  }
@@ -3,6 +3,7 @@ import { authApi } from "#src/auth.js";
3
3
  import { get_ds_tdb } from "#src/termdb.js";
4
4
  import { mayCopyFromCookie } from "#src/utils.js";
5
5
  import { mayComputeTermtypeByCohort } from "#src/termdb.server.init.js";
6
+ import { TermTypes } from "#shared/terms.js";
6
7
  const api = {
7
8
  endpoint: "termdb/config",
8
9
  methods: {
@@ -168,6 +169,12 @@ function addGenomicQueries(c, ds, genome) {
168
169
  delete q2.singleSampleGenomeQuantification[k].folder;
169
170
  }
170
171
  }
172
+ if (q.NIdata) {
173
+ q2.NIdata = {};
174
+ for (const k in q.NIdata) {
175
+ q2.NIdata[k] = JSON.parse(JSON.stringify(q.NIdata[k]));
176
+ }
177
+ }
171
178
  if (q.singleSampleGbtk) {
172
179
  q2.singleSampleGbtk = {};
173
180
  for (const k in q.singleSampleGbtk) {
@@ -207,7 +214,9 @@ function getAllowedTermTypes(ds) {
207
214
  typeSet.add("geneVariant");
208
215
  }
209
216
  if (ds?.queries?.geneExpression)
210
- typeSet.add("geneExpression");
217
+ typeSet.add(TermTypes.GENE_EXPRESSION);
218
+ if (ds?.queries?.metaboliteIntensity)
219
+ typeSet.add(TermTypes.METABOLITE_INTENSITY);
211
220
  return [...typeSet];
212
221
  }
213
222
  export {
@@ -75,11 +75,13 @@ function init({ genomes }) {
75
75
  async function trigger_getdescrstats(q, res, ds, genome) {
76
76
  const terms = [q.tw];
77
77
  const data = await getData({ filter: q.filter, terms }, ds, genome);
78
+ if (data.error)
79
+ throw data.error;
78
80
  const values = [];
79
81
  for (const key in data.samples) {
80
82
  const sample = data.samples[key];
81
83
  const value = sample[q.tw.$id].value;
82
- if (q.tw.values?.[value]?.uncomputable) {
84
+ if (q.tw.q.hiddenValues?.[value]) {
83
85
  continue;
84
86
  }
85
87
  if (q.settings?.violin?.unit === "log") {