@sjcrh/proteinpaint-server 2.116.1-0 → 2.116.1-2

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.
@@ -20,6 +20,7 @@ var termdb_test_default = {
20
20
  file: "files/hg38/TermdbTest/db"
21
21
  },
22
22
  termdb: {
23
+ allowedTermTypes: ["geneVariant"],
23
24
  displaySampleIds: true,
24
25
  // allow to display sample-level data
25
26
  timeUnit: "years",
@@ -83,7 +84,12 @@ var termdb_test_default = {
83
84
  ignoreCnvValues: true
84
85
  }
85
86
  },
86
- termid2totalsize2: {}
87
+ termid2totalsize2: {},
88
+ regression: {
89
+ settings: {
90
+ coxDisclaimer: "This is a test disclaimer for the cox regression analysis."
91
+ }
92
+ }
87
93
  },
88
94
  scatterplots: {
89
95
  plots: [
@@ -127,8 +133,6 @@ var termdb_test_default = {
127
133
  sunburst_twLst: [{ id: "sex", q: {} }]
128
134
  },
129
135
  queries: {
130
- // temporary fix for genomeBrowser app to show gene model
131
- defaultBlock2GeneMode: true,
132
136
  snvindel: {
133
137
  forTrack: true,
134
138
  byrange: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjcrh/proteinpaint-server",
3
- "version": "2.116.1-0",
3
+ "version": "2.116.1-2",
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",
@@ -67,8 +67,8 @@
67
67
  "dependencies": {
68
68
  "@sjcrh/augen": "2.116.0",
69
69
  "@sjcrh/proteinpaint-rust": "2.116.0",
70
- "@sjcrh/proteinpaint-shared": "2.116.0",
71
- "@sjcrh/proteinpaint-types": "2.116.1-0",
70
+ "@sjcrh/proteinpaint-shared": "2.116.1-1",
71
+ "@sjcrh/proteinpaint-types": "2.116.1-2",
72
72
  "@types/express": "^5.0.0",
73
73
  "@types/express-session": "^1.18.1",
74
74
  "better-sqlite3": "^9.4.1",
@@ -2,7 +2,6 @@ import serverconfig from "#src/serverconfig.js";
2
2
  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
- import { mayComputeTermtypeByCohort } from "#src/termdb.server.init.ts";
6
5
  import { TermTypes } from "#shared/terms.js";
7
6
  const api = {
8
7
  endpoint: "termdb/config",
@@ -61,7 +60,8 @@ function make(q, req, res, ds, genome) {
61
60
  sampleTypes: ds.cohort.termdb.sampleTypes,
62
61
  hasSampleAncestry: ds.cohort.termdb.hasSampleAncestry,
63
62
  defaultChartType: ds.cohort.defaultChartType,
64
- invalidTokenErrorHandling: tdb.invalidTokenErrorHandling
63
+ invalidTokenErrorHandling: tdb.invalidTokenErrorHandling,
64
+ colorMap: tdb.colorMap
65
65
  };
66
66
  if (tdb.plotConfigByCohort)
67
67
  c.plotConfigByCohort = tdb.plotConfigByCohort;
@@ -142,11 +142,10 @@ function addNonDictionaryQueries(c, ds, genome) {
142
142
  if (!q)
143
143
  return;
144
144
  c.queries = {
145
- defaultCoord: q.defaultCoord || genome.defaultcoord
145
+ defaultCoord: q.defaultCoord || genome.defaultcoord,
146
+ gbRestrictMode: q.gbRestrictMode
146
147
  };
147
148
  const q2 = c.queries;
148
- if (q.defaultBlock2GeneMode)
149
- q2.defaultBlock2GeneMode = q.defaultBlock2GeneMode;
150
149
  if (q.snvindel) {
151
150
  q2.snvindel = {
152
151
  allowSNPs: q.snvindel.allowSNPs,
@@ -256,7 +255,6 @@ function addNonDictionaryQueries(c, ds, genome) {
256
255
  }
257
256
  }
258
257
  function getAllowedTermTypes(ds) {
259
- mayComputeTermtypeByCohort(ds);
260
258
  const typeSet = /* @__PURE__ */ new Set();
261
259
  for (const r of ds.cohort.termdb.termtypeByCohort) {
262
260
  if (r.termType)
@@ -266,9 +264,6 @@ function getAllowedTermTypes(ds) {
266
264
  for (const t of ds.cohort.termdb.allowedTermTypes)
267
265
  typeSet.add(t);
268
266
  }
269
- if (ds?.queries?.defaultBlock2GeneMode) {
270
- typeSet.add("geneVariant");
271
- }
272
267
  if (ds?.queries?.geneExpression)
273
268
  typeSet.add(TermTypes.GENE_EXPRESSION);
274
269
  if (ds?.queries?.metaboliteIntensity)
@@ -1,4 +1,6 @@
1
1
  import { topMutatedGenePayload } from "#types/checkers";
2
+ import { get_samples } from "#src/termdb.sql.js";
3
+ import { mayLog } from "#src/helpers.ts";
2
4
  const api = {
3
5
  endpoint: "termdb/topMutatedGenes",
4
6
  methods: {
@@ -42,7 +44,96 @@ function validate_query_getTopMutatedGenes(ds, genome) {
42
44
  return;
43
45
  if (typeof q.get == "function")
44
46
  return;
47
+ if (!q.arguments) {
48
+ q.arguments = [];
49
+ q.arguments.push({ id: "maxGenes", label: "Gene Count", type: "number", value: 50 });
50
+ if (ds.queries.snvindel) {
51
+ q.arguments.push({ id: "snv_mfndi", label: "Protein-changing mutation", type: "boolean", value: true });
52
+ q.arguments.push({ id: "snv_splice", label: "Splice mutation", type: "boolean", value: true });
53
+ q.arguments.push({ id: "snv_utr", label: "UTR mutation", type: "boolean", value: true });
54
+ q.arguments.push({ id: "snv_s", label: "Silent mutation", type: "boolean", value: true });
55
+ }
56
+ if (ds.queries.svfusion) {
57
+ q.arguments.push({ id: "sv", label: "Structural variation", type: "boolean", value: true });
58
+ q.arguments.push({ id: "fusion", label: "RNA fusion", type: "boolean", value: true });
59
+ }
60
+ if (ds.queries.cnv) {
61
+ q.arguments.push({
62
+ id: "cnv",
63
+ type: "boolean",
64
+ label: "CNV",
65
+ checked: false,
66
+ noStyle: true,
67
+ //This is a hack
68
+ options: [
69
+ {
70
+ id: "cnv_ms",
71
+ label: "Max size",
72
+ type: "radio",
73
+ options: [
74
+ { id: "cnv_1mb", label: "<1Mb", value: "cnv_1mb" },
75
+ { id: "cnv_2mb", label: "<2Mb", value: "cnv_2mb" },
76
+ { id: "cnv_4mb", label: "<4Mb", value: "cnv_4mb" }
77
+ ]
78
+ },
79
+ {
80
+ id: "cnv_logratio",
81
+ label: "Min absolute log(ratio)",
82
+ type: "radio",
83
+ options: [
84
+ { id: "_01", label: ">0.1", value: "_01" },
85
+ { id: "_02", label: ">0.2", value: "_02" },
86
+ { id: "_03", label: ">0.3", value: "_03" }
87
+ ]
88
+ }
89
+ ]
90
+ });
91
+ }
92
+ }
45
93
  q.get = async (param) => {
94
+ let sampleStatement = "";
95
+ if (param.filter) {
96
+ const lst = await get_samples(param.filter, ds);
97
+ if (lst.length == 0)
98
+ throw "empty sample filter";
99
+ sampleStatement = `WHERE sample IN (${lst.map((i) => i.id).join(",")})`;
100
+ }
101
+ const fields = [];
102
+ if (param.snv_mfndi)
103
+ fields.push("snv_mfndi");
104
+ if (param.snv_splice)
105
+ fields.push("snv_splice");
106
+ if (param.snv_utr)
107
+ fields.push("snv_utr");
108
+ if (param.snv_s)
109
+ fields.push("snv_s");
110
+ if (param.sv)
111
+ fields.push("sv");
112
+ if (param.fusion)
113
+ fields.push("fusion");
114
+ if (param.cnv == 1 && param.cnv_ms?.type && param.cnv_logratio?.type) {
115
+ fields.push(param.cnv_ms.type + param.cnv_logratio.type);
116
+ }
117
+ if (!fields.length)
118
+ throw "no fields";
119
+ const query = `WITH
120
+ filtered AS (
121
+ SELECT genesymbol, ${fields.join("+")} AS total FROM genesamplemutationcount
122
+ ${sampleStatement}
123
+ )
124
+ SELECT genesymbol, SUM(total) AS count
125
+ FROM filtered
126
+ GROUP BY genesymbol
127
+ ORDER BY count DESC
128
+ LIMIT ${param.maxGenes || 20}`;
129
+ const t = Date.now();
130
+ const genes = ds.cohort.db.connection.prepare(query).all();
131
+ mayLog("Top mutated gene sql", Date.now() - t, "ms");
132
+ const results = [];
133
+ for (const g of genes) {
134
+ results.push({ gene: g.genesymbol });
135
+ }
136
+ return results;
46
137
  };
47
138
  }
48
139
  export {