jbrowse-plugin-msaview 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +229 -0
  3. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +23 -18
  4. package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -1
  5. package/dist/AddHighlightModel/MsaToGenomeHighlight.js +23 -13
  6. package/dist/AddHighlightModel/MsaToGenomeHighlight.js.map +1 -1
  7. package/dist/AddHighlightModel/index.js +8 -1
  8. package/dist/AddHighlightModel/index.js.map +1 -1
  9. package/dist/AddHighlightModel/util.d.ts +2 -2
  10. package/dist/BgzipFastaMsaAdapter/configSchema.d.ts +2 -2
  11. package/dist/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.js +5 -11
  12. package/dist/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.js.map +1 -1
  13. package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js +5 -1
  14. package/dist/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.js.map +1 -1
  15. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +16 -16
  16. package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js.map +1 -1
  17. package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js +38 -46
  18. package/dist/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.js.map +1 -1
  19. package/dist/LaunchMsaView/components/ManualMSALoader/launchView.d.ts +4 -3
  20. package/dist/LaunchMsaView/components/ManualMSALoader/launchView.js +4 -3
  21. package/dist/LaunchMsaView/components/ManualMSALoader/launchView.js.map +1 -1
  22. package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.d.ts +9 -0
  23. package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.js +76 -0
  24. package/dist/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.js.map +1 -0
  25. package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js +35 -13
  26. package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.js.map +1 -1
  27. package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js +6 -12
  28. package/dist/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.js.map +1 -1
  29. package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.d.ts +6 -0
  30. package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.js +15 -0
  31. package/dist/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.js.map +1 -1
  32. package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +12 -34
  33. package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -1
  34. package/dist/LaunchMsaView/components/PreLoadedMSA/consts.d.ts +1 -0
  35. package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js +1 -0
  36. package/dist/LaunchMsaView/components/PreLoadedMSA/consts.js.map +1 -1
  37. package/dist/LaunchMsaView/components/TabPanel.d.ts +2 -2
  38. package/dist/LaunchMsaView/components/TranscriptSelector.d.ts +2 -2
  39. package/dist/LaunchMsaView/components/TranscriptSelector.js +3 -6
  40. package/dist/LaunchMsaView/components/TranscriptSelector.js.map +1 -1
  41. package/dist/LaunchMsaView/components/useSWRFeatureSequence.js +6 -4
  42. package/dist/LaunchMsaView/components/useSWRFeatureSequence.js.map +1 -1
  43. package/dist/LaunchMsaView/components/useTranscriptSelection.d.ts +16 -0
  44. package/dist/LaunchMsaView/components/useTranscriptSelection.js +31 -0
  45. package/dist/LaunchMsaView/components/useTranscriptSelection.js.map +1 -0
  46. package/dist/LaunchMsaView/components/util.d.ts +3 -1
  47. package/dist/LaunchMsaView/components/util.js +12 -2
  48. package/dist/LaunchMsaView/components/util.js.map +1 -1
  49. package/dist/LaunchMsaView/util.d.ts +2 -0
  50. package/dist/LaunchMsaView/util.js +16 -4
  51. package/dist/LaunchMsaView/util.js.map +1 -1
  52. package/dist/LaunchMsaViewExtensionPoint/index.d.ts +2 -0
  53. package/dist/LaunchMsaViewExtensionPoint/index.js +31 -0
  54. package/dist/LaunchMsaViewExtensionPoint/index.js.map +1 -0
  55. package/dist/MsaViewPanel/components/ConnectStructureDialog.d.ts +7 -0
  56. package/dist/MsaViewPanel/components/ConnectStructureDialog.js +56 -0
  57. package/dist/MsaViewPanel/components/ConnectStructureDialog.js.map +1 -0
  58. package/dist/MsaViewPanel/components/MsaViewPanel.js +4 -2
  59. package/dist/MsaViewPanel/components/MsaViewPanel.js.map +1 -1
  60. package/dist/MsaViewPanel/doLaunchBlast.d.ts +1 -0
  61. package/dist/MsaViewPanel/doLaunchBlast.js +65 -19
  62. package/dist/MsaViewPanel/doLaunchBlast.js.map +1 -1
  63. package/dist/MsaViewPanel/genomeToMSA.d.ts +6 -0
  64. package/dist/MsaViewPanel/genomeToMSA.js +38 -8
  65. package/dist/MsaViewPanel/genomeToMSA.js.map +1 -1
  66. package/dist/MsaViewPanel/genomeToMSA.test.d.ts +1 -0
  67. package/dist/MsaViewPanel/genomeToMSA.test.js +244 -0
  68. package/dist/MsaViewPanel/genomeToMSA.test.js.map +1 -0
  69. package/dist/MsaViewPanel/model.d.ts +727 -226
  70. package/dist/MsaViewPanel/model.js +496 -52
  71. package/dist/MsaViewPanel/model.js.map +1 -1
  72. package/dist/MsaViewPanel/msaCoordToGenomeCoord.d.ts +10 -2
  73. package/dist/MsaViewPanel/msaCoordToGenomeCoord.js +26 -27
  74. package/dist/MsaViewPanel/msaCoordToGenomeCoord.js.map +1 -1
  75. package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.d.ts +1 -0
  76. package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.js +240 -0
  77. package/dist/MsaViewPanel/msaCoordToGenomeCoord.test.js.map +1 -0
  78. package/dist/MsaViewPanel/msaDataStore.d.ts +14 -0
  79. package/dist/MsaViewPanel/msaDataStore.js +197 -0
  80. package/dist/MsaViewPanel/msaDataStore.js.map +1 -0
  81. package/dist/MsaViewPanel/pairwiseAlignment.d.ts +27 -0
  82. package/dist/MsaViewPanel/pairwiseAlignment.js +776 -0
  83. package/dist/MsaViewPanel/pairwiseAlignment.js.map +1 -0
  84. package/dist/MsaViewPanel/pairwiseAlignment.test.d.ts +1 -0
  85. package/dist/MsaViewPanel/pairwiseAlignment.test.js +112 -0
  86. package/dist/MsaViewPanel/pairwiseAlignment.test.js.map +1 -0
  87. package/dist/MsaViewPanel/structureConnection.d.ts +27 -0
  88. package/dist/MsaViewPanel/structureConnection.js +46 -0
  89. package/dist/MsaViewPanel/structureConnection.js.map +1 -0
  90. package/dist/MsaViewPanel/structureConnection.test.d.ts +1 -0
  91. package/dist/MsaViewPanel/structureConnection.test.js +122 -0
  92. package/dist/MsaViewPanel/structureConnection.test.js.map +1 -0
  93. package/dist/MsaViewPanel/types.d.ts +13 -0
  94. package/dist/MsaViewPanel/types.js +2 -0
  95. package/dist/MsaViewPanel/types.js.map +1 -0
  96. package/dist/MsaViewPanel/util.d.ts +7 -0
  97. package/dist/MsaViewPanel/util.js +10 -0
  98. package/dist/MsaViewPanel/util.js.map +1 -1
  99. package/dist/index.d.ts +5 -5
  100. package/dist/index.js +3 -1
  101. package/dist/index.js.map +1 -1
  102. package/dist/jbrowse-plugin-msaview.umd.production.min.js +39 -90
  103. package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +4 -4
  104. package/dist/utils/blastCache.d.ts +34 -0
  105. package/dist/utils/blastCache.js +58 -0
  106. package/dist/utils/blastCache.js.map +1 -0
  107. package/dist/utils/fetch.d.ts +1 -1
  108. package/dist/utils/fetch.js +1 -1
  109. package/dist/utils/fetch.js.map +1 -1
  110. package/dist/utils/ncbiBlast.d.ts +1 -5
  111. package/dist/utils/taxonomyNames.d.ts +5 -0
  112. package/dist/utils/taxonomyNames.js +79 -0
  113. package/dist/utils/taxonomyNames.js.map +1 -0
  114. package/dist/utils/types.d.ts +8 -5
  115. package/package.json +50 -54
  116. package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +37 -21
  117. package/src/AddHighlightModel/MsaToGenomeHighlight.tsx +38 -17
  118. package/src/AddHighlightModel/index.tsx +9 -4
  119. package/src/LaunchMsaView/components/EnsemblGeneTree/EnsemblGeneTree.tsx +13 -13
  120. package/src/LaunchMsaView/components/EnsemblGeneTree/useGeneTree.ts +6 -0
  121. package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +30 -23
  122. package/src/LaunchMsaView/components/ManualMSALoader/ManualMSALoader.tsx +64 -51
  123. package/src/LaunchMsaView/components/ManualMSALoader/launchView.ts +9 -6
  124. package/src/LaunchMsaView/components/NCBIBlastQuery/CachedBlastResults.tsx +146 -0
  125. package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastAutomaticPanel.tsx +53 -22
  126. package/src/LaunchMsaView/components/NCBIBlastQuery/NCBIBlastManualPanel.tsx +8 -13
  127. package/src/LaunchMsaView/components/NCBIBlastQuery/blastLaunchView.ts +25 -0
  128. package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +27 -47
  129. package/src/LaunchMsaView/components/PreLoadedMSA/consts.ts +1 -0
  130. package/src/LaunchMsaView/components/TabPanel.tsx +2 -2
  131. package/src/LaunchMsaView/components/TranscriptSelector.tsx +13 -20
  132. package/src/LaunchMsaView/components/useSWRFeatureSequence.ts +5 -5
  133. package/src/LaunchMsaView/components/useTranscriptSelection.ts +48 -0
  134. package/src/LaunchMsaView/components/util.ts +17 -2
  135. package/src/LaunchMsaView/index.ts +1 -1
  136. package/src/LaunchMsaView/util.ts +25 -6
  137. package/src/LaunchMsaViewExtensionPoint/index.ts +74 -0
  138. package/src/MsaViewPanel/components/ConnectStructureDialog.tsx +156 -0
  139. package/src/MsaViewPanel/components/MsaViewPanel.tsx +6 -1
  140. package/src/MsaViewPanel/doLaunchBlast.ts +83 -23
  141. package/src/MsaViewPanel/genomeToMSA.test.ts +281 -0
  142. package/src/MsaViewPanel/genomeToMSA.ts +43 -10
  143. package/src/MsaViewPanel/model.ts +617 -58
  144. package/src/MsaViewPanel/msaCoordToGenomeCoord.test.ts +256 -0
  145. package/src/MsaViewPanel/msaCoordToGenomeCoord.ts +42 -30
  146. package/src/MsaViewPanel/msaDataStore.ts +236 -0
  147. package/src/MsaViewPanel/pairwiseAlignment.test.ts +140 -0
  148. package/src/MsaViewPanel/pairwiseAlignment.ts +818 -0
  149. package/src/MsaViewPanel/structureConnection.test.ts +143 -0
  150. package/src/MsaViewPanel/structureConnection.ts +72 -0
  151. package/src/MsaViewPanel/types.ts +14 -0
  152. package/src/MsaViewPanel/util.ts +11 -0
  153. package/src/index.ts +3 -1
  154. package/src/utils/blastCache.ts +114 -0
  155. package/src/utils/fetch.ts +1 -1
  156. package/src/utils/taxonomyNames.ts +111 -0
  157. package/src/utils/types.ts +9 -1
  158. package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.d.ts +0 -5
  159. package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js +0 -16
  160. package/dist/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.js.map +0 -1
  161. package/dist/out.js +0 -55367
  162. package/src/LaunchMsaView/components/PreLoadedMSA/findValidTranscriptId.ts +0 -25
