File tree Expand file tree Collapse file tree 2 files changed +47
-0
lines changed
Expand file tree Collapse file tree 2 files changed +47
-0
lines changed Original file line number Diff line number Diff line change 4343"""
4444
4545import ctypes
46+ import cooler
4647import multiprocessing as mp
4748import random
4849import warnings
4950from contextlib import closing
5051
5152import numpy as np
53+ import pandas as pd
5254
5355from . 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
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ scipy>=0.16
33pandas >= 0.19
44matplotlib >= 2.0
55rowan
6+ cooler
67joblib
78pyside2
89ipython
You can’t perform that action at this time.
0 commit comments