Skip to content

Commit

Permalink
[partition] Simplify tig to id conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
tanghaibao committed Nov 26, 2017
1 parent de6fe8a commit 6ca2441
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 19 deletions.
13 changes: 11 additions & 2 deletions hic/base.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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()
33 changes: 16 additions & 17 deletions hic/partition.nim
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ include "base"
type
Partitioner* = ref object
bamfile*: string
ReadMapping* = tuple[name: string, contig: string]


proc initPartitioner*(bamfile: string): Partitioner =
Expand All @@ -30,29 +29,29 @@ 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)
debug("Initiating matrix of size $# x $#".format(N, N))

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
M[mi, qi] = M[mi, qi] + 1

for i in 0..<N:
var itig = id_to_tig[i]
for j in i..<N:
var jtig = id_to_tig[j]
if M[i, j] > 1:
echo format("M[$#, $#] = $#", itig, jtig, M[i, j])

0 comments on commit 6ca2441

Please sign in to comment.