@platforma-open/milaboratories.mixcr-shm-trees.workflow 3.0.1 → 3.1.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @platforma-open/milaboratories.mixcr-shm-trees.workflow@3.0.1 build /home/runner/work/mixcr-shm-trees/mixcr-shm-trees/workflow
2
+ > @platforma-open/milaboratories.mixcr-shm-trees.workflow@3.1.0 build /home/runner/work/mixcr-shm-trees/mixcr-shm-trees/workflow
3
3
  > rm -rf dist && pl-tengo check && pl-tengo build
4
4
 
5
5
  Processing "src/export-settings.lib.tengo"...
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @platforma-open/milaboratories.mixcr-shm-trees.workflow
2
2
 
3
+ ## 3.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c558d62: Initial implementation of node baskets
8
+
9
+ ### Patch Changes
10
+
11
+ - 2086db2: Fixes error if empty sequence search list is used
12
+ - 2086db2: Fixes error if sample name is used as donor
13
+ - 954ec46: Filter off all not-observed records form the node-clonotypes table
14
+
3
15
  ## 3.0.1
4
16
 
5
17
  ### Patch Changes
@@ -271,7 +271,7 @@ shmTreeNodesTableOptions := func(dataDescription) {
271
271
  cmdArgs = append(cmdArgs, "-isObserved")
272
272
  columns = append(columns, {
273
273
  "column": "isObserved",
274
- "id": "is-node-obsered",
274
+ "id": "is-node-observed",
275
275
  "allowNA": false,
276
276
  "spec": {
277
277
  "name": "pl7.app/dendrogram/isObserved",
@@ -495,7 +495,7 @@ shmTreeNodesWithClonesTableOptions := func(dataDescription, donorColumn) {
495
495
  axes = append(axes, {
496
496
  "column": "fileName",
497
497
  // in case of single cell trees, not all subtrees will be filled for nodes with observed
498
- "allowNA": true,
498
+ // "allowNA": true,
499
499
  "preProcess": [
500
500
  {
501
501
  "type": "regexpReplace",
@@ -510,7 +510,9 @@ shmTreeNodesWithClonesTableOptions := func(dataDescription, donorColumn) {
510
510
  axes = append(axes, {
511
511
  "column": "cloneId",
512
512
  "id": "clone-id",
513
- "allowNA": true,
513
+ // "allowNA": true,
514
+ // filtering off records without clones because we are not interested in them here
515
+ filterOutRegex: "^$",
514
516
  "spec": {
515
517
  "name": "pl7.app/vdj/cloneId",
516
518
  "type": "Long",
@@ -1,5 +1,6 @@
1
1
  ll := import("@platforma-sdk/workflow-tengo:ll")
2
2
  smart := import("@platforma-sdk/workflow-tengo:smart")
3
+ maps := import("@platforma-sdk/workflow-tengo:maps")
3
4
 
4
5
  json := import("json")
5
6
 
@@ -24,7 +25,7 @@ groupDataByDonorId := func(donorColumn, datasets) {
24
25
 
25
26
  sampleIdAxis := donorColumnSpec.axesSpec[0]
26
27
 
27
- resultSpec := {
28
+ resultSpec := maps.clone({
28
29
  kind: "PColumn",
29
30
  name: "mixcr.com/clns",
30
31
  valueType: "File",
@@ -46,13 +47,13 @@ groupDataByDonorId := func(donorColumn, datasets) {
46
47
  }
47
48
  }
48
49
  ]
49
- }
50
+ }, { removeUndefs: true })
50
51
 
51
52
  // creating sample to donor map
52
53
 
53
54
  sampleToDonor := {}
54
55
 
55
- // columns with meta could be fetched as data direcctly
56
+ // columns with meta could be fetched as data directly
56
57
  for k, v in donorColumn.data.getDataAsJson()["data"] {
57
58
  sampleId := json.decode(k)[0]
58
59
  sampleToDonor[sampleId] = v
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@platforma-open/milaboratories.mixcr-shm-trees.workflow",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "type": "module",
5
5
  "description": "Tengo-based template",
6
6
  "//": {
7
7
  "build": "node ./scripts/build-static.mjs src/pfconv_params.json src/pfconv_params.lib.tengo && rm -rf dist && pl-tengo check && pl-tengo build && ./create_tags.sh"
8
8
  },
9
9
  "devDependencies": {
10
- "@platforma-sdk/tengo-builder": "^1.17.4",
11
- "@platforma-sdk/workflow-tengo": "^2.8.3",
10
+ "@platforma-sdk/tengo-builder": "^1.17.5",
11
+ "@platforma-sdk/workflow-tengo": "^2.8.8",
12
12
  "@milaboratories/software-pframes-conv": "^2.1.2",
13
- "@platforma-open/milaboratories.software-small-binaries": "^1.15.0",
14
- "@platforma-open/milaboratories.software-mixcr": "4.7.0-133-develop",
13
+ "@platforma-open/milaboratories.software-small-binaries": "^1.15.6",
14
+ "@platforma-open/milaboratories.software-mixcr": "4.7.0-139-develop",
15
15
  "@platforma-open/milaboratories.software-mitool": "2.3.1-2-main",
16
16
  "@platforma-open/milaboratories.software-paggregate": "^1.0.1",
17
- "@platforma-sdk/test": "^1.20.12",
17
+ "@platforma-sdk/test": "^1.21.0",
18
18
  "vitest": "^2.1.8",
19
19
  "typescript": "~5.6.3"
20
20
  },
@@ -271,7 +271,7 @@ shmTreeNodesTableOptions := func(dataDescription) {
271
271
  cmdArgs = append(cmdArgs, "-isObserved")
272
272
  columns = append(columns, {
273
273
  "column": "isObserved",
274
- "id": "is-node-obsered",
274
+ "id": "is-node-observed",
275
275
  "allowNA": false,
276
276
  "spec": {
277
277
  "name": "pl7.app/dendrogram/isObserved",
@@ -495,7 +495,7 @@ shmTreeNodesWithClonesTableOptions := func(dataDescription, donorColumn) {
495
495
  axes = append(axes, {
496
496
  "column": "fileName",
497
497
  // in case of single cell trees, not all subtrees will be filled for nodes with observed
498
- "allowNA": true,
498
+ // "allowNA": true,
499
499
  "preProcess": [
500
500
  {
501
501
  "type": "regexpReplace",
@@ -510,7 +510,9 @@ shmTreeNodesWithClonesTableOptions := func(dataDescription, donorColumn) {
510
510
  axes = append(axes, {
511
511
  "column": "cloneId",
512
512
  "id": "clone-id",
513
- "allowNA": true,
513
+ // "allowNA": true,
514
+ // filtering off records without clones because we are not interested in them here
515
+ filterOutRegex: "^$",
514
516
  "spec": {
515
517
  "name": "pl7.app/vdj/cloneId",
516
518
  "type": "Long",
@@ -1,5 +1,6 @@
1
1
  ll := import("@platforma-sdk/workflow-tengo:ll")
2
2
  smart := import("@platforma-sdk/workflow-tengo:smart")
3
+ maps := import("@platforma-sdk/workflow-tengo:maps")
3
4
 
4
5
  json := import("json")
5
6
 
@@ -24,7 +25,7 @@ groupDataByDonorId := func(donorColumn, datasets) {
24
25
 
25
26
  sampleIdAxis := donorColumnSpec.axesSpec[0]
26
27
 
27
- resultSpec := {
28
+ resultSpec := maps.clone({
28
29
  kind: "PColumn",
29
30
  name: "mixcr.com/clns",
30
31
  valueType: "File",
@@ -46,13 +47,13 @@ groupDataByDonorId := func(donorColumn, datasets) {
46
47
  }
47
48
  }
48
49
  ]
49
- }
50
+ }, { removeUndefs: true })
50
51
 
51
52
  // creating sample to donor map
52
53
 
53
54
  sampleToDonor := {}
54
55
 
55
- // columns with meta could be fetched as data direcctly
56
+ // columns with meta could be fetched as data directly
56
57
  for k, v in donorColumn.data.getDataAsJson()["data"] {
57
58
  sampleId := json.decode(k)[0]
58
59
  sampleToDonor[sampleId] = v
@@ -7,6 +7,7 @@ assets := import("@platforma-sdk/workflow-tengo:assets")
7
7
  render := import("@platforma-sdk/workflow-tengo:render")
8
8
  xsv := import("@platforma-sdk/workflow-tengo:pframes.xsv")
9
9
  text := import("text")
10
+ json := import("json")
10
11
  exportSettings := import(":export-settings")
11
12
  prepareDonorColumn := import(":prepare-donor-column")
12
13
  pframes := import("@platforma-sdk/workflow-tengo:pframes")
@@ -133,6 +134,8 @@ self.body(func(inputs) {
133
134
  additionalAxesSpec: dataGroupedByDonorId["spec"]["axesSpec"][:1]
134
135
  }
135
136
 
137
+ ll.print("__THE_LOG__ " + string(json.encode(additionalArgsForImportTsv)))
138
+
136
139
  trees := xsv.importFileMap(
137
140
  mixcrResults.output("trees"),
138
141
  "tsv",
@@ -159,6 +162,10 @@ self.body(func(inputs) {
159
162
  soiTreesResults := {}
160
163
  for soiDb in inputs.params.sequencesOfInterest {
161
164
 
165
+ if len(soiDb.sequences) == 0 {
166
+ continue
167
+ }
168
+
162
169
  columnId := ""
163
170
  if soiDb.parameters.type == "nucleotide" {
164
171
  columnId = "n-seq-"
@@ -28,8 +28,8 @@ self.body(func(inputs) {
28
28
  datasetTypes := globalParams.datasetTypes
29
29
  downsampling := globalParams.downsampling
30
30
 
31
- ll.print("__THE_LOG__ " + json.encode(datasetTypes))
32
- ll.print("__THE_LOG__ " + json.encode(downsampling))
31
+ // ll.print("__THE_LOG__ " + json.encode(datasetTypes))
32
+ // ll.print("__THE_LOG__ " + json.encode(downsampling))
33
33
 
34
34
  ll.assert(!is_undefined(datasetTypes), "datasetTypes undefined")
35
35
 
@@ -98,7 +98,7 @@ self.body(func(inputs) {
98
98
  ll.panic("Unknown downsampling type: " + downsampling.type)
99
99
  }
100
100
 
101
- ll.print("__THE_LOG__ " + downsamplingParam)
101
+ // ll.print("__THE_LOG__ " + downsamplingParam)
102
102
 
103
103
  for input in toProcess {
104
104
  if datasetTypes[input.clonotypingBlockId] == "bulk" {