@gmod/bam
Version:
Parser for BAM and BAM index (bai) files
45 lines (44 loc) • 1.86 kB
TypeScript
import type Chunk from './chunk.ts';
import type { BaseOpts } from './util.ts';
import type { Offset, VirtualOffset } from './virtualOffset.ts';
import type { GenericFilehandle } from 'generic-filehandle2';
export interface Region {
refId: number;
start: number;
end: number;
}
export interface RefIndex {
binIndex: Record<number, Chunk[]>;
stats?: {
lineCount: number;
};
}
export interface ParsedIndexBase<R extends RefIndex = RefIndex> {
firstDataLine: VirtualOffset | undefined;
refCount: number;
maxBlockSize: number;
indices: (refId: number) => R | undefined;
}
export declare function memoizeByRefId<T>(getIndices: (refId: number) => T | undefined, maxSize?: number): (refId: number) => T | undefined;
export default abstract class IndexFile<TParsed extends ParsedIndexBase = ParsedIndexBase> {
filehandle: GenericFilehandle;
renameRefSeq: (s: string) => string;
private setupP?;
constructor({ filehandle, renameRefSeq, }: {
filehandle: GenericFilehandle;
renameRefSeq?: (a: string) => string;
});
protected abstract _parse(opts: BaseOpts): Promise<TParsed>;
abstract indexCov(refId: number, start?: number, end?: number): Promise<{
start: number;
end: number;
score: number;
}[]>;
protected abstract reg2bins(min: number, max: number): readonly (readonly [number, number])[];
protected abstract getLowestChunk(refIndex: RefIndex, min: number): Offset | undefined;
blocksForRange(refId: number, min: number, max: number, opts?: BaseOpts): Promise<Chunk[]>;
parse(opts?: BaseOpts): Promise<TParsed>;
lineCount(refId: number, opts?: BaseOpts): Promise<number>;
hasRefSeq(seqId: number, opts?: BaseOpts): Promise<boolean>;
estimatedBytesForRegions(regions: Region[], opts?: BaseOpts): Promise<number>;
}