-
Notifications
You must be signed in to change notification settings - Fork 35
Open
Description
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:
straw/pybind11_python/src/straw.cpp
Lines 1222 to 1227 in 2525edc
| } 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); | |
| } |
Therefore, the results are not flipped back in:
straw/pybind11_python/src/straw.cpp
Lines 1368 to 1374 in 2525edc
| 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:
straw/pybind11_python/src/straw.cpp
Line 1430 in 2525edc
| return py::array(py::cast(finalMatrix)); |
Metadata
Metadata
Assignees
Labels
No labels