@@ -0,0 +1,776 @@
1
+ // Pairwise alignment utilities for MSA-to-structure mapping
2
+ // Based on code from jbrowse-plugin-protein3d
3
+ // BLOSUM62 scoring matrix for protein sequence alignment
4
+ const BLOSUM62 = {
5
+ A: {
6
+ A: 4,
7
+ R: -1,
8
+ N: -2,
9
+ D: -2,
10
+ C: 0,
11
+ Q: -1,
12
+ E: -1,
13
+ G: 0,
14
+ H: -2,
15
+ I: -1,
16
+ L: -1,
17
+ K: -1,
18
+ M: -1,
19
+ F: -2,
20
+ P: -1,
21
+ S: 1,
22
+ T: 0,
23
+ W: -3,
24
+ Y: -2,
25
+ V: 0,
26
+ B: -2,
27
+ Z: -1,
28
+ X: 0,
29
+ '*': -4,
30
+ },
31
+ R: {
32
+ A: -1,
33
+ R: 5,
34
+ N: 0,
35
+ D: -2,
36
+ C: -3,
37
+ Q: 1,
38
+ E: 0,
39
+ G: -2,
40
+ H: 0,
41
+ I: -3,
42
+ L: -2,
43
+ K: 2,
44
+ M: -1,
45
+ F: -3,
46
+ P: -2,
47
+ S: -1,
48
+ T: -1,
49
+ W: -3,
50
+ Y: -2,
51
+ V: -3,
52
+ B: -1,
53
+ Z: 0,
54
+ X: -1,
55
+ '*': -4,
56
+ },
57
+ N: {
58
+ A: -2,
59
+ R: 0,
60
+ N: 6,
61
+ D: 1,
62
+ C: -3,
63
+ Q: 0,
64
+ E: 0,
65
+ G: 0,
66
+ H: 1,
67
+ I: -3,
68
+ L: -3,
69
+ K: 0,
70
+ M: -2,
71
+ F: -3,
72
+ P: -2,
73
+ S: 1,
74
+ T: 0,
75
+ W: -4,
76
+ Y: -2,
77
+ V: -3,
78
+ B: 3,
79
+ Z: 0,
80
+ X: -1,
81
+ '*': -4,
82
+ },
83
+ D: {
84
+ A: -2,
85
+ R: -2,
86
+ N: 1,
87
+ D: 6,
88
+ C: -3,
89
+ Q: 0,
90
+ E: 2,
91
+ G: -1,
92
+ H: -1,
93
+ I: -3,
94
+ L: -4,
95
+ K: -1,
96
+ M: -3,
97
+ F: -3,
98
+ P: -1,
99
+ S: 0,
100
+ T: -1,
101
+ W: -4,
102
+ Y: -3,
103
+ V: -3,
104
+ B: 4,
105
+ Z: 1,
106
+ X: -1,
107
+ '*': -4,
108
+ },
109
+ C: {
110
+ A: 0,
111
+ R: -3,
112
+ N: -3,
113
+ D: -3,
114
+ C: 9,
115
+ Q: -3,
116
+ E: -4,
117
+ G: -3,
118
+ H: -3,
119
+ I: -1,
120
+ L: -1,
121
+ K: -3,
122
+ M: -1,
123
+ F: -2,
124
+ P: -3,
125
+ S: -1,
126
+ T: -1,
127
+ W: -2,
128
+ Y: -2,
129
+ V: -1,
130
+ B: -3,
131
+ Z: -3,
132
+ X: -2,
133
+ '*': -4,
134
+ },
135
+ Q: {
136
+ A: -1,
137
+ R: 1,
138
+ N: 0,
139
+ D: 0,
140
+ C: -3,
141
+ Q: 5,
142
+ E: 2,
143
+ G: -2,
144
+ H: 0,
145
+ I: -3,
146
+ L: -2,
147
+ K: 1,
148
+ M: 0,
149
+ F: -3,
150
+ P: -1,
151
+ S: 0,
152
+ T: -1,
153
+ W: -2,
154
+ Y: -1,
155
+ V: -2,
156
+ B: 0,
157
+ Z: 3,
158
+ X: -1,
159
+ '*': -4,
160
+ },
161
+ E: {
162
+ A: -1,
163
+ R: 0,
164
+ N: 0,
165
+ D: 2,
166
+ C: -4,
167
+ Q: 2,
168
+ E: 5,
169
+ G: -2,
170
+ H: 0,
171
+ I: -3,
172
+ L: -3,
173
+ K: 1,
174
+ M: -2,
175
+ F: -3,
176
+ P: -1,
177
+ S: 0,
178
+ T: -1,
179
+ W: -3,
180
+ Y: -2,
181
+ V: -2,
182
+ B: 1,
183
+ Z: 4,
184
+ X: -1,
185
+ '*': -4,
186
+ },
187
+ G: {
188
+ A: 0,
189
+ R: -2,
190
+ N: 0,
191
+ D: -1,
192
+ C: -3,
193
+ Q: -2,
194
+ E: -2,
195
+ G: 6,
196
+ H: -2,
197
+ I: -4,
198
+ L: -4,
199
+ K: -2,
200
+ M: -3,
201
+ F: -3,
202
+ P: -2,
203
+ S: 0,
204
+ T: -2,
205
+ W: -2,
206
+ Y: -3,
207
+ V: -3,
208
+ B: -1,
209
+ Z: -2,
210
+ X: -1,
211
+ '*': -4,
212
+ },
213
+ H: {
214
+ A: -2,
215
+ R: 0,
216
+ N: 1,
217
+ D: -1,
218
+ C: -3,
219
+ Q: 0,
220
+ E: 0,
221
+ G: -2,
222
+ H: 8,
223
+ I: -3,
224
+ L: -3,
225
+ K: -1,
226
+ M: -2,
227
+ F: -1,
228
+ P: -2,
229
+ S: -1,
230
+ T: -2,
231
+ W: -2,
232
+ Y: 2,
233
+ V: -3,
234
+ B: 0,
235
+ Z: 0,
236
+ X: -1,
237
+ '*': -4,
238
+ },
239
+ I: {
240
+ A: -1,
241
+ R: -3,
242
+ N: -3,
243
+ D: -3,
244
+ C: -1,
245
+ Q: -3,
246
+ E: -3,
247
+ G: -4,
248
+ H: -3,
249
+ I: 4,
250
+ L: 2,
251
+ K: -3,
252
+ M: 1,
253
+ F: 0,
254
+ P: -3,
255
+ S: -2,
256
+ T: -1,
257
+ W: -3,
258
+ Y: -1,
259
+ V: 3,
260
+ B: -3,
261
+ Z: -3,
262
+ X: -1,
263
+ '*': -4,
264
+ },
265
+ L: {
266
+ A: -1,
267
+ R: -2,
268
+ N: -3,
269
+ D: -4,
270
+ C: -1,
271
+ Q: -2,
272
+ E: -3,
273
+ G: -4,
274
+ H: -3,
275
+ I: 2,
276
+ L: 4,
277
+ K: -2,
278
+ M: 2,
279
+ F: 0,
280
+ P: -3,
281
+ S: -2,
282
+ T: -1,
283
+ W: -2,
284
+ Y: -1,
285
+ V: 1,
286
+ B: -4,
287
+ Z: -3,
288
+ X: -1,
289
+ '*': -4,
290
+ },
291
+ K: {
292
+ A: -1,
293
+ R: 2,
294
+ N: 0,
295
+ D: -1,
296
+ C: -3,
297
+ Q: 1,
298
+ E: 1,
299
+ G: -2,
300
+ H: -1,
301
+ I: -3,
302
+ L: -2,
303
+ K: 5,
304
+ M: -1,
305
+ F: -3,
306
+ P: -1,
307
+ S: 0,
308
+ T: -1,
309
+ W: -3,
310
+ Y: -2,
311
+ V: -2,
312
+ B: 0,
313
+ Z: 1,
314
+ X: -1,
315
+ '*': -4,
316
+ },
317
+ M: {
318
+ A: -1,
319
+ R: -1,
320
+ N: -2,
321
+ D: -3,
322
+ C: -1,
323
+ Q: 0,
324
+ E: -2,
325
+ G: -3,
326
+ H: -2,
327
+ I: 1,
328
+ L: 2,
329
+ K: -1,
330
+ M: 5,
331
+ F: 0,
332
+ P: -2,
333
+ S: -1,
334
+ T: -1,
335
+ W: -1,
336
+ Y: -1,
337
+ V: 1,
338
+ B: -3,
339
+ Z: -1,
340
+ X: -1,
341
+ '*': -4,
342
+ },
343
+ F: {
344
+ A: -2,
345
+ R: -3,
346
+ N: -3,
347
+ D: -3,
348
+ C: -2,
349
+ Q: -3,
350
+ E: -3,
351
+ G: -3,
352
+ H: -1,
353
+ I: 0,
354
+ L: 0,
355
+ K: -3,
356
+ M: 0,
357
+ F: 6,
358
+ P: -4,
359
+ S: -2,
360
+ T: -2,
361
+ W: 1,
362
+ Y: 3,
363
+ V: -1,
364
+ B: -3,
365
+ Z: -3,
366
+ X: -1,
367
+ '*': -4,
368
+ },
369
+ P: {
370
+ A: -1,
371
+ R: -2,
372
+ N: -2,
373
+ D: -1,
374
+ C: -3,
375
+ Q: -1,
376
+ E: -1,
377
+ G: -2,
378
+ H: -2,
379
+ I: -3,
380
+ L: -3,
381
+ K: -1,
382
+ M: -2,
383
+ F: -4,
384
+ P: 7,
385
+ S: -1,
386
+ T: -1,
387
+ W: -4,
388
+ Y: -3,
389
+ V: -2,
390
+ B: -2,
391
+ Z: -1,
392
+ X: -2,
393
+ '*': -4,
394
+ },
395
+ S: {
396
+ A: 1,
397
+ R: -1,
398
+ N: 1,
399
+ D: 0,
400
+ C: -1,
401
+ Q: 0,
402
+ E: 0,
403
+ G: 0,
404
+ H: -1,
405
+ I: -2,
406
+ L: -2,
407
+ K: 0,
408
+ M: -1,
409
+ F: -2,
410
+ P: -1,
411
+ S: 4,
412
+ T: 1,
413
+ W: -3,
414
+ Y: -2,
415
+ V: -2,
416
+ B: 0,
417
+ Z: 0,
418
+ X: 0,
419
+ '*': -4,
420
+ },
421
+ T: {
422
+ A: 0,
423
+ R: -1,
424
+ N: 0,
425
+ D: -1,
426
+ C: -1,
427
+ Q: -1,
428
+ E: -1,
429
+ G: -2,
430
+ H: -2,
431
+ I: -1,
432
+ L: -1,
433
+ K: -1,
434
+ M: -1,
435
+ F: -2,
436
+ P: -1,
437
+ S: 1,
438
+ T: 5,
439
+ W: -2,
440
+ Y: -2,
441
+ V: 0,
442
+ B: -1,
443
+ Z: -1,
444
+ X: 0,
445
+ '*': -4,
446
+ },
447
+ W: {
448
+ A: -3,
449
+ R: -3,
450
+ N: -4,
451
+ D: -4,
452
+ C: -2,
453
+ Q: -2,
454
+ E: -3,
455
+ G: -2,
456
+ H: -2,
457
+ I: -3,
458
+ L: -2,
459
+ K: -3,
460
+ M: -1,
461
+ F: 1,
462
+ P: -4,
463
+ S: -3,
464
+ T: -2,
465
+ W: 11,
466
+ Y: 2,
467
+ V: -3,
468
+ B: -4,
469
+ Z: -3,
470
+ X: -2,
471
+ '*': -4,
472
+ },
473
+ Y: {
474
+ A: -2,
475
+ R: -2,
476
+ N: -2,
477
+ D: -3,
478
+ C: -2,
479
+ Q: -1,
480
+ E: -2,
481
+ G: -3,
482
+ H: 2,
483
+ I: -1,
484
+ L: -1,
485
+ K: -2,
486
+ M: -1,
487
+ F: 3,
488
+ P: -3,
489
+ S: -2,
490
+ T: -2,
491
+ W: 2,
492
+ Y: 7,
493
+ V: -1,
494
+ B: -3,
495
+ Z: -2,
496
+ X: -1,
497
+ '*': -4,
498
+ },
499
+ V: {
500
+ A: 0,
501
+ R: -3,
502
+ N: -3,
503
+ D: -3,
504
+ C: -1,
505
+ Q: -2,
506
+ E: -2,
507
+ G: -3,
508
+ H: -3,
509
+ I: 3,
510
+ L: 1,
511
+ K: -2,
512
+ M: 1,
513
+ F: -1,
514
+ P: -2,
515
+ S: -2,
516
+ T: 0,
517
+ W: -3,
518
+ Y: -1,
519
+ V: 4,
520
+ B: -3,
521
+ Z: -2,
522
+ X: -1,
523
+ '*': -4,
524
+ },
525
+ B: {
526
+ A: -2,
527
+ R: -1,
528
+ N: 3,
529
+ D: 4,
530
+ C: -3,
531
+ Q: 0,
532
+ E: 1,
533
+ G: -1,
534
+ H: 0,
535
+ I: -3,
536
+ L: -4,
537
+ K: 0,
538
+ M: -3,
539
+ F: -3,
540
+ P: -2,
541
+ S: 0,
542
+ T: -1,
543
+ W: -4,
544
+ Y: -3,
545
+ V: -3,
546
+ B: 4,
547
+ Z: 1,
548
+ X: -1,
549
+ '*': -4,
550
+ },
551
+ Z: {
552
+ A: -1,
553
+ R: 0,
554
+ N: 0,
555
+ D: 1,
556
+ C: -3,
557
+ Q: 3,
558
+ E: 4,
559
+ G: -2,
560
+ H: 0,
561
+ I: -3,
562
+ L: -3,
563
+ K: 1,
564
+ M: -1,
565
+ F: -3,
566
+ P: -1,
567
+ S: 0,
568
+ T: -1,
569
+ W: -3,
570
+ Y: -2,
571
+ V: -2,
572
+ B: 1,
573
+ Z: 4,
574
+ X: -1,
575
+ '*': -4,
576
+ },
577
+ X: {
578
+ A: 0,
579
+ R: -1,
580
+ N: -1,
581
+ D: -1,
582
+ C: -2,
583
+ Q: -1,
584
+ E: -1,
585
+ G: -1,
586
+ H: -1,
587
+ I: -1,
588
+ L: -1,
589
+ K: -1,
590
+ M: -1,
591
+ F: -1,
592
+ P: -2,
593
+ S: 0,
594
+ T: 0,
595
+ W: -2,
596
+ Y: -1,
597
+ V: -1,
598
+ B: -1,
599
+ Z: -1,
600
+ X: -1,
601
+ '*': -4,
602
+ },
603
+ '*': {
604
+ A: -4,
605
+ R: -4,
606
+ N: -4,
607
+ D: -4,
608
+ C: -4,
609
+ Q: -4,
610
+ E: -4,
611
+ G: -4,
612
+ H: -4,
613
+ I: -4,
614
+ L: -4,
615
+ K: -4,
616
+ M: -4,
617
+ F: -4,
618
+ P: -4,
619
+ S: -4,
620
+ T: -4,
621
+ W: -4,
622
+ Y: -4,
623
+ V: -4,
624
+ B: -4,
625
+ Z: -4,
626
+ X: -4,
627
+ '*': 1,
628
+ },
629
+ };
630
+ function getScore(a, b) {
631
+ const upper_a = a.toUpperCase();
632
+ const upper_b = b.toUpperCase();
633
+ return BLOSUM62[upper_a]?.[upper_b] ?? -4;
634
+ }
635
+ const GAP_OPEN = -10;
636
+ const GAP_EXTEND = -0.5;
637
+ /**
638
+ * Needleman-Wunsch global alignment algorithm
639
+ */
640
+ export function needlemanWunsch(seq1, seq2, gapOpen = GAP_OPEN, gapExtend = GAP_EXTEND) {
641
+ const m = seq1.length;
642
+ const n = seq2.length;
643
+ const M = [];
644
+ const Ix = [];
645
+ const Iy = [];
646
+ for (let i = 0; i <= m; i++) {
647
+ M[i] = [];
648
+ Ix[i] = [];
649
+ Iy[i] = [];
650
+ for (let j = 0; j <= n; j++) {
651
+ M[i][j] = -Infinity;
652
+ Ix[i][j] = -Infinity;
653
+ Iy[i][j] = -Infinity;
654
+ }
655
+ }
656
+ M[0][0] = 0;
657
+ for (let i = 1; i <= m; i++) {
658
+ Ix[i][0] = gapOpen + (i - 1) * gapExtend;
659
+ }
660
+ for (let j = 1; j <= n; j++) {
661
+ Iy[0][j] = gapOpen + (j - 1) * gapExtend;
662
+ }
663
+ for (let i = 1; i <= m; i++) {
664
+ for (let j = 1; j <= n; j++) {
665
+ const matchScore = getScore(seq1[i - 1], seq2[j - 1]);
666
+ M[i][j] =
667
+ Math.max(M[i - 1][j - 1], Ix[i - 1][j - 1], Iy[i - 1][j - 1]) +
668
+ matchScore;
669
+ Ix[i][j] = Math.max(M[i - 1][j] + gapOpen, Ix[i - 1][j] + gapExtend);
670
+ Iy[i][j] = Math.max(M[i][j - 1] + gapOpen, Iy[i][j - 1] + gapExtend);
671
+ }
672
+ }
673
+ let alignedSeq1 = '';
674
+ let alignedSeq2 = '';
675
+ let i = m;
676
+ let j = n;
677
+ const finalScores = [M[m][n], Ix[m][n], Iy[m][n]];
678
+ const score = Math.max(...finalScores);
679
+ let currentMatrix = score === M[m][n] ? 'M' : score === Ix[m][n] ? 'Ix' : 'Iy';
680
+ while (i > 0 || j > 0) {
681
+ if (currentMatrix === 'M' && i > 0 && j > 0) {
682
+ alignedSeq1 = seq1[i - 1] + alignedSeq1;
683
+ alignedSeq2 = seq2[j - 1] + alignedSeq2;
684
+ const matchScore = getScore(seq1[i - 1], seq2[j - 1]);
685
+ const prevM = M[i - 1][j - 1];
686
+ const prevIx = Ix[i - 1][j - 1];
687
+ if (M[i][j] === prevM + matchScore) {
688
+ currentMatrix = 'M';
689
+ }
690
+ else if (M[i][j] === prevIx + matchScore) {
691
+ currentMatrix = 'Ix';
692
+ }
693
+ else {
694
+ currentMatrix = 'Iy';
695
+ }
696
+ i--;
697
+ j--;
698
+ }
699
+ else if (currentMatrix === 'Ix' && i > 0) {
700
+ alignedSeq1 = seq1[i - 1] + alignedSeq1;
701
+ alignedSeq2 = '-' + alignedSeq2;
702
+ currentMatrix = Ix[i][j] === M[i - 1][j] + gapOpen ? 'M' : 'Ix';
703
+ i--;
704
+ }
705
+ else if (j > 0) {
706
+ alignedSeq1 = '-' + alignedSeq1;
707
+ alignedSeq2 = seq2[j - 1] + alignedSeq2;
708
+ currentMatrix = Iy[i][j] === M[i][j - 1] + gapOpen ? 'M' : 'Iy';
709
+ j--;
710
+ }
711
+ else {
712
+ break;
713
+ }
714
+ }
715
+ return { alignedSeq1, alignedSeq2, score };
716
+ }
717
+ function buildConsensus(alignedSeq1, alignedSeq2) {
718
+ let consensus = '';
719
+ for (let i = 0; i < alignedSeq1.length; i++) {
720
+ const a = alignedSeq1[i];
721
+ const b = alignedSeq2[i];
722
+ if (a === '-' || b === '-') {
723
+ consensus += ' ';
724
+ }
725
+ else if (a.toUpperCase() === b.toUpperCase()) {
726
+ consensus += '|';
727
+ }
728
+ else {
729
+ consensus += ' ';
730
+ }
731
+ }
732
+ return consensus;
733
+ }
734
+ export function runPairwiseAlignment(seq1, seq2) {
735
+ const { alignedSeq1, alignedSeq2 } = needlemanWunsch(seq1, seq2);
736
+ return {
737
+ consensus: buildConsensus(alignedSeq1, alignedSeq2),
738
+ alns: [
739
+ { id: 'msa', seq: alignedSeq1 },
740
+ { id: 'structure', seq: alignedSeq2 },
741
+ ],
742
+ };
743
+ }
744
+ /**
745
+ * Build coordinate mappings from a pairwise alignment
746
+ * Maps between ungapped positions in seq1 and seq2
747
+ */
748
+ export function buildAlignmentMaps(pairwiseAlignment) {
749
+ const seq1 = pairwiseAlignment.alns[0].seq;
750
+ const seq2 = pairwiseAlignment.alns[1].seq;
751
+ if (seq1.length !== seq2.length) {
752
+ throw new Error('Aligned sequences must have same length');
753
+ }
754
+ let pos1 = 0;
755
+ let pos2 = 0;
756
+ const seq1ToSeq2 = new Map();
757
+ const seq2ToSeq1 = new Map();
758
+ for (let i = 0; i < seq1.length; i++) {
759
+ const c1 = seq1[i];
760
+ const c2 = seq2[i];
761
+ if (c1 !== '-' && c2 !== '-') {
762
+ seq1ToSeq2.set(pos1, pos2);
763
+ seq2ToSeq1.set(pos2, pos1);
764
+ pos1++;
765
+ pos2++;
766
+ }
767
+ else if (c1 === '-') {
768
+ pos2++;
769
+ }
770
+ else {
771
+ pos1++;
772
+ }
773
+ }
774
+ return { seq1ToSeq2, seq2ToSeq1 };
775
+ }
776
+ //# sourceMappingURL=pairwiseAlignment.js.map