@jbrowse/plugin-alignments 2.5.0 → 2.6.0

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 (402) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -1
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -1
  3. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +2 -1
  4. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  5. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -1
  6. package/dist/BamAdapter/BamAdapter.d.ts +1 -1
  7. package/dist/BamAdapter/BamAdapter.js +25 -30
  8. package/dist/BamAdapter/BamAdapter.js.map +1 -1
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  10. package/dist/CramAdapter/CramAdapter.js +48 -46
  11. package/dist/CramAdapter/CramAdapter.js.map +1 -1
  12. package/dist/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  13. package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  14. package/dist/CramAdapter/CramTestAdapters.js +1 -1
  15. package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
  16. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -1
  17. package/dist/LinearAlignmentsDisplay/models/model.d.ts +16 -6
  18. package/dist/LinearAlignmentsDisplay/models/model.js +2 -1
  19. package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
  20. package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -1
  21. package/dist/LinearPileupDisplay/components/ColorByModifications.js +3 -23
  22. package/dist/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  23. package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +2 -1
  24. package/dist/LinearPileupDisplay/components/ColorByTag.js +2 -6
  25. package/dist/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  26. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -2
  27. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  28. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  29. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  30. package/dist/LinearPileupDisplay/components/ModificationsTable.js +29 -0
  31. package/dist/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  32. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -1
  33. package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -1
  34. package/dist/LinearPileupDisplay/components/SortByTag.d.ts +2 -1
  35. package/dist/LinearPileupDisplay/model.d.ts +101 -78
  36. package/dist/LinearPileupDisplay/model.js +161 -115
  37. package/dist/LinearPileupDisplay/model.js.map +1 -1
  38. package/dist/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -1
  39. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +36 -39
  40. package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  41. package/dist/LinearReadArcsDisplay/configSchema.d.ts +0 -3
  42. package/dist/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  43. package/dist/LinearReadArcsDisplay/drawFeats.js +56 -64
  44. package/dist/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  45. package/dist/LinearReadArcsDisplay/model.d.ts +52 -244
  46. package/dist/LinearReadArcsDisplay/model.js +65 -115
  47. package/dist/LinearReadArcsDisplay/model.js.map +1 -1
  48. package/dist/LinearReadArcsDisplay/util.d.ts +2 -0
  49. package/dist/LinearReadArcsDisplay/util.js +13 -0
  50. package/dist/LinearReadArcsDisplay/util.js.map +1 -0
  51. package/dist/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -1
  52. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +34 -36
  53. package/dist/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  54. package/dist/LinearReadCloudDisplay/configSchema.d.ts +3 -1
  55. package/dist/LinearReadCloudDisplay/drawFeats.d.ts +2 -12
  56. package/dist/LinearReadCloudDisplay/drawFeats.js +11 -127
  57. package/dist/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  58. package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  59. package/dist/LinearReadCloudDisplay/drawLongReadChains.js +69 -0
  60. package/dist/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  61. package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  62. package/dist/LinearReadCloudDisplay/drawPairChains.js +100 -0
  63. package/dist/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  64. package/dist/LinearReadCloudDisplay/model.d.ts +60 -238
  65. package/dist/LinearReadCloudDisplay/model.js +55 -92
  66. package/dist/LinearReadCloudDisplay/model.js.map +1 -1
  67. package/dist/LinearReadCloudDisplay/util.d.ts +2 -0
  68. package/dist/LinearReadCloudDisplay/util.js +35 -0
  69. package/dist/LinearReadCloudDisplay/util.js.map +1 -0
  70. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -1
  71. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +134 -74
  72. package/dist/LinearSNPCoverageDisplay/models/model.js +46 -33
  73. package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  74. package/dist/MismatchParser/index.d.ts +7 -2
  75. package/dist/MismatchParser/index.js +44 -5
  76. package/dist/MismatchParser/index.js.map +1 -1
  77. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  78. package/dist/PileupRPC/methods/GetReducedFeatures.js +1 -8
  79. package/dist/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  80. package/dist/PileupRenderer/PileupRenderer.d.ts +4 -117
  81. package/dist/PileupRenderer/PileupRenderer.js +18 -761
  82. package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
  83. package/dist/PileupRenderer/colorBy.d.ts +7 -0
  84. package/dist/PileupRenderer/colorBy.js +69 -0
  85. package/dist/PileupRenderer/colorBy.js.map +1 -0
  86. package/dist/PileupRenderer/components/PileupRendering.d.ts +7 -2
  87. package/dist/PileupRenderer/components/PileupRendering.js +17 -18
  88. package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
  89. package/dist/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  90. package/dist/PileupRenderer/getAlignmentShapeColor.js +60 -0
  91. package/dist/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  92. package/dist/PileupRenderer/index.js +1 -1
  93. package/dist/PileupRenderer/index.js.map +1 -1
  94. package/dist/PileupRenderer/layoutFeature.d.ts +18 -0
  95. package/dist/PileupRenderer/layoutFeature.js +41 -0
  96. package/dist/PileupRenderer/layoutFeature.js.map +1 -0
  97. package/dist/PileupRenderer/layoutFeatures.d.ts +2 -0
  98. package/dist/PileupRenderer/layoutFeatures.js +35 -0
  99. package/dist/PileupRenderer/layoutFeatures.js.map +1 -0
  100. package/dist/PileupRenderer/makeImageData.d.ts +17 -0
  101. package/dist/PileupRenderer/makeImageData.js +64 -0
  102. package/dist/PileupRenderer/makeImageData.js.map +1 -0
  103. package/dist/PileupRenderer/renderAlignment.d.ts +13 -0
  104. package/dist/PileupRenderer/renderAlignment.js +72 -0
  105. package/dist/PileupRenderer/renderAlignment.js.map +1 -0
  106. package/dist/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  107. package/dist/PileupRenderer/renderAlignmentShape.js +41 -0
  108. package/dist/PileupRenderer/renderAlignmentShape.js.map +1 -0
  109. package/dist/PileupRenderer/renderMethylation.d.ts +11 -0
  110. package/dist/PileupRenderer/renderMethylation.js +63 -0
  111. package/dist/PileupRenderer/renderMethylation.js.map +1 -0
  112. package/dist/PileupRenderer/renderMismatches.d.ts +21 -0
  113. package/dist/PileupRenderer/renderMismatches.js +135 -0
  114. package/dist/PileupRenderer/renderMismatches.js.map +1 -0
  115. package/dist/PileupRenderer/renderModifications.d.ts +11 -0
  116. package/dist/PileupRenderer/renderModifications.js +54 -0
  117. package/dist/PileupRenderer/renderModifications.js.map +1 -0
  118. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  119. package/dist/PileupRenderer/renderPerBaseLettering.js +47 -0
  120. package/dist/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  121. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  122. package/dist/PileupRenderer/renderPerBaseQuality.js +39 -0
  123. package/dist/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  124. package/dist/PileupRenderer/renderSoftClipping.d.ts +13 -0
  125. package/dist/PileupRenderer/renderSoftClipping.js +48 -0
  126. package/dist/PileupRenderer/renderSoftClipping.js.map +1 -0
  127. package/dist/PileupRenderer/sortUtil.js +1 -2
  128. package/dist/PileupRenderer/sortUtil.js.map +1 -1
  129. package/dist/PileupRenderer/util.d.ts +24 -0
  130. package/dist/PileupRenderer/util.js +51 -0
  131. package/dist/PileupRenderer/util.js.map +1 -0
  132. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +0 -2
  133. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +0 -3
  134. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  135. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  136. package/dist/SNPCoverageAdapter/generateCoverageBins.js +72 -49
  137. package/dist/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  138. package/dist/SNPCoverageAdapter/index.js +0 -2
  139. package/dist/SNPCoverageAdapter/index.js.map +1 -1
  140. package/dist/SNPCoverageAdapter/util.d.ts +29 -0
  141. package/dist/SNPCoverageAdapter/util.js +3 -0
  142. package/dist/SNPCoverageAdapter/util.js.map +1 -0
  143. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  144. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  145. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  146. package/dist/SNPCoverageRenderer/configSchema.d.ts +5 -0
  147. package/dist/SNPCoverageRenderer/configSchema.js +5 -0
  148. package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
  149. package/dist/shared/BaseDisplayComponent.d.ts +8 -0
  150. package/dist/shared/BaseDisplayComponent.js +49 -0
  151. package/dist/shared/BaseDisplayComponent.js.map +1 -0
  152. package/dist/shared/FilterByTag.d.ts +13 -11
  153. package/dist/shared/FilterByTag.js +8 -13
  154. package/dist/shared/FilterByTag.js.map +1 -1
  155. package/dist/shared/afterAttach.d.ts +2 -0
  156. package/dist/shared/afterAttach.js +44 -0
  157. package/dist/shared/afterAttach.js.map +1 -0
  158. package/dist/shared/color.d.ts +44 -6
  159. package/dist/shared/color.js +57 -23
  160. package/dist/shared/color.js.map +1 -1
  161. package/dist/shared/fetchChains.d.ts +3 -2
  162. package/dist/shared/fetchChains.js +14 -20
  163. package/dist/shared/fetchChains.js.map +1 -1
  164. package/dist/shared/renderSvg.d.ts +7 -0
  165. package/dist/shared/renderSvg.js +69 -0
  166. package/dist/shared/renderSvg.js.map +1 -0
  167. package/dist/shared/util.d.ts +2 -0
  168. package/dist/shared/util.js +13 -0
  169. package/dist/shared/util.js.map +1 -0
  170. package/dist/util.d.ts +16 -2
  171. package/dist/util.js +45 -4
  172. package/dist/util.js.map +1 -1
  173. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +2 -1
  174. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.d.ts +2 -1
  175. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js +3 -2
  176. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureFlags.js.map +1 -1
  177. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureSuppAligns.d.ts +2 -1
  178. package/esm/BamAdapter/BamAdapter.d.ts +1 -1
  179. package/esm/BamAdapter/BamAdapter.js +25 -30
  180. package/esm/BamAdapter/BamAdapter.js.map +1 -1
  181. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -1
  182. package/esm/CramAdapter/CramAdapter.js +49 -47
  183. package/esm/CramAdapter/CramAdapter.js.map +1 -1
  184. package/esm/CramAdapter/CramSlightlyLazyFeature.js +3 -5
  185. package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
  186. package/esm/CramAdapter/CramTestAdapters.js +1 -1
  187. package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
  188. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +2 -1
  189. package/esm/LinearAlignmentsDisplay/models/model.d.ts +16 -6
  190. package/esm/LinearAlignmentsDisplay/models/model.js +2 -1
  191. package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
  192. package/esm/LinearPileupDisplay/components/ColorByModifications.d.ts +2 -1
  193. package/esm/LinearPileupDisplay/components/ColorByModifications.js +2 -22
  194. package/esm/LinearPileupDisplay/components/ColorByModifications.js.map +1 -1
  195. package/esm/LinearPileupDisplay/components/ColorByTag.d.ts +2 -1
  196. package/esm/LinearPileupDisplay/components/ColorByTag.js +2 -6
  197. package/esm/LinearPileupDisplay/components/ColorByTag.js.map +1 -1
  198. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +3 -2
  199. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +6 -6
  200. package/esm/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js.map +1 -1
  201. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +4 -0
  202. package/esm/LinearPileupDisplay/components/ModificationsTable.js +23 -0
  203. package/esm/LinearPileupDisplay/components/ModificationsTable.js.map +1 -0
  204. package/esm/LinearPileupDisplay/components/SetFeatureHeight.d.ts +2 -1
  205. package/esm/LinearPileupDisplay/components/SetMaxHeight.d.ts +2 -1
  206. package/esm/LinearPileupDisplay/components/SortByTag.d.ts +2 -1
  207. package/esm/LinearPileupDisplay/model.d.ts +101 -78
  208. package/esm/LinearPileupDisplay/model.js +162 -116
  209. package/esm/LinearPileupDisplay/model.js.map +1 -1
  210. package/esm/LinearReadArcsDisplay/components/ReactComponent.d.ts +2 -1
  211. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +13 -39
  212. package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
  213. package/esm/LinearReadArcsDisplay/configSchema.d.ts +0 -3
  214. package/esm/LinearReadArcsDisplay/drawFeats.d.ts +2 -15
  215. package/esm/LinearReadArcsDisplay/drawFeats.js +54 -61
  216. package/esm/LinearReadArcsDisplay/drawFeats.js.map +1 -1
  217. package/esm/LinearReadArcsDisplay/model.d.ts +52 -244
  218. package/esm/LinearReadArcsDisplay/model.js +69 -119
  219. package/esm/LinearReadArcsDisplay/model.js.map +1 -1
  220. package/esm/LinearReadArcsDisplay/util.d.ts +2 -0
  221. package/esm/LinearReadArcsDisplay/util.js +9 -0
  222. package/esm/LinearReadArcsDisplay/util.js.map +1 -0
  223. package/esm/LinearReadCloudDisplay/components/ReactComponent.d.ts +2 -1
  224. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +11 -36
  225. package/esm/LinearReadCloudDisplay/components/ReactComponent.js.map +1 -1
  226. package/esm/LinearReadCloudDisplay/configSchema.d.ts +3 -1
  227. package/esm/LinearReadCloudDisplay/drawFeats.d.ts +2 -12
  228. package/esm/LinearReadCloudDisplay/drawFeats.js +9 -126
  229. package/esm/LinearReadCloudDisplay/drawFeats.js.map +1 -1
  230. package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +11 -0
  231. package/esm/LinearReadCloudDisplay/drawLongReadChains.js +65 -0
  232. package/esm/LinearReadCloudDisplay/drawLongReadChains.js.map +1 -0
  233. package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +17 -0
  234. package/esm/LinearReadCloudDisplay/drawPairChains.js +95 -0
  235. package/esm/LinearReadCloudDisplay/drawPairChains.js.map +1 -0
  236. package/esm/LinearReadCloudDisplay/model.d.ts +60 -238
  237. package/esm/LinearReadCloudDisplay/model.js +59 -96
  238. package/esm/LinearReadCloudDisplay/model.js.map +1 -1
  239. package/esm/LinearReadCloudDisplay/util.d.ts +2 -0
  240. package/esm/LinearReadCloudDisplay/util.js +30 -0
  241. package/esm/LinearReadCloudDisplay/util.js.map +1 -0
  242. package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +2 -1
  243. package/esm/LinearSNPCoverageDisplay/models/model.d.ts +134 -74
  244. package/esm/LinearSNPCoverageDisplay/models/model.js +48 -35
  245. package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
  246. package/esm/MismatchParser/index.d.ts +7 -2
  247. package/esm/MismatchParser/index.js +41 -4
  248. package/esm/MismatchParser/index.js.map +1 -1
  249. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +15 -2
  250. package/esm/PileupRPC/methods/GetReducedFeatures.js +2 -9
  251. package/esm/PileupRPC/methods/GetReducedFeatures.js.map +1 -1
  252. package/esm/PileupRenderer/PileupRenderer.d.ts +4 -117
  253. package/esm/PileupRenderer/PileupRenderer.js +20 -763
  254. package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
  255. package/esm/PileupRenderer/colorBy.d.ts +7 -0
  256. package/esm/PileupRenderer/colorBy.js +61 -0
  257. package/esm/PileupRenderer/colorBy.js.map +1 -0
  258. package/esm/PileupRenderer/components/PileupRendering.d.ts +7 -2
  259. package/esm/PileupRenderer/components/PileupRendering.js +17 -18
  260. package/esm/PileupRenderer/components/PileupRendering.js.map +1 -1
  261. package/esm/PileupRenderer/getAlignmentShapeColor.d.ts +10 -0
  262. package/esm/PileupRenderer/getAlignmentShapeColor.js +56 -0
  263. package/esm/PileupRenderer/getAlignmentShapeColor.js.map +1 -0
  264. package/esm/PileupRenderer/index.js +1 -1
  265. package/esm/PileupRenderer/index.js.map +1 -1
  266. package/esm/PileupRenderer/layoutFeature.d.ts +18 -0
  267. package/esm/PileupRenderer/layoutFeature.js +37 -0
  268. package/esm/PileupRenderer/layoutFeature.js.map +1 -0
  269. package/esm/PileupRenderer/layoutFeatures.d.ts +2 -0
  270. package/esm/PileupRenderer/layoutFeatures.js +31 -0
  271. package/esm/PileupRenderer/layoutFeatures.js.map +1 -0
  272. package/esm/PileupRenderer/makeImageData.d.ts +17 -0
  273. package/esm/PileupRenderer/makeImageData.js +60 -0
  274. package/esm/PileupRenderer/makeImageData.js.map +1 -0
  275. package/esm/PileupRenderer/renderAlignment.d.ts +13 -0
  276. package/esm/PileupRenderer/renderAlignment.js +68 -0
  277. package/esm/PileupRenderer/renderAlignment.js.map +1 -0
  278. package/esm/PileupRenderer/renderAlignmentShape.d.ts +7 -0
  279. package/esm/PileupRenderer/renderAlignmentShape.js +37 -0
  280. package/esm/PileupRenderer/renderAlignmentShape.js.map +1 -0
  281. package/esm/PileupRenderer/renderMethylation.d.ts +11 -0
  282. package/esm/PileupRenderer/renderMethylation.js +59 -0
  283. package/esm/PileupRenderer/renderMethylation.js.map +1 -0
  284. package/esm/PileupRenderer/renderMismatches.d.ts +21 -0
  285. package/esm/PileupRenderer/renderMismatches.js +131 -0
  286. package/esm/PileupRenderer/renderMismatches.js.map +1 -0
  287. package/esm/PileupRenderer/renderModifications.d.ts +11 -0
  288. package/esm/PileupRenderer/renderModifications.js +50 -0
  289. package/esm/PileupRenderer/renderModifications.js.map +1 -0
  290. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +13 -0
  291. package/esm/PileupRenderer/renderPerBaseLettering.js +43 -0
  292. package/esm/PileupRenderer/renderPerBaseLettering.js.map +1 -0
  293. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +9 -0
  294. package/esm/PileupRenderer/renderPerBaseQuality.js +35 -0
  295. package/esm/PileupRenderer/renderPerBaseQuality.js.map +1 -0
  296. package/esm/PileupRenderer/renderSoftClipping.d.ts +13 -0
  297. package/esm/PileupRenderer/renderSoftClipping.js +44 -0
  298. package/esm/PileupRenderer/renderSoftClipping.js.map +1 -0
  299. package/esm/PileupRenderer/sortUtil.js +1 -2
  300. package/esm/PileupRenderer/sortUtil.js.map +1 -1
  301. package/esm/PileupRenderer/util.d.ts +24 -0
  302. package/esm/PileupRenderer/util.js +42 -0
  303. package/esm/PileupRenderer/util.js.map +1 -0
  304. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +0 -2
  305. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +0 -2
  306. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js.map +1 -1
  307. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +3 -43
  308. package/esm/SNPCoverageAdapter/generateCoverageBins.js +73 -50
  309. package/esm/SNPCoverageAdapter/generateCoverageBins.js.map +1 -1
  310. package/esm/SNPCoverageAdapter/index.js +0 -2
  311. package/esm/SNPCoverageAdapter/index.js.map +1 -1
  312. package/esm/SNPCoverageAdapter/util.d.ts +29 -0
  313. package/esm/SNPCoverageAdapter/util.js +2 -0
  314. package/esm/SNPCoverageAdapter/util.js.map +1 -0
  315. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +1 -1
  316. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +2 -2
  317. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
  318. package/esm/SNPCoverageRenderer/configSchema.d.ts +5 -0
  319. package/esm/SNPCoverageRenderer/configSchema.js +5 -0
  320. package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
  321. package/esm/shared/BaseDisplayComponent.d.ts +8 -0
  322. package/esm/shared/BaseDisplayComponent.js +44 -0
  323. package/esm/shared/BaseDisplayComponent.js.map +1 -0
  324. package/esm/shared/FilterByTag.d.ts +13 -11
  325. package/esm/shared/FilterByTag.js +8 -13
  326. package/esm/shared/FilterByTag.js.map +1 -1
  327. package/esm/shared/afterAttach.d.ts +2 -0
  328. package/esm/shared/afterAttach.js +40 -0
  329. package/esm/shared/afterAttach.js.map +1 -0
  330. package/esm/shared/color.d.ts +44 -6
  331. package/esm/shared/color.js +54 -20
  332. package/esm/shared/color.js.map +1 -1
  333. package/esm/shared/fetchChains.d.ts +3 -2
  334. package/esm/shared/fetchChains.js +14 -20
  335. package/esm/shared/fetchChains.js.map +1 -1
  336. package/esm/shared/renderSvg.d.ts +7 -0
  337. package/esm/shared/renderSvg.js +39 -0
  338. package/esm/shared/renderSvg.js.map +1 -0
  339. package/esm/shared/util.d.ts +2 -0
  340. package/esm/shared/util.js +9 -0
  341. package/esm/shared/util.js.map +1 -0
  342. package/esm/util.d.ts +16 -2
  343. package/esm/util.js +42 -3
  344. package/esm/util.js.map +1 -1
  345. package/package.json +3 -3
  346. package/src/AlignmentsFeatureDetail/AlignmentsFeatureFlags.tsx +3 -5
  347. package/src/BamAdapter/BamAdapter.ts +41 -42
  348. package/src/CombinationTest.test.ts +2 -2
  349. package/src/CramAdapter/CramAdapter.ts +66 -55
  350. package/src/CramAdapter/CramSlightlyLazyFeature.ts +2 -5
  351. package/src/CramAdapter/CramTestAdapters.ts +1 -1
  352. package/src/LinearAlignmentsDisplay/models/model.tsx +5 -1
  353. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +3 -39
  354. package/src/LinearPileupDisplay/components/ColorByTag.tsx +1 -6
  355. package/src/LinearPileupDisplay/components/LinearPileupDisplayBlurb.tsx +10 -11
  356. package/src/LinearPileupDisplay/components/ModificationsTable.tsx +38 -0
  357. package/src/LinearPileupDisplay/model.ts +199 -152
  358. package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +23 -61
  359. package/src/LinearReadArcsDisplay/drawFeats.ts +77 -85
  360. package/src/LinearReadArcsDisplay/model.tsx +77 -155
  361. package/src/LinearReadArcsDisplay/util.ts +10 -0
  362. package/src/LinearReadCloudDisplay/components/ReactComponent.tsx +21 -59
  363. package/src/LinearReadCloudDisplay/drawFeats.ts +12 -167
  364. package/src/LinearReadCloudDisplay/drawLongReadChains.ts +85 -0
  365. package/src/LinearReadCloudDisplay/drawPairChains.ts +139 -0
  366. package/src/LinearReadCloudDisplay/model.tsx +72 -131
  367. package/src/LinearReadCloudDisplay/util.ts +47 -0
  368. package/src/LinearSNPCoverageDisplay/models/model.ts +63 -50
  369. package/src/MismatchParser/index.ts +46 -4
  370. package/src/PileupRPC/methods/GetReducedFeatures.ts +2 -10
  371. package/src/PileupRenderer/PileupRenderer.ts +23 -1200
  372. package/src/PileupRenderer/colorBy.ts +74 -0
  373. package/src/PileupRenderer/components/PileupRendering.tsx +20 -25
  374. package/src/PileupRenderer/getAlignmentShapeColor.ts +87 -0
  375. package/src/PileupRenderer/index.ts +1 -1
  376. package/src/PileupRenderer/layoutFeature.ts +83 -0
  377. package/src/PileupRenderer/layoutFeatures.ts +44 -0
  378. package/src/PileupRenderer/makeImageData.ts +93 -0
  379. package/src/PileupRenderer/renderAlignment.ts +97 -0
  380. package/src/PileupRenderer/renderAlignmentShape.ts +45 -0
  381. package/src/PileupRenderer/renderMethylation.ts +75 -0
  382. package/src/PileupRenderer/renderMismatches.ts +206 -0
  383. package/src/PileupRenderer/renderModifications.ts +74 -0
  384. package/src/PileupRenderer/renderPerBaseLettering.ts +67 -0
  385. package/src/PileupRenderer/renderPerBaseQuality.ts +46 -0
  386. package/src/PileupRenderer/renderSoftClipping.ts +78 -0
  387. package/src/PileupRenderer/sortUtil.ts +1 -3
  388. package/src/PileupRenderer/util.ts +63 -0
  389. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +0 -3
  390. package/src/SNPCoverageAdapter/generateCoverageBins.ts +111 -100
  391. package/src/SNPCoverageAdapter/index.ts +0 -2
  392. package/src/SNPCoverageAdapter/util.ts +33 -0
  393. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +3 -3
  394. package/src/SNPCoverageRenderer/configSchema.ts +6 -0
  395. package/src/shared/BaseDisplayComponent.tsx +83 -0
  396. package/src/shared/FilterByTag.tsx +13 -23
  397. package/src/shared/afterAttach.tsx +66 -0
  398. package/src/shared/color.ts +59 -20
  399. package/src/shared/fetchChains.ts +23 -24
  400. package/src/shared/renderSvg.tsx +64 -0
  401. package/src/shared/util.ts +10 -0
  402. package/src/util.ts +54 -5
