Thomas 3 tahun lalu
induk
melakukan
5539c6a5e4
3 mengubah file dengan 60 tambahan dan 29 penghapusan
  1. 1 1
      dist/index.d.ts
  2. 27 11
      dist/index.js
  3. 32 17
      index.ts

+ 1 - 1
dist/index.d.ts

@@ -1,2 +1,2 @@
-declare const asyncBwaMem: (refPath: string, R1: string | Array<string>, R2: string | Array<string>, runName: string, libName: string, outputDir: string, onData: Function, options?: any) => Promise<string[]>;
+declare const asyncBwaMem: (refPath: string, reads: string | Array<string> | Array<Array<string>>, runName: string, libName: string, outputDir: string, onData: Function, options?: any) => Promise<string[]>;
 export { asyncBwaMem };

+ 27 - 11
dist/index.js

@@ -53,25 +53,40 @@ var async_exec = function (prog, args, onData) {
         child.on('exit', function (code) { return resolve(code); });
     });
 };
-var asyncBwaMem = function (refPath, R1, R2, runName, libName, outputDir, onData, options) {
+var asyncBwaMem = function (refPath, reads, 
+// R1        : string | Array<string>,
+// R2        : string | Array<string>,
+runName, libName, outputDir, onData, options) {
     if (typeof options === 'undefined')
-        options = {};
+        options = {
+            discordants: true,
+            splitted: true
+        };
     var refName = path_1.default.parse(refPath).name;
     var bwa = 'bwa';
     var samblaster = 'samblaster';
     var samtools = 'samtools';
     var sambamba = 'sambamba';
-    var R1_arr = Array.isArray(R1) ? R1.join(' ') : R1;
-    var R2_arr = Array.isArray(R2) ? R2.join(' ') : R2;
-    var R1_kitty = R1_arr.slice(-2) === 'gz' ? 'zcat' : 'cat';
-    var R2_kitty = R2_arr.slice(-2) === 'gz' ? 'zcat' : 'cat';
-    var R1_in = "'< ".concat(R1_kitty, " ").concat(R1_arr, "'");
-    var R2_in = "'< ".concat(R2_kitty, " ").concat(R2_arr, "'");
+    var readsIn;
+    if (Array.isArray(reads)) {
+        var R1 = reads[0], R2 = reads[1];
+        var R1_arr = Array.isArray(R1) ? R1.join(' ') : R1;
+        var R2_arr = Array.isArray(R2) ? R2.join(' ') : R2;
+        var R1_kitty = R1_arr.slice(-2) === 'gz' ? 'zcat' : 'cat';
+        var R2_kitty = R2_arr.slice(-2) === 'gz' ? 'zcat' : 'cat';
+        var R1_in = "'< ".concat(R1_kitty, " ").concat(R1_arr, "'");
+        var R2_in = "'< ".concat(R2_kitty, " ").concat(R2_arr, "'");
+        readsIn = R1_in + ' ' + R2_in;
+    }
+    else {
+        readsIn = reads;
+    }
     var discordantFile = path_1.default.join(outputDir, "bwa_mem_discordants_on_".concat(refName, ".sam"));
     var splitterFile = path_1.default.join(outputDir, "bwa_mem_splitters_on_".concat(refName, ".sam"));
     var unmappedFile = path_1.default.join(outputDir, "bwa_mem_unmapped_on_".concat(refName, ".fq"));
     var bam = path_1.default.join(outputDir, "bwa_mem_properly_on_".concat(refName, ".bam"));
     var bamSorted = path_1.default.join(outputDir, "bwa_mem_properly_on_".concat(refName, ".sorted.bam"));
+    var threads = String((0, os_1.cpus)().length);
     return new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
         var code, code_sort, err_1;
         return __generator(this, function (_a) {
@@ -79,8 +94,9 @@ var asyncBwaMem = function (refPath, R1, R2, runName, libName, outputDir, onData
                 case 0:
                     _a.trys.push([0, 3, , 4]);
                     return [4 /*yield*/, async_exec(bwa, ['mem',
-                            '-t', String((0, os_1.cpus)().length),
-                            '-R', "\"@RG\\tPL:Illumina\\tID:".concat(+(new Date), "\\tSM:").concat(runName, "\\tLB:").concat(libName, "\""), refPath, R1_in, R2_in,
+                            '-t', threads,
+                            '-R', "\"@RG\\tPL:Illumina\\tID:".concat(+(new Date), "\\tSM:").concat(runName, "\\tLB:").concat(libName, "\""), refPath,
+                            readsIn,
                             '|',
                             samblaster,
                             '--addMateTags',
@@ -100,7 +116,7 @@ var asyncBwaMem = function (refPath, R1, R2, runName, libName, outputDir, onData
                     code = _a.sent();
                     onData('[BWA-MEM][EXIT CODE] ' + code);
                     return [4 /*yield*/, async_exec(sambamba, ['sort',
-                            '-t', String(require('os').cpus().length),
+                            '-t', threads,
                             bam
                         ], function (message) { return onData('[SAMBAMBA-SORT] ' + message); })];
                 case 2:

+ 32 - 17
index.ts

@@ -17,16 +17,20 @@ const async_exec = (prog: string, args: string[], onData: Function) => {
 
 const asyncBwaMem = (
     refPath   : string,
-    R1        : string | Array<string>,
-    R2        : string | Array<string>,
+    reads     : string | Array<string> | Array<Array<string>>,
+    // R1        : string | Array<string>,
+    // R2        : string | Array<string>,
     runName   : string,
     libName   : string,
-    outputDir: string,
+    outputDir : string,
     onData    : Function,
-    options?   : any,
+    options?  : any,
     ) => {
 
-    if (typeof options === 'undefined') options = {}
+    if (typeof options === 'undefined') options = {
+      discordants: true,
+      splitted: true
+    }
 
     const refName = path.parse(refPath).name
   
@@ -34,29 +38,40 @@ const asyncBwaMem = (
     const samblaster = 'samblaster'
     const samtools   = 'samtools'
     const sambamba   = 'sambamba'
-  
-    const R1_arr = Array.isArray(R1) ? R1.join(' ') : R1
-    const R2_arr = Array.isArray(R2) ? R2.join(' ') : R2
-  
-    const R1_kitty = R1_arr.slice(-2) === 'gz' ? 'zcat' : 'cat'
-    const R2_kitty = R2_arr.slice(-2) === 'gz' ? 'zcat' : 'cat'
-  
-    const R1_in = `'< ${R1_kitty} ${R1_arr}'`
-    const R2_in = `'< ${R2_kitty} ${R2_arr}'`
+
+    let readsIn: string
+
+    if (Array.isArray(reads) ) {
+      const [R1, R2] = reads
+      const R1_arr = Array.isArray(R1) ? R1.join(' ') : R1
+      const R2_arr = Array.isArray(R2) ? R2.join(' ') : R2
+    
+      const R1_kitty = R1_arr.slice(-2) === 'gz' ? 'zcat' : 'cat'
+      const R2_kitty = R2_arr.slice(-2) === 'gz' ? 'zcat' : 'cat'
+    
+      const R1_in = `'< ${R1_kitty} ${R1_arr}'`
+      const R2_in = `'< ${R2_kitty} ${R2_arr}'`
+      readsIn = R1_in + ' ' + R2_in
+    } else {
+      readsIn = reads
+    }
   
     const discordantFile = path.join(outputDir, `bwa_mem_discordants_on_${refName}.sam`)
     const splitterFile   = path.join(outputDir, `bwa_mem_splitters_on_${refName}.sam`)
     const unmappedFile   = path.join(outputDir, `bwa_mem_unmapped_on_${refName}.fq`)
     const bam            = path.join(outputDir, `bwa_mem_properly_on_${refName}.bam`)
     const bamSorted      = path.join(outputDir, `bwa_mem_properly_on_${refName}.sorted.bam`)
+
+    const threads = String(cpus().length)
   
     return new Promise<string[]>(async (resolve, reject) => {
       try {
         const code = await async_exec(
         bwa, ['mem',
-          '-t', String(cpus().length),
+          '-t', threads,
           '-R', `"@RG\\tPL:Illumina\\tID:${+(new Date)}\\tSM:${runName}\\tLB:${libName}"`,
-          refPath, R1_in, R2_in,
+          refPath, 
+          readsIn,
         '|',
         samblaster,
           '--addMateTags', // https://github.com/GregoryFaust/samblaster
@@ -77,7 +92,7 @@ const asyncBwaMem = (
         
         const code_sort = await async_exec(
           sambamba, ['sort',
-            '-t', String(require('os').cpus().length),
+            '-t', threads,
             bam
         ], (message: string) => onData('[SAMBAMBA-SORT] ' + message))
         onData('[SAMBAMBA-SORT][EXIT CODE] ' + code_sort)