@@ -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+
4985def 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