@@ -1,13 +1,15 @@
1
1
  import React, { lazy } from 'react'
2
- import { autorun } from 'mobx'
3
- import { addDisposer, cast, types, Instance } from 'mobx-state-tree'
2
+ import { cast, types, Instance } from 'mobx-state-tree'
3
+ import { BaseDisplay } from '@jbrowse/core/pluggableElementTypes'
4
4
  import {
5
5
  AnyConfigurationSchemaType,
6
6
  ConfigurationReference,
7
- ConfigurationSchema,
8
7
  } from '@jbrowse/core/configuration'
9
- import { getContainingView, getSession } from '@jbrowse/core/util'
10
- import { BaseLinearDisplay } from '@jbrowse/plugin-linear-genome-view'
8
+ import { getSession } from '@jbrowse/core/util'
9
+ import {
10
+ FeatureDensityMixin,
11
+ TrackHeightMixin,
12
+ } from '@jbrowse/plugin-linear-genome-view'
11
13
 
12
14
  // icons
13
15
  import PaletteIcon from '@mui/icons-material/Palette'
@@ -15,9 +17,7 @@ import FilterListIcon from '@mui/icons-material/ClearAll'
15
17
 
16
18
  // locals
17
19
  import { FilterModel } from '../shared'
18
- import { fetchChains, ChainData } from '../shared/fetchChains'
19
- import drawFeats from './drawFeats'
20
- import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
20
+ import { ChainData } from '../shared/fetchChains'
21
21
 
