Skip to content

Commit 8235f65

Browse files
committed
Implemented coolify method
1 parent 0621278 commit 8235f65

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

polykit/analysis/contact_maps.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,14 @@
4343
"""
4444

4545
import ctypes
46+
import cooler
4647
import multiprocessing as mp
4748
import random
4849
import warnings
4950
from contextlib import closing
5051

5152
import numpy as np
53+
import pandas as pd
5254

5355
from . import polymer_analyses
5456

@@ -585,3 +587,47 @@ def monomerResolutionContactMapSubchains(
585587
uniqueContacts=True,
586588
nproc=n,
587589
)
590+
591+
592+
def coolify(data,
593+
cool_uri,
594+
chrom_dict={},
595+
binsize=2500,
596+
chunksize=10000000):
597+
"""
598+
Save a simulated contact map to .cool, and return corresponding Cooler
599+
600+
Parameters
601+
----------
602+
data : NxN int array
603+
Simulated contact map (in dense numpy.ndarray format)
604+
cool_uri : str
605+
Name of .cool file to be created (excluding extension)
606+
binsize : int
607+
Map resolution in bp (i.e., genomic size of each simulated monomer)
608+
chunksize : int
609+
Number of pixels handled by each worker process
610+
611+
Returns
612+
-------
613+
Associated cooler.Cooler object
614+
"""
615+
616+
nbins = data.shape[0]
617+
618+
chrom_dict = chrom_dict if chrom_dict else {'chr_sim': binsize*nbins}
619+
chrom_sizes = pd.Series(chrom_dict, name='length', dtype='int64')
620+
621+
assert binsize*nbins == sum(chrom_sizes), "Chromosome sizes do not match map dimensions"
622+
623+
bins = cooler.binnify(chrom_sizes, binsize)
624+
bins['weight'] = np.ones(nbins) * np.sqrt(2/nbins)
625+
626+
pixels = cooler.create._ingest.ArrayLoader(bins, data, chunksize=chunksize)
627+
628+
cool_uri = "%s.%d.cool" % (cool_uri, binsize)
629+
cooler.create._create.create(cool_uri, bins, pixels)
630+
631+
clr = cooler.Cooler(cool_uri)
632+
633+
return clr

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ scipy>=0.16
33
pandas>=0.19
44
matplotlib>=2.0
55
rowan
6+
cooler
67
joblib
78
pyside2
89
ipython

0 commit comments

Comments
 (0)