Skip to content

Commit 7163ff7

Browse files
authored
Merge pull request #264 from brentp/pr261
set TBX_UCSC preset for bed
2 parents b8183b4 + 0419d80 commit 7163ff7

4 files changed

Lines changed: 37 additions & 3 deletions

File tree

functional-tests.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ set -o nounset
1212

1313

1414
set -e
15-
nim c --boundChecks:on -x:on -d:useSysAssert -d:useGcAssert --lineDir:on --debuginfo --mm:refc mosdepth.nim
16-
nim c -x:on --mm:refc -d:useSysAssert -d:useGcAssert --lineDir:on --debuginfo -r tests/funcs.nim
15+
nim c -a --boundChecks:on -x:on -d:useSysAssert -d:useGcAssert --lineDir:on --debuginfo --mm:refc mosdepth.nim
16+
nim c -a -x:on --mm:refc -d:useSysAssert -d:useGcAssert --lineDir:on --debuginfo -r tests/funcs.nim
1717
set +e
1818
exe=./mosdepth
1919
bam=/data/human/NA12878.subset.bam

mosdepth.nim

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ when defined(d4):
1818
var precision: int
1919
var output_summary_header = true
2020

21+
const
22+
TbxUcscPreset* = 0x10000'i32
23+
24+
proc set_bed_tbx_preset*(bgzi: var BGZI) {.inline.} =
25+
if bgzi != nil:
26+
bgzi.csi.tbx.conf.preset = TbxUcscPreset
27+
2128
try:
2229
var tmp = getEnv("MOSDEPTH_PRECISION")
2330
precision = parse_int(tmp)
@@ -636,14 +643,17 @@ proc main(bam: hts.Bam, chrom: region_t, mapq: int, min_len: int, max_len: int,
636643
else:
637644
fbase = wopen_bgzi(prefix & ".per-base.bed.gz", 1, 2, 3, true,
638645
compression_level = 1, levels = levels)
646+
fbase.set_bed_tbx_preset()
639647
#open(fbase, prefix & ".per-base.bed.gz", "w1")
640648
if quantize.len != 0:
641649
fquantize = wopen_bgzi(prefix & ".quantized.bed.gz", 1, 2, 3, true,
642650
compression_level = 1, levels = levels)
651+
fquantize.set_bed_tbx_preset()
643652

644653
if thresholds.len != 0:
645654
fthresholds = wopen_bgzi(prefix & ".thresholds.bed.gz", 1, 2, 3, true,
646655
compression_level = 1, levels = levels)
656+
fthresholds.set_bed_tbx_preset()
647657
fthresholds.write_header(thresholds)
648658

649659
if not open(fh_global_dist, prefix & ".mosdepth.global.dist.txt", fmWrite):
@@ -659,6 +669,7 @@ proc main(bam: hts.Bam, chrom: region_t, mapq: int, min_len: int, max_len: int,
659669
if region != "":
660670
fregion = wopen_bgzi(prefix & ".regions.bed.gz", 1, 2, 3, true,
661671
levels = levels)
672+
fregion.set_bed_tbx_preset()
662673
if region.isdigit():
663674
window = uint32(S.parse_int(region))
664675
else:
@@ -969,4 +980,3 @@ Other options:
969980
main(bam, chrom, mapq, min_len, max_len, eflag, iflag, region, thresholds,
970981
fast_mode, args, use_median = use_median, fragment_mode = fragment_mode,
971982
use_d4 = use_d4)
972-

nim.cfg

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
# in htslib: ./configure --with-libdeflate --disable-libcurl
22
# nim c -a -d:static -d:release mosdepth.nim
33
mm:refc
4+
#nimcache:"nimcache"
5+
6+
@if gcc:
7+
# GCC 14 rejects some older docopt-generated C pointer conversions.
8+
passC:"-Wno-incompatible-pointer-types"
9+
@end
10+
411
@if static:
512
passC:"-static"
613
passl:"-static"

tests/funcs.nim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import unittest
22
import mosdepth
33
import depthstat
44
import os
5+
import hts
56

67
suite "mosdepth-suite":
78

@@ -89,3 +90,19 @@ suite "mosdepth-suite":
8990
check r.chrom == "Super-Scaffold_52"
9091
check r.start == 1
9192
check r.stop == 1000
93+
94+
test "bed-index-preset":
95+
let path = getTempDir() / "mosdepth-index-preset.bed.gz"
96+
if fileExists(path):
97+
removeFile(path)
98+
if fileExists(path & ".csi"):
99+
removeFile(path & ".csi")
100+
var fh = wopen_bgzi(path, 1, 2, 3, true)
101+
fh.set_bed_tbx_preset()
102+
check fh.write_interval("chr1\t0\t1\t0.0", "chr1", 0, 1) >= 0
103+
check fh.csi.tbx.conf.preset == TbxUcscPreset
104+
discard fh.close()
105+
if fileExists(path):
106+
removeFile(path)
107+
if fileExists(path & ".csi"):
108+
removeFile(path & ".csi")

0 commit comments

Comments
 (0)