Skip to content

Commit 7ec0332

Browse files
committed
UpdateTestsCatch
1 parent eef165f commit 7ec0332

File tree

6 files changed

+73
-34
lines changed

6 files changed

+73
-34
lines changed

.github/workflows/build.yml

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
uses: actions/cache@v1
4141
with:
4242
path: $HOME/htslib
43-
key: ${{ runner.os }}-htslib-1.10
43+
key: ${{ runner.os }}-htslib-1.12
4444

4545
# Install Dependencies
4646
- name: Install dependencies (Linux)
@@ -73,10 +73,10 @@ jobs:
7373
with:
7474
version: ${{ matrix.nimversion }}
7575

76-
- uses: actions-rs/toolchain@v1
77-
with:
78-
toolchain: stable
79-
- uses: actions-rs/cargo@v1
76+
# - uses: actions-rs/toolchain@v1
77+
# with:
78+
# toolchain: stable
79+
# - uses: actions-rs/cargo@v1
8080

8181

8282
# Build and Test
@@ -87,16 +87,14 @@ jobs:
8787
ls -l bin/
8888
8989
bin/bamtocov --version
90-
bin/bamtocounts --version
90+
9191
bin/bamtocov input/mini.bam
92-
echo "--"
93-
cat input/regions.bed
94-
echo "--"
92+
93+
bin/bamtocounts --version
9594
bin/bamtocounts input/regions.bed input/mini.bam --debug --header
9695
# TESTS
97-
# bash tests/all.sh
98-
tests/bin/shpec tests/shpec/bamtocov.sh
99-
tests/unit/bamtocov-base.sh
96+
#bash tests/all.sh
97+
10098
10199
- name: Build and Test Linux executable
102100
if: runner.os == 'Linux'
@@ -108,7 +106,8 @@ jobs:
108106
bin/bamtocounts --version
109107
bin/bamtocov input/mini.bam
110108
bin/bamtocounts input/regions.bed input/mini.bam --debug --header
111-
echo SKIPPING bash tests/all.sh
109+
#bash tests/all.sh
112110
tests/bin/shpec tests/shpec/bamtocov.sh
113111
tests/unit/bamtocov-base.sh
114-
112+
echo "WHERE: $HOME/htslib"
113+
cat $HOME/htslib/version.h

bin/covtotarget

0 Bytes
Binary file not shown.

bin/gff2bed

0 Bytes
Binary file not shown.

nim.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# in htslib: cd
22
# nim c -a -d:static -d:release
33

4+
45
-d:release
56
--opt:speed
7+
68
@if static:
79
passC:"-static"
810
passl:"-static"

