@gmod/gbz-base 0.0.1 → 1.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 +45 -4
- package/bin/query.js +3 -1
- package/dist/cli.js +85 -19
- package/dist/cli.js.map +1 -0
- package/dist/db.d.ts +14 -6
- package/dist/db.js +92 -28
- package/dist/db.js.map +1 -0
- package/dist/filehandle.js +1 -0
- package/dist/filehandle.js.map +1 -0
- package/dist/gbwt/bytecode.d.ts +1 -1
- package/dist/gbwt/bytecode.js +7 -3
- package/dist/gbwt/bytecode.js.map +1 -0
- package/dist/gbwt/node.js +7 -2
- package/dist/gbwt/node.js.map +1 -0
- package/dist/gbwt/record.d.ts +4 -0
- package/dist/gbwt/record.js +30 -2
- package/dist/gbwt/record.js.map +1 -0
- package/dist/gbwt/sequence.js +8 -1
- package/dist/gbwt/sequence.js.map +1 -0
- package/dist/graphName.d.ts +9 -0
- package/dist/graphName.js +83 -0
- package/dist/graphName.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -0
- package/dist/lcs.js +32 -10
- package/dist/lcs.js.map +1 -0
- package/dist/query.d.ts +4 -2
- package/dist/query.js +19 -0
- package/dist/query.js.map +1 -0
- package/dist/sqlite/btree.d.ts +1 -1
- package/dist/sqlite/btree.js +24 -7
- package/dist/sqlite/btree.js.map +1 -0
- package/dist/sqlite/database.d.ts +1 -1
- package/dist/sqlite/database.js +12 -2
- package/dist/sqlite/database.js.map +1 -0
- package/dist/sqlite/pager.d.ts +8 -3
- package/dist/sqlite/pager.js +71 -12
- package/dist/sqlite/pager.js.map +1 -0
- package/dist/sqlite/record.js +3 -1
- package/dist/sqlite/record.js.map +1 -0
- package/dist/subgraph.d.ts +12 -2
- package/dist/subgraph.js +413 -84
- package/dist/subgraph.js.map +1 -0
- package/package.json +36 -11
- package/src/cli.ts +258 -0
- package/src/db.ts +374 -0
- package/src/filehandle.ts +4 -0
- package/src/gbwt/bytecode.ts +87 -0
- package/src/gbwt/node.ts +64 -0
- package/src/gbwt/record.ts +177 -0
- package/src/gbwt/sequence.ts +50 -0
- package/src/graphName.ts +94 -0
- package/src/index.ts +34 -0
- package/src/lcs.ts +282 -0
- package/src/query.ts +106 -0
- package/src/sqlite/btree.ts +260 -0
- package/src/sqlite/database.ts +117 -0
- package/src/sqlite/pager.ts +148 -0
- package/src/sqlite/record.ts +100 -0
- package/src/subgraph.ts +1353 -0
- package/tools/haplotype-index/src/main.rs +197 -163
package/README.md
CHANGED
|
@@ -50,6 +50,27 @@ gbz-base-query https://host/graph.gbz.db --contig chrM --offset 1000 --context 5
|
|
|
50
50
|
`--stats` reports how many range requests a query made and how many bytes they
|
|
51
51
|
carried.
|
|
52
52
|
|
|
53
|
+
## Snarls
|
|
54
|
+
|
|
55
|
+
A `.gbz.db` built by upstream `gbz-base construct` stores the top-level chains
|
|
56
|
+
of the snarl decomposition as `next` links on the boundary node records (the
|
|
57
|
+
`chains` and `chain_links` tags say how many). The query functions take a
|
|
58
|
+
`snarls` option that uses them the way upstream's `--snarls` and
|
|
59
|
+
`--extend-snarls` do:
|
|
60
|
+
|
|
61
|
+
- `contained` adds every top-level snarl whose two boundary nodes are both in
|
|
62
|
+
the subgraph. With `context: 0` an interval query returns only the reference
|
|
63
|
+
walk, and this is what brings the variation back without a bp radius.
|
|
64
|
+
- `overlapping` also follows a boundary node whose partner lies outside the
|
|
65
|
+
subgraph, and, when the subgraph holds no chain link at all, walks out to the
|
|
66
|
+
snarl containing it. The subgraph must be connected, so a node query may give
|
|
67
|
+
only one node. A snarl can be far larger than the window (a large deletion, a
|
|
68
|
+
centromere), so set `limit` when using this mode.
|
|
69
|
+
|
|
70
|
+
`subgraphBetween(db, start, end)` is upstream's `--between`: everything between
|
|
71
|
+
two oriented boundary handles of one chain, with no context. On the command line
|
|
72
|
+
these are `--snarls`, `--extend-snarls` and `--between 129+:160+`.
|
|
73
|
+
|
|
53
74
|
## Naming haplotypes
|
|
54
75
|
|
|
55
76
|
Upstream gbz-base cannot say which haplotype a subgraph path belongs to, so it
|
|
@@ -62,9 +83,29 @@ cd tools/haplotype-index && cargo build --release
|
|
|
62
83
|
./target/release/gbz-haplotype-index --interval 4096 --from-db graph.gbz.db
|
|
63
84
|
```
|
|
64
85
|
|
|
65
|
-
The second form walks the paths through the database's own node records, so
|
|
66
|
-
|
|
67
|
-
|
|
86
|
+
The second form walks the paths through the database's own node records, so a
|
|
87
|
+
database whose GBZ is no longer at hand can still be augmented; the two forms
|
|
88
|
+
write identical tables. Walking a GBZ uses every core (`--threads`).
|
|
89
|
+
|
|
90
|
+
With `--output index.db` the tool writes the same tables into a standalone
|
|
91
|
+
companion database instead, and the reader opens the two side by side:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
./target/release/gbz-haplotype-index --interval 16384 --output graph.haplotype-index.db graph.gbz
|
|
95
|
+
gbz-base-query https://host/graph.gbz.db --haplotype-index https://host/graph.haplotype-index.db ...
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
const db = await GBZBase.open(new RemoteFile(graphUrl), {
|
|
100
|
+
haplotypeIndex: new RemoteFile(indexUrl),
|
|
101
|
+
})
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
This is how a database someone else publishes gets haplotype names without
|
|
105
|
+
anyone rehosting it: HPRC publishes `hprc-v2.1-mc-grch38.gbz.db` (10 GB) beside
|
|
106
|
+
its graphs, and the companion for it is built from the 5 GB GBZ. The companion
|
|
107
|
+
records the graph's path count and the reader refuses one built for a different
|
|
108
|
+
graph.
|
|
68
109
|
|
|
69
110
|
`HaplotypeSamples` holds one GBWT position every `--interval` bp along every
|
|
70
111
|
path in both orientations, with the path handle and the forward coordinate of
|
|
@@ -92,7 +133,7 @@ The test suite requires this library's output to be deep equal to every one of
|
|
|
92
133
|
them, CIGAR strings included. `generate.sh` regenerates the oracle with an
|
|
93
134
|
upstream binary.
|
|
94
135
|
|
|
95
|
-
Not ported:
|
|
136
|
+
Not ported: GAF-base.
|
|
96
137
|
|
|
97
138
|
CIGARs are computed by matching each shared node to its earliest usable
|
|
98
139
|
occurrence on the reference walk, which is weight-optimal whenever every shared
|
package/bin/query.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { main } from '../dist/cli.js'
|
|
3
3
|
|
|
4
4
|
main(process.argv.slice(2)).catch(error => {
|
|
5
|
-
process.stderr.write(
|
|
5
|
+
process.stderr.write(
|
|
6
|
+
`${error instanceof Error ? error.message : String(error)}\n`,
|
|
7
|
+
)
|
|
6
8
|
process.exit(1)
|
|
7
9
|
})
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LocalFile, RemoteFile } from 'generic-filehandle2';
|
|
2
2
|
import { GBZBase, formatPathName } from "./db.js";
|
|
3
|
-
import {
|
|
3
|
+
import { encodeNode } from "./gbwt/node.js";
|
|
4
|
+
import { subgraphAroundNodes, subgraphAtOffset, subgraphBetween, subgraphInInterval, } from "./query.js";
|
|
4
5
|
const USAGE = `Usage: gbz-base-query [options] graph.gbz.db
|
|
5
6
|
|
|
6
7
|
--sample STR sample name (default: generic path)
|
|
@@ -9,23 +10,38 @@ const USAGE = `Usage: gbz-base-query [options] graph.gbz.db
|
|
|
9
10
|
-o, --offset INT sequence offset
|
|
10
11
|
-i, --interval A..B half-open sequence interval
|
|
11
12
|
-n, --node INT node identifier (may repeat)
|
|
13
|
+
-b, --between A:B subgraph between two chain boundary handles, each INT[+-]
|
|
12
14
|
--context INT context length in bp (default: 100)
|
|
15
|
+
--snarls extend the subgraph with contained top-level snarls
|
|
16
|
+
--extend-snarls extend the subgraph with overlapping top-level snarls
|
|
13
17
|
--limit INT safety limit for the number of nodes
|
|
14
18
|
--haplotypes SEL all, distinct, reference-only or none (default: all)
|
|
15
19
|
--cigar output CIGAR strings for the haplotypes
|
|
20
|
+
--format FMT json (default) or gfa
|
|
16
21
|
--resolve name haplotypes from the HaplotypeSamples table
|
|
17
22
|
--alignments print one alignment record per haplotype fragment instead of the subgraph
|
|
23
|
+
--haplotype-index F companion database written by gbz-haplotype-index --output
|
|
18
24
|
--block-size INT bytes fetched per range request (default: 65536)
|
|
19
25
|
--stats print fetch statistics to stderr
|
|
20
26
|
`;
|
|
27
|
+
function parseHandle(text) {
|
|
28
|
+
const orientation = text.endsWith('-') ? 'reverse' : 'forward';
|
|
29
|
+
const digits = /[+-]$/.test(text) ? text.slice(0, -1) : text;
|
|
30
|
+
if (!/^\d+$/.test(digits)) {
|
|
31
|
+
throw new Error(`Failed to parse oriented node ${text}`);
|
|
32
|
+
}
|
|
33
|
+
return encodeNode(Number(digits), orientation);
|
|
34
|
+
}
|
|
21
35
|
function parseArgs(argv) {
|
|
22
36
|
const args = {
|
|
23
37
|
file: '',
|
|
24
38
|
haplotype: 0,
|
|
25
39
|
nodes: [],
|
|
26
40
|
context: 100,
|
|
41
|
+
snarls: 'none',
|
|
27
42
|
haplotypes: 'all',
|
|
28
43
|
cigar: false,
|
|
44
|
+
format: 'json',
|
|
29
45
|
resolve: false,
|
|
30
46
|
alignments: false,
|
|
31
47
|
blockSize: 65536,
|
|
@@ -64,9 +80,25 @@ function parseArgs(argv) {
|
|
|
64
80
|
case '--node':
|
|
65
81
|
args.nodes.push(Number(next(i++)));
|
|
66
82
|
break;
|
|
83
|
+
case '-b':
|
|
84
|
+
case '--between': {
|
|
85
|
+
const [a, b, extra] = next(i++).split(':');
|
|
86
|
+
if (a === undefined || b === undefined || extra !== undefined) {
|
|
87
|
+
throw new Error(`--between needs two oriented nodes, like 14+:17-`);
|
|
88
|
+
}
|
|
89
|
+
args.between = [parseHandle(a), parseHandle(b)];
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
67
92
|
case '--context':
|
|
68
93
|
args.context = Number(next(i++));
|
|
69
94
|
break;
|
|
95
|
+
case '--snarls':
|
|
96
|
+
args.snarls =
|
|
97
|
+
args.snarls === 'overlapping' ? 'overlapping' : 'contained';
|
|
98
|
+
break;
|
|
99
|
+
case '--extend-snarls':
|
|
100
|
+
args.snarls = 'overlapping';
|
|
101
|
+
break;
|
|
70
102
|
case '--limit':
|
|
71
103
|
args.limit = Number(next(i++));
|
|
72
104
|
break;
|
|
@@ -86,12 +118,20 @@ function parseArgs(argv) {
|
|
|
86
118
|
case '--block-size':
|
|
87
119
|
args.blockSize = Number(next(i++));
|
|
88
120
|
break;
|
|
121
|
+
case '--haplotype-index':
|
|
122
|
+
args.haplotypeIndex = next(i++);
|
|
123
|
+
break;
|
|
89
124
|
case '--stats':
|
|
90
125
|
args.stats = true;
|
|
91
126
|
break;
|
|
92
|
-
case '--format':
|
|
93
|
-
next(i++);
|
|
127
|
+
case '--format': {
|
|
128
|
+
const format = next(i++);
|
|
129
|
+
if (format !== 'json' && format !== 'gfa') {
|
|
130
|
+
throw new Error(`Unknown output format ${format}`);
|
|
131
|
+
}
|
|
132
|
+
args.format = format;
|
|
94
133
|
break;
|
|
134
|
+
}
|
|
95
135
|
case '-h':
|
|
96
136
|
case '--help':
|
|
97
137
|
process.stdout.write(USAGE);
|
|
@@ -111,30 +151,56 @@ function parseArgs(argv) {
|
|
|
111
151
|
}
|
|
112
152
|
export async function main(argv) {
|
|
113
153
|
const args = parseArgs(argv);
|
|
114
|
-
const
|
|
115
|
-
const db = await GBZBase.open(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
154
|
+
const open = (file) => /^https?:\/\//.test(file) ? new RemoteFile(file) : new LocalFile(file);
|
|
155
|
+
const db = await GBZBase.open(open(args.file), {
|
|
156
|
+
blockSize: args.blockSize,
|
|
157
|
+
...(args.haplotypeIndex === undefined
|
|
158
|
+
? {}
|
|
159
|
+
: { haplotypeIndex: open(args.haplotypeIndex) }),
|
|
160
|
+
});
|
|
161
|
+
const opts = {
|
|
162
|
+
context: args.context,
|
|
163
|
+
haplotypes: args.haplotypes,
|
|
164
|
+
snarls: args.snarls,
|
|
165
|
+
...(args.limit === undefined ? {} : { limit: args.limit }),
|
|
166
|
+
};
|
|
167
|
+
const query = {
|
|
168
|
+
contig: args.contig ?? '',
|
|
169
|
+
haplotype: args.haplotype,
|
|
170
|
+
...(args.sample === undefined ? {} : { sample: args.sample }),
|
|
171
|
+
};
|
|
172
|
+
const subgraph = args.between
|
|
173
|
+
? await subgraphBetween(db, args.between[0], args.between[1], opts)
|
|
174
|
+
: args.nodes.length > 0
|
|
175
|
+
? await subgraphAroundNodes(db, args.nodes, opts)
|
|
176
|
+
: args.interval
|
|
177
|
+
? await subgraphInInterval(db, query, args.interval[0], args.interval[1], opts)
|
|
178
|
+
: args.offset !== undefined
|
|
179
|
+
? await subgraphAtOffset(db, query, args.offset, opts)
|
|
180
|
+
: undefined;
|
|
125
181
|
if (!subgraph) {
|
|
126
|
-
throw new Error('Query type must be specified using --offset, --interval or --
|
|
182
|
+
throw new Error('Query type must be specified using --offset, --interval, --node or --between');
|
|
127
183
|
}
|
|
128
184
|
if (args.resolve) {
|
|
129
185
|
await subgraph.identifyPaths();
|
|
130
186
|
}
|
|
187
|
+
const names = args.resolve ? 'resolved' : 'anonymous';
|
|
131
188
|
const output = args.alignments
|
|
132
|
-
? subgraph.alignments().map(a => ({
|
|
133
|
-
|
|
134
|
-
|
|
189
|
+
? subgraph.alignments().map(a => ({
|
|
190
|
+
...a,
|
|
191
|
+
name: a.name && a.hapStart !== undefined && a.hapEnd !== undefined
|
|
192
|
+
? formatPathName({ ...a.name, fragment: a.hapStart }, a.hapEnd)
|
|
193
|
+
: undefined,
|
|
194
|
+
start: undefined,
|
|
195
|
+
}))
|
|
196
|
+
: subgraph.toJSON(args.cigar, { names });
|
|
197
|
+
process.stdout.write(args.format === 'gfa' && !args.alignments
|
|
198
|
+
? await subgraph.toGFA(args.cigar, { names })
|
|
199
|
+
: `${JSON.stringify(output)}\n`);
|
|
135
200
|
if (args.stats) {
|
|
136
201
|
const { fetches, bytesFetched } = db.sqlite.pager;
|
|
137
|
-
const { orderedAlignments, lcsAlignments, identificationSteps, identificationFetches } = subgraph.stats;
|
|
202
|
+
const { orderedAlignments, lcsAlignments, identificationSteps, identificationFetches, } = subgraph.stats;
|
|
138
203
|
process.stderr.write(`Subgraph contains ${subgraph.nodeCount} nodes and ${subgraph.pathCount} paths; ${fetches} fetches, ${bytesFetched} bytes; ${orderedAlignments} ordered + ${lcsAlignments} lcs alignments; identification ${identificationSteps} steps, ${identificationFetches} lookups\n`);
|
|
139
204
|
}
|
|
140
205
|
}
|
|
206
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/db.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ByteSource } from './filehandle.ts';
|
|
2
1
|
import { GbwtRecord } from './gbwt/record.ts';
|
|
3
|
-
import type { Pos } from './gbwt/record.ts';
|
|
4
2
|
import { SqliteDatabase } from './sqlite/database.ts';
|
|
3
|
+
import type { ByteSource } from './filehandle.ts';
|
|
4
|
+
import type { Pos } from './gbwt/record.ts';
|
|
5
|
+
import type { GraphName } from './graphName.ts';
|
|
5
6
|
import type { PagerOptions } from './sqlite/pager.ts';
|
|
6
7
|
export interface PathName {
|
|
7
8
|
sample: string;
|
|
@@ -12,8 +13,8 @@ export interface PathName {
|
|
|
12
13
|
export declare const GENERIC_SAMPLE = "_gbwt_ref";
|
|
13
14
|
export declare const SCHEMA_VERSION = "GBZ-base version 4";
|
|
14
15
|
export declare class SchemaVersionError extends Error {
|
|
15
|
-
readonly found: string | undefined;
|
|
16
16
|
name: string;
|
|
17
|
+
readonly found: string | undefined;
|
|
17
18
|
constructor(found: string | undefined);
|
|
18
19
|
}
|
|
19
20
|
export declare function formatPathName(name: PathName, end: number): string;
|
|
@@ -32,12 +33,12 @@ export interface GbzPath {
|
|
|
32
33
|
isIndexed: boolean;
|
|
33
34
|
}
|
|
34
35
|
export declare class GbzRecord {
|
|
36
|
+
readonly sequenceLen: number;
|
|
35
37
|
readonly handle: number;
|
|
36
38
|
readonly edges: Pos[];
|
|
37
39
|
readonly bwt: Uint8Array;
|
|
38
40
|
readonly encodedSequence: Uint8Array;
|
|
39
41
|
readonly next: number | undefined;
|
|
40
|
-
readonly sequenceLen: number;
|
|
41
42
|
private decoded;
|
|
42
43
|
constructor(handle: number, edges: Pos[], bwt: Uint8Array, encodedSequence: Uint8Array, next: number | undefined);
|
|
43
44
|
get id(): number;
|
|
@@ -46,12 +47,17 @@ export declare class GbzRecord {
|
|
|
46
47
|
successors(): number[];
|
|
47
48
|
gbwt(): GbwtRecord;
|
|
48
49
|
}
|
|
50
|
+
export interface OpenOptions extends PagerOptions {
|
|
51
|
+
haplotypeIndex?: ByteSource;
|
|
52
|
+
}
|
|
49
53
|
export declare class GBZBase {
|
|
50
|
-
readonly sqlite: SqliteDatabase;
|
|
51
54
|
private tagCache;
|
|
52
55
|
private pathCache;
|
|
56
|
+
private indexTags;
|
|
57
|
+
readonly sqlite: SqliteDatabase;
|
|
58
|
+
private readonly index;
|
|
53
59
|
private constructor();
|
|
54
|
-
static open(source: ByteSource, opts?:
|
|
60
|
+
static open(source: ByteSource, opts?: OpenOptions): Promise<GBZBase>;
|
|
55
61
|
tags(): Promise<Map<string, string>>;
|
|
56
62
|
tag(key: string): Promise<string | undefined>;
|
|
57
63
|
getRecord(handle: number): Promise<GbzRecord | undefined>;
|
|
@@ -59,6 +65,8 @@ export declare class GBZBase {
|
|
|
59
65
|
getPath(handle: number): Promise<GbzPath | undefined>;
|
|
60
66
|
findPath(name: PathName): Promise<GbzPath | undefined>;
|
|
61
67
|
pathsForSample(sample: string): Promise<GbzPath[]>;
|
|
68
|
+
graphName(): Promise<GraphName>;
|
|
69
|
+
hasChainLinks(): Promise<boolean>;
|
|
62
70
|
get hasHaplotypeIndex(): boolean;
|
|
63
71
|
haplotypeSampleInterval(): Promise<number | undefined>;
|
|
64
72
|
private sampleFromRow;
|
package/dist/db.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { GbwtRecord, decompressEdges } from "./gbwt/record.js";
|
|
2
1
|
import { ENDMARKER, nodeId, nodeOrientation } from "./gbwt/node.js";
|
|
2
|
+
import { GbwtRecord, decompressEdges } from "./gbwt/record.js";
|
|
3
3
|
import { decodeSequence, encodedSequenceLength } from "./gbwt/sequence.js";
|
|
4
|
+
import { graphNameFromTags } from "./graphName.js";
|
|
4
5
|
import { SqliteDatabase } from "./sqlite/database.js";
|
|
5
6
|
export const GENERIC_SAMPLE = '_gbwt_ref';
|
|
6
7
|
export const SCHEMA_VERSION = 'GBZ-base version 4';
|
|
7
8
|
export class SchemaVersionError extends Error {
|
|
8
|
-
found;
|
|
9
9
|
name = 'SchemaVersionError';
|
|
10
|
+
found;
|
|
10
11
|
constructor(found) {
|
|
11
12
|
super(found === undefined
|
|
12
13
|
? `not a gbz-base database: its Tags table has no version`
|
|
@@ -18,12 +19,12 @@ export function formatPathName(name, end) {
|
|
|
18
19
|
return `${name.sample}#${name.haplotype}#${name.contig}[${name.fragment}-${end}]`;
|
|
19
20
|
}
|
|
20
21
|
export class GbzRecord {
|
|
22
|
+
sequenceLen;
|
|
21
23
|
handle;
|
|
22
24
|
edges;
|
|
23
25
|
bwt;
|
|
24
26
|
encodedSequence;
|
|
25
27
|
next;
|
|
26
|
-
sequenceLen;
|
|
27
28
|
decoded;
|
|
28
29
|
constructor(handle, edges, bwt, encodedSequence, next) {
|
|
29
30
|
this.handle = handle;
|
|
@@ -74,8 +75,14 @@ function blob(value, what) {
|
|
|
74
75
|
function rowToPath(rowid, values) {
|
|
75
76
|
return {
|
|
76
77
|
handle: rowid,
|
|
77
|
-
fwStart: {
|
|
78
|
-
|
|
78
|
+
fwStart: {
|
|
79
|
+
node: num(values[1], 'Paths.fw_node'),
|
|
80
|
+
offset: num(values[2], 'Paths.fw_offset'),
|
|
81
|
+
},
|
|
82
|
+
revStart: {
|
|
83
|
+
node: num(values[3], 'Paths.rev_node'),
|
|
84
|
+
offset: num(values[4], 'Paths.rev_offset'),
|
|
85
|
+
},
|
|
79
86
|
name: {
|
|
80
87
|
sample: str(values[5], 'Paths.sample'),
|
|
81
88
|
contig: str(values[6], 'Paths.contig'),
|
|
@@ -85,33 +92,52 @@ function rowToPath(rowid, values) {
|
|
|
85
92
|
isIndexed: num(values[9], 'Paths.is_indexed') !== 0,
|
|
86
93
|
};
|
|
87
94
|
}
|
|
95
|
+
async function readTags(sqlite) {
|
|
96
|
+
const tags = new Map();
|
|
97
|
+
for await (const { values } of sqlite.scan('Tags')) {
|
|
98
|
+
tags.set(str(values[0], 'Tags.key'), str(values[1], 'Tags.value'));
|
|
99
|
+
}
|
|
100
|
+
return tags;
|
|
101
|
+
}
|
|
88
102
|
export class GBZBase {
|
|
89
|
-
sqlite;
|
|
90
103
|
tagCache;
|
|
91
104
|
pathCache;
|
|
92
|
-
|
|
105
|
+
indexTags;
|
|
106
|
+
sqlite;
|
|
107
|
+
index;
|
|
108
|
+
constructor(sqlite, index) {
|
|
93
109
|
this.sqlite = sqlite;
|
|
110
|
+
this.index = index;
|
|
94
111
|
}
|
|
95
112
|
static async open(source, opts = {}) {
|
|
96
|
-
const
|
|
113
|
+
const { haplotypeIndex, ...pagerOptions } = opts;
|
|
114
|
+
const sqlite = await SqliteDatabase.open(source, pagerOptions);
|
|
97
115
|
for (const table of ['Tags', 'Nodes', 'Paths', 'ReferenceIndex']) {
|
|
98
116
|
sqlite.rootPage(table);
|
|
99
117
|
}
|
|
100
|
-
const
|
|
118
|
+
const index = haplotypeIndex
|
|
119
|
+
? await SqliteDatabase.open(haplotypeIndex, pagerOptions)
|
|
120
|
+
: sqlite;
|
|
121
|
+
const db = new GBZBase(sqlite, index);
|
|
101
122
|
const version = await db.tag('version');
|
|
102
123
|
if (version !== SCHEMA_VERSION) {
|
|
103
124
|
throw new SchemaVersionError(version);
|
|
104
125
|
}
|
|
126
|
+
if (haplotypeIndex) {
|
|
127
|
+
for (const table of ['Tags', 'HaplotypeSamples', 'HaplotypeLengths']) {
|
|
128
|
+
index.rootPage(table);
|
|
129
|
+
}
|
|
130
|
+
db.indexTags = await readTags(index);
|
|
131
|
+
const indexed = db.indexTags.get('haplotype_index_paths');
|
|
132
|
+
const paths = await db.tag('paths');
|
|
133
|
+
if (indexed !== paths) {
|
|
134
|
+
throw new Error(`haplotype index was built for ${indexed ?? 'an unknown number of'} paths but the graph has ${paths}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
105
137
|
return db;
|
|
106
138
|
}
|
|
107
139
|
tags() {
|
|
108
|
-
this.tagCache ??= (
|
|
109
|
-
const tags = new Map();
|
|
110
|
-
for await (const { values } of this.sqlite.scan('Tags')) {
|
|
111
|
-
tags.set(str(values[0], 'Tags.key'), str(values[1], 'Tags.value'));
|
|
112
|
-
}
|
|
113
|
-
return tags;
|
|
114
|
-
})();
|
|
140
|
+
this.tagCache ??= readTags(this.sqlite);
|
|
115
141
|
return this.tagCache;
|
|
116
142
|
}
|
|
117
143
|
async tag(key) {
|
|
@@ -149,11 +175,37 @@ export class GBZBase {
|
|
|
149
175
|
async pathsForSample(sample) {
|
|
150
176
|
return (await this.paths()).filter(p => p.name.sample === sample);
|
|
151
177
|
}
|
|
178
|
+
async graphName() {
|
|
179
|
+
const gbzTags = new Map();
|
|
180
|
+
for (const [key, value] of await this.tags()) {
|
|
181
|
+
if (key.startsWith('gbz_')) {
|
|
182
|
+
gbzTags.set(key.slice('gbz_'.length), value);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
let name = {
|
|
186
|
+
name: undefined,
|
|
187
|
+
subgraph: new Map(),
|
|
188
|
+
translation: new Map(),
|
|
189
|
+
};
|
|
190
|
+
try {
|
|
191
|
+
name = graphNameFromTags(gbzTags);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// upstream falls back to an empty name when the tags do not parse
|
|
195
|
+
}
|
|
196
|
+
return name;
|
|
197
|
+
}
|
|
198
|
+
async hasChainLinks() {
|
|
199
|
+
const links = await this.tag('chain_links');
|
|
200
|
+
return links !== undefined && Number(links) > 0;
|
|
201
|
+
}
|
|
152
202
|
get hasHaplotypeIndex() {
|
|
153
|
-
return this.
|
|
203
|
+
return (this.index.has('HaplotypeSamples') && this.index.has('HaplotypeLengths'));
|
|
154
204
|
}
|
|
155
205
|
async haplotypeSampleInterval() {
|
|
156
|
-
const value =
|
|
206
|
+
const value = this.indexTags
|
|
207
|
+
? this.indexTags.get('haplotype_index_interval')
|
|
208
|
+
: await this.tag('haplotype_index_interval');
|
|
157
209
|
return value === undefined ? undefined : Number(value);
|
|
158
210
|
}
|
|
159
211
|
sampleFromRow(values) {
|
|
@@ -161,18 +213,23 @@ export class GBZBase {
|
|
|
161
213
|
node: num(values[0], 'HaplotypeSamples.node_handle'),
|
|
162
214
|
offset: num(values[1], 'HaplotypeSamples.node_offset'),
|
|
163
215
|
pathHandle: num(values[2], 'HaplotypeSamples.path_handle'),
|
|
164
|
-
orientation: num(values[3], 'HaplotypeSamples.orientation') === 0
|
|
216
|
+
orientation: num(values[3], 'HaplotypeSamples.orientation') === 0
|
|
217
|
+
? 'forward'
|
|
218
|
+
: 'reverse',
|
|
165
219
|
pathOffset: num(values[4], 'HaplotypeSamples.path_offset'),
|
|
166
220
|
};
|
|
167
221
|
}
|
|
168
222
|
async haplotypeSamplesInRange(minHandle, maxHandle) {
|
|
169
223
|
const samples = [];
|
|
170
|
-
for await (const key of this.
|
|
224
|
+
for await (const key of this.index.indexScanFrom('HaplotypeSamples', [
|
|
225
|
+
minHandle,
|
|
226
|
+
0,
|
|
227
|
+
])) {
|
|
171
228
|
const node = num(key[0], 'HaplotypeSamples.node_handle');
|
|
172
229
|
if (node > maxHandle) {
|
|
173
230
|
break;
|
|
174
231
|
}
|
|
175
|
-
const row = await this.
|
|
232
|
+
const row = await this.index.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
|
|
176
233
|
if (row) {
|
|
177
234
|
samples.push(this.sampleFromRow(row));
|
|
178
235
|
}
|
|
@@ -180,20 +237,23 @@ export class GBZBase {
|
|
|
180
237
|
return samples;
|
|
181
238
|
}
|
|
182
239
|
async haplotypeSampleAt(node, offset) {
|
|
183
|
-
const key = await this.
|
|
184
|
-
if (
|
|
240
|
+
const key = await this.index.indexSeekLE('HaplotypeSamples', [node, offset]);
|
|
241
|
+
if (key?.[0] !== node || key[1] !== offset) {
|
|
185
242
|
return undefined;
|
|
186
243
|
}
|
|
187
|
-
const row = await this.
|
|
244
|
+
const row = await this.index.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
|
|
188
245
|
return row ? this.sampleFromRow(row) : undefined;
|
|
189
246
|
}
|
|
190
247
|
async haplotypeLength(pathHandle) {
|
|
191
|
-
const row = await this.
|
|
248
|
+
const row = await this.index.byRowid('HaplotypeLengths', pathHandle);
|
|
192
249
|
return row ? num(row[1], 'HaplotypeLengths.length') : undefined;
|
|
193
250
|
}
|
|
194
251
|
async indexedPosition(pathHandle, pathOffset) {
|
|
195
|
-
const key = await this.sqlite.indexSeekLE('ReferenceIndex', [
|
|
196
|
-
|
|
252
|
+
const key = await this.sqlite.indexSeekLE('ReferenceIndex', [
|
|
253
|
+
pathHandle,
|
|
254
|
+
pathOffset,
|
|
255
|
+
]);
|
|
256
|
+
if (key?.[0] !== pathHandle) {
|
|
197
257
|
return undefined;
|
|
198
258
|
}
|
|
199
259
|
const row = await this.sqlite.byRowid('ReferenceIndex', num(key[2], 'ReferenceIndex rowid'));
|
|
@@ -202,7 +262,11 @@ export class GBZBase {
|
|
|
202
262
|
}
|
|
203
263
|
return {
|
|
204
264
|
pathOffset: num(row[1], 'ReferenceIndex.path_offset'),
|
|
205
|
-
pos: {
|
|
265
|
+
pos: {
|
|
266
|
+
node: num(row[2], 'ReferenceIndex.node_handle'),
|
|
267
|
+
offset: num(row[3], 'ReferenceIndex.node_offset'),
|
|
268
|
+
},
|
|
206
269
|
};
|
|
207
270
|
}
|
|
208
271
|
}
|
|
272
|
+
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/filehandle.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filehandle.js","sourceRoot":"","sources":["../src/filehandle.ts"],"names":[],"mappings":""}
|
package/dist/gbwt/bytecode.d.ts
CHANGED
package/dist/gbwt/bytecode.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export class ByteCodeReader {
|
|
2
|
-
bytes;
|
|
3
2
|
offset = 0;
|
|
3
|
+
bytes;
|
|
4
4
|
constructor(bytes) {
|
|
5
5
|
this.bytes = bytes;
|
|
6
6
|
}
|
|
@@ -39,13 +39,16 @@ export class RunReader {
|
|
|
39
39
|
constructor(bytes, sigma) {
|
|
40
40
|
this.source = new ByteCodeReader(bytes);
|
|
41
41
|
this.sigma = sigma === 0 ? Number.MAX_SAFE_INTEGER : sigma;
|
|
42
|
-
this.threshold =
|
|
42
|
+
this.threshold =
|
|
43
|
+
this.sigma < RLE_THRESHOLD ? Math.floor(RLE_UNIVERSE / this.sigma) : 0;
|
|
43
44
|
}
|
|
44
45
|
next() {
|
|
45
46
|
if (this.sigma >= RLE_THRESHOLD) {
|
|
46
47
|
const value = this.source.int();
|
|
47
48
|
const len = this.source.int();
|
|
48
|
-
return value === undefined || len === undefined
|
|
49
|
+
return value === undefined || len === undefined
|
|
50
|
+
? undefined
|
|
51
|
+
: { value, len: len + 1 };
|
|
49
52
|
}
|
|
50
53
|
const byte = this.source.byte();
|
|
51
54
|
if (byte === undefined) {
|
|
@@ -68,3 +71,4 @@ export class RunReader {
|
|
|
68
71
|
}
|
|
69
72
|
}
|
|
70
73
|
}
|
|
74
|
+
//# sourceMappingURL=bytecode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytecode.js","sourceRoot":"","sources":["../../src/gbwt/bytecode.ts"],"names":[],"mappings":"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"}
|
package/dist/gbwt/node.js
CHANGED
|
@@ -32,7 +32,9 @@ export function exitOrientation(side) {
|
|
|
32
32
|
export function edgeIsCanonical(from, to) {
|
|
33
33
|
const fromId = nodeId(from);
|
|
34
34
|
const toId = nodeId(to);
|
|
35
|
-
return isReverse(from)
|
|
35
|
+
return isReverse(from)
|
|
36
|
+
? toId > fromId || (toId === fromId && !isReverse(to))
|
|
37
|
+
: toId >= fromId;
|
|
36
38
|
}
|
|
37
39
|
export function pathIsCanonical(path) {
|
|
38
40
|
const first = path[0];
|
|
@@ -40,5 +42,8 @@ export function pathIsCanonical(path) {
|
|
|
40
42
|
if (first === undefined || last === undefined) {
|
|
41
43
|
return true;
|
|
42
44
|
}
|
|
43
|
-
return isReverse(first) === isReverse(last)
|
|
45
|
+
return isReverse(first) === isReverse(last)
|
|
46
|
+
? !isReverse(first)
|
|
47
|
+
: edgeIsCanonical(first, last);
|
|
44
48
|
}
|
|
49
|
+
//# sourceMappingURL=node.js.map
|