mirror of
https://github.com/MillironX/XAM.jl.git
synced 2024-12-26 06:38:17 +00:00
56 lines
1.1 KiB
Julia
56 lines
1.1 KiB
Julia
|
# BAI
|
||
|
# ===
|
||
|
#
|
||
|
# Index for BAM files.
|
||
|
|
||
|
|
||
|
# An index type for the BAM file format.
|
||
|
struct BAI
|
||
|
# BGZF file index
|
||
|
index::GenomicFeatures.Indexes.BGZFIndex
|
||
|
|
||
|
# number of unmapped reads
|
||
|
n_no_coors::Union{Nothing, Int}
|
||
|
end
|
||
|
|
||
|
"""
|
||
|
BAI(filename::AbstractString)
|
||
|
|
||
|
Load a BAI index from `filename`.
|
||
|
"""
|
||
|
function BAI(filename::AbstractString)
|
||
|
return open(read_bai, filename)
|
||
|
end
|
||
|
|
||
|
"""
|
||
|
BAI(input::IO)
|
||
|
|
||
|
Load a BAI index from `input`.
|
||
|
"""
|
||
|
function BAI(input::IO)
|
||
|
return read_bai(input)
|
||
|
end
|
||
|
|
||
|
# Read a BAI object from `input`.
|
||
|
function read_bai(input::IO)
|
||
|
# check magic bytes
|
||
|
B = read(input, UInt8)
|
||
|
A = read(input, UInt8)
|
||
|
I = read(input, UInt8)
|
||
|
x = read(input, UInt8)
|
||
|
if B != UInt8('B') || A != UInt8('A') || I != UInt8('I') || x != 0x01
|
||
|
error("input is not a valid BAI file")
|
||
|
end
|
||
|
|
||
|
# read contents
|
||
|
n_refs = read(input, Int32)
|
||
|
index = GenomicFeatures.Indexes.read_bgzfindex(input, n_refs)
|
||
|
if !eof(input)
|
||
|
n_no_coors = read(input, UInt64)
|
||
|
else
|
||
|
n_no_coors = nothing
|
||
|
end
|
||
|
|
||
|
return BAI(index, n_no_coors)
|
||
|
end
|