Skip to content

Commit 1e1abed

Browse files
committed
updating seqspec-html to print read info
1 parent 1ea7239 commit 1e1abed

File tree

2 files changed

+95
-22
lines changed

2 files changed

+95
-22
lines changed

seqspec/seqspec_print.py

+19-14
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def run_seqspec_print(spec_fn, fmt, o):
7171
s = CMD[fmt](spec)
7272

7373
if fmt == "png":
74-
return s.savefig(o, dpi=300, bbox_inches="tight")
74+
return s.savefig(o, dpi=300, bbox_inches="tight") #
7575

7676
if o:
7777
with open(o, "w") as f:
@@ -84,10 +84,26 @@ def run_seqspec_print(spec_fn, fmt, o):
8484
def print_seqspec_ascii(spec):
8585
p = []
8686
for modality in spec.modalities:
87-
p.append(libseq(spec, modality))
87+
p.append(format_libseq(spec, modality, *libseq(spec, modality)))
8888
return "\n".join(p)
8989

9090

91+
def format_libseq(spec, modality, p, n):
92+
libspec = spec.get_libspec(modality)
93+
94+
s = "\n".join(
95+
[
96+
modality,
97+
"---",
98+
"\n".join(p),
99+
libspec.sequence,
100+
complement_sequence(libspec.sequence),
101+
"\n".join(n),
102+
]
103+
)
104+
return s
105+
106+
91107
def libseq(spec, modality):
92108
libspec = spec.get_libspec(modality)
93109
seqspec = spec.get_seqspec(modality)
@@ -118,18 +134,7 @@ def libseq(spec, modality):
118134
arrow = arrowl * "-"
119135

120136
n.append(f"{ws}<{arrow}|({idx}) {read_id}")
121-
122-
s = "\n".join(
123-
[
124-
modality,
125-
"---",
126-
"\n".join(p),
127-
libspec.sequence,
128-
complement_sequence(libspec.sequence),
129-
"\n".join(n),
130-
]
131-
)
132-
return s
137+
return (p, n)
133138

134139

135140
def run_print(data):

seqspec/seqspec_print_html.py

+76-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from seqspec.Assay import Assay
12
from seqspec.Region import Region
3+
from seqspec.Read import Read
4+
from seqspec.Read import File
25

36

47
def print_seqspec_html(spec):
@@ -94,6 +97,7 @@ def atomicRegionTemplate(
9497
<li>onlist: {onlist}</li>
9598
<li> regions: {subseq}
9699
</li>
100+
</ul>
97101
</details>
98102
"""
99103
return s
@@ -116,21 +120,85 @@ def regionsTemplate(regions):
116120
return s
117121

118122

119-
def libStructTemplate(region):
123+
def libStructTemplate(spec, modality):
124+
from seqspec.seqspec_print import libseq
125+
from seqspec.Region import complement_sequence
126+
127+
libspec = spec.get_libspec(modality)
128+
seqspec = spec.get_seqspec(modality) # noqa
129+
p, n = libseq(spec, modality)
130+
131+
cseq = colorSeq(libspec.get_leaves())
132+
seq = "\n".join(
133+
[
134+
"\n".join(p),
135+
cseq,
136+
complement_sequence(libspec.sequence),
137+
"\n".join(n),
138+
]
139+
)
120140
s = f"""
121-
<h6 style="text-align: center">{region.name}</h6>
141+
<h6 style="text-align: center">{modality}</h6>
122142
<pre
123143
style="overflow-x: auto; text-align: left; background-color: #f6f8fa"
124144
>
125-
{colorSeq(region.get_leaves())}</pre>
145+
{seq}</pre>
126146
"""
127147
return s
128148

129149

130-
def multiModalTemplate(library_spec):
131-
s = "".join(
132-
[libStructTemplate(v) + "\n" + regionsTemplate(v.regions) for v in library_spec]
133-
)
150+
def atomicReadTemplate(read: Read):
151+
files = "".join(atomicFileTemplate(f) for f in read.files) if read.files else ""
152+
153+
s = f"""
154+
<details>
155+
<summary>{read.name}</summary>
156+
<ul>
157+
<li>read_id: {read.read_id}</li>
158+
<li>primer_id: {read.primer_id}</li>
159+
<li>min_len: {read.min_len}</li>
160+
<li>max_len: {read.max_len}</li>
161+
<li>strand: {read.strand}</li>
162+
<li>
163+
files:
164+
<ul>
165+
{files}
166+
</ul>
167+
</li>
168+
</ul>
169+
</details>
170+
"""
171+
return s
172+
173+
174+
def atomicFileTemplate(file: File):
175+
s = f"""
176+
<li>{file.filename} (md5: {file.md5})</li>
177+
"""
178+
return s
179+
180+
181+
def readsTemplate(reads):
182+
s = f"""<ol><li>
183+
{'</li><li>'.join([atomicReadTemplate(r) for r in reads])}
184+
</li></ol>"""
185+
return s
186+
187+
188+
def multiModalTemplate(spec: Assay):
189+
modes = spec.modalities
190+
s = ""
191+
for m in modes:
192+
libspec = spec.get_libspec(m)
193+
seqspec = spec.get_seqspec(m)
194+
195+
s += f"""
196+
{libStructTemplate(spec, m)}
197+
<h3>Sequence structure</h3>
198+
{readsTemplate(seqspec)}
199+
<h4>Library structure</h4>
200+
{regionsTemplate(libspec.get_leaves())}
201+
"""
134202
return s
135203

136204

@@ -173,7 +241,7 @@ def htmlTemplate(spec):
173241
</div>
174242
<div id="library_spec">
175243
<h2>Final library</h2>
176-
{multiModalTemplate(spec.library_spec)}
244+
{multiModalTemplate(spec)}
177245
</div>
178246
</div>
179247
</body>

0 commit comments

Comments
 (0)