@platforma-open/milaboratories.mixcr-amplicon-alignment.workflow 1.4.0 → 1.5.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,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/work/mixcr-amplicon-alignment/mixcr-amplicon-alignment/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-open/milaboratories.mixcr-amplicon-alignment.workflow@1.4.0 build /home/runner/work/mixcr-amplicon-alignment/mixcr-amplicon-alignment/workflow
3
+ > @platforma-open/milaboratories.mixcr-amplicon-alignment.workflow@1.5.0 build /home/runner/work/mixcr-amplicon-alignment/mixcr-amplicon-alignment/workflow
4
4
  > rm -rf dist && pl-tengo check && pl-tengo build
5
5
 
6
6
  info: Skipping unknown file type: wf.test.ts
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @platforma-open/milaboratories.mixcr-amplicon-alignment.workflow
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - af0cbb1: Support batch system
8
+
3
9
  ## 1.4.0
4
10
 
5
11
  ### Minor Changes
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-open/milaboratories.mixcr-amplicon-alignment.workflow",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "MiXCR Amplicon Alignment Workflow",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -3,9 +3,11 @@ self := import("@platforma-sdk/workflow-tengo:tpl")
3
3
  pConstants := import("@platforma-sdk/workflow-tengo:pframes.constants")
4
4
  slices := import("@platforma-sdk/workflow-tengo:slices")
5
5
  maps := import("@platforma-sdk/workflow-tengo:maps")
6
+ units := import("@platforma-sdk/workflow-tengo:units")
6
7
  pt := import("@platforma-sdk/workflow-tengo:pt")
7
8
  clonotypeLabel := import(":clonotype-label")
8
9
 
10
+ math := import("math")
9
11
  json := import("json")
10
12
 
11
13
  self.defineOutputs("tsv")
