Эх сурвалжийг харах

error when no blast result

Thomas 3 жил өмнө
parent
commit
033959d0d2
2 өөрчлөгдсөн 88 нэмэгдсэн , 79 устгасан
  1. 43 37
      index.js
  2. 45 42
      index.ts

+ 43 - 37
index.js

@@ -89,45 +89,50 @@ const getBlastRepr = (args) => __awaiter(void 0, void 0, void 0, function* () {
             }
             catch (e) { }
         }
-        const indiv_match = all_blastn.map((blastn) => {
-            const { start, end } = blastn.qstart <= blastn.qend ? { start: blastn.qstart, end: blastn.qend } : { end: blastn.qstart, start: blastn.qend };
-            return sequence.split('').map((_, i) => ((i + 1) >= start && (i + 1) <= end) ? '|' : '_').join('');
-        });
-        const bestRepr = transpose(indiv_match.map((v) => v.split(''))).map((v) => {
-            const tmp = v.map((c, i) => {
-                if (c === '|') {
-                    return all_blastn[i].length;
+        if (all_blastn.length > 0) {
+            const indiv_match = all_blastn.map((blastn) => {
+                const { start, end } = blastn.qstart <= blastn.qend ? { start: blastn.qstart, end: blastn.qend } : { end: blastn.qstart, start: blastn.qend };
+                return sequence.split('').map((_, i) => ((i + 1) >= start && (i + 1) <= end) ? '|' : '_').join('');
+            });
+            const bestRepr = transpose(indiv_match.map((v) => v.split(''))).map((v) => {
+                const tmp = v.map((c, i) => {
+                    if (c === '|') {
+                        return all_blastn[i].length;
+                    }
+                    else {
+                        return 0;
+                    }
+                });
+                if (Math.max(...tmp) === 0) {
+                    return 0;
                 }
                 else {
-                    return 0;
+                    return whichMax(tmp)[0] + 1;
                 }
             });
-            if (Math.max(...tmp) === 0) {
-                return 0;
-            }
-            else {
-                return whichMax(tmp)[0] + 1;
-            }
-        });
-        let bestReprRed = [];
-        let n = 0;
-        let start = 0;
-        bestRepr.reduce((p, c, i) => {
-            if (p !== c) {
-                const name = p === 0 ? 'unknown' : all_blastn.filter((v) => v.index === p)[0].sseqid + ":" + all_blastn.filter((v) => v.index === p)[0].sstart + '-' + all_blastn.filter((v) => v.index === p)[0].send;
-                bestReprRed.push({ name, n, start, end: i });
-                start = (i + 1);
-                n = 0;
-            }
-            n++;
-            if (i === (bestRepr.length - 1)) {
-                const name = c === 0 ? 'unknown' : all_blastn.filter((v) => v.index === c)[0].sseqid + ":" + all_blastn.filter((v) => v.index === c)[0].sstart + '-' + all_blastn.filter((v) => v.index === c)[0].send;
-                bestReprRed.push({ name, n, start, end: i + 1 });
-            }
-            return c;
-        });
-        const sup = [sequence, ...indiv_match, bestRepr.join('')];
-        return { short: bestReprRed.flatMap((ee) => ee.name + "{" + ee.n + "}").join("<>"), all_blastn, sup, bestReprRed };
+            let bestReprRed = [];
+            let n = 0;
+            let start = 0;
+            bestRepr.reduce((p, c, i) => {
+                if (p !== c) {
+                    const name = p === 0 ? 'unknown' : all_blastn.filter((v) => v.index === p)[0].sseqid + ":" + all_blastn.filter((v) => v.index === p)[0].sstart + '-' + all_blastn.filter((v) => v.index === p)[0].send;
+                    bestReprRed.push({ name, n, start, end: i });
+                    start = (i + 1);
+                    n = 0;
+                }
+                n++;
+                if (i === (bestRepr.length - 1)) {
+                    const name = c === 0 ? 'unknown' : all_blastn.filter((v) => v.index === c)[0].sseqid + ":" + all_blastn.filter((v) => v.index === c)[0].sstart + '-' + all_blastn.filter((v) => v.index === c)[0].send;
+                    bestReprRed.push({ name, n, start, end: i + 1 });
+                }
+                return c;
+            });
+            const sup = [sequence, ...indiv_match, bestRepr.join('')];
+            return { short: bestReprRed.flatMap((ee) => ee.name + "{" + ee.n + "}").join("<>"), all_blastn, sup, bestReprRed };
+        }
+        else {
+            return {};
+        }
     }
     catch (error) {
         console.log(error);
@@ -135,8 +140,9 @@ const getBlastRepr = (args) => __awaiter(void 0, void 0, void 0, function* () {
     }
 });
 exports.getBlastRepr = getBlastRepr;
-/*(async()=>{
-    const sequence = 'ATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAAACACTGGTTCCTGGAATCCTGTCTGCTGCTGTCTTCCTAGATTCACTGAATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAA'
+/*
+(async()=>{
+    const sequence = 'TGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATT'
     const dbs = ['/home/thomas/NGS/ref/RNA/human_rna.fna']
     console.log(await getBlastRepr({sequence, dbs}));
     

+ 45 - 42
index.ts

@@ -88,49 +88,52 @@ const getBlastRepr = async (args: any) => {
                 if (res.blastn.length > 0) all_blastn = [...all_blastn, ...res.blastn].map((v,i) => {return {...v, index: i + 1}})
             } catch (e) {}
         }
-
-        const indiv_match = all_blastn.map((blastn:any) => {
-            const {start, end} = blastn.qstart <= blastn.qend ? {start: blastn.qstart, end: blastn.qend} : {end: blastn.qstart, start: blastn.qend}
-            return sequence.split('').map((_:any,i:any) => ((i + 1) >=  start && (i + 1) <= end) ? '|' : '_').join('')
-        })
-
-        const bestRepr = transpose(indiv_match.map((v:any) => v.split(''))).map((v:any) => {
-            const tmp = v.map((c:any,i:any) => {
-                if (c === '|') {
-                    return all_blastn[i].length
+        
+        if(all_blastn.length > 0) {
+            const indiv_match = all_blastn.map((blastn:any) => {
+                const {start, end} = blastn.qstart <= blastn.qend ? {start: blastn.qstart, end: blastn.qend} : {end: blastn.qstart, start: blastn.qend}
+                return sequence.split('').map((_:any,i:any) => ((i + 1) >=  start && (i + 1) <= end) ? '|' : '_').join('')
+            })
+    
+            const bestRepr = transpose(indiv_match.map((v:any) => v.split(''))).map((v:any) => {
+                const tmp = v.map((c:any,i:any) => {
+                    if (c === '|') {
+                        return all_blastn[i].length
+                    } else {
+                        return  0
+                    }
+                })
+                if (Math.max(...tmp) === 0 ) {
+                    return 0
                 } else {
-                    return  0
+                    return whichMax(tmp)[0] + 1
                 }
             })
-            if (Math.max(...tmp) === 0 ) {
-                return 0
-            } else {
-                return whichMax(tmp)[0] + 1
-            }
-        })
-
-        let bestReprRed: any = []
-        let n = 0
-        let start = 0 
-
-        bestRepr.reduce((p:any,c:any,i:any) => {
-            if (p !== c ) {
-                const name = p === 0 ? 'unknown' : all_blastn.filter((v:any) => v.index === p)[0].sseqid + ":" + all_blastn.filter((v:any) => v.index === p)[0].sstart + '-' + all_blastn.filter((v:any) => v.index === p)[0].send
-                bestReprRed.push({name, n, start, end:i})
-                start = (i+1)
-                n = 0
-            }
-            n++
-            if (i === (bestRepr.length - 1)) {
-                const name = c === 0 ? 'unknown' : all_blastn.filter((v:any) => v.index === c)[0].sseqid  + ":" + all_blastn.filter((v:any) => v.index === c)[0].sstart + '-' + all_blastn.filter((v:any) => v.index === c)[0].send
-                bestReprRed.push({name, n, start, end:i+1})
-            }
-            return c
-        })
-
-        const sup = [sequence, ...indiv_match, bestRepr.join('')]
+ 
+            let bestReprRed: any = []
+            let n = 0
+            let start = 0 
+    
+            bestRepr.reduce((p:any,c:any,i:any) => {
+                if (p !== c ) {
+                    const name = p === 0 ? 'unknown' : all_blastn.filter((v:any) => v.index === p)[0].sseqid + ":" + all_blastn.filter((v:any) => v.index === p)[0].sstart + '-' + all_blastn.filter((v:any) => v.index === p)[0].send
+                    bestReprRed.push({name, n, start, end:i})
+                    start = (i+1)
+                    n = 0
+                }
+                n++
+                if (i === (bestRepr.length - 1)) {
+                    const name = c === 0 ? 'unknown' : all_blastn.filter((v:any) => v.index === c)[0].sseqid  + ":" + all_blastn.filter((v:any) => v.index === c)[0].sstart + '-' + all_blastn.filter((v:any) => v.index === c)[0].send
+                    bestReprRed.push({name, n, start, end:i+1})
+                }
+                return c
+            })
+            const sup = [sequence, ...indiv_match, bestRepr.join('')]
 
-        return {short: bestReprRed.flatMap((ee:any) => ee.name + "{" + ee.n + "}").join("<>"), all_blastn, sup, bestReprRed}
+            return {short: bestReprRed.flatMap((ee:any) => ee.name + "{" + ee.n + "}").join("<>"), all_blastn, sup, bestReprRed}
+        } else {
+            return {}
+        }
     } catch (error) {
       console.log(error);
         return 1
@@ -138,9 +141,9 @@ const getBlastRepr = async (args: any) => {
 }
 
 export { getBlastRepr }
-
-/*(async()=>{
-    const sequence = 'ATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAAACACTGGTTCCTGGAATCCTGTCTGCTGCTGTCTTCCTAGATTCACTGAATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAA'
+/*
+(async()=>{
+    const sequence = 'TGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATT'
     const dbs = ['/home/thomas/NGS/ref/RNA/human_rna.fna']
     console.log(await getBlastRepr({sequence, dbs}));