diff --git a/hic/base.nim b/hic/base.nim index 64bb1e7..37f786b 100644 --- a/hic/base.nim +++ b/hic/base.nim @@ -4,5 +4,14 @@ import strutils import "matrix" -var logger = newConsoleLogger() -logger.addHandler() +var logger: Logger +let loggers = getHandlers() + +## +## Make sure there is only one instance of logger +## +if loggers.len >= 1: + logger = loggers[0] +else: + logger = newConsoleLogger() + logger.addHandler() \ No newline at end of file diff --git a/hic/partition.nim b/hic/partition.nim index 31ce157..e22a4db 100644 --- a/hic/partition.nim +++ b/hic/partition.nim @@ -18,7 +18,6 @@ include "base" type Partitioner* = ref object bamfile*: string - ReadMapping* = tuple[name: string, contig: string] proc initPartitioner*(bamfile: string): Partitioner = @@ -30,11 +29,13 @@ proc count_links*(this: Partitioner) = var b: Bam open(b, this.bamfile, index=false) - var mappings: seq[ReadMapping] = @[] - var targets = initTable[string, Target]() + var targets = b.hdr.targets + var tig_to_id = initTable[string, int]() + var id_to_tig = initTable[int, string]() - for t in b.hdr.targets: - targets[t.name] = t + for t in targets: + tig_to_id[t.name] = t.tid + id_to_tig[t.tid] = t.name let N = max(lc[ x.tid | (x <- b.hdr.targets), int]) + 1 var M = zeros[int](N, N) @@ -42,17 +43,15 @@ proc count_links*(this: Partitioner) = for record in b: var - qi = targets[record.chrom].tid - mi = targets[record.mate_chrom].tid - - if qi > mi: - swap(qi, mi) + qi = tig_to_id[record.chrom] + mi = tig_to_id[record.mate_chrom] M[qi, mi] = M[qi, mi] + 1 - mappings.add((record.qname, record.chrom)) - - mappings.sort do (x, y: ReadMapping) -> int: - result = cmp(x.name, y.name) - - for mapping in mappings[0..<100]: - echo mapping \ No newline at end of file + M[mi, qi] = M[mi, qi] + 1 + + for i in 0.. 1: + echo format("M[$#, $#] = $#", itig, jtig, M[i, j])