Skip to content

Commit c07c56b

Browse files
authored
Merge pull request #35 from jfnavarro/master
Merge from base
2 parents 15eb72c + 44cec5e commit c07c56b

4 files changed

Lines changed: 36 additions & 7 deletions

File tree

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,8 @@ Version 0.4.6
4242
* Added slice_regions_matrix.py script
4343
* Optimized and improved differential_analysis.py
4444
* Added compatibility with R 3.4 and rpy2 latest versions
45+
46+
Version 0.5.0
47+
* Fixed bugs
48+
* Added support for biocparalell
49+
* Added extract_spots.py script

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ The referred matrix format is the ST data format, a matrix of counts where spot
3636
and the genes are column names. This matrix format (.TSV) is generated with the
3737
[ST Pipeline](https://github.com/SpatialTranscriptomicsResearch/st_pipeline)
3838

39-
The scripts that allow you to pass the tissue HE image can optionally take a 3x3 alignment file.
39+
The scripts that allows you to pass the tissue HE image can optionally take a 3x3 alignment file.
4040
If the images are cropped to the exact array boundaries the alignment file is not needed
4141
unless you want to plot the image in the original image size. If the image is un-cropped
4242
then you need the alignment file to convert from spot coordinates to pixel coordinates.

stanalysis/analysis.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from matplotlib.colors import LinearSegmentedColormap
66
from matplotlib import colors as mpcolors
77
from collections import Counter
8+
import multiprocessing
89
import rpy2.robjects.packages as rpackages
910
import rpy2.robjects as robjects
1011
from rpy2.robjects import pandas2ri, r, numpy2ri, globalenv
@@ -16,7 +17,9 @@ def computeNClusters(counts, min_size=20):
1617
from the data using Scran::quickCluster"""
1718
pandas2ri.activate()
1819
r_counts = pandas2ri.py2ri(counts.transpose())
19-
scran = RimportLibrary("scran")
20+
scran = RimportLibrary("scran")
21+
multicore = RimportLibrary("BiocParallel")
22+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
2023
as_matrix = r["as.matrix"]
2124
clusters = scran.quickCluster(as_matrix(r_counts), min_size)
2225
n_clust = len(set(clusters))
@@ -34,7 +37,8 @@ def deaDESeq2(counts, conds, comparisons, alpha, size_factors=None):
3437
try:
3538
pandas2ri.activate()
3639
deseq2 = RimportLibrary("DESeq2")
37-
r("suppressMessages(library(DESeq2))")
40+
multicore = RimportLibrary("BiocParallel")
41+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
3842
# Create the R conditions and counts data
3943
r_counts = pandas2ri.py2ri(counts)
4044
cond = robjects.DataFrame({"conditions": robjects.StrVector(conds)})
@@ -74,6 +78,8 @@ def deaScranDESeq2(counts, conds, comparisons, alpha, scran_clusters=False):
7478
pandas2ri.activate()
7579
deseq2 = RimportLibrary("DESeq2")
7680
scran = RimportLibrary("scran")
81+
multicore = RimportLibrary("BiocParallel")
82+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
7783
as_matrix = r["as.matrix"]
7884
# Create the R conditions and counts data
7985
r_counts = pandas2ri.py2ri(counts)
@@ -102,7 +108,12 @@ def deaScranDESeq2(counts, conds, comparisons, alpha, scran_clusters=False):
102108
# Perform the comparisons and store results in list
103109
for A,B in comparisons:
104110
result = r.results(dds, contrast=r.c("conditions", A, B), alpha=alpha)
105-
result = pandas2ri.ri2py_dataframe(r['as.data.frame'](result))
111+
result = r['as.data.frame'](result)
112+
genes = r['rownames'](result)
113+
result = pandas2ri.ri2py_dataframe(result)
114+
# There seems to be a problem parsing the rownames from R to pandas
115+
# so we do it manually
116+
result.index = genes
106117
results.append(result)
107118
pandas2ri.deactivate()
108119
except Exception as e:
@@ -142,7 +153,9 @@ def Rtsne(counts, dimensions, theta=0.5, dims=50, perplexity=30, max_iter=1000):
142153
using the R package Rtsne"""
143154
pandas2ri.activate()
144155
r_counts = pandas2ri.py2ri(counts)
145-
tsne = RimportLibrary("Rtsne")
156+
tsne = RimportLibrary("Rtsne")
157+
multicore = RimportLibrary("BiocParallel")
158+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
146159
as_matrix = r["as.matrix"]
147160
tsne_out = tsne.Rtsne(as_matrix(counts),
148161
dims=dimensions,

stanalysis/normalization.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import numpy as np
55
import pandas as pd
66
from collections import Counter
7+
import multiprocessing
78
import rpy2.robjects.packages as rpackages
89
from rpy2.robjects import pandas2ri, r, numpy2ri
910
import rpy2.robjects as ro
@@ -29,6 +30,8 @@ def computeTMMFactors(counts):
2930
pandas2ri.activate()
3031
r_counts = pandas2ri.py2ri(counts)
3132
edger = RimportLibrary("edgeR")
33+
multicore = RimportLibrary("BiocParallel")
34+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
3235
as_matrix = r["as.matrix"]
3336
dds = edger.calcNormFactors(as_matrix(r_counts), method="TMM")
3437
pandas_sf = pandas2ri.ri2py(dds)
@@ -45,6 +48,8 @@ def computeRLEFactors(counts):
4548
pandas2ri.activate()
4649
r_counts = pandas2ri.py2ri(counts)
4750
edger = RimportLibrary("edgeR")
51+
multicore = RimportLibrary("BiocParallel")
52+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
4853
as_matrix = r["as.matrix"]
4954
dds = edger.calcNormFactors(as_matrix(r_counts), method="RLE")
5055
pandas_sf = pandas2ri.ri2py(dds)
@@ -64,6 +69,8 @@ def computeSumFactors(counts, scran_clusters=True):
6469
pandas2ri.activate()
6570
r_counts = pandas2ri.py2ri(counts)
6671
scran = RimportLibrary("scran")
72+
multicore = RimportLibrary("BiocParallel")
73+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
6774
as_matrix = r["as.matrix"]
6875
if scran_clusters:
6976
r_clusters = scran.quickCluster(as_matrix(r_counts), max(n_cells/10, 10))
@@ -117,8 +124,10 @@ def computeSizeFactors(counts):
117124
"""
118125
pandas2ri.activate()
119126
r_counts = pandas2ri.py2ri(counts)
120-
deseq = RimportLibrary("DESeq")
121-
dds = deseq.estimateSizeFactorsForMatrix(r_counts)
127+
deseq2 = RimportLibrary("DESeq2")
128+
multicore = RimportLibrary("BiocParallel")
129+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
130+
dds = deseq2.estimateSizeFactorsForMatrix(r_counts)
122131
pandas_sf = pandas2ri.ri2py(dds)
123132
pandas2ri.deactivate()
124133
return pandas_sf
@@ -146,6 +155,8 @@ def computeSizeFactorsLinear(counts):
146155
pandas2ri.activate()
147156
r_counts = pandas2ri.py2ri(counts)
148157
deseq2 = RimportLibrary("DESeq2")
158+
multicore = RimportLibrary("BiocParallel")
159+
multicore.register(multicore.MulticoreParam(multiprocessing.cpu_count()-1))
149160
vec = rpackages.importr('S4Vectors')
150161
bio_generics = rpackages.importr("BiocGenerics")
151162
cond = vec.DataFrame(condition=base.factor(base.c(base.colnames(r_counts))))

0 commit comments

Comments
 (0)