22
22
  // async
23
23
  const FilterByTagDlg = lazy(() => import('../shared/FilterByTag'))
@@ -29,21 +29,17 @@ interface Filter {
29
29
  tagFilter?: { tag: string; value: string }
30
30
  }
31
31
 
32
- // stabilize clipid under test for snapshot
33
- function getId(id: string) {
34
- const isJest = typeof jest === 'undefined'
35
- return `cloud-clip-${isJest ? id : 'jest'}`
36
- }
37
-
38
32
  /**
39
33
  * #stateModel LinearReadCloudDisplay
40
- * extends `BaseLinearDisplay`
34
+ * extends `BaseDisplay`, it is not a block based track, hence not BaseLinearDisplay
41
35
  */
42
36
  function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
43
37
  return types
44
38
  .compose(
45
39
  'LinearReadCloudDisplay',
46
- BaseLinearDisplay,
40
+ BaseDisplay,
41
+ TrackHeightMixin(),
42
+ FeatureDensityMixin(),
47
43
  types.model({
48
44
  /**
49
45
  * #property
@@ -69,39 +65,38 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
69
65
  extra: types.frozen(),
70
66
  }),
71
67
  ),
68
+
69
+ /**
70
+ * #property
71
+ */
72
+ drawSingletons: true,
72
73
  }),
73
74
  )
