|
@@ -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}})
|
|
if (res.blastn.length > 0) all_blastn = [...all_blastn, ...res.blastn].map((v,i) => {return {...v, index: i + 1}})
|
|
|
} catch (e) {}
|
|
} 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 {
|
|
} 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) {
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
console.log(error);
|
|
|
return 1
|
|
return 1
|
|
@@ -138,9 +141,9 @@ const getBlastRepr = async (args: any) => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export { getBlastRepr }
|
|
export { getBlastRepr }
|
|
|
-
|
|
|
|
|
-/*(async()=>{
|
|
|
|
|
- const sequence = 'ATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAAACACTGGTTCCTGGAATCCTGTCTGCTGCTGTCTTCCTAGATTCACTGAATCTTCACCACGAACTGCTGCTTGCTCGCTTGCTCCTCAGTCCTAGCTTCATCAA'
|
|
|
|
|
|
|
+/*
|
|
|
|
|
+(async()=>{
|
|
|
|
|
+ const sequence = 'TGTTAAAAGTAAGAGACAGCTGAACCCTCGTGGAGCCATTCATACAGGTCCCTATT'
|
|
|
const dbs = ['/home/thomas/NGS/ref/RNA/human_rna.fna']
|
|
const dbs = ['/home/thomas/NGS/ref/RNA/human_rna.fna']
|
|
|
console.log(await getBlastRepr({sequence, dbs}));
|
|
console.log(await getBlastRepr({sequence, dbs}));
|
|
|
|
|
|