msa-parsers 6.5.0 → 8.0.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/README.md +23 -8
- package/dist/gff/annotationsToGFF.d.ts +6 -4
- package/dist/gff/annotationsToGFF.js +7 -4
- package/dist/gff/annotationsToGFF.js.map +1 -1
- package/dist/gff/gffToAnnotations.js +48 -4
- package/dist/gff/gffToAnnotations.js.map +1 -1
- package/dist/gff/parseGFF.js +21 -6
- package/dist/gff/parseGFF.js.map +1 -1
- package/dist/interProScanToAnnotations.d.ts +7 -2
- package/dist/interProScanToAnnotations.js +20 -10
- package/dist/interProScanToAnnotations.js.map +1 -1
- package/dist/msa/A3mMSA.js +3 -3
- package/dist/msa/A3mMSA.js.map +1 -1
- package/dist/msa/BaseMSA.d.ts +5 -14
- package/dist/msa/BaseMSA.js +3 -7
- package/dist/msa/BaseMSA.js.map +1 -1
- package/dist/msa/FastaMSA.js +2 -2
- package/dist/msa/FastaMSA.js.map +1 -1
- package/dist/msa/StockholmMSA.d.ts +7 -7
- package/dist/msa/StockholmMSA.js +40 -17
- package/dist/msa/StockholmMSA.js.map +1 -1
- package/dist/msa/fastaRecords.d.ts +8 -3
- package/dist/msa/fastaRecords.js +28 -16
- package/dist/msa/fastaRecords.js.map +1 -1
- package/dist/msa/index.d.ts +1 -1
- package/dist/msa/index.js +8 -2
- package/dist/msa/index.js.map +1 -1
- package/dist/msa/stockholmParser.js +21 -9
- package/dist/msa/stockholmParser.js.map +1 -1
- package/dist/types.d.ts +24 -2
- package/package.json +6 -6
- package/src/gff/annotationsToGFF.ts +10 -4
- package/src/gff/gffToAnnotations.test.ts +55 -0
- package/src/gff/gffToAnnotations.ts +72 -21
- package/src/gff/interProToGFF.test.ts +43 -6
- package/src/gff/parseGFF.test.ts +23 -11
- package/src/gff/parseGFF.ts +39 -23
- package/src/interProScanToAnnotations.ts +24 -16
- package/src/msa/A3mMSA.ts +3 -3
- package/src/msa/BaseMSA.ts +5 -14
- package/src/msa/FastaMSA.ts +2 -2
- package/src/msa/StockholmMSA.ts +46 -24
- package/src/msa/fastaRecords.ts +30 -17
- package/src/msa/index.test.ts +93 -0
- package/src/msa/index.ts +11 -2
- package/src/msa/stockholmParser.test.ts +22 -0
- package/src/msa/stockholmParser.ts +20 -9
- package/src/types.ts +26 -5
- package/dist/gff/gffToAnnotations.test.d.ts +0 -1
- package/dist/gff/gffToAnnotations.test.js +0 -71
- package/dist/gff/gffToAnnotations.test.js.map +0 -1
- package/dist/gff/interProToGFF.test.d.ts +0 -1
- package/dist/gff/interProToGFF.test.js +0 -208
- package/dist/gff/interProToGFF.test.js.map +0 -1
- package/dist/gff/parseGFF.test.d.ts +0 -1
- package/dist/gff/parseGFF.test.js +0 -102
- package/dist/gff/parseGFF.test.js.map +0 -1
- package/dist/msa/A3mMSA.property.test.d.ts +0 -1
- package/dist/msa/A3mMSA.property.test.js +0 -112
- package/dist/msa/A3mMSA.property.test.js.map +0 -1
- package/dist/msa/A3mMSA.test.d.ts +0 -1
- package/dist/msa/A3mMSA.test.js +0 -337
- package/dist/msa/A3mMSA.test.js.map +0 -1
- package/dist/msa/impgIntegration.test.d.ts +0 -1
- package/dist/msa/impgIntegration.test.js +0 -49
- package/dist/msa/impgIntegration.test.js.map +0 -1
- package/dist/msa/index.test.d.ts +0 -1
- package/dist/msa/index.test.js +0 -229
- package/dist/msa/index.test.js.map +0 -1
- package/dist/msa/stockholmParser.test.d.ts +0 -1
- package/dist/msa/stockholmParser.test.js +0 -122
- package/dist/msa/stockholmParser.test.js.map +0 -1
- package/dist/util.test.d.ts +0 -1
- package/dist/util.test.js +0 -40
- package/dist/util.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -30,12 +30,15 @@ pnpm add msa-parsers
|
|
|
30
30
|
|
|
31
31
|
### Parsing MSA files
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
`parseMSA` sniffs the format from the content, not from the file name. FASTA and
|
|
34
|
+
A3M share a leading `>`, so telling them apart is heuristic; pass a format as
|
|
35
|
+
the third argument to override the guess:
|
|
34
36
|
|
|
35
37
|
```typescript
|
|
36
38
|
import { parseMSA } from 'msa-parsers'
|
|
37
39
|
|
|
38
40
|
const msa = parseMSA(fileContents)
|
|
41
|
+
const stockholm = parseMSA(fileContents, 0, 'stockholm')
|
|
39
42
|
|
|
40
43
|
// Get sequence names
|
|
41
44
|
const names = msa.getNames()
|
|
@@ -56,7 +59,8 @@ const tree = msa.getTree()
|
|
|
56
59
|
import { FastaMSA, StockholmMSA, ClustalMSA } from 'msa-parsers'
|
|
57
60
|
|
|
58
61
|
const fasta = new FastaMSA(fastaContents)
|
|
59
|
-
|
|
62
|
+
// a Stockholm file can hold several alignments; the second argument picks one
|
|
63
|
+
const stockholm = new StockholmMSA(stockholmContents, 0)
|
|
60
64
|
const clustal = new ClustalMSA(clustalContents)
|
|
61
65
|
```
|
|
62
66
|
|
|
@@ -71,15 +75,26 @@ const treeWithIds = generateNodeIds(tree)
|
|
|
71
75
|
|
|
72
76
|
### GFF and InterProScan utilities
|
|
73
77
|
|
|
78
|
+
Every source of overlay annotations converts to one flat list of `Annotation` (a
|
|
79
|
+
row name, an accession, a name, a description and a 1-based inclusive interval),
|
|
80
|
+
and the viewer draws that list.
|
|
81
|
+
|
|
74
82
|
```typescript
|
|
75
|
-
import {
|
|
83
|
+
import {
|
|
84
|
+
annotationsToGFF,
|
|
85
|
+
gffToAnnotations,
|
|
86
|
+
interProScanResponseToAnnotations,
|
|
87
|
+
parseGFF,
|
|
88
|
+
} from 'msa-parsers'
|
|
89
|
+
|
|
90
|
+
// GFF3 (including InterProScan's own output) to annotations
|
|
91
|
+
const annotations = gffToAnnotations(parseGFF(gffContents))
|
|
76
92
|
|
|
77
|
-
//
|
|
78
|
-
const
|
|
93
|
+
// an InterProScan JSON response to the same shape
|
|
94
|
+
const fromScan = interProScanResponseToAnnotations(response)
|
|
79
95
|
|
|
80
|
-
//
|
|
81
|
-
const
|
|
82
|
-
const gffString = interProToGFF(interProResults, seqId)
|
|
96
|
+
// and back out as GFF3, with optional `#` header lines
|
|
97
|
+
const gffString = annotationsToGFF(annotations, ['written by my pipeline'])
|
|
83
98
|
```
|
|
84
99
|
|
|
85
100
|
## License
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Annotation } from '../types.ts';
|
|
2
2
|
/**
|
|
3
|
-
* Write annotations as GFF3, one line per annotation, in list order
|
|
3
|
+
* Write annotations as GFF3, one line per annotation, in list order, with
|
|
4
|
+
* optional `#` comment lines after the version directive saying where they came
|
|
5
|
+
* from.
|
|
4
6
|
*
|
|
5
7
|
* The source column is always `InterProScan`: an Annotation records no source
|
|
6
|
-
* of its own, and the
|
|
7
|
-
*
|
|
8
|
+
* of its own, and the viewer reads a precomputed-lookup GFF by the same rules
|
|
9
|
+
* it reads a real InterProScan run's.
|
|
8
10
|
*/
|
|
9
|
-
export declare function annotationsToGFF(annotations: Annotation[]): string;
|
|
11
|
+
export declare function annotationsToGFF(annotations: Annotation[], header?: string[]): string;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Write annotations as GFF3, one line per annotation, in list order
|
|
2
|
+
* Write annotations as GFF3, one line per annotation, in list order, with
|
|
3
|
+
* optional `#` comment lines after the version directive saying where they came
|
|
4
|
+
* from.
|
|
3
5
|
*
|
|
4
6
|
* The source column is always `InterProScan`: an Annotation records no source
|
|
5
|
-
* of its own, and the
|
|
6
|
-
*
|
|
7
|
+
* of its own, and the viewer reads a precomputed-lookup GFF by the same rules
|
|
8
|
+
* it reads a real InterProScan run's.
|
|
7
9
|
*/
|
|
8
|
-
export function annotationsToGFF(annotations) {
|
|
10
|
+
export function annotationsToGFF(annotations, header = []) {
|
|
9
11
|
return [
|
|
10
12
|
'##gff-version 3',
|
|
13
|
+
...header.map(line => `# ${line}`),
|
|
11
14
|
...annotations.map(annotation => {
|
|
12
15
|
const { accession, name, description, featureType } = annotation;
|
|
13
16
|
const { id, start, end, strand } = annotation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotationsToGFF.js","sourceRoot":"","sources":["../../src/gff/annotationsToGFF.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"annotationsToGFF.js","sourceRoot":"","sources":["../../src/gff/annotationsToGFF.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAyB,EACzB,MAAM,GAAa,EAAE;IAErB,OAAO;QACL,iBAAiB;QACjB,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC9B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,UAAU,CAAA;YAChE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;YAC7C,OAAO;gBACL,EAAE;gBACF,cAAc;gBACd,mEAAmE;gBACnE,oEAAoE;gBACpE,gEAAgE;gBAChE,oCAAoC;gBACpC,WAAW,IAAI,eAAe;gBAC9B,KAAK;gBACL,GAAG;gBACH,GAAG;gBACH,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;gBACnD,GAAG;gBACH;oBACE,QAAQ,kBAAkB,CAAC,SAAS,CAAC,EAAE;oBACvC,kBAAkB,kBAAkB,CAAC,IAAI,CAAC,EAAE;oBAC5C,eAAe,kBAAkB,CAAC,WAAW,CAAC,EAAE;iBACjD,CAAC,IAAI,CAAC,GAAG,CAAC;aACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,CAAC,CAAC;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
|
|
@@ -22,6 +22,41 @@ function geneStrand({ type, strand }) {
|
|
|
22
22
|
const directional = strand === '+' ? 1 : strand === '-' ? -1 : undefined;
|
|
23
23
|
return GENE_LEVEL_TYPES.has(type) ? directional : undefined;
|
|
24
24
|
}
|
|
25
|
+
// The nine columns a feature line holds; every other key of a record came from
|
|
26
|
+
// column 9
|
|
27
|
+
const GFF_COLUMNS = new Set([
|
|
28
|
+
'seq_id',
|
|
29
|
+
'source',
|
|
30
|
+
'type',
|
|
31
|
+
'start',
|
|
32
|
+
'end',
|
|
33
|
+
'score',
|
|
34
|
+
'strand',
|
|
35
|
+
'phase',
|
|
36
|
+
]);
|
|
37
|
+
function attributesOf(record) {
|
|
38
|
+
const entries = Object.entries(record).filter(([key, value]) => !GFF_COLUMNS.has(key) && typeof value === 'string');
|
|
39
|
+
return entries.length > 0 ? Object.fromEntries(entries) : undefined;
|
|
40
|
+
}
|
|
41
|
+
// JBrowse and IGV read an RGB triple as well as a named or hex color, and the
|
|
42
|
+
// attribute parser has already turned `255,0,0` into `255 0 0` by splitting on
|
|
43
|
+
// the GFF3 multi-value comma
|
|
44
|
+
const RGB_TRIPLE = /^(\d{1,3})[\s,]+(\d{1,3})[\s,]+(\d{1,3})$/;
|
|
45
|
+
function cssColor(record) {
|
|
46
|
+
const value = (record.color ??
|
|
47
|
+
record.colour ??
|
|
48
|
+
record.Color ??
|
|
49
|
+
record.Colour);
|
|
50
|
+
if (!value) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const triple = RGB_TRIPLE.exec(value.trim());
|
|
54
|
+
return triple ? `rgb(${triple[1]},${triple[2]},${triple[3]})` : value.trim();
|
|
55
|
+
}
|
|
56
|
+
// InterProScan describes the sequence it scanned before listing the matches
|
|
57
|
+
// against it. Those lines span the whole row and carry no signature, so they
|
|
58
|
+
// would draw a full-width block labelled by an md5.
|
|
59
|
+
const WHOLE_SEQUENCE_TYPES = new Set(['polypeptide', 'nucleic_acid']);
|
|
25
60
|
/**
|
|
26
61
|
* Convert GFF records to annotations, one per record, in file order.
|
|
27
62
|
*
|
|
@@ -30,23 +65,32 @@ function geneStrand({ type, strand }) {
|
|
|
30
65
|
* name, with domain positions 1-based.
|
|
31
66
|
*/
|
|
32
67
|
export function gffToAnnotations(gffRecords) {
|
|
33
|
-
return gffRecords
|
|
68
|
+
return gffRecords
|
|
69
|
+
.filter(record => !WHOLE_SEQUENCE_TYPES.has(record.type))
|
|
70
|
+
.map(record => {
|
|
34
71
|
const accession = record.Name ||
|
|
35
72
|
record.ID ||
|
|
36
73
|
`${record.source}_${record.start}_${record.end}`;
|
|
37
|
-
const name = record.signature_desc ||
|
|
74
|
+
const name = record.signature_desc ||
|
|
75
|
+
record.Name ||
|
|
76
|
+
accession;
|
|
38
77
|
return {
|
|
39
78
|
id: record.seq_id,
|
|
40
79
|
accession,
|
|
41
80
|
name,
|
|
42
|
-
|
|
43
|
-
|
|
81
|
+
// not Ontology_term: a GO id list is what the domain is annotated
|
|
82
|
+
// with, not what it is, and reading it first labelled every
|
|
83
|
+
// InterProScan domain "GO:0003677 GO:0006281"
|
|
84
|
+
description: record.description ||
|
|
44
85
|
record.Note ||
|
|
86
|
+
record.signature_desc ||
|
|
45
87
|
name,
|
|
46
88
|
featureType: record.type,
|
|
47
89
|
start: record.start,
|
|
48
90
|
end: record.end,
|
|
49
91
|
strand: geneStrand(record),
|
|
92
|
+
color: cssColor(record),
|
|
93
|
+
attributes: attributesOf(record),
|
|
50
94
|
};
|
|
51
95
|
});
|
|
52
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gffToAnnotations.js","sourceRoot":"","sources":["../../src/gff/gffToAnnotations.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM;IACN,YAAY;IACZ,MAAM;IACN,YAAY;IACZ,oBAAoB;IACpB,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,SAAS;CACV,CAAC,CAAA;AAEF,0EAA0E;AAC1E,oCAAoC;AACpC,SAAS,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAa;IAC7C,MAAM,WAAW,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAuB;IACtD,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"gffToAnnotations.js","sourceRoot":"","sources":["../../src/gff/gffToAnnotations.ts"],"names":[],"mappings":"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"}
|
package/dist/gff/parseGFF.js
CHANGED
|
@@ -8,6 +8,11 @@ function safeDecode(val) {
|
|
|
8
8
|
return val;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
+
// InterProScan quotes some of its values (Ontology_term="GO:0008652",
|
|
12
|
+
// Dbxref="InterPro:IPR001048"), and the quotes are not part of the term
|
|
13
|
+
function unquote(val) {
|
|
14
|
+
return val.replace(/^"(.*)"$/, '$1');
|
|
15
|
+
}
|
|
11
16
|
function parseAttributes(col9) {
|
|
12
17
|
if (!col9) {
|
|
13
18
|
return {};
|
|
@@ -28,7 +33,7 @@ function parseAttributes(col9) {
|
|
|
28
33
|
val
|
|
29
34
|
? val
|
|
30
35
|
.split(',')
|
|
31
|
-
.map(v => safeDecode(v).trim())
|
|
36
|
+
.map(v => unquote(safeDecode(v).trim()))
|
|
32
37
|
.join(' ')
|
|
33
38
|
: undefined,
|
|
34
39
|
];
|
|
@@ -39,11 +44,21 @@ export function parseGFF(str) {
|
|
|
39
44
|
if (!str) {
|
|
40
45
|
return [];
|
|
41
46
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
const lines = [];
|
|
48
|
+
for (const raw of str.split('\n')) {
|
|
49
|
+
const line = raw.trim();
|
|
50
|
+
// InterProScan appends the sequences it scanned; every line past this is
|
|
51
|
+
// FASTA, and reading it as features gave rows named ">P51587"
|
|
52
|
+
if (line.startsWith('##FASTA')) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
// a feature is nine tab-separated columns, eight of them mandatory; a
|
|
56
|
+
// FASTA line in a file that omitted the ##FASTA directive is one
|
|
57
|
+
if (line && !line.startsWith('#') && line.split('\t').length >= 8) {
|
|
58
|
+
lines.push(line);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return lines.map(f => {
|
|
47
62
|
const parts = f.split('\t');
|
|
48
63
|
const [seq_id, source, type, start, end, score, strand, phase] = parts;
|
|
49
64
|
const col9 = parts[8];
|
package/dist/gff/parseGFF.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseGFF.js","sourceRoot":"","sources":["../../src/gff/parseGFF.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,kEAAkE;AAClE,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CACvB,IAAI;SACD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACnD,wEAAwE;QACxE,qEAAqE;QACrE,kBAAkB;QAClB,OAAO;YACL,GAAG;YACH,GAAG;gBACD,CAAC,CAAC,GAAG;qBACA,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"parseGFF.js","sourceRoot":"","sources":["../../src/gff/parseGFF.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,13 @@ export declare function indexResultsByXref(results: InterProScanResults[]): {
|
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Flatten InterProScan results, keyed by the row name they attach to, into one
|
|
13
|
-
* annotation per signature location.
|
|
14
|
-
*
|
|
13
|
+
* annotation per signature location.
|
|
14
|
+
*
|
|
15
|
+
* An unintegrated signature has no InterPro `entry` -- MobiDBLite's disorder
|
|
16
|
+
* calls, and many CDD, Pfam and PANTHER hits -- and falling back to the
|
|
17
|
+
* signature's own accession and name is the difference between drawing those
|
|
18
|
+
* and dropping them. Only a signature with no accession at all has nothing to
|
|
19
|
+
* color, filter or label by, and is dropped.
|
|
15
20
|
*/
|
|
16
21
|
export declare function interProScanToAnnotations(results: Record<string, InterProScanResults>): Annotation[];
|
|
17
22
|
/**
|
|
@@ -11,22 +11,32 @@ export function indexResultsByXref(results) {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Flatten InterProScan results, keyed by the row name they attach to, into one
|
|
14
|
-
* annotation per signature location.
|
|
15
|
-
*
|
|
14
|
+
* annotation per signature location.
|
|
15
|
+
*
|
|
16
|
+
* An unintegrated signature has no InterPro `entry` -- MobiDBLite's disorder
|
|
17
|
+
* calls, and many CDD, Pfam and PANTHER hits -- and falling back to the
|
|
18
|
+
* signature's own accession and name is the difference between drawing those
|
|
19
|
+
* and dropping them. Only a signature with no accession at all has nothing to
|
|
20
|
+
* color, filter or label by, and is dropped.
|
|
16
21
|
*/
|
|
17
22
|
export function interProScanToAnnotations(results) {
|
|
18
|
-
return Object.entries(results).flatMap(([id, { matches }]) => matches.flatMap(({ signature
|
|
19
|
-
|
|
23
|
+
return Object.entries(results).flatMap(([id, { matches }]) => matches.flatMap(({ signature, locations }) => {
|
|
24
|
+
const { entry } = signature;
|
|
25
|
+
const accession = entry?.accession ?? signature.accession;
|
|
26
|
+
if (!accession) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const name = entry?.name ?? signature.name ?? accession;
|
|
30
|
+
return locations.map(({ start, end, strand }) => ({
|
|
20
31
|
id,
|
|
21
|
-
accession
|
|
22
|
-
name
|
|
23
|
-
description: entry.description,
|
|
24
|
-
featureType: entry.featureType,
|
|
32
|
+
accession,
|
|
33
|
+
name,
|
|
34
|
+
description: entry?.description ?? signature.description ?? name,
|
|
25
35
|
start,
|
|
26
36
|
end,
|
|
27
37
|
strand,
|
|
28
|
-
}))
|
|
29
|
-
|
|
38
|
+
}));
|
|
39
|
+
}));
|
|
30
40
|
}
|
|
31
41
|
/**
|
|
32
42
|
* Flatten a whole InterProScan JSON response, resolving each result's row name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interProScanToAnnotations.js","sourceRoot":"","sources":["../src/interProScanToAnnotations.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA8B;IAC/D,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAU,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAsC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CACzE,CAAA;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"interProScanToAnnotations.js","sourceRoot":"","sources":["../src/interProScanToAnnotations.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA8B;IAC/D,OAAO,MAAM,CAAC,WAAW,CACvB,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAU,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAsC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CACzE,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA4C;IAE5C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAC3D,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;QAC3B,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS,CAAA;QACzD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAA;QACvD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE;YACF,SAAS;YACT,IAAI;YACJ,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,SAAS,CAAC,WAAW,IAAI,IAAI;YAChE,KAAK;YACL,GAAG;YACH,MAAM;SACP,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,QAA8B;IAE9B,OAAO,yBAAyB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACxE,CAAC"}
|
package/dist/msa/A3mMSA.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseMSA from './BaseMSA.js';
|
|
2
|
-
import { splitFastaRecords } from './fastaRecords.js';
|
|
2
|
+
import { fastaSniff, splitFastaRecords } from './fastaRecords.js';
|
|
3
3
|
/**
|
|
4
4
|
* A3M Format Parser
|
|
5
5
|
*
|
|
@@ -61,7 +61,7 @@ export default class A3mMSA extends BaseMSA {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
static sniff(text) {
|
|
64
|
-
if (!text
|
|
64
|
+
if (!fastaSniff(text)) {
|
|
65
65
|
return false;
|
|
66
66
|
}
|
|
67
67
|
const seqs = splitFastaRecords(text)
|
|
@@ -114,7 +114,7 @@ function expandA3M(rawSeqs, names) {
|
|
|
114
114
|
maxInserts[pos] = Math.max(maxInserts[pos], ins.length);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
const expanded =
|
|
117
|
+
const expanded = Object.create(null);
|
|
118
118
|
for (const [seqIdx, { matches, inserts }] of rows.entries()) {
|
|
119
119
|
const result = [];
|
|
120
120
|
for (let pos = 0; pos <= numPositions; pos++) {
|
package/dist/msa/A3mMSA.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"A3mMSA.js","sourceRoot":"","sources":["../../src/msa/A3mMSA.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"A3mMSA.js","sourceRoot":"","sources":["../../src/msa/A3mMSA.ts"],"names":[],"mappings":"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"}
|
package/dist/msa/BaseMSA.d.ts
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import type { NodeWithIds } from '../types.ts';
|
|
1
|
+
import type { MSATrack, NodeWithIds } from '../types.ts';
|
|
2
2
|
export default abstract class BaseMSA {
|
|
3
3
|
abstract getMSA(): unknown;
|
|
4
4
|
abstract getRow(name: string): string;
|
|
5
5
|
abstract getNames(): string[];
|
|
6
6
|
private width?;
|
|
7
7
|
/**
|
|
8
|
-
* Column count of the alignment: the length of its widest row
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* an aligner that stops a row at its last residue -- and taking row 0 makes
|
|
12
|
-
* every column past it unreachable when row 0 is the short one. The viewer's
|
|
13
|
-
* gap analysis already defines the column count this way, so anything else
|
|
14
|
-
* disagrees with it.
|
|
8
|
+
* Column count of the alignment: the length of its widest row, since a
|
|
9
|
+
* hand-edited fasta or some aligners leave rows short. The viewer's gap
|
|
10
|
+
* analysis counts columns the same way.
|
|
15
11
|
*/
|
|
16
12
|
getWidth(): number;
|
|
17
13
|
getTree(): NodeWithIds;
|
|
@@ -25,10 +21,5 @@ export default abstract class BaseMSA {
|
|
|
25
21
|
get alignmentNames(): string[];
|
|
26
22
|
get seqConsensus(): string | undefined;
|
|
27
23
|
get secondaryStructureConsensus(): string | undefined;
|
|
28
|
-
get tracks():
|
|
29
|
-
id: string;
|
|
30
|
-
name: string;
|
|
31
|
-
data?: string;
|
|
32
|
-
customColorScheme?: Record<string, string>;
|
|
33
|
-
}[];
|
|
24
|
+
get tracks(): MSATrack[];
|
|
34
25
|
}
|
package/dist/msa/BaseMSA.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
export default class BaseMSA {
|
|
2
2
|
width;
|
|
3
3
|
/**
|
|
4
|
-
* Column count of the alignment: the length of its widest row
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* an aligner that stops a row at its last residue -- and taking row 0 makes
|
|
8
|
-
* every column past it unreachable when row 0 is the short one. The viewer's
|
|
9
|
-
* gap analysis already defines the column count this way, so anything else
|
|
10
|
-
* disagrees with it.
|
|
4
|
+
* Column count of the alignment: the length of its widest row, since a
|
|
5
|
+
* hand-edited fasta or some aligners leave rows short. The viewer's gap
|
|
6
|
+
* analysis counts columns the same way.
|
|
11
7
|
*/
|
|
12
8
|
getWidth() {
|
|
13
9
|
this.width ??= this.getNames().reduce((max, name) => Math.max(max, this.getRow(name).length), 0);
|
package/dist/msa/BaseMSA.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseMSA.js","sourceRoot":"","sources":["../../src/msa/BaseMSA.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAgB,OAAO;IAK3B,KAAK,CAAS;IAEtB
|
|
1
|
+
{"version":3,"file":"BaseMSA.js","sourceRoot":"","sources":["../../src/msa/BaseMSA.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAgB,OAAO;IAK3B,KAAK,CAAS;IAEtB;;;;OAIG;IACH,QAAQ;QACN,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EACtD,CAAC,CACF,CAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,EAAE;gBACZ,IAAI;aACL,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,UAAU,CACR,KAAa;QAEb,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,YAAY;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
|
package/dist/msa/FastaMSA.js
CHANGED
|
@@ -8,8 +8,8 @@ export default class FastaMSA extends BaseMSA {
|
|
|
8
8
|
constructor(text) {
|
|
9
9
|
super();
|
|
10
10
|
const records = splitFastaRecords(text);
|
|
11
|
-
const seqdata =
|
|
12
|
-
const colonNormalized =
|
|
11
|
+
const seqdata = Object.create(null);
|
|
12
|
+
const colonNormalized = Object.create(null);
|
|
13
13
|
for (const { id, seq } of records) {
|
|
14
14
|
seqdata[id] = seq;
|
|
15
15
|
if (id.includes(':')) {
|
package/dist/msa/FastaMSA.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FastaMSA.js","sourceRoot":"","sources":["../../src/msa/FastaMSA.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IACnC,GAAG,CAGV;IAED,yEAAyE;IACzE,0EAA0E;IAClE,YAAY,CAAU;IAE9B,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QACP,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,OAAO,GAA2B,
|
|
1
|
+
{"version":3,"file":"FastaMSA.js","sourceRoot":"","sources":["../../src/msa/FastaMSA.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IACnC,GAAG,CAGV;IAED,yEAAyE;IACzE,0EAA0E;IAClE,YAAY,CAAU;IAE9B,YAAY,IAAY;QACtB,KAAK,EAAE,CAAA;QACP,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,eAAe,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnE,KAAK,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;YACjB,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,CAAA;IACzC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtD,EAAE,CACH,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import BaseMSA from './BaseMSA.ts';
|
|
2
|
-
import type { NodeWithIds } from '../types.ts';
|
|
2
|
+
import type { MSATrack, NodeWithIds } from '../types.ts';
|
|
3
3
|
import type { StockholmData } from './stockholmParser.ts';
|
|
4
4
|
export default class StockholmMSA extends BaseMSA {
|
|
5
5
|
private data;
|
|
@@ -32,11 +32,11 @@ export default class StockholmMSA extends BaseMSA {
|
|
|
32
32
|
getTree(): NodeWithIds;
|
|
33
33
|
get seqConsensus(): string | undefined;
|
|
34
34
|
get secondaryStructureConsensus(): string | undefined;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
/**
|
|
36
|
+
* One text track per `#=GC` line, and one per `#=GR` line that stays hidden
|
|
37
|
+
* until asked for: a Pfam seed carries a few per-row active-site lines, but
|
|
38
|
+
* an Rfam family carries a structure line for every row with a PDB entry.
|
|
39
|
+
*/
|
|
40
|
+
get tracks(): MSATrack[];
|
|
41
41
|
}
|
|
42
42
|
export { sniff as stockholmSniff } from './stockholmParser.ts';
|
package/dist/msa/StockholmMSA.js
CHANGED
|
@@ -46,7 +46,7 @@ export default class StockholmMSA extends BaseMSA {
|
|
|
46
46
|
return this.MSA.seqname;
|
|
47
47
|
}
|
|
48
48
|
getStructures() {
|
|
49
|
-
const pdbRegex = /PDB; +(\S+) +(
|
|
49
|
+
const pdbRegex = /PDB; +(\S+) +([^;\s]+); *(-?[0-9]+)-(-?[0-9]+)/;
|
|
50
50
|
const drEntries = this.MSA.gs.DR ?? {};
|
|
51
51
|
const result = {};
|
|
52
52
|
for (const [id, drList] of Object.entries(drEntries)) {
|
|
@@ -75,35 +75,58 @@ export default class StockholmMSA extends BaseMSA {
|
|
|
75
75
|
get secondaryStructureConsensus() {
|
|
76
76
|
return this.MSA.gc.SS_cons;
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* One text track per `#=GC` line, and one per `#=GR` line that stays hidden
|
|
80
|
+
* until asked for: a Pfam seed carries a few per-row active-site lines, but
|
|
81
|
+
* an Rfam family carries a structure line for every row with a PDB entry.
|
|
82
|
+
*/
|
|
78
83
|
get tracks() {
|
|
84
|
+
const { seq_cons, SS_cons, ...otherGc } = this.MSA.gc;
|
|
79
85
|
return [
|
|
80
86
|
{
|
|
81
87
|
id: 'seqConsensus',
|
|
82
88
|
name: 'Sequence consensus',
|
|
83
|
-
data:
|
|
89
|
+
data: seq_cons,
|
|
84
90
|
customColorScheme: {},
|
|
85
91
|
},
|
|
86
92
|
{
|
|
87
93
|
id: 'secondaryStruct',
|
|
88
94
|
name: 'Secondary-structure',
|
|
89
|
-
data:
|
|
90
|
-
|
|
91
|
-
// several nesting types (<>, (), [], {}); color all opens one way and
|
|
92
|
-
// closes the other so every helix (e.g. the tRNA acceptor stem, which
|
|
93
|
-
// is written with parens) is highlighted, not just the <> arms.
|
|
94
|
-
customColorScheme: {
|
|
95
|
-
'<': 'lightblue',
|
|
96
|
-
'(': 'lightblue',
|
|
97
|
-
'[': 'lightblue',
|
|
98
|
-
'{': 'lightblue',
|
|
99
|
-
'>': 'pink',
|
|
100
|
-
')': 'pink',
|
|
101
|
-
']': 'pink',
|
|
102
|
-
'}': 'pink',
|
|
103
|
-
},
|
|
95
|
+
data: SS_cons,
|
|
96
|
+
customColorScheme: wussColors,
|
|
104
97
|
},
|
|
98
|
+
...Object.entries(otherGc).map(([tag, data]) => ({
|
|
99
|
+
id: `gc-${tag}`,
|
|
100
|
+
name: tag,
|
|
101
|
+
data,
|
|
102
|
+
customColorScheme: structureColors(tag),
|
|
103
|
+
})),
|
|
104
|
+
...Object.entries(this.MSA.gr).flatMap(([tag, byRow]) => Object.entries(byRow).map(([row, data]) => ({
|
|
105
|
+
id: `gr-${row}-${tag}`,
|
|
106
|
+
name: `${row} ${tag}`,
|
|
107
|
+
data,
|
|
108
|
+
customColorScheme: structureColors(tag),
|
|
109
|
+
defaultOff: true,
|
|
110
|
+
}))),
|
|
105
111
|
];
|
|
106
112
|
}
|
|
107
113
|
}
|
|
114
|
+
// WUSS writes base-paired columns as open/close brackets of several nesting
|
|
115
|
+
// types (<>, (), [], {}); coloring every open one way and every close the other
|
|
116
|
+
// highlights each helix, including the tRNA acceptor stem written with parens
|
|
117
|
+
const wussColors = {
|
|
118
|
+
'<': 'lightblue',
|
|
119
|
+
'(': 'lightblue',
|
|
120
|
+
'[': 'lightblue',
|
|
121
|
+
'{': 'lightblue',
|
|
122
|
+
'>': 'pink',
|
|
123
|
+
')': 'pink',
|
|
124
|
+
']': 'pink',
|
|
125
|
+
'}': 'pink',
|
|
126
|
+
};
|
|
127
|
+
// `SS`, and Rfam's per-structure `2GIS_A_SS`
|
|
128
|
+
function structureColors(tag) {
|
|
129
|
+
return tag === 'SS' || tag.endsWith('_SS') ? wussColors : {};
|
|
130
|
+
}
|
|
108
131
|
export { sniff as stockholmSniff } from './stockholmParser.js';
|
|
109
132
|
//# sourceMappingURL=StockholmMSA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StockholmMSA.js","sourceRoot":"","sources":["../../src/msa/StockholmMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAK/C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IACvC,IAAI,CAAiB;IACrB,GAAG,CAAe;IAE1B,YAAY,IAAY,EAAE,gBAAwB;QAChD,KAAK,EAAE,CAAA;QACP,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,SAAS;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QACtC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;YACpB,UAAU,EAAE,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACrD;YACD,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7D;SACF,CAAA;IACH,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;SAC9C,CAAA;IACH,CAAC;IAED,QAAQ;QACN,0EAA0E;QAC1E,oEAAoE;QACpE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAA;IACzB,CAAC;IAED,aAAa;QACX,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"StockholmMSA.js","sourceRoot":"","sources":["../../src/msa/StockholmMSA.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,15 @@ export interface FastaRecord {
|
|
|
2
2
|
id: string;
|
|
3
3
|
seq: string;
|
|
4
4
|
}
|
|
5
|
+
export declare function fastaSniff(text: string): boolean;
|
|
5
6
|
/**
|
|
6
7
|
* Split FASTA-style text (shared by the FASTA and A3M parsers) into records.
|
|
7
|
-
*
|
|
8
|
-
* record
|
|
9
|
-
*
|
|
8
|
+
*
|
|
9
|
+
* A record starts at a `>` that begins a line, so a `>` inside a defline
|
|
10
|
+
* (`x->y`, HGVS `c.1799T>A`) stays part of it, and anything before the first
|
|
11
|
+
* record (ColabFold's `#8\t1` header) is skipped. The id is the defline up to
|
|
12
|
+
* the first whitespace, tab included. A repeated id keeps the first record: ids
|
|
13
|
+
* index the row data, so emitting the id twice would render a phantom duplicate
|
|
14
|
+
* row showing the last record's residues.
|
|
10
15
|
*/
|
|
11
16
|
export declare function splitFastaRecords(text: string): FastaRecord[];
|