Skip to content

Commit 6ef2dcc

Browse files
committed
plot segment probs for manuscript
1 parent eb8cbae commit 6ef2dcc

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/python/plot/plotToolSegments.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,42 @@ def readDynamont(file: str, readid : str) -> list:
4646
pass
4747
return segments
4848

49+
#! hardcoded for manuscript plot
50+
def getDynamontProbs() -> np.ndarray:
51+
"""
52+
Hardcoded for Dynamont segments in the manuscript plot.
53+
"""
54+
from python.segmentation.FileIO import feedSegmentation, hampelFilter
55+
readid = "131ee77f-085b-4024-a175-cc0a79660576"
56+
read = "AAACTTCAAAGTGAAACCTTACGAGCTCCAGCACCATGTTGGTTCGAGTCTCCTGCTTGAGGGTCCAACGGCTCACAGTCGTGTTCATCGATATAGGACGCCATGGCTGCCCAGCCGTCTGACATGTGATGTTTTGATACAGGTATACAATGTGTAACTATCAAATCCGAGTAACTGGGGTATTGATCATCTTGAGAATTTATCATTTCATGTTAGGAACAGTCCAATTCCACTCTTTTAGTTATTTTAAAATATGCAATAAATTATTAACTG"
57+
read = read + "AAAAAAAAA" # add poly A to 3' end
58+
read = read[::-1] # rna is sequenced 3' -> 5', so we reverse the read to match signal orientation
59+
signal = r5.read("/data/fass5/projects/js_dynamont/benchmark/data/raw/rna004/h_sapiens/PNXRXX240011_r10k_2.pod5").getSignal(readid)
60+
shift = 795.44
61+
scale = 116.091
62+
signal = (signal - shift) / scale
63+
hampelFilter(signal)
64+
start = 2050
65+
end = start + 9769
66+
script = "dynamont-NT-banded"
67+
kmerSize = 9
68+
pore = "rna_rp4"
69+
PARAMS = {
70+
'm' : "/home/yi98suv/projects/dynamont/models/rna/rp4/rna004_9mer.model",
71+
'p' : True, # return posterior probabilities
72+
'r' : pore, # pore type
73+
't' : 4,
74+
}
75+
segments, borderProbs = feedSegmentation(signal[start:end], read, script, start, kmerSize, "rna" in pore, PARAMS)
76+
# safety check
77+
print(segments[:10])
78+
# convert log probabilities to probabilities
79+
borderProbs = np.exp(borderProbs)
80+
# print(type(borderProbs), borderProbs.shape, borderProbs)
81+
borderProbs = np.concat((np.zeros(start), borderProbs))
82+
return borderProbs
83+
84+
4985
def readUncalled4(file : str, readid : str) -> list:
5086
print("Reading Uncalled4 output from " + file)
5187
segments = []
@@ -166,6 +202,14 @@ def main() -> None:
166202
ax[i].vlines([start, end], ymin=min(signal), ymax=max(signal), colors=basecolors[base], linestyles='--', linewidth=0.7)
167203
ax[i].add_patch(Rectangle((start, min(signal)), end - start, max(signal)-min(signal), alpha=0.4, edgecolor=basecolors[base], facecolor=basecolors[base]))
168204

205+
# if tool == "Dynamont":
206+
# prob_ax = ax[i].twinx()
207+
# borderProbs = getDynamontProbs()
208+
# prob_ax.plot(np.arange(len(borderProbs)), borderProbs, c='red', linewidth=0.5, linestyle='-')
209+
# prob_ax.set_ylabel("Border Probabilities", fontsize=10)
210+
# prob_ax.set_ylim((-0.1, 5))
211+
# prob_ax.set_yticks([0, 1])
212+
169213
plt.tight_layout()
170214
plt.savefig(join(outpath, args.readid + "_tool_segmentation.svg"), dpi=300)
171215
plt.savefig(join(outpath, args.readid + "_tool_segmentation.pdf"), dpi=300)
@@ -191,6 +235,14 @@ def main() -> None:
191235
ax[i].vlines([start], ymin=min(signal), ymax=max(signal), colors=basecolors[base], linestyles='--', linewidth=0.7)
192236
ax[i].add_patch(Rectangle((start, min(signal)), end - start, max(signal)-min(signal), alpha=0.4, edgecolor=basecolors[base], facecolor=basecolors[base]))
193237

238+
# if tool == "Dynamont":
239+
# prob_ax = ax[i].twinx()
240+
# # borderProbs = getDynamontProbs()
241+
# prob_ax.plot(np.arange(len(borderProbs)), borderProbs, c='red', linewidth=1, linestyle='-')
242+
# prob_ax.set_ylabel("Border Probabilities", fontsize=10)
243+
# prob_ax.set_ylim((-0.1, 5))
244+
# prob_ax.set_yticks([0, 1])
245+
194246
ax[i].set_xticks(np.arange(0, len(signal), 500))
195247
# ax[i].set_xlim((19000, 22000)) #! for c28
196248
ax[i].set_xlim((7400, 8000))

0 commit comments

Comments
 (0)