src/bamtocounts.nim

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ proc alignments_count(table: var OrderedTable[string, stranded_counts], bam:Bam,
9595
stderr.writeLine("[alignments_count] Got chrom: ", chrom, " tot=", len(regions))
9696
for aln in bam.query(chrom):
9797
if debug:
98-
stderr.writeLine("[alignments_count] Got aln ", aln.start)
98+
stderr.writeLine("[alignments_count] Got aln ", aln.start)
9999
if not regions.contains(chrom) or regions[chrom].len == 0:
100100
continue
101101

@@ -107,24 +107,32 @@ proc alignments_count(table: var OrderedTable[string, stranded_counts], bam:Bam,
107107
if (aln.flag and eflag) != 0: continue
108108

109109
let readAsInterval = (aln.tid, pos_t(aln.start), pos_t(aln.stop), aln.flag.reverse)
110-
if debug:
111-
stderr.writeLine("[alignments_count]\tGot aln: ", readAsInterval)
112-
for interval in intersections(readAsInterval, regions, target_idx):
113-
# Returns: genomic_interval_t[tuple[l1: T, l2: string]
110+
var
111+
s: string
112+
c = 0
113+
try:
114+
for interval in intersections(readAsInterval, regions, target_idx):
115+
# Returns: genomic_interval_t[tuple[l1: T, l2: string]]
116+
s = $interval
117+
c = c + 1
118+
#let feature : target_feature = (chrom: "", cid: interval.chrom.int, start: interval.start.int, stop: interval.stop.int, feature: interval.label.l2)
119+
#if interval.label.l2 notin table:
120+
# stderr.writeLine("[alignments_count] Warning: unknown feature: ", interval.label.l2)
121+
# table[interval.label.l2] = (fwd: 0, rev: 0)
114122

115-
#let feature : target_feature = (chrom: "", cid: interval.chrom.int, start: interval.start.int, stop: interval.stop.int, feature: interval.label.l2)
116-
if interval.label.l2 notin table:
117-
stderr.writeLine("[alignments_count] Warning: unknown feature: ", interval.label.l2)
118-
table[interval.label.l2] = (fwd: 0, rev: 0)
119-
if debug:
120-
stderr.writeLine("[alignments_count]\t\tfor ", interval.label.l2)
121-
table[interval.label.l2].inc(aln.flag.reverse)
123+
try:
124+
table[interval.label.l2].inc(aln.flag.reverse)
125+
except Exception as e:
126+
stderr.writeLine("[alignments_count] Error key table: ", e.msg)
127+
128+
if debug:
129+
stderr.writeLine("[alignments_count]\t\tdone ", interval.label.l2)
130+
except Exception:
131+
# ⛔️ ERROR TODO FIXME ALOHA [index not in ...]
122132
if debug:
123-
stderr.writeLine("[alignments_count]\t\tdone ", interval.label.l2)
124-
if debug:
125-
stderr.writeLine("[alignments_count]\t\tdone aln -----")
126-
if debug:
127-
stderr.writeLine("[alignments_count] Done")
133+
stderr.writeLine("[alignments_count] intersections loop broken at chr=", chrom, " aln=", aln.qname, " last=", s, " c=", c)
134+
135+
128136

129137

130138
proc targetSort(x, y: target_feature): int =

src/covutils.nim

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,39 @@ iterator intersections*[T](query: genomic_interval_t[T], target: target_t, idx:
103103
while not (query << intervals[i]) and i <= max_idx:
104104
yield intersection_both(query, intervals[i])
105105
i += 1
106-
#else:
107-
# dbEcho("target seeking: chrom", chrom, "not in target")
108-
106+
107+
iterator intersections2*[T](query: genomic_interval_t[T], target: target_t, idx: var target_index_t): genomic_interval_t[tuple[l1: T, l2: string]] =
108+
#dbEcho("target intersection for query interval:", query, ", starting from:", idx)
109+
let chrom = query.chrom
110+
echo "IS2.1 ", chrom
111+
if chrom in target:
112+
let
113+
intervals = target[chrom]
114+
max_idx = len(intervals) - 1
115+
# if the chrom changes, start from leftmost interval
116+
if idx.chrom != chrom:
117+
#dbEcho("target seeking: change chrom to:", idx)
118+
idx = (chrom, 0)
119+
# advance target interval until we reach the query interval
120+
while intervals[idx.interval] << query and idx.interval < max_idx:
121+
idx.interval += 1
122+
echo "IS2.2 idx=", idx.interval
123+
#dbEcho("target seeking: advance target index to:", idx.interval, "at target interval:", intervals[idx.interval])
124+
# yield all intersections
125+
var i = idx.interval
126+
try:
127+
discard intervals[i]
128+
except Exception as e:
129+
stderr.writeLine("INTERSECT2:", e.msg)
130+
while not (query << intervals[i]) and i <= max_idx:
131+
echo "IS2.3 idx=", idx.interval
132+
try:
133+
let r= intersection_both(query, intervals[i])
134+
yield r
135+
i += 1
136+
except Exception as e:
137+
stderr.writeLine("-------- INTERSECT2:", e.msg)
138+
109139
proc intersects*[T](query: genomic_interval_t[T], target: target_t, idx: var target_index_t): bool =
110140
for i in intersections(query, target, idx):
111141
return to_bool(i)

0 commit comments

Comments
 (0)