@@ -24,10 +26,15 @@ self.body(func(inputs) {
24
26
  schemaPerClonotypeNoAggregates := params.schemaPerClonotypeNoAggregates
25
27
  schemaPerSample := params.schemaPerSample
26
28
 
27
- wf := pt.workflow()
28
- dataFrames := []
29
-
30
29
  inputMap := inputData.inputs()
30
+ numberOfSamples := len(inputMap)
31
+
32
+ wf := pt.workflow().
33
+ inMediumQueue().
34
+ mem(int(math.max(numberOfSamples, 64)) * units.GB).
35
+ cpu(int(math.max(numberOfSamples, 32)))
36
+
37
+ dataFrames := []
31
38
 
32
39
  baseSchemaForRead := schemaPerSample + [ { column: "clonotypeKey", type: "String" } ]
33
40
 
@@ -30,6 +30,8 @@ wf.body(func(args) {
30
30
  fivePrimePrimer := args.fivePrimePrimer
31
31
  chains := args.chains
32
32
  limitInput := args.limitInput
33
+ perProcessMemGB := args.perProcessMemGB
34
+ perProcessCPUs := args.perProcessCPUs
33
35
 
34
36
  // Create V and J gene FASTA files
35
37
 
@@ -81,6 +83,8 @@ wf.body(func(args) {
81
83
 
82
84
  params: smart.createJsonResource({
83
85
  blockId: blockId,
86
+ perProcessMemGB: perProcessMemGB,
87
+ perProcessCPUs: perProcessCPUs,
84
88
  threePrimePrimer: threePrimePrimer,
85
89
  fivePrimePrimer: fivePrimePrimer,
86
90
  chains: chains,
@@ -27,6 +27,8 @@ self.body(func(inputs) {
27
27
  params := inputs.params
28
28
  fileExtension := params.fileExtension
29
29
  limitInput := inputs.limitInput
30
+ perProcessMemGB := inputs.perProcessMemGB
31
+ perProcessCPUs := inputs.perProcessCPUs
30
32
  ll.print("__THE_LOG__" + string(limitInput))
31
33
 
32
34
  threePrimePrimer := inputs.threePrimePrimer
@@ -78,6 +80,20 @@ self.body(func(inputs) {
78
80
  // mixcrCmdBuilder.arg("--rigid-right-alignment-boundary").arg("J")
79
81
  // }
80
82
 
83
+ // CPUs number per process
84
+ if !is_undefined(perProcessCPUs) {
85
+ mixcrCmdBuilder.cpu(perProcessCPUs)
86
+ } else {
87
+ mixcrCmdBuilder.cpu(16) // default CPUs number per sample
88
+ }
89
+ // Memory limit per process
90
+ if !is_undefined(perProcessMemGB) {
91
+ // memory per process was set in "Advanced Settings" block directly
92
+ mixcrCmdBuilder.mem(string(perProcessMemGB) + "GB")
93
+ } else {
94
+ mixcrCmdBuilder.mem("64GB")
95
+ }
96
+
81
97
  if !is_undefined(limitInput) {
82
98
  mixcrCmdBuilder.arg("--limit-input").arg(string(limitInput))
83
99
  }
@@ -32,6 +32,8 @@ self.body(func(inputs) {
32
32
  createExport := func(additionalAction) {
33
33
  mixcrCmdBuilder := exec.builder().
34
34
  inMediumQueue().
35
+ mem("12GB").
36
+ cpu(2).
35
37
  printErrStreamToStdout().
36
38
  dontSaveStdoutOrStderr().
37
39
  software(mixcrSw).
@@ -70,7 +72,11 @@ self.body(func(inputs) {
70
72
  }
71
73
 
72
74
  // Simplified PTabler processing for main TSV output
73
- wfMain := pt.workflow()
75
+ wfMain := pt.workflow().
76
+ inMediumQueue().
77
+ mem("8GB").
78
+ cpu(2)
79
+
74
80
  frameInputMap := {
75
81
  file: unprocessedTsv,
76
82
  xsvType: "tsv",
@@ -32,6 +32,8 @@ self.body(func(inputs) {
32
32
  chains := params.chains
33
33
  mixcrChains := params.mixcrChains
34
34
  limitInput := inputs.limitInput
35
+ perProcessMemGB := params.perProcessMemGB
36
+ perProcessCPUs := params.perProcessCPUs
35
37
  fileExtension := inputSpec.domain["pl7.app/fileExtension"]
36
38
 
37
39
  // Use calculateExportSpecs for output columns
@@ -161,7 +163,14 @@ self.body(func(inputs) {
161
163
  referenceLibrary: referenceLibrary
162
164
  },
163
165
  limitInput: limitInput
164
- }
166
+ },
167
+
168
+ // by passing those parameters as meta fields we allow for recovery and deduplication mechanisms
169
+ // to pick up the results from executions with different values for CPU and Memory overrides
170
+ metaExtra: {
171
+ perProcessMemGB: perProcessMemGB,
172
+ perProcessCPUs: perProcessCPUs
173
+ }
165
174
  }
166
175
  )
167
176
 
@@ -190,6 +199,8 @@ self.body(func(inputs) {
190
199
  storageFormat: "Binary",
191
200
  partitionKeyLength: 0
192
201
  },
202
+ mem: "16GB",
203
+ cpu: 2,
193
204
  name: "byCloneKeyBySample",
194
205
  path: ["tsv"]
195
206
  }]
@@ -231,6 +242,8 @@ self.body(func(inputs) {
231
242
  columns: columnsSpecPerClonotypeNoAggregates + columnsSpecPerClonotypeAggregates,
232
243
  storageFormat: "Binary"
233
244
  },
245
+ mem: "12GB",
246
+ cpu: 2,
234
247
  name: "aggregates",
235
248
  path: ["tsv"]
236
249
  } ]
@@ -27,7 +27,8 @@ self.body(func(inputs) {
27
27
  arg("--gene-feature").arg("VRegion").
28
28
  arg("--name-index").arg("0").
29
29
  arg("vGene.fasta").addFile("vGene.fasta", vGeneFasta).
30
- arg("vGene.json").saveFile("vGene.json")
30
+ arg("vGene.json").saveFile("vGene.json").
31
+ cpu(1).mem("4GB")
31
32
 
32
33
  // Run repseqio command
33
34
  repseqioVgeneResult := repseqioVgeneCmd.run()
@@ -45,7 +46,8 @@ self.body(func(inputs) {
45
46
  arg("--gene-feature").arg("JRegion").
46
47
  arg("--name-index").arg("0").
47
48
  arg("jGene.fasta").addFile("jGene.fasta", jGeneFasta).
48
- arg("jGene.json").saveFile("jGene.json")
49
+ arg("jGene.json").saveFile("jGene.json").
50
+ cpu(1).mem("4GB")
49
51
 
50
52
  repseqioJgeneResult := repseqioJgeneCmd.run()
51
53
  referenceLibraryJgene := repseqioJgeneResult.getFile("jGene.json")
@@ -58,7 +60,8 @@ self.body(func(inputs) {
58
60
  arg("vGene.json").
59
61
  arg("jGene.json").
60
62
  arg("referenceLibrary.json").
61
- saveFile("referenceLibrary.json")
63
+ saveFile("referenceLibrary.json").
64
+ cpu(1).mem("4GB")
62
65
 
63
66
  repseqioMergeResult := repseqioMergeCmd.run()
64
67
  referenceLibrary := repseqioMergeResult.getFile("referenceLibrary.json")
@@ -73,7 +76,8 @@ self.body(func(inputs) {
73
76
  arg("referenceLibrary.json").
74
77
  arg("referenceLibrary.json").
75
78
  saveFile("referenceLibrary.json").
76
- addFile("vGene.fasta", vGeneFasta)
79
+ addFile("vGene.fasta", vGeneFasta).
80
+ cpu(1).mem("4GB")
77
81
 
78
82
  repseqioInferPointsVResult := repseqioInferPointsVCmd.run()
79
83
  referenceLibraryV := repseqioInferPointsVResult.getFile("referenceLibrary.json")
@@ -88,7 +92,8 @@ self.body(func(inputs) {
88
92
  arg("referenceLibrary.json").
89
93
  arg("referenceLibrary.json").
90
94
  saveFile("referenceLibrary.json").
91
- addFile("jGene.fasta", jGeneFasta)
95
+ addFile("jGene.fasta", jGeneFasta).
96
+ cpu(1).mem("4GB")
92
97
 
93
98
  repseqioInferPointsJResult := repseqioInferPointsJCmd.run()
94
99
  referenceLibraryJ := repseqioInferPointsJResult.getFile("referenceLibrary.json")
@@ -102,7 +107,8 @@ self.body(func(inputs) {
102
107
  arg("referenceLibrary.json").
103
108
  saveFile("referenceLibrary.json").
104
109
  addFile("vGene.fasta", vGeneFasta).
105
- addFile("jGene.fasta", jGeneFasta)
110
+ addFile("jGene.fasta", jGeneFasta).
111
+ cpu(1).mem("4GB")
106
112
 
107
113
  repseqioCompileResult := repseqioCompileCmd.run()
108
114
  referenceLibraryCompiled := repseqioCompileResult.getFile("referenceLibrary.json")
@@ -113,7 +119,8 @@ self.body(func(inputs) {
113
119
  addFile("referenceLibrary.json", referenceLibraryCompiled).
114
120
  arg("referenceLibrary.json").
115
121
  addFile("vGene.fasta", vGeneFasta).
116
- addFile("jGene.fasta", jGeneFasta)
122
+ addFile("jGene.fasta", jGeneFasta).
123
+ cpu(1).mem("4GB")
117
124
 
118
125
  repseqioDebugResult := repseqioDebugCmd.run()
119
126
  debugOutput := repseqioDebugResult.getStdoutStream()