@platforma-open/milaboratories.mixcr-shm-trees.workflow 3.0.0 → 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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +18 -0
- package/dist/tengo/lib/export-settings.lib.tengo +5 -3
- package/dist/tengo/lib/prepare-donor-column.lib.tengo +4 -3
- package/dist/tengo/tpl/main.plj.gz +0 -0
- package/dist/tengo/tpl/process.plj.gz +0 -0
- package/dist/tengo/tpl/reconstruct-shm-trees.plj.gz +0 -0
- package/dist/tengo/tpl/soi.plj.gz +0 -0
- package/package.json +6 -6
- package/src/export-settings.lib.tengo +5 -3
- package/src/prepare-donor-column.lib.tengo +4 -3
- package/src/process.tpl.tengo +7 -0
- package/src/reconstruct-shm-trees.tpl.tengo +3 -3
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @platforma-open/milaboratories.mixcr-shm-trees.workflow@3.
|
|
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,23 @@
|
|
|
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
|
+
|
|
15
|
+
## 3.0.1
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 5e814a5: SDK upgrade, minor fixes
|
|
20
|
+
|
|
3
21
|
## 3.0.0
|
|
4
22
|
|
|
5
23
|
### Major 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-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
11
|
-
"@platforma-sdk/workflow-tengo": "^2.8.
|
|
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.
|
|
14
|
-
"@platforma-open/milaboratories.software-mixcr": "4.7.0-
|
|
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.
|
|
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-
|
|
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
|
|
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
|
package/src/process.tpl.tengo
CHANGED
|
@@ -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" {
|