1
+ from seqspec .Assay import Assay
1
2
from seqspec .Region import Region
3
+ from seqspec .Read import Read
4
+ from seqspec .Read import File
2
5
3
6
4
7
def print_seqspec_html (spec ):
@@ -94,6 +97,7 @@ def atomicRegionTemplate(
94
97
<li>onlist: { onlist } </li>
95
98
<li> regions: { subseq }
96
99
</li>
100
+ </ul>
97
101
</details>
98
102
"""
99
103
return s
@@ -116,21 +120,85 @@ def regionsTemplate(regions):
116
120
return s
117
121
118
122
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
+ )
120
140
s = f"""
121
- <h6 style="text-align: center">{ region . name } </h6>
141
+ <h6 style="text-align: center">{ modality } </h6>
122
142
<pre
123
143
style="overflow-x: auto; text-align: left; background-color: #f6f8fa"
124
144
>
125
- { colorSeq ( region . get_leaves ()) } </pre>
145
+ { seq } </pre>
126
146
"""
127
147
return s
128
148
129
149
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
+ """
134
202
return s
135
203
136
204
@@ -173,7 +241,7 @@ def htmlTemplate(spec):
173
241
</div>
174
242
<div id="library_spec">
175
243
<h2>Final library</h2>
176
- { multiModalTemplate (spec . library_spec )}
244
+ { multiModalTemplate (spec )}
177
245
</div>
178
246
</div>
179
247
</body>
0 commit comments