@gmod/gbz-base 1.1.0 → 2.1.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 +136 -26
- package/dist/cli.js +12 -11
- package/dist/cli.js.map +1 -1
- package/dist/db.d.ts +18 -9
- package/dist/db.js +100 -4
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pathName.d.ts +17 -0
- package/dist/pathName.js +33 -0
- package/dist/pathName.js.map +1 -0
- package/dist/query.d.ts +8 -10
- package/dist/query.js +7 -19
- package/dist/query.js.map +1 -1
- package/dist/sqlite/btree.d.ts +2 -0
- package/dist/sqlite/btree.js +48 -18
- package/dist/sqlite/btree.js.map +1 -1
- package/dist/subgraph.d.ts +28 -13
- package/dist/subgraph.js +91 -37
- package/dist/subgraph.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +19 -13
- package/src/db.ts +160 -13
- package/src/index.ts +12 -10
- package/src/pathName.ts +54 -0
- package/src/query.ts +17 -32
- package/src/sqlite/btree.ts +61 -17
- package/src/subgraph.ts +117 -52
- package/tools/haplotype-index/src/main.rs +33 -16
package/dist/query.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { Subgraph } from './subgraph.ts';
|
|
2
2
|
import type { GBZBase } from './db.ts';
|
|
3
|
+
import type { PathQuery } from './pathName.ts';
|
|
3
4
|
import type { HaplotypeOutput, SnarlOutput } from './subgraph.ts';
|
|
5
|
+
export type { PathQuery } from './pathName.ts';
|
|
4
6
|
export interface QueryOptions {
|
|
5
|
-
context?: number;
|
|
6
|
-
haplotypes?: HaplotypeOutput;
|
|
7
|
-
snarls?: SnarlOutput;
|
|
8
|
-
limit?: number;
|
|
9
|
-
|
|
10
|
-
export interface PathQuery {
|
|
11
|
-
sample?: string;
|
|
12
|
-
contig: string;
|
|
13
|
-
haplotype?: number;
|
|
7
|
+
context?: number | undefined;
|
|
8
|
+
haplotypes?: HaplotypeOutput | undefined;
|
|
9
|
+
snarls?: SnarlOutput | undefined;
|
|
10
|
+
limit?: number | undefined;
|
|
11
|
+
signal?: AbortSignal | undefined;
|
|
14
12
|
}
|
|
15
13
|
export declare function subgraphAtOffset(db: GBZBase, query: PathQuery, offset: number, opts?: QueryOptions): Promise<Subgraph>;
|
|
16
14
|
export declare function subgraphInInterval(db: GBZBase, query: PathQuery, start: number, end: number, opts?: QueryOptions): Promise<Subgraph>;
|
|
17
15
|
export declare function subgraphAroundNodes(db: GBZBase, nodes: number[], opts?: QueryOptions): Promise<Subgraph>;
|
|
18
|
-
export declare function subgraphBetween(db: GBZBase, start: number, end: number, opts?: Pick<QueryOptions, 'haplotypes' | 'limit'>): Promise<Subgraph>;
|
|
16
|
+
export declare function subgraphBetween(db: GBZBase, start: number, end: number, opts?: Pick<QueryOptions, 'haplotypes' | 'limit' | 'signal'>): Promise<Subgraph>;
|
package/dist/query.js
CHANGED
|
@@ -1,26 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pathNameFor } from "./pathName.js";
|
|
2
2
|
import { Subgraph } from "./subgraph.js";
|
|
3
|
-
function pathName(query, fragment) {
|
|
4
|
-
return {
|
|
5
|
-
sample: query.sample ?? GENERIC_SAMPLE,
|
|
6
|
-
contig: query.contig,
|
|
7
|
-
haplotype: query.haplotype ?? 0,
|
|
8
|
-
fragment,
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
3
|
export async function subgraphAtOffset(db, query, offset, opts = {}) {
|
|
12
|
-
const subgraph = new Subgraph(db);
|
|
13
|
-
|
|
14
|
-
const reference = await subgraph.pathPosition(pathName(query, offset));
|
|
4
|
+
const subgraph = new Subgraph(db, opts);
|
|
5
|
+
const reference = await subgraph.pathPosition(pathNameFor(query, offset));
|
|
15
6
|
await subgraph.aroundPosition(reference.position.handle, reference.position.nodeOffset, opts.context ?? 100);
|
|
16
7
|
await subgraph.extractSnarls(opts.snarls ?? 'none');
|
|
17
8
|
subgraph.extractPaths(reference, opts.haplotypes ?? 'all');
|
|
18
9
|
return subgraph;
|
|
19
10
|
}
|
|
20
11
|
export async function subgraphInInterval(db, query, start, end, opts = {}) {
|
|
21
|
-
const subgraph = new Subgraph(db);
|
|
22
|
-
|
|
23
|
-
const reference = await subgraph.pathPosition(pathName(query, start));
|
|
12
|
+
const subgraph = new Subgraph(db, opts);
|
|
13
|
+
const reference = await subgraph.pathPosition(pathNameFor(query, start));
|
|
24
14
|
await subgraph.aroundInterval(reference.position, end - start, opts.context ?? 100);
|
|
25
15
|
await subgraph.extractSnarls(opts.snarls ?? 'none');
|
|
26
16
|
subgraph.extractPaths(reference, opts.haplotypes ?? 'all');
|
|
@@ -35,8 +25,7 @@ export async function subgraphAroundNodes(db, nodes, opts = {}) {
|
|
|
35
25
|
if (snarls === 'overlapping' && nodes.length > 1) {
|
|
36
26
|
throw new Error('Overlapping snarls cannot be extracted for a node-based query with multiple nodes');
|
|
37
27
|
}
|
|
38
|
-
const subgraph = new Subgraph(db);
|
|
39
|
-
subgraph.limit = opts.limit;
|
|
28
|
+
const subgraph = new Subgraph(db, opts);
|
|
40
29
|
await subgraph.aroundNodes(nodes, opts.context ?? 100);
|
|
41
30
|
await subgraph.extractSnarls(snarls);
|
|
42
31
|
subgraph.extractPaths(undefined, haplotypes);
|
|
@@ -47,8 +36,7 @@ export async function subgraphBetween(db, start, end, opts = {}) {
|
|
|
47
36
|
if (haplotypes === 'reference-only') {
|
|
48
37
|
throw new Error('Cannot output a reference path in a node-based query');
|
|
49
38
|
}
|
|
50
|
-
const subgraph = new Subgraph(db);
|
|
51
|
-
subgraph.limit = opts.limit;
|
|
39
|
+
const subgraph = new Subgraph(db, opts);
|
|
52
40
|
await subgraph.betweenNodes(start, end);
|
|
53
41
|
subgraph.extractPaths(undefined, haplotypes);
|
|
54
42
|
return subgraph;
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlite/btree.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { SqlValue } from './record.ts';
|
|
|
3
3
|
export declare class BTree {
|
|
4
4
|
private readonly usable;
|
|
5
5
|
private pager;
|
|
6
|
+
private decodedIndexPages;
|
|
6
7
|
constructor(pager: Pager, reservedBytes: number);
|
|
7
8
|
private localPayloadSize;
|
|
8
9
|
private payload;
|
|
@@ -12,6 +13,7 @@ export declare class BTree {
|
|
|
12
13
|
rowid: number;
|
|
13
14
|
values: SqlValue[];
|
|
14
15
|
}>;
|
|
16
|
+
private decodedCells;
|
|
15
17
|
private indexCell;
|
|
16
18
|
indexScanFrom(root: number, low: number[]): AsyncGenerator<SqlValue[]>;
|
|
17
19
|
indexSeekLE(root: number, key: number[]): Promise<SqlValue[] | undefined>;
|
package/dist/sqlite/btree.js
CHANGED
|
@@ -3,8 +3,16 @@ const INTERIOR_INDEX = 0x02;
|
|
|
3
3
|
const INTERIOR_TABLE = 0x05;
|
|
4
4
|
const LEAF_INDEX = 0x0a;
|
|
5
5
|
const LEAF_TABLE = 0x0d;
|
|
6
|
+
function readUint16(page, offset) {
|
|
7
|
+
return page[offset] * 256 + page[offset + 1];
|
|
8
|
+
}
|
|
9
|
+
function readUint32(page, offset) {
|
|
10
|
+
return (page[offset] * 16777216 +
|
|
11
|
+
page[offset + 1] * 65536 +
|
|
12
|
+
page[offset + 2] * 256 +
|
|
13
|
+
page[offset + 3]);
|
|
14
|
+
}
|
|
6
15
|
function readHeader(page, start) {
|
|
7
|
-
const view = new DataView(page.buffer, page.byteOffset, page.byteLength);
|
|
8
16
|
const type = page[start];
|
|
9
17
|
if (type !== INTERIOR_INDEX &&
|
|
10
18
|
type !== INTERIOR_TABLE &&
|
|
@@ -15,22 +23,19 @@ function readHeader(page, start) {
|
|
|
15
23
|
const interior = type === INTERIOR_INDEX || type === INTERIOR_TABLE;
|
|
16
24
|
return {
|
|
17
25
|
type,
|
|
18
|
-
cellCount:
|
|
19
|
-
rightChild: interior ?
|
|
26
|
+
cellCount: readUint16(page, start + 3),
|
|
27
|
+
rightChild: interior ? readUint32(page, start + 8) : 0,
|
|
20
28
|
cellPointers: start + (interior ? 12 : 8),
|
|
21
29
|
};
|
|
22
30
|
}
|
|
23
31
|
function cellOffset(page, header, index) {
|
|
24
|
-
|
|
25
|
-
return view.getUint16(header.cellPointers + 2 * index);
|
|
26
|
-
}
|
|
27
|
-
function readUint32(page, offset) {
|
|
28
|
-
const view = new DataView(page.buffer, page.byteOffset, page.byteLength);
|
|
29
|
-
return view.getUint32(offset);
|
|
32
|
+
return readUint16(page, header.cellPointers + 2 * index);
|
|
30
33
|
}
|
|
34
|
+
const MAX_DECODED_INDEX_PAGES = 4096;
|
|
31
35
|
export class BTree {
|
|
32
36
|
usable;
|
|
33
37
|
pager;
|
|
38
|
+
decodedIndexPages = new Map();
|
|
34
39
|
constructor(pager, reservedBytes) {
|
|
35
40
|
this.pager = pager;
|
|
36
41
|
this.usable = pager.pageSize - reservedBytes;
|
|
@@ -143,12 +148,37 @@ export class BTree {
|
|
|
143
148
|
}
|
|
144
149
|
}
|
|
145
150
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
decodedCells(pageNumber, header) {
|
|
152
|
+
let cells = this.decodedIndexPages.get(pageNumber);
|
|
153
|
+
if (cells) {
|
|
154
|
+
this.decodedIndexPages.delete(pageNumber);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
cells = new Array(header.cellCount);
|
|
158
|
+
if (this.decodedIndexPages.size >= MAX_DECODED_INDEX_PAGES) {
|
|
159
|
+
const oldest = this.decodedIndexPages.keys().next().value;
|
|
160
|
+
if (oldest !== undefined) {
|
|
161
|
+
this.decodedIndexPages.delete(oldest);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
this.decodedIndexPages.set(pageNumber, cells);
|
|
166
|
+
return cells;
|
|
167
|
+
}
|
|
168
|
+
async indexCell(pageNumber, page, header, index) {
|
|
169
|
+
const cells = this.decodedCells(pageNumber, header);
|
|
170
|
+
let cell = cells[index];
|
|
171
|
+
if (!cell) {
|
|
172
|
+
const offset = cellOffset(page, header, index);
|
|
173
|
+
const interior = header.type === INTERIOR_INDEX;
|
|
174
|
+
const [size, afterSize] = readVarint(page, interior ? offset + 4 : offset);
|
|
175
|
+
cell = {
|
|
176
|
+
values: decodeRecord(await this.payload(page, afterSize, size, true)),
|
|
177
|
+
leftChild: interior ? readUint32(page, offset) : 0,
|
|
178
|
+
};
|
|
179
|
+
cells[index] = cell;
|
|
180
|
+
}
|
|
181
|
+
return cell;
|
|
152
182
|
}
|
|
153
183
|
async *indexScanFrom(root, low) {
|
|
154
184
|
const { page, header } = await this.pageAt(root);
|
|
@@ -156,7 +186,7 @@ export class BTree {
|
|
|
156
186
|
let high = header.cellCount;
|
|
157
187
|
while (first < high) {
|
|
158
188
|
const mid = (first + high) >> 1;
|
|
159
|
-
const cell = await this.indexCell(page, header, mid);
|
|
189
|
+
const cell = await this.indexCell(root, page, header, mid);
|
|
160
190
|
if (compareKey(cell.values, low) < 0) {
|
|
161
191
|
first = mid + 1;
|
|
162
192
|
}
|
|
@@ -165,7 +195,7 @@ export class BTree {
|
|
|
165
195
|
}
|
|
166
196
|
}
|
|
167
197
|
for (let i = first; i < header.cellCount; i++) {
|
|
168
|
-
const cell = await this.indexCell(page, header, i);
|
|
198
|
+
const cell = await this.indexCell(root, page, header, i);
|
|
169
199
|
if (header.type === INTERIOR_INDEX) {
|
|
170
200
|
yield* this.indexScanFrom(cell.leftChild, low);
|
|
171
201
|
}
|
|
@@ -185,7 +215,7 @@ export class BTree {
|
|
|
185
215
|
let child = 0;
|
|
186
216
|
while (low < high) {
|
|
187
217
|
const mid = (low + high) >> 1;
|
|
188
|
-
const cell = await this.indexCell(page, header, mid);
|
|
218
|
+
const cell = await this.indexCell(pageNumber, page, header, mid);
|
|
189
219
|
if (compareKey(cell.values, key) <= 0) {
|
|
190
220
|
best = cell.values;
|
|
191
221
|
low = mid + 1;
|
package/dist/sqlite/btree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"btree.js","sourceRoot":"","sources":["../../src/sqlite/btree.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"btree.js","sourceRoot":"","sources":["../../src/sqlite/btree.ts"],"names":[],"mappings":"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"}
|
package/dist/subgraph.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { GBZBase
|
|
1
|
+
import type { GBZBase } from './db.ts';
|
|
2
2
|
import type { Orientation } from './gbwt/node.ts';
|
|
3
3
|
import type { Pos } from './gbwt/record.ts';
|
|
4
|
+
import type { PathName } from './pathName.ts';
|
|
4
5
|
export type HaplotypeOutput = 'all' | 'distinct' | 'reference-only' | 'none';
|
|
5
6
|
export type SnarlOutput = 'none' | 'contained' | 'overlapping';
|
|
6
7
|
export interface PathPosition {
|
|
@@ -43,12 +44,8 @@ export interface SubgraphJson {
|
|
|
43
44
|
}[];
|
|
44
45
|
paths: SubgraphPath[];
|
|
45
46
|
}
|
|
46
|
-
export interface
|
|
47
|
-
pathHandle: number | undefined;
|
|
48
|
-
name: PathName | undefined;
|
|
47
|
+
export interface AlignmentSpan {
|
|
49
48
|
strand: '+' | '-';
|
|
50
|
-
hapStart: number | undefined;
|
|
51
|
-
hapEnd: number | undefined;
|
|
52
49
|
refStart: number;
|
|
53
50
|
refEnd: number;
|
|
54
51
|
cigar: string;
|
|
@@ -56,8 +53,23 @@ export interface HaplotypeAlignment {
|
|
|
56
53
|
path: number[];
|
|
57
54
|
start: Pos;
|
|
58
55
|
}
|
|
59
|
-
export
|
|
60
|
-
|
|
56
|
+
export type HaplotypeAlignment = AlignmentSpan & ({
|
|
57
|
+
resolved: true;
|
|
58
|
+
name: PathName;
|
|
59
|
+
label: string;
|
|
60
|
+
pathHandle: number;
|
|
61
|
+
hapStart: number;
|
|
62
|
+
hapEnd: number;
|
|
63
|
+
} | {
|
|
64
|
+
resolved: false;
|
|
65
|
+
});
|
|
66
|
+
export interface SubgraphOutputOptions {
|
|
67
|
+
cigar?: boolean | undefined;
|
|
68
|
+
names?: 'anonymous' | 'resolved' | undefined;
|
|
69
|
+
}
|
|
70
|
+
export interface SubgraphOptions {
|
|
71
|
+
limit?: number | undefined;
|
|
72
|
+
signal?: AbortSignal | undefined;
|
|
61
73
|
}
|
|
62
74
|
export declare class Subgraph {
|
|
63
75
|
private records;
|
|
@@ -68,7 +80,6 @@ export declare class Subgraph {
|
|
|
68
80
|
private refInterval;
|
|
69
81
|
private refIndexCache;
|
|
70
82
|
private refPrefixCache;
|
|
71
|
-
limit: number | undefined;
|
|
72
83
|
readonly stats: {
|
|
73
84
|
orderedAlignments: number;
|
|
74
85
|
lcsAlignments: number;
|
|
@@ -76,7 +87,9 @@ export declare class Subgraph {
|
|
|
76
87
|
identificationFetches: number;
|
|
77
88
|
};
|
|
78
89
|
private db;
|
|
79
|
-
|
|
90
|
+
private readonly limit;
|
|
91
|
+
private readonly signal;
|
|
92
|
+
constructor(db: GBZBase, opts?: SubgraphOptions);
|
|
80
93
|
get nodeCount(): number;
|
|
81
94
|
get pathCount(): number;
|
|
82
95
|
get referenceInterval(): {
|
|
@@ -122,11 +135,13 @@ export declare class Subgraph {
|
|
|
122
135
|
private prefixMatches;
|
|
123
136
|
private suffixMatches;
|
|
124
137
|
private align;
|
|
125
|
-
private
|
|
138
|
+
private sharedWeight;
|
|
139
|
+
private editsAgainst;
|
|
140
|
+
private alignment;
|
|
126
141
|
alignToRef(pathIndex: number): string | undefined;
|
|
127
142
|
alignments(): HaplotypeAlignment[];
|
|
128
143
|
private canonicalEdges;
|
|
129
144
|
stableName(): Promise<string>;
|
|
130
|
-
toGFA(
|
|
131
|
-
|
|
145
|
+
toGFA(opts?: SubgraphOutputOptions): Promise<string>;
|
|
146
|
+
toSubgraphJson(opts?: SubgraphOutputOptions): SubgraphJson;
|
|
132
147
|
}
|
package/dist/subgraph.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { formatPathName } from "./db.js";
|
|
2
1
|
import { ENDMARKER, edgeIsCanonical, encodeNode, entryOrientation, entrySide, exitOrientation, exitSide, flipNode, flipSide, isReverse, nodeId, nodeOrientation, pathIsCanonical, } from "./gbwt/node.js";
|
|
3
2
|
import { gfaHeaderLines, sha256Hex, subgraphName } from "./graphName.js";
|
|
4
3
|
import { weightedLcs } from "./lcs.js";
|
|
4
|
+
import { formatPathName } from "./pathName.js";
|
|
5
5
|
function sideBefore(a, b) {
|
|
6
6
|
return (a[0] < b[0] ||
|
|
7
7
|
(a[0] === b[0] && (a[1] < b[1] || (a[1] === b[1] && a[2] < b[2]))));
|
|
@@ -67,7 +67,6 @@ export class Subgraph {
|
|
|
67
67
|
refInterval;
|
|
68
68
|
refIndexCache;
|
|
69
69
|
refPrefixCache;
|
|
70
|
-
limit;
|
|
71
70
|
stats = {
|
|
72
71
|
orderedAlignments: 0,
|
|
73
72
|
lcsAlignments: 0,
|
|
@@ -75,8 +74,12 @@ export class Subgraph {
|
|
|
75
74
|
identificationFetches: 0,
|
|
76
75
|
};
|
|
77
76
|
db;
|
|
78
|
-
|
|
77
|
+
limit;
|
|
78
|
+
signal;
|
|
79
|
+
constructor(db, opts = {}) {
|
|
79
80
|
this.db = db;
|
|
81
|
+
this.limit = opts.limit;
|
|
82
|
+
this.signal = opts.signal;
|
|
80
83
|
}
|
|
81
84
|
get nodeCount() {
|
|
82
85
|
return this.records.size / 2;
|
|
@@ -110,6 +113,7 @@ export class Subgraph {
|
|
|
110
113
|
return [...this.records.keys()].sort((a, b) => a - b);
|
|
111
114
|
}
|
|
112
115
|
async addNode(id) {
|
|
116
|
+
this.signal?.throwIfAborted();
|
|
113
117
|
if (this.limit !== undefined && this.nodeCount >= this.limit) {
|
|
114
118
|
throw new Error(`Subgraph size limit of ${this.limit} nodes exceeded`);
|
|
115
119
|
}
|
|
@@ -608,6 +612,7 @@ export class Subgraph {
|
|
|
608
612
|
let current = start;
|
|
609
613
|
let pos;
|
|
610
614
|
while (anchor === undefined) {
|
|
615
|
+
this.signal?.throwIfAborted();
|
|
611
616
|
if (current !== undefined) {
|
|
612
617
|
if (visited.has(current)) {
|
|
613
618
|
break;
|
|
@@ -828,13 +833,18 @@ export class Subgraph {
|
|
|
828
833
|
}
|
|
829
834
|
appendEdit(edits, 'M', suffix);
|
|
830
835
|
}
|
|
831
|
-
|
|
832
|
-
const
|
|
833
|
-
|
|
834
|
-
|
|
836
|
+
sharedWeight(path, ref) {
|
|
837
|
+
const index = this.refIndex(ref);
|
|
838
|
+
let weight = 0;
|
|
839
|
+
for (const handle of path) {
|
|
840
|
+
if (index.has(handle)) {
|
|
841
|
+
weight += this.record(handle).sequenceLen;
|
|
842
|
+
}
|
|
835
843
|
}
|
|
836
|
-
|
|
837
|
-
|
|
844
|
+
return weight;
|
|
845
|
+
}
|
|
846
|
+
editsAgainst(path, ref) {
|
|
847
|
+
const ordered = this.orderedMatches(path, ref);
|
|
838
848
|
if (ordered) {
|
|
839
849
|
this.stats.orderedAlignments += 1;
|
|
840
850
|
}
|
|
@@ -842,22 +852,59 @@ export class Subgraph {
|
|
|
842
852
|
this.stats.lcsAlignments += 1;
|
|
843
853
|
}
|
|
844
854
|
const lcs = ordered ??
|
|
845
|
-
weightedLcs(
|
|
855
|
+
weightedLcs(path, ref, handle => this.record(handle).sequenceLen)[0];
|
|
846
856
|
const edits = [];
|
|
857
|
+
let matched = 0;
|
|
847
858
|
let pathOffset = 0;
|
|
848
859
|
let refOffset = 0;
|
|
849
860
|
for (const [nextPath, nextRef] of lcs) {
|
|
850
|
-
this.align(
|
|
851
|
-
|
|
861
|
+
this.align(path.slice(pathOffset, nextPath), ref.slice(refOffset, nextRef), edits);
|
|
862
|
+
const nodeLen = this.record(path[nextPath]).sequenceLen;
|
|
863
|
+
appendEdit(edits, 'M', nodeLen);
|
|
864
|
+
matched += nodeLen;
|
|
852
865
|
pathOffset = nextPath + 1;
|
|
853
866
|
refOffset = nextRef + 1;
|
|
854
867
|
}
|
|
855
|
-
this.align(
|
|
856
|
-
return edits;
|
|
868
|
+
this.align(path.slice(pathOffset), ref.slice(refOffset), edits);
|
|
869
|
+
return { edits, matched };
|
|
870
|
+
}
|
|
871
|
+
alignment(pathIndex) {
|
|
872
|
+
const info = this.paths[pathIndex];
|
|
873
|
+
if (this.refId === undefined || pathIndex === this.refId || !info) {
|
|
874
|
+
return undefined;
|
|
875
|
+
}
|
|
876
|
+
const ref = this.paths[this.refId].path;
|
|
877
|
+
const flippedPath = pathIsCanonical(ref)
|
|
878
|
+
? []
|
|
879
|
+
: info.path.map(handle => flipNode(handle)).reverse();
|
|
880
|
+
const forwardBound = this.sharedWeight(info.path, ref);
|
|
881
|
+
const flippedBound = this.sharedWeight(flippedPath, ref);
|
|
882
|
+
let result;
|
|
883
|
+
if (flippedBound === 0) {
|
|
884
|
+
result = {
|
|
885
|
+
edits: this.editsAgainst(info.path, ref).edits,
|
|
886
|
+
flipped: false,
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
else if (forwardBound === 0) {
|
|
890
|
+
result = {
|
|
891
|
+
edits: this.editsAgainst(flippedPath, ref).edits,
|
|
892
|
+
flipped: true,
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
|
+
else {
|
|
896
|
+
const forward = this.editsAgainst(info.path, ref);
|
|
897
|
+
const flipped = this.editsAgainst(flippedPath, ref);
|
|
898
|
+
result =
|
|
899
|
+
flipped.matched > forward.matched
|
|
900
|
+
? { edits: flipped.edits, flipped: true }
|
|
901
|
+
: { edits: forward.edits, flipped: false };
|
|
902
|
+
}
|
|
903
|
+
return result;
|
|
857
904
|
}
|
|
858
905
|
alignToRef(pathIndex) {
|
|
859
|
-
return this.
|
|
860
|
-
?.map(([op, len]) => `${len}${op}`)
|
|
906
|
+
return this.alignment(pathIndex)
|
|
907
|
+
?.edits.map(([op, len]) => `${len}${op}`)
|
|
861
908
|
.join('');
|
|
862
909
|
}
|
|
863
910
|
alignments() {
|
|
@@ -872,7 +919,7 @@ export class Subgraph {
|
|
|
872
919
|
if (index === this.refId) {
|
|
873
920
|
return;
|
|
874
921
|
}
|
|
875
|
-
const edits = this.
|
|
922
|
+
const { edits, flipped } = this.alignment(index);
|
|
876
923
|
let first = 0;
|
|
877
924
|
let leading = 0;
|
|
878
925
|
while (first < edits.length && edits[first][0] === 'D') {
|
|
@@ -886,23 +933,11 @@ export class Subgraph {
|
|
|
886
933
|
last -= 1;
|
|
887
934
|
}
|
|
888
935
|
const identity = info.identity;
|
|
889
|
-
const
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
pathHandle: identity?.pathHandle,
|
|
895
|
-
name: identity?.name,
|
|
896
|
-
strand: identity
|
|
897
|
-
? identity.orientation === 'forward'
|
|
898
|
-
? '+'
|
|
899
|
-
: '-'
|
|
900
|
-
: strand,
|
|
901
|
-
hapStart: identity
|
|
902
|
-
? identity.name.fragment + identity.hapStart
|
|
903
|
-
: undefined,
|
|
904
|
-
hapEnd: identity ? identity.name.fragment + identity.hapEnd : undefined,
|
|
905
|
-
start: info.positions[0],
|
|
936
|
+
const alongReference = identity
|
|
937
|
+
? (identity.orientation === 'forward') !== flipped
|
|
938
|
+
: !flipped;
|
|
939
|
+
const span = {
|
|
940
|
+
strand: alongReference ? '+' : '-',
|
|
906
941
|
refStart: reference.start + leading,
|
|
907
942
|
refEnd: reference.start + refTotal - trailing,
|
|
908
943
|
cigar: edits
|
|
@@ -911,7 +946,24 @@ export class Subgraph {
|
|
|
911
946
|
.join(''),
|
|
912
947
|
weight: info.weight,
|
|
913
948
|
path: info.path,
|
|
914
|
-
|
|
949
|
+
start: info.positions[0],
|
|
950
|
+
};
|
|
951
|
+
if (identity) {
|
|
952
|
+
const hapStart = identity.name.fragment + identity.hapStart;
|
|
953
|
+
const hapEnd = identity.name.fragment + identity.hapEnd;
|
|
954
|
+
result.push({
|
|
955
|
+
...span,
|
|
956
|
+
resolved: true,
|
|
957
|
+
name: identity.name,
|
|
958
|
+
label: formatPathName({ ...identity.name, fragment: hapStart }, hapEnd),
|
|
959
|
+
pathHandle: identity.pathHandle,
|
|
960
|
+
hapStart,
|
|
961
|
+
hapEnd,
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
result.push({ ...span, resolved: false });
|
|
966
|
+
}
|
|
915
967
|
});
|
|
916
968
|
return result;
|
|
917
969
|
}
|
|
@@ -950,7 +1002,8 @@ export class Subgraph {
|
|
|
950
1002
|
}
|
|
951
1003
|
return sha256Hex(chunks);
|
|
952
1004
|
}
|
|
953
|
-
async toGFA(
|
|
1005
|
+
async toGFA(opts = {}) {
|
|
1006
|
+
const cigar = opts.cigar ?? false;
|
|
954
1007
|
const lines = [
|
|
955
1008
|
this.refPath ? `H\tVN:Z:1.1\tRS:Z:${this.refPath.sample}` : 'H\tVN:Z:1.1',
|
|
956
1009
|
...gfaHeaderLines(subgraphName(await this.stableName(), await this.db.graphName())),
|
|
@@ -1000,7 +1053,8 @@ export class Subgraph {
|
|
|
1000
1053
|
});
|
|
1001
1054
|
return `${lines.join('\n')}\n`;
|
|
1002
1055
|
}
|
|
1003
|
-
|
|
1056
|
+
toSubgraphJson(opts = {}) {
|
|
1057
|
+
const cigar = opts.cigar ?? false;
|
|
1004
1058
|
const handles = this.sortedHandles();
|
|
1005
1059
|
const nodes = handles
|
|
1006
1060
|
.filter(handle => !isReverse(handle))
|