74
75
  .volatile(() => ({
75
76
  loading: false,
76
- drawn: false,
77
77
  chainData: undefined as ChainData | undefined,
78
+ lastDrawnOffsetPx: undefined as number | undefined,
79
+ lastDrawnBpPerPx: 0,
78
80
  ref: null as HTMLCanvasElement | null,
79
- lastDrawnOffsetPx: 0,
80
81
  }))
81
82
  .actions(self => ({
82
83
  /**
83
84
  * #action
84
- * internal, a reference to a HTMLCanvas because we use a autorun to draw the canvas
85
85
  */
86
- reload() {
87
- self.error = undefined
86
+ setDrawSingletons(f: boolean) {
87
+ self.drawSingletons = f
88
88
  },
89
89
  /**
90
90
  * #action
91
91
  */
92
- setRef(ref: HTMLCanvasElement | null) {
93
- self.ref = ref
94
- },
95
-
96
- setColorScheme(s: { type: string }) {
97
- self.colorBy = cast(s)
92
+ setLastDrawnOffsetPx(n: number) {
93
+ self.lastDrawnOffsetPx = n
98
94
  },
99
-
100
95
  /**
101
96
  * #action
102
97
  */
103
- setChainData(args: ChainData) {
104
- self.chainData = args
98
+ setLastDrawnBpPerPx(n: number) {
99
+ self.lastDrawnBpPerPx = n
105
100
  },
106
101
 
107
102
  /**
@@ -110,29 +105,44 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
110
105
  setLoading(f: boolean) {
111
106
  self.loading = f
112
107
  },
113
-
114
108
  /**
115
109
  * #action
116
110
  */
117
- setDrawn(f: boolean) {
118
- self.drawn = f
111
+ reload() {
112
+ self.error = undefined
113
+ },
114
+ /**
115
+ * #action
116
+ * internal, a reference to a HTMLCanvas because we use a autorun to draw
117
+ * the canvas
118
+ */
119
+ setRef(ref: HTMLCanvasElement | null) {
120
+ self.ref = ref
121
+ },
122
+
123
+ setColorScheme(s: { type: string }) {
124
+ self.colorBy = cast(s)
119
125
  },
120
126
 
121
127
  /**
122
128
  * #action
123
129
  */
124
- setFilterBy(filter: Filter) {
125
- self.filterBy = cast(filter)
130
+ setChainData(args: ChainData) {
131
+ self.chainData = args
126
132
  },
127
133
 
128
134
  /**
129
135
  * #action
130
136
  */
131
- setLastDrawnOffsetPx(n: number) {
132
- self.lastDrawnOffsetPx = n
137
+ setFilterBy(filter: Filter) {
138
+ self.filterBy = cast(filter)
139
+ },
140
+ }))
141
+ .views(self => ({
142
+ get drawn() {
143
+ return self.lastDrawnOffsetPx !== undefined
133
144
  },
134
145
  }))
135
-
136
146
  .views(self => {
137
147
  const {
138
148
  trackMenuItems: superTrackMenuItems,
@@ -140,25 +150,12 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
140
150
  } = self
141
151
 
142
152
  return {
143
- /**
144
- * #getter
145
- */
146
- get ready() {
147
- return !!self.chainData
148
- },
149
- // we don't use a server side renderer, but we need to provide this
150
- // to avoid confusing the system currently
151
- get rendererTypeName() {
152
- return 'PileupRenderer'
153
- },
154
153
  // we don't use a server side renderer, so this fills in minimal
155
154
  // info so as not to crash
156
155
  renderProps() {
157
156
  return {
158
157
  ...superRenderProps(),
159
- // never ready, we don't want to use server side render
160
- notReady: true,
161
- config: ConfigurationSchema('empty', {}).create(),
158
+ notReady: !self.chainData,
162
159
  }
163
160
  },
164
161
 
@@ -168,6 +165,12 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
168
165
  trackMenuItems() {
169
166
  return [
170
167
  ...superTrackMenuItems(),
168
+ {
169
+ label: 'Draw singletons',
170
+ type: 'checkbox',
171
+ checked: self.drawSingletons,
172
+ onClick: () => self.setDrawSingletons(!self.drawSingletons),
173
+ },
171
174
  {
172
175
  label: 'Filter by',
173
176
  icon: FilterListIcon,
@@ -208,90 +211,28 @@ function stateModelFactory(configSchema: AnyConfigurationSchemaType) {
208
211
  /**
209
212
  * #method
210
213
  */
211
- async renderSvg(opts: { rasterizeLayers?: boolean }) {
212
- const view = getContainingView(self) as LinearGenomeViewModel
213
- const width = view.dynamicBlocks.totalWidthPx
214
- const height = self.height
215
- let str
216
- if (opts.rasterizeLayers) {
217
- const canvas = document.createElement('canvas')
218
- canvas.width = width * 2
219
- canvas.height = height * 2
220
- const ctx = canvas.getContext('2d')
221
- if (!ctx) {
222
- return
223
- }
224
- ctx.scale(2, 2)
225
- await drawFeats(self, ctx)
226
- str = (
227
- <image
228
- width={width}
229
- height={height}
230
- xlinkHref={canvas.toDataURL('image/png')}
231
- />
232
- )
233
- } else {
234
- // @ts-ignore
235
- const C2S = await import('canvas2svg')
236
- const ctx = new C2S.default(width, height)
237
- await drawFeats(self, ctx)
238
- const clipid = getId(self.id)
239
- str = (
240
- <>
241
- <defs>
242
- <clipPath id={clipid}>
243
- <rect x={0} y={0} width={width} height={height} />
244
- </clipPath>
245
- </defs>
246
- <g
247
- /* eslint-disable-next-line react/no-danger */
248
- dangerouslySetInnerHTML={{
249
- __html: ctx.getSvg().innerHTML,
250
- }}
251
- clipPath={`url(#${clipid})`}
252
- />
253
- </>
254
- )
255
- }
256
-
257
- return <g>{str}</g>
214
+ async renderSvg(opts: {
215
+ rasterizeLayers?: boolean
216
+ }): Promise<React.ReactNode> {
217
+ const { renderSvg } = await import('../shared/renderSvg')
218
+ const { drawFeats } = await import('./drawFeats')
219
+ return renderSvg(self as LinearReadCloudDisplayModel, opts, drawFeats)
258
220
  },
259
221
  }
260
222
  })
261
223
  .actions(self => ({
262
224
  afterAttach() {
263
- addDisposer(
264
- self,
265
- autorun(() => fetchChains(self), { delay: 1000 }),
266
- )
267
-
268
- addDisposer(
269
- self,
270
- autorun(
271
- async () => {
272
- try {
273
- const canvas = self.ref
274
- if (!canvas) {
275
- return
276
- }
277
- const ctx = canvas.getContext('2d')
278
- if (!ctx) {
279
- return
280
- }
281
- ctx.clearRect(0, 0, canvas.width, self.height * 2)
282
- ctx.resetTransform()
283
- ctx.scale(2, 2)
284
-
285
- await drawFeats(self, ctx)
286
- self.setDrawn(true)
287
- } catch (e) {
288
- console.error(e)
289
- self.setError(e)
290
- }
291
- },
292
- { delay: 1000 },
293
- ),
294
- )
225
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
226
+ ;(async () => {
227
+ try {
228
+ const { doAfterAttach } = await import('../shared/afterAttach')
229
+ const { drawFeats } = await import('./drawFeats')
230
+ doAfterAttach(self, drawFeats)
231
+ } catch (e) {
232
+ console.error(e)
233
+ self.setError(e)
234
+ }
235
+ })()
295
236
  },
296
237
  }))
297
238
  }
@@ -0,0 +1,47 @@
1
+ // avoid drawing negative width features for SVG exports
2
+ export function fillRectCtx(
3
+ x: number,
4
+ y: number,
5
+ width: number,
6
+ height: number,
7
+ ctx: CanvasRenderingContext2D,
8
+ fillColor?: string,
9
+ ) {
10
+ if (width < 0) {
11
+ x += width
12
+ width = -width
13
+ }
14
+ if (height < 0) {
15
+ y += height
16
+ height = -height
17
+ }
18
+
19
+ if (fillColor) {
20
+ ctx.fillStyle = fillColor
21
+ }
22
+
23
+ ctx.fillRect(x, y, width, height)
24
+ }
25
+
26
+ export function strokeRectCtx(
27
+ x: number,
28
+ y: number,
29
+ width: number,
30
+ height: number,
31
+ ctx: CanvasRenderingContext2D,
32
+ strokeColor?: string,
33
+ ) {
34
+ if (width < 0) {
35
+ x += width
36
+ width = -width
37
+ }
38
+ if (height < 0) {
39
+ y += height
40
+ height = -height
41
+ }
42
+
43
+ if (strokeColor) {
44
+ ctx.strokeStyle = strokeColor
45
+ }
46
+ ctx.strokeRect(x, y, width, height)
47
+ }
@@ -1,6 +1,5 @@
1
- import { addDisposer, types, cast, getEnv, getSnapshot } from 'mobx-state-tree'
2
- import clone from 'clone'
3
- import { autorun } from 'mobx'
1
+ import { types, cast, getEnv, getSnapshot, isAlive } from 'mobx-state-tree'
2
+ import { observable } from 'mobx'
4
3
 
5
4
  // jbrowse
6
5
  import PluginManager from '@jbrowse/core/PluginManager'
@@ -17,6 +16,8 @@ import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'
17
16
  // locals
18
17
  import Tooltip from '../components/Tooltip'
19
18
  import { FilterModel, getUniqueModificationValues } from '../../shared'
19
+ import { createAutorun, modificationColors } from '../../util'
20
+ import { randomColor } from '../../util'
20
21
 
21
22
  // using a map because it preserves order
22
23
  const rendererTypes = new Map([['snpcoverage', 'SNPCoverageRenderer']])
@@ -68,7 +69,8 @@ function stateModelFactory(
68
69
  }),
69
70
  )
70
71
  .volatile(() => ({
71
- modificationTagMap: undefined as Record<string, string> | undefined,
72
+ modificationTagMap: observable.map<string, string>({}),
73
+ modificationsReady: false,
72
74
  }))
73
75
  .actions(self => ({
74
76
  /**
@@ -99,17 +101,14 @@ function stateModelFactory(
99
101
  * #action
100
102
  */
101
103
  updateModificationColorMap(uniqueModifications: string[]) {
102
- const colorPalette = ['red', 'blue', 'green', 'orange', 'purple']
103
- let i = 0
104
-
105
- const newMap = clone(self.modificationTagMap) || {}
106
104
  uniqueModifications.forEach(value => {
107
- if (!newMap[value]) {
108
- const newColor = colorPalette[i++]
109
- newMap[value] = newColor
105
+ if (!self.modificationTagMap.has(value)) {
106
+ self.modificationTagMap.set(
107
+ value,
108
+ modificationColors[value] || randomColor(),
109
+ )
110
110
  }
111
111
  })
112
- self.modificationTagMap = newMap
113
112
  },
114
113
  }))
115
114
  .views(self => {
@@ -163,10 +162,23 @@ function stateModelFactory(
163
162
  /**
164
163
  * #getter
165
164
  */
166
- get modificationsReady() {
167
- return self.colorBy?.type === 'modifications'
168
- ? self.modificationTagMap !== undefined
169
- : true
165
+ get autorunReady() {
166
+ const view = getContainingView(self) as LGV
167
+ return (
168
+ view.initialized &&
169
+ self.featureDensityStatsReady &&
170
+ !self.regionTooLarge &&
171
+ !self.error
172
+ )
173
+ },
174
+
175
+ get renderReady() {
176
+ const superProps = superRenderProps()
177
+ return !superProps.notReady && self.modificationsReady
178
+ },
179
+
180
+ get ready() {
181
+ return this.renderReady
170
182
  },
171
183
 
172
184
  /**
@@ -177,8 +189,8 @@ function stateModelFactory(
177
189
  const { colorBy, filterBy, modificationTagMap } = self
178
190
  return {
179
191
  ...superProps,
180
- notReady: superProps.notReady || !this.modificationsReady,
181
- modificationTagMap: modificationTagMap,
192
+ notReady: !this.ready,
193
+ modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
182
194
 
183
195
  // must use getSnapshot because otherwise changes to e.g. just the
184
196
  // colorBy.type are not read
@@ -189,6 +201,12 @@ function stateModelFactory(
189
201
  }
190
202
  })
191
203
  .actions(self => ({
204
+ /**
205
+ * #action
206
+ */
207
+ setModificationsReady(flag: boolean) {
208
+ self.modificationsReady = flag
209
+ },
192
210
  /**
193
211
  * #action
194
212
  */
@@ -207,41 +225,36 @@ function stateModelFactory(
207
225
  toggleDrawArcs() {
208
226
  self.drawArcs = !self.drawArcsSetting
209
227
  },
228
+ }))
229
+ .actions(self => ({
210
230
  afterAttach() {
211
- addDisposer(
231
+ createAutorun(
212
232
  self,
213
- autorun(
214
- async () => {
215
- try {
216
- const { colorBy } = self
217
- const view = getContainingView(self) as LGV
218
-
219
- if (
220
- !view.initialized ||
221
- !self.featureDensityStatsReady ||
222
- self.regionTooLarge
223
- ) {
224
- return
225
- }
226
- const { staticBlocks } = view
227
- if (colorBy?.type === 'modifications') {
228
- const adapter = getConf(self.parentTrack, 'adapter')
229
- self.updateModificationColorMap(
230
- await getUniqueModificationValues(
231
- self,
232
- adapter,
233
- colorBy,
234
- staticBlocks,
235
- ),
236
- )
237
- }
238
- } catch (error) {
239
- console.error(error)
240
- self.setError(error)
233
+ async () => {
234
+ self.setModificationsReady(false)
235
+ if (!self.autorunReady) {
236
+ return
237
+ }
238
+ const view = getContainingView(self) as LGV
239
+ const { staticBlocks } = view
240
+ const { colorBy } = self
241
+ if (colorBy?.type === 'modifications') {
242
+ const adapter = getConf(self.parentTrack, 'adapter')
243
+ const vals = await getUniqueModificationValues(
244
+ self,
245
+ adapter,
246
+ colorBy,
247
+ staticBlocks,
248
+ )
249
+ if (isAlive(self)) {
250
+ self.updateModificationColorMap(vals)
251
+ self.setModificationsReady(true)
241
252
  }
242
- },
243
- { delay: 1000 },
244
- ),
253
+ } else {
254
+ self.setModificationsReady(true)
255
+ }
256
+ },
257
+ { delay: 1000 },
245
258
  )
246
259
  },
247
260
  }))
@@ -1,4 +1,5 @@
1
1
  import { revcom, Feature } from '@jbrowse/core/util'
2
+ import { getTagAlt } from '../util'
2
3
 
3
4
  export interface Mismatch {
4
5
  qual?: number
@@ -116,8 +117,8 @@ export function cigarToMismatches(
116
117
  }
117
118
 
118
119
  /**
119
- * parse a SAM MD tag to find mismatching bases of the template versus the reference
120
- * @returns array of mismatches and their positions
120
+ * parse a SAM MD tag to find mismatching bases of the template versus the
121
+ * reference @returns array of mismatches and their positions
121
122
  */
122
123
  export function mdToMismatches(
123
124
  mdstring: string,
@@ -126,13 +127,13 @@ export function mdToMismatches(
126
127
  seq: string,
127
128
  qual?: Buffer,
128
129
  ) {
129
- const mismatchRecords: Mismatch[] = []
130
130
  let curr: Mismatch = { start: 0, base: '', length: 0, type: 'mismatch' }
131
- const skips = cigarMismatches.filter(cigar => cigar.type === 'skip')
132
131
  let lastCigar = 0
133
132
  let lastTemplateOffset = 0
134
133
  let lastRefOffset = 0
135
134
  let lastSkipPos = 0
135
+ const mismatchRecords: Mismatch[] = []
136
+ const skips = cigarMismatches.filter(cigar => cigar.type === 'skip')
136
137
 
137
138
  // convert a position on the reference sequence to a position
138
139
  // on the template sequence, taking into account hard and soft
@@ -265,6 +266,47 @@ export function* getNextRefPos(cigarOps: string[], positions: number[]) {
265
266
  }
266
267
  }
267
268
  }
269
+
270
+ export function getModificationProbabilities(feature: Feature) {
271
+ const m = (getTagAlt(feature, 'ML', 'Ml') as number[] | string) || []
272
+ return m
273
+ ? (typeof m === 'string' ? m.split(',').map(e => +e) : m).map(e => e / 255)
274
+ : (getTagAlt(feature, 'MP', 'Mp') as string | undefined)
275
+ ?.split('')
276
+ .map(s => s.charCodeAt(0) - 33)
277
+ .map(elt => Math.min(1, elt / 50))
278
+ }
279
+
280
+ export function getMethBins(feature: Feature) {
281
+ const fstart = feature.get('start')
282
+ const fend = feature.get('end')
283
+ const fstrand = feature.get('strand') as -1 | 0 | 1
284
+ const flen = fend - fstart
285
+ const mm = (getTagAlt(feature, 'MM', 'Mm') as string | undefined) || ''
286
+ const methBins = new Array<number>(flen)
287
+ const methProbs = new Array<number>(flen)
288
+ const seq = feature.get('seq') as string | undefined
289
+ if (seq) {
290
+ const ops = parseCigar(feature.get('CIGAR'))
291
+ const probabilities = getModificationProbabilities(feature)
292
+ const modifications = getModificationPositions(mm, seq, fstrand)
293
+ let probIndex = 0
294
+ for (const { type, positions } of modifications) {
295
+ if (type === 'm') {
296
+ for (const ref of getNextRefPos(ops, positions)) {
297
+ const prob = probabilities?.[probIndex] || 0
298
+ probIndex++
299
+ if (ref >= 0 && ref < flen) {
300
+ methBins[ref] = 1
301
+ methProbs[ref] = prob
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ return { methBins, methProbs }
308
+ }
309
+
268
310
  export function getModificationPositions(
269
311
  mm: string,
270
312
  fseq: string,
@@ -1,12 +1,11 @@
1
1
  import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'
2
- import { Region, dedupe } from '@jbrowse/core/util'
2
+ import { Region, dedupe, groupBy } from '@jbrowse/core/util'
3
3
  import { RemoteAbortSignal } from '@jbrowse/core/rpc/remoteAbortSignals'
4
4
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'
5
5
  import { toArray } from 'rxjs/operators'
6
6
  import { firstValueFrom } from 'rxjs'
7
7
  // locals
8
8
  import { filterForPairs, getInsertSizeStats } from '../util'
9
- import { ReducedFeature } from '../../shared/fetchChains'
10
9
  import PileupBaseRPC from '../base'
11
10
  import { getTag } from '../../util'
12
11
 
@@ -56,15 +55,8 @@ export default class PileupGetReducedFeatures extends PileupBaseRPC {
56
55
 
57
56
  const filtered = filterForPairs(reduced)
58
57
  const stats = filtered.length ? getInsertSizeStats(filtered) : undefined
59
- const chains = {} as { [key: string]: ReducedFeature[] }
58
+ const chains = groupBy(reduced, f => f.name)
60
59
 
61
- // pair features
62
- reduced.forEach(f => {
63
- if (!chains[f.name]) {
64
- chains[f.name] = []
65
- }
66
- chains[f.name].push(f)
67
- })
68
60
  return {
69
61
  chains: Object.values(chains),
70
62
  stats,