msa-parsers 5.0.7 → 5.0.13
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/dist/gff/gffToInterPro.d.ts +0 -4
- package/dist/gff/gffToInterPro.js +0 -7
- package/dist/gff/gffToInterPro.js.map +1 -1
- package/dist/msa/A3mMSA.d.ts +2 -21
- package/dist/msa/A3mMSA.js +3 -67
- package/dist/msa/A3mMSA.js.map +1 -1
- package/dist/msa/BaseMSA.d.ts +19 -0
- package/dist/{src/msa/EmfMSA.js → msa/BaseMSA.js} +15 -32
- package/dist/msa/BaseMSA.js.map +1 -0
- package/dist/msa/ClustalMSA.d.ts +2 -8
- package/dist/msa/ClustalMSA.js +3 -28
- package/dist/msa/ClustalMSA.js.map +1 -1
- package/dist/msa/EmfMSA.d.ts +2 -9
- package/dist/msa/EmfMSA.js +3 -31
- package/dist/msa/EmfMSA.js.map +1 -1
- package/dist/msa/FastaMSA.d.ts +2 -10
- package/dist/msa/FastaMSA.js +3 -34
- package/dist/msa/FastaMSA.js.map +1 -1
- package/dist/msa/StockholmMSA.d.ts +2 -2
- package/dist/msa/StockholmMSA.js +18 -34
- package/dist/msa/StockholmMSA.js.map +1 -1
- package/package.json +7 -2
- package/src/gff/gffToInterPro.ts +0 -11
- package/src/msa/A3mMSA.ts +3 -76
- package/src/msa/BaseMSA.ts +49 -0
- package/src/msa/ClustalMSA.ts +3 -34
- package/src/msa/EmfMSA.ts +3 -38
- package/src/msa/FastaMSA.ts +3 -42
- package/src/msa/StockholmMSA.ts +18 -39
- package/dist/src/gff/gffToInterPro.d.ts +0 -20
- package/dist/src/gff/gffToInterPro.js +0 -83
- package/dist/src/gff/gffToInterPro.js.map +0 -1
- package/dist/src/gff/gffToInterPro.test.d.ts +0 -1
- package/dist/src/gff/gffToInterPro.test.js +0 -181
- package/dist/src/gff/gffToInterPro.test.js.map +0 -1
- package/dist/src/gff/index.d.ts +0 -3
- package/dist/src/gff/index.js +0 -4
- package/dist/src/gff/index.js.map +0 -1
- package/dist/src/gff/interProToGFF.d.ts +0 -9
- package/dist/src/gff/interProToGFF.js +0 -48
- package/dist/src/gff/interProToGFF.js.map +0 -1
- package/dist/src/gff/interProToGFF.test.d.ts +0 -1
- package/dist/src/gff/interProToGFF.test.js +0 -189
- package/dist/src/gff/interProToGFF.test.js.map +0 -1
- package/dist/src/gff/parseGFF.d.ts +0 -2
- package/dist/src/gff/parseGFF.js +0 -41
- package/dist/src/gff/parseGFF.js.map +0 -1
- package/dist/src/gff/parseGFF.test.d.ts +0 -1
- package/dist/src/gff/parseGFF.test.js +0 -92
- package/dist/src/gff/parseGFF.test.js.map +0 -1
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/msa/A3mMSA.d.ts +0 -33
- package/dist/src/msa/A3mMSA.js +0 -282
- package/dist/src/msa/A3mMSA.js.map +0 -1
- package/dist/src/msa/A3mMSA.test.d.ts +0 -1
- package/dist/src/msa/A3mMSA.test.js +0 -261
- package/dist/src/msa/A3mMSA.test.js.map +0 -1
- package/dist/src/msa/ClustalMSA.d.ts +0 -30
- package/dist/src/msa/ClustalMSA.js +0 -53
- package/dist/src/msa/ClustalMSA.js.map +0 -1
- package/dist/src/msa/EmfMSA.d.ts +0 -27
- package/dist/src/msa/EmfMSA.js.map +0 -1
- package/dist/src/msa/FastaMSA.d.ts +0 -20
- package/dist/src/msa/FastaMSA.js +0 -75
- package/dist/src/msa/FastaMSA.js.map +0 -1
- package/dist/src/msa/StockholmMSA.d.ts +0 -54
- package/dist/src/msa/StockholmMSA.js +0 -113
- package/dist/src/msa/StockholmMSA.js.map +0 -1
- package/dist/src/msa/index.d.ts +0 -18
- package/dist/src/msa/index.js +0 -34
- package/dist/src/msa/index.js.map +0 -1
- package/dist/src/msa/index.test.d.ts +0 -1
- package/dist/src/msa/index.test.js +0 -96
- package/dist/src/msa/index.test.js.map +0 -1
- package/dist/src/msa/parseNewick.d.ts +0 -60
- package/dist/src/msa/parseNewick.js +0 -105
- package/dist/src/msa/parseNewick.js.map +0 -1
- package/dist/src/msa/stockholmParser.d.ts +0 -22
- package/dist/src/msa/stockholmParser.js +0 -141
- package/dist/src/msa/stockholmParser.js.map +0 -1
- package/dist/src/msa/stockholmParser.test.d.ts +0 -1
- package/dist/src/msa/stockholmParser.test.js +0 -111
- package/dist/src/msa/stockholmParser.test.js.map +0 -1
- package/dist/src/types.d.ts +0 -66
- package/dist/src/types.js +0 -2
- package/dist/src/types.js.map +0 -1
- package/dist/src/util.d.ts +0 -2
- package/dist/src/util.js +0 -10
- package/dist/src/util.js.map +0 -1
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'vitest';
|
|
2
|
-
import { parseGFF } from "./parseGFF.js";
|
|
3
|
-
describe('parseGFF', () => {
|
|
4
|
-
test('parses empty string', () => {
|
|
5
|
-
expect(parseGFF('')).toEqual([]);
|
|
6
|
-
expect(parseGFF(undefined)).toEqual([]);
|
|
7
|
-
});
|
|
8
|
-
test('parses basic GFF3 line', () => {
|
|
9
|
-
const gff = 'seq1\tInterProScan\tprotein_match\t10\t50\t.\t+\t.\tName=PF00001';
|
|
10
|
-
const result = parseGFF(gff);
|
|
11
|
-
expect(result).toHaveLength(1);
|
|
12
|
-
expect(result[0]).toEqual({
|
|
13
|
-
seq_id: 'seq1',
|
|
14
|
-
source: 'InterProScan',
|
|
15
|
-
type: 'protein_match',
|
|
16
|
-
start: 10,
|
|
17
|
-
end: 50,
|
|
18
|
-
score: 0,
|
|
19
|
-
strand: '+',
|
|
20
|
-
phase: '.',
|
|
21
|
-
Name: 'PF00001',
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
test('parses multiple attributes', () => {
|
|
25
|
-
const gff = 'seq1\tPfam\tprotein_match\t10\t50\t1.5\t.\t.\tName=PF00001;signature_desc=7tm_1;description=GPCR';
|
|
26
|
-
const result = parseGFF(gff);
|
|
27
|
-
expect(result[0]).toMatchObject({
|
|
28
|
-
Name: 'PF00001',
|
|
29
|
-
signature_desc: '7tm_1',
|
|
30
|
-
description: 'GPCR',
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
test('handles URL-encoded attribute values', () => {
|
|
34
|
-
const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.\tNote=Hello%20World%3B%3D';
|
|
35
|
-
const result = parseGFF(gff);
|
|
36
|
-
expect(result[0]?.Note).toBe('Hello World;=');
|
|
37
|
-
});
|
|
38
|
-
test('skips comment lines', () => {
|
|
39
|
-
const gff = `##gff-version 3
|
|
40
|
-
# This is a comment
|
|
41
|
-
seq1\tSource\ttype\t1\t10\t.\t.\t.\tName=test`;
|
|
42
|
-
const result = parseGFF(gff);
|
|
43
|
-
expect(result).toHaveLength(1);
|
|
44
|
-
expect(result[0]?.seq_id).toBe('seq1');
|
|
45
|
-
});
|
|
46
|
-
test('skips empty lines', () => {
|
|
47
|
-
const gff = `seq1\tSource\ttype\t1\t10\t.\t.\t.\tName=test1
|
|
48
|
-
|
|
49
|
-
seq2\tSource\ttype\t20\t30\t.\t.\t.\tName=test2`;
|
|
50
|
-
const result = parseGFF(gff);
|
|
51
|
-
expect(result).toHaveLength(2);
|
|
52
|
-
});
|
|
53
|
-
test('handles missing attributes column', () => {
|
|
54
|
-
const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.';
|
|
55
|
-
const result = parseGFF(gff);
|
|
56
|
-
expect(result).toHaveLength(1);
|
|
57
|
-
expect(result[0]?.seq_id).toBe('seq1');
|
|
58
|
-
});
|
|
59
|
-
test('handles partial GFF lines gracefully', () => {
|
|
60
|
-
const gff = 'seq1\tSource\ttype';
|
|
61
|
-
const result = parseGFF(gff);
|
|
62
|
-
expect(result).toHaveLength(1);
|
|
63
|
-
expect(result[0]).toMatchObject({
|
|
64
|
-
seq_id: 'seq1',
|
|
65
|
-
source: 'Source',
|
|
66
|
-
type: 'type',
|
|
67
|
-
start: 0,
|
|
68
|
-
end: 0,
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
test('parses numeric score', () => {
|
|
72
|
-
const gff = 'seq1\tSource\ttype\t1\t10\t45.6\t.\t.\tName=test';
|
|
73
|
-
const result = parseGFF(gff);
|
|
74
|
-
expect(result[0]?.score).toBe(45.6);
|
|
75
|
-
});
|
|
76
|
-
test('handles comma-separated values in attributes', () => {
|
|
77
|
-
const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.\tOntology_term=GO:0001,GO:0002';
|
|
78
|
-
const result = parseGFF(gff);
|
|
79
|
-
expect(result[0]?.Ontology_term).toBe('GO:0001 GO:0002');
|
|
80
|
-
});
|
|
81
|
-
test('parses multiple lines', () => {
|
|
82
|
-
const gff = `seq1\tPfam\tprotein_match\t10\t50\t.\t.\t.\tName=PF00001
|
|
83
|
-
seq1\tSMART\tprotein_match\t60\t100\t.\t.\t.\tName=SM00001
|
|
84
|
-
seq2\tPfam\tprotein_match\t5\t40\t.\t.\t.\tName=PF00002`;
|
|
85
|
-
const result = parseGFF(gff);
|
|
86
|
-
expect(result).toHaveLength(3);
|
|
87
|
-
expect(result[0]?.seq_id).toBe('seq1');
|
|
88
|
-
expect(result[1]?.seq_id).toBe('seq1');
|
|
89
|
-
expect(result[2]?.seq_id).toBe('seq2');
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
//# sourceMappingURL=parseGFF.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseGFF.test.js","sourceRoot":"","sources":["../../../src/gff/parseGFF.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './types.ts';
|
|
2
|
-
export { generateNodeIds } from './util.ts';
|
|
3
|
-
export { A3mMSA, ClustalMSA, EmfMSA, FastaMSA, StockholmMSA, getUngappedSequence, parseEmfTree, parseMSA, parseNewick, stockholmSniff, } from './msa/index.ts';
|
|
4
|
-
export type { MSAParserType } from './msa/index.ts';
|
|
5
|
-
export { gffToInterProResponse, gffToInterProResults, interProResponseToGFF, interProToGFF, parseGFF, } from './gff/index.ts';
|
package/dist/src/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// Types
|
|
2
|
-
export * from "./types.js";
|
|
3
|
-
// Utilities
|
|
4
|
-
export { generateNodeIds } from "./util.js";
|
|
5
|
-
// MSA parsers
|
|
6
|
-
export { A3mMSA, ClustalMSA, EmfMSA, FastaMSA, StockholmMSA, getUngappedSequence, parseEmfTree, parseMSA, parseNewick, stockholmSniff, } from "./msa/index.js";
|
|
7
|
-
// GFF parsing
|
|
8
|
-
export { gffToInterProResponse, gffToInterProResults, interProResponseToGFF, interProToGFF, parseGFF, } from "./gff/index.js";
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAA;AAE1B,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,cAAc;AACd,OAAO,EACL,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,gBAAgB,CAAA;AAGvB,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,QAAQ,GACT,MAAM,gBAAgB,CAAA"}
|
package/dist/src/msa/A3mMSA.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { NodeWithIds } from '../types.ts';
|
|
2
|
-
export default class A3mMSA {
|
|
3
|
-
private MSA;
|
|
4
|
-
private orderedNames;
|
|
5
|
-
constructor(text: string);
|
|
6
|
-
/**
|
|
7
|
-
* Detect if text is likely A3M format
|
|
8
|
-
*/
|
|
9
|
-
static sniff(text: string): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Expand A3M format to standard aligned format.
|
|
12
|
-
*
|
|
13
|
-
* In A3M, lowercase characters are insertions that implicitly introduce
|
|
14
|
-
* gaps in sequences that don't have an insert at that position.
|
|
15
|
-
* Gaps (-) following match columns in sequences without inserts align
|
|
16
|
-
* with lowercase inserts in other sequences.
|
|
17
|
-
*/
|
|
18
|
-
private expandA3M;
|
|
19
|
-
getMSA(): {
|
|
20
|
-
seqdata: Record<string, string>;
|
|
21
|
-
};
|
|
22
|
-
getRowData(): undefined;
|
|
23
|
-
getNames(): string[];
|
|
24
|
-
getRow(name: string): string;
|
|
25
|
-
getWidth(): number;
|
|
26
|
-
getStructures(): {};
|
|
27
|
-
get alignmentNames(): never[];
|
|
28
|
-
getHeader(): {};
|
|
29
|
-
getTree(): NodeWithIds;
|
|
30
|
-
get seqConsensus(): undefined;
|
|
31
|
-
get secondaryStructureConsensus(): undefined;
|
|
32
|
-
get tracks(): never[];
|
|
33
|
-
}
|
package/dist/src/msa/A3mMSA.js
DELETED
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A3M Format Parser
|
|
3
|
-
*
|
|
4
|
-
* The A3M format consists of aligned FASTA, in which alignments are shown with:
|
|
5
|
-
* - Inserts as lowercase characters
|
|
6
|
-
* - Matches as uppercase characters
|
|
7
|
-
* - Deletions as '-'
|
|
8
|
-
* - Gaps aligned to inserts as '.'
|
|
9
|
-
*
|
|
10
|
-
* Note that gaps aligned to inserts can be omitted in the A3M format.
|
|
11
|
-
*
|
|
12
|
-
* Example:
|
|
13
|
-
* >query
|
|
14
|
-
* ETESMKTVRIREKIKKFLGDRPRNTAEILEHINSTMRHGTTSQQLGNVLSKDKDIVKVGYIKRSGILSGGYDICEWATRNWVAEHCPEWTE
|
|
15
|
-
* >seq1
|
|
16
|
-
* ----MRTTRLRQKIKKFLNERGeANTTEILEHVNSTMRHGTTPQQLGNVLSKDKDILKVATTKRGGALSGRYEICVWTLRP-----------
|
|
17
|
-
*
|
|
18
|
-
* In the above, 'e' after 'G' in seq1 is a lowercase insert.
|
|
19
|
-
*
|
|
20
|
-
* @see https://yanglab.qd.sdu.edu.cn/trRosetta/msa_format.html
|
|
21
|
-
*/
|
|
22
|
-
// Char code helpers for fast character classification
|
|
23
|
-
const CODE_A = 65; // 'A'
|
|
24
|
-
const CODE_Z = 90; // 'Z'
|
|
25
|
-
const CODE_a = 97; // 'a'
|
|
26
|
-
const CODE_z = 122; // 'z'
|
|
27
|
-
const CODE_DASH = 45; // '-'
|
|
28
|
-
const CODE_DOT = 46; // '.'
|
|
29
|
-
function isLower(code) {
|
|
30
|
-
return code >= CODE_a && code <= CODE_z;
|
|
31
|
-
}
|
|
32
|
-
export default class A3mMSA {
|
|
33
|
-
MSA;
|
|
34
|
-
orderedNames;
|
|
35
|
-
constructor(text) {
|
|
36
|
-
const rawSeqs = [];
|
|
37
|
-
const names = [];
|
|
38
|
-
// First pass: parse sequences (like FASTA), preserving order
|
|
39
|
-
for (const entry of text.split('>')) {
|
|
40
|
-
if (!/\S/.test(entry)) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
const newlineIdx = entry.indexOf('\n');
|
|
44
|
-
if (newlineIdx === -1) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
const defLine = entry.slice(0, newlineIdx);
|
|
48
|
-
const spaceIdx = defLine.indexOf(' ');
|
|
49
|
-
const id = spaceIdx === -1 ? defLine : defLine.slice(0, spaceIdx);
|
|
50
|
-
if (id) {
|
|
51
|
-
rawSeqs.push(entry.slice(newlineIdx + 1).replaceAll(/\s/g, ''));
|
|
52
|
-
names.push(id);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
this.orderedNames = names;
|
|
56
|
-
this.MSA = { seqdata: this.expandA3M(rawSeqs, names) };
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Detect if text is likely A3M format
|
|
60
|
-
*/
|
|
61
|
-
static sniff(text) {
|
|
62
|
-
if (!text.startsWith('>')) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
const seqs = [];
|
|
66
|
-
for (const entry of text.split('>')) {
|
|
67
|
-
if (!/\S/.test(entry)) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
const newlineIdx = entry.indexOf('\n');
|
|
71
|
-
if (newlineIdx === -1) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
const seq = entry.slice(newlineIdx + 1).replaceAll(/\s/g, '');
|
|
75
|
-
if (seq) {
|
|
76
|
-
seqs.push(seq);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (seqs.length < 2) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
// Check for lowercase and compute match column lengths in single pass per sequence
|
|
83
|
-
// In A3M, match columns = uppercase letters + dashes (deletions)
|
|
84
|
-
let hasLowercase = false;
|
|
85
|
-
let firstMatchLen = -1;
|
|
86
|
-
let sameMatchLength = true;
|
|
87
|
-
for (const seq of seqs) {
|
|
88
|
-
let matchLen = 0;
|
|
89
|
-
for (let i = 0; i < seq.length; i++) {
|
|
90
|
-
const code = seq.charCodeAt(i);
|
|
91
|
-
if (isLower(code)) {
|
|
92
|
-
hasLowercase = true;
|
|
93
|
-
}
|
|
94
|
-
else if (code >= CODE_A && code <= CODE_Z || code === CODE_DASH) {
|
|
95
|
-
// Uppercase letters and dashes are match columns
|
|
96
|
-
matchLen++;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (firstMatchLen === -1) {
|
|
100
|
-
firstMatchLen = matchLen;
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
if (matchLen !== firstMatchLen) {
|
|
104
|
-
sameMatchLength = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return hasLowercase && sameMatchLength;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Expand A3M format to standard aligned format.
|
|
112
|
-
*
|
|
113
|
-
* In A3M, lowercase characters are insertions that implicitly introduce
|
|
114
|
-
* gaps in sequences that don't have an insert at that position.
|
|
115
|
-
* Gaps (-) following match columns in sequences without inserts align
|
|
116
|
-
* with lowercase inserts in other sequences.
|
|
117
|
-
*/
|
|
118
|
-
expandA3M(rawSeqs, names) {
|
|
119
|
-
const numSeqs = names.length;
|
|
120
|
-
if (numSeqs === 0) {
|
|
121
|
-
return {};
|
|
122
|
-
}
|
|
123
|
-
// Parse sequences: extract match chars (uppercase only) and insert content
|
|
124
|
-
// For each sequence, track: matchChars, insertContent (after each match)
|
|
125
|
-
const matchChars = [];
|
|
126
|
-
const insertContent = [];
|
|
127
|
-
for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
|
|
128
|
-
const seq = rawSeqs[seqIdx];
|
|
129
|
-
const matches = [];
|
|
130
|
-
const inserts = [];
|
|
131
|
-
let i = 0;
|
|
132
|
-
while (i < seq.length) {
|
|
133
|
-
const code = seq.charCodeAt(i);
|
|
134
|
-
if (code >= CODE_A && code <= CODE_Z || code === CODE_DASH) {
|
|
135
|
-
// Uppercase letter or dash - match column (dash = deletion)
|
|
136
|
-
matches.push(seq[i]);
|
|
137
|
-
// Collect following lowercase/dot characters as insert content
|
|
138
|
-
// Note: dash is NOT insert content, it's a match column
|
|
139
|
-
let ins = '';
|
|
140
|
-
let j = i + 1;
|
|
141
|
-
while (j < seq.length) {
|
|
142
|
-
const c = seq.charCodeAt(j);
|
|
143
|
-
if (isLower(c) || c === CODE_DOT) {
|
|
144
|
-
ins += seq[j];
|
|
145
|
-
j++;
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
inserts.push(ins);
|
|
152
|
-
i = j;
|
|
153
|
-
}
|
|
154
|
-
else if (code === CODE_DOT) {
|
|
155
|
-
// Leading dot (gap aligned to insert) - skip
|
|
156
|
-
i++;
|
|
157
|
-
}
|
|
158
|
-
else if (isLower(code)) {
|
|
159
|
-
// Leading insert before first match
|
|
160
|
-
let ins = '';
|
|
161
|
-
while (i < seq.length && isLower(seq.charCodeAt(i))) {
|
|
162
|
-
ins += seq[i];
|
|
163
|
-
i++;
|
|
164
|
-
}
|
|
165
|
-
// Add empty match with this insert
|
|
166
|
-
matches.push('');
|
|
167
|
-
inserts.push(ins);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
i++;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
matchChars.push(matches);
|
|
174
|
-
insertContent.push(inserts);
|
|
175
|
-
}
|
|
176
|
-
// Find number of match positions (should be same for all valid A3M)
|
|
177
|
-
const numPositions = Math.max(...matchChars.map(m => m.length), 0);
|
|
178
|
-
// Find max insert length at each position (only count lowercase, not gaps)
|
|
179
|
-
const maxInserts = new Array(numPositions).fill(0);
|
|
180
|
-
for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
|
|
181
|
-
const inserts = insertContent[seqIdx];
|
|
182
|
-
for (let pos = 0; pos < inserts.length; pos++) {
|
|
183
|
-
// Count only lowercase characters as actual inserts
|
|
184
|
-
let lcCount = 0;
|
|
185
|
-
for (const c of inserts[pos]) {
|
|
186
|
-
if (isLower(c.charCodeAt(0))) {
|
|
187
|
-
lcCount++;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
if (lcCount > maxInserts[pos]) {
|
|
191
|
-
maxInserts[pos] = lcCount;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
// Build expanded sequences
|
|
196
|
-
const expanded = {};
|
|
197
|
-
for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
|
|
198
|
-
const matches = matchChars[seqIdx];
|
|
199
|
-
const inserts = insertContent[seqIdx];
|
|
200
|
-
const result = [];
|
|
201
|
-
for (let pos = 0; pos < numPositions; pos++) {
|
|
202
|
-
const maxIns = maxInserts[pos];
|
|
203
|
-
if (pos < matches.length) {
|
|
204
|
-
const matchChar = matches[pos];
|
|
205
|
-
const insContent = inserts[pos] || '';
|
|
206
|
-
// Add match character (or gap if empty)
|
|
207
|
-
result.push(matchChar || '-');
|
|
208
|
-
// Process insert content
|
|
209
|
-
let lcContent = '';
|
|
210
|
-
for (const c of insContent) {
|
|
211
|
-
if (isLower(c.charCodeAt(0))) {
|
|
212
|
-
lcContent += c.toUpperCase();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
// Add the insert content (uppercased)
|
|
216
|
-
result.push(lcContent);
|
|
217
|
-
// Pad with gaps to match max insert length
|
|
218
|
-
const padding = maxIns - lcContent.length;
|
|
219
|
-
if (padding > 0) {
|
|
220
|
-
result.push('.'.repeat(padding));
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
// This sequence is shorter - add gaps
|
|
225
|
-
result.push('-');
|
|
226
|
-
if (maxIns > 0) {
|
|
227
|
-
result.push('.'.repeat(maxIns));
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
expanded[names[seqIdx]] = result.join('');
|
|
232
|
-
}
|
|
233
|
-
return expanded;
|
|
234
|
-
}
|
|
235
|
-
getMSA() {
|
|
236
|
-
return this.MSA;
|
|
237
|
-
}
|
|
238
|
-
getRowData() {
|
|
239
|
-
return undefined;
|
|
240
|
-
}
|
|
241
|
-
getNames() {
|
|
242
|
-
return this.orderedNames;
|
|
243
|
-
}
|
|
244
|
-
getRow(name) {
|
|
245
|
-
return this.MSA.seqdata[name] || '';
|
|
246
|
-
}
|
|
247
|
-
getWidth() {
|
|
248
|
-
const name = Object.keys(this.MSA.seqdata)[0];
|
|
249
|
-
return name ? this.getRow(name).length : 0;
|
|
250
|
-
}
|
|
251
|
-
getStructures() {
|
|
252
|
-
return {};
|
|
253
|
-
}
|
|
254
|
-
get alignmentNames() {
|
|
255
|
-
return [];
|
|
256
|
-
}
|
|
257
|
-
getHeader() {
|
|
258
|
-
return {};
|
|
259
|
-
}
|
|
260
|
-
getTree() {
|
|
261
|
-
return {
|
|
262
|
-
id: 'root',
|
|
263
|
-
name: 'root',
|
|
264
|
-
noTree: true,
|
|
265
|
-
children: this.getNames().map(name => ({
|
|
266
|
-
id: name,
|
|
267
|
-
children: [],
|
|
268
|
-
name,
|
|
269
|
-
})),
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
get seqConsensus() {
|
|
273
|
-
return undefined;
|
|
274
|
-
}
|
|
275
|
-
get secondaryStructureConsensus() {
|
|
276
|
-
return undefined;
|
|
277
|
-
}
|
|
278
|
-
get tracks() {
|
|
279
|
-
return [];
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
//# sourceMappingURL=A3mMSA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"A3mMSA.js","sourceRoot":"","sources":["../../../src/msa/A3mMSA.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|