Describe the bug
When fetching the contacts between 'chr1' 'chrM', it gives the same result as 'chrM' 'chr1' without any notice to the user.
To Reproduce
import numpy as np
import hicstraw
hic_file = 'ENCFF080DPJ.hic'
chrom1 = 'chr1'
chrom2 = 'chr2'
result = hicstraw.straw('observed', 'NONE', hic_file, chrom1, chrom2, 'BP', 1000000)
for i in range(10):
print("{0}\t{1}\t{2}".format(result[i].binX, result[i].binY, result[i].counts))
result = hicstraw.straw('observed', 'NONE', hic_file, chrom2, chrom1, 'BP', 1000000)
for i in range(10):
print("{0}\t{1}\t{2}".format(result[i].binX, result[i].binY, result[i].counts))
Expected behavior
I would expect to have the same result but with column 1 and 2 shifted.
I got exactly the same result.
The problem is that the chromosomes are flipped here:
|
} else { // flip |
|
this->c1 = c02; |
|
this->c2 = c01; |
|
this->numBins1 = static_cast<int32_t>(chrom2.length / resolution); |
|
this->numBins2 = static_cast<int32_t>(chrom1.length / resolution); |
|
} |
but this is information is not stored.
Therefore, the results are not flipped back in:
|
if (!isnan(c) && !isinf(c)){ |
|
contactRecord record = contactRecord(); |
|
record.binX = static_cast<int32_t>(x); |
|
record.binY = static_cast<int32_t>(y); |
|
record.counts = c; |
|
records.push_back(record); |
|
} |
and the matrix is not transposed in:
|
return py::array(py::cast(finalMatrix)); |
Describe the bug
When fetching the contacts between 'chr1' 'chrM', it gives the same result as 'chrM' 'chr1' without any notice to the user.
To Reproduce
Expected behavior
I would expect to have the same result but with column 1 and 2 shifted.
I got exactly the same result.
The problem is that the chromosomes are flipped here:
straw/pybind11_python/src/straw.cpp
Lines 1222 to 1227 in 2525edc
Therefore, the results are not flipped back in:
straw/pybind11_python/src/straw.cpp
Lines 1368 to 1374 in 2525edc
and the matrix is not transposed in:
straw/pybind11_python/src/straw.cpp
Line 1430 in 2525edc