@jbrowse/plugin-variants 3.2.0 → 3.4.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 (239) hide show
  1. package/dist/LinearVariantDisplay/model.d.ts +1 -1
  2. package/dist/MultiLinearVariantDisplay/components/VariantDisplayComponent.js +3 -3
  3. package/dist/MultiLinearVariantDisplay/index.js +1 -1
  4. package/dist/MultiLinearVariantDisplay/model.d.ts +40 -4
  5. package/dist/MultiLinearVariantDisplay/model.js +0 -1
  6. package/dist/MultiLinearVariantDisplay/renderSvg.js +2 -2
  7. package/dist/MultiLinearVariantMatrixDisplay/components/LinesConnectingMatrixToGenomicPosition.js +15 -5
  8. package/dist/MultiLinearVariantMatrixDisplay/components/VariantDisplayComponent.js +3 -3
  9. package/dist/MultiLinearVariantMatrixDisplay/index.js +1 -1
  10. package/dist/MultiLinearVariantMatrixDisplay/model.d.ts +40 -3
  11. package/dist/MultiLinearVariantMatrixDisplay/model.js +1 -0
  12. package/dist/MultiLinearVariantMatrixDisplay/renderSvg.js +2 -2
  13. package/dist/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.d.ts → MultiLinearVariantMatrixRenderer.d.ts} +14 -11
  14. package/dist/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.js → MultiLinearVariantMatrixRenderer.js} +3 -3
  15. package/dist/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.d.ts +8 -0
  16. package/dist/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.js +41 -0
  17. package/dist/MultiLinearVariantMatrixRenderer/index.js +4 -4
  18. package/dist/MultiLinearVariantMatrixRenderer/makeImageData.d.ts +3 -3
  19. package/dist/MultiLinearVariantMatrixRenderer/makeImageData.js +71 -17
  20. package/dist/MultiLinearVariantMatrixRenderer/types.d.ts +2 -4
  21. package/dist/MultiLinearVariantRenderer/MultiVariantRenderer.d.ts +34 -5
  22. package/dist/MultiLinearVariantRenderer/MultiVariantRenderer.js +13 -7
  23. package/dist/MultiLinearVariantRenderer/components/{MultiVariantRendering.d.ts → MultiLinearVariantRendering.d.ts} +10 -4
  24. package/dist/MultiLinearVariantRenderer/{MultiVariantRendering.js → components/MultiLinearVariantRendering.js} +25 -7
  25. package/dist/MultiLinearVariantRenderer/components/util.d.ts +1 -0
  26. package/dist/MultiLinearVariantRenderer/components/util.js +15 -0
  27. package/dist/MultiLinearVariantRenderer/index.js +2 -2
  28. package/dist/MultiLinearVariantRenderer/makeImageData.d.ts +9 -0
  29. package/dist/MultiLinearVariantRenderer/makeImageData.js +104 -41
  30. package/dist/MultiLinearVariantRenderer/types.d.ts +2 -0
  31. package/dist/MultiVariantBaseRenderer.d.ts +4 -4
  32. package/dist/SplitVcfTabixAdapter/SplitVcfTabixAdapter.d.ts +0 -1
  33. package/dist/SplitVcfTabixAdapter/SplitVcfTabixAdapter.js +0 -1
  34. package/dist/SplitVcfTabixAdapter/configSchema.js +4 -2
  35. package/dist/VariantFeatureWidget/AltFormatter.d.ts +4 -0
  36. package/dist/VariantFeatureWidget/AltFormatter.js +13 -0
  37. package/dist/VariantFeatureWidget/Checkbox2.js +1 -8
  38. package/dist/VariantFeatureWidget/Formatter.d.ts +3 -0
  39. package/dist/VariantFeatureWidget/Formatter.js +23 -0
  40. package/dist/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.js → VariantConsequence/VariantConsequenceDataGridWrapper.js} +3 -5
  41. package/dist/VariantFeatureWidget/VariantFeatureWidget.js +16 -6
  42. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.d.ts +4 -0
  43. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.js +80 -0
  44. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.d.ts +3 -9
  45. package/dist/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.js +41 -20
  46. package/dist/VariantFeatureWidget/VariantSampleGrid/types.d.ts +21 -0
  47. package/dist/VariantFeatureWidget/VariantSampleGrid/util.d.ts +1 -0
  48. package/dist/VariantFeatureWidget/VariantSampleGrid/util.js +14 -0
  49. package/dist/VariantFeatureWidget/stateModelFactory.d.ts +9 -6
  50. package/dist/VariantRPC/MultiVariantClusterGenotypeMatrix.d.ts +2 -16
  51. package/dist/VariantRPC/MultiVariantClusterGenotypeMatrix.js +4 -7
  52. package/dist/VariantRPC/MultiVariantGetGenotypeMatrix.d.ts +2 -15
  53. package/dist/VariantRPC/MultiVariantGetSimplifiedFeatures.d.ts +3 -13
  54. package/dist/VariantRPC/MultiVariantGetSimplifiedFeatures.js +14 -8
  55. package/dist/VariantRPC/getGenotypeMatrix.js +20 -7
  56. package/dist/VariantRPC/types.d.ts +23 -0
  57. package/dist/VcfAdapter/VcfAdapter.d.ts +0 -1
  58. package/dist/VcfAdapter/VcfAdapter.js +0 -1
  59. package/dist/VcfFeature/index.js +0 -1
  60. package/dist/VcfFeature/util.d.ts +2 -0
  61. package/dist/VcfFeature/util.js +123 -25
  62. package/dist/VcfTabixAdapter/VcfTabixAdapter.d.ts +0 -1
  63. package/dist/VcfTabixAdapter/VcfTabixAdapter.js +12 -8
  64. package/dist/getMultiVariantFeaturesAutorun.d.ts +2 -0
  65. package/dist/getMultiVariantFeaturesAutorun.js +9 -2
  66. package/dist/getMultiVariantSourcesAutorun.js +3 -2
  67. package/dist/shared/MultiVariantBaseModel.d.ts +41 -4
  68. package/dist/shared/MultiVariantBaseModel.js +69 -3
  69. package/dist/shared/SharedVariantMixin.d.ts +1 -1
  70. package/dist/shared/components/AddFiltersDialog.d.ts +9 -0
  71. package/dist/shared/components/AddFiltersDialog.js +61 -0
  72. package/dist/shared/components/MultiVariantBaseDisplayComponent.d.ts +5 -0
  73. package/dist/shared/components/MultiVariantBaseDisplayComponent.js +29 -0
  74. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.js +2 -2
  75. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.js +8 -3
  76. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.js +29 -28
  77. package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/types.d.ts +1 -0
  78. package/dist/shared/components/MultiVariantClusterDialog/types.js +2 -0
  79. package/{esm/shared/components/ColorLegend.d.ts → dist/shared/components/MultiVariantColorLegend.d.ts} +2 -2
  80. package/dist/shared/components/{ColorLegend.js → MultiVariantColorLegend.js} +5 -3
  81. package/dist/shared/components/MultiVariantCrosshairs.d.ts +7 -0
  82. package/dist/shared/components/MultiVariantCrosshairs.js +40 -0
  83. package/dist/shared/components/MultiVariantLegendBar.d.ts +7 -0
  84. package/dist/shared/components/{LegendBar.js → MultiVariantLegendBar.js} +2 -2
  85. package/dist/shared/components/MultiVariantTooltip.d.ts +4 -0
  86. package/dist/shared/components/MultiVariantTooltip.js +3 -2
  87. package/dist/shared/components/RectBg.js +4 -2
  88. package/dist/shared/components/SetColorDialog.js +1 -1
  89. package/dist/shared/components/SourcesDataGrid.d.ts +2 -1
  90. package/dist/shared/components/SourcesDataGrid.js +40 -47
  91. package/dist/shared/components/SourcesGrid.js +1 -1
  92. package/dist/shared/components/SourcesGridHeader.d.ts +2 -1
  93. package/dist/shared/drawAlleleCount.d.ts +2 -1
  94. package/dist/shared/drawAlleleCount.js +26 -24
  95. package/dist/shared/drawPhased.d.ts +1 -1
  96. package/dist/shared/drawPhased.js +14 -10
  97. package/dist/shared/minorAlleleFrequencyUtils.d.ts +9 -4
  98. package/dist/shared/minorAlleleFrequencyUtils.js +19 -14
  99. package/dist/shared/sourcesGridUtils.d.ts +3 -2
  100. package/esm/LinearVariantDisplay/model.d.ts +1 -1
  101. package/esm/MultiLinearVariantDisplay/components/VariantDisplayComponent.js +2 -2
  102. package/esm/MultiLinearVariantDisplay/index.js +1 -1
  103. package/esm/MultiLinearVariantDisplay/model.d.ts +40 -4
  104. package/esm/MultiLinearVariantDisplay/model.js +0 -1
  105. package/esm/MultiLinearVariantDisplay/renderSvg.js +1 -1
  106. package/esm/MultiLinearVariantMatrixDisplay/components/LinesConnectingMatrixToGenomicPosition.js +15 -8
  107. package/esm/MultiLinearVariantMatrixDisplay/components/VariantDisplayComponent.js +2 -2
  108. package/esm/MultiLinearVariantMatrixDisplay/index.js +1 -1
  109. package/esm/MultiLinearVariantMatrixDisplay/model.d.ts +40 -3
  110. package/esm/MultiLinearVariantMatrixDisplay/model.js +1 -0
  111. package/esm/MultiLinearVariantMatrixDisplay/renderSvg.js +1 -1
  112. package/esm/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.d.ts → MultiLinearVariantMatrixRenderer.d.ts} +14 -11
  113. package/esm/MultiLinearVariantMatrixRenderer/{LinearVariantMatrixRenderer.js → MultiLinearVariantMatrixRenderer.js} +3 -3
  114. package/esm/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.d.ts +8 -0
  115. package/esm/MultiLinearVariantMatrixRenderer/components/MultiLinearVariantMatrixRendering.js +39 -0
  116. package/esm/MultiLinearVariantMatrixRenderer/index.js +4 -4
  117. package/esm/MultiLinearVariantMatrixRenderer/makeImageData.d.ts +3 -3
  118. package/esm/MultiLinearVariantMatrixRenderer/makeImageData.js +73 -19
  119. package/esm/MultiLinearVariantMatrixRenderer/types.d.ts +2 -4
  120. package/esm/MultiLinearVariantRenderer/MultiVariantRenderer.d.ts +34 -5
  121. package/esm/MultiLinearVariantRenderer/MultiVariantRenderer.js +13 -7
  122. package/esm/MultiLinearVariantRenderer/components/{MultiVariantRendering.d.ts → MultiLinearVariantRendering.d.ts} +10 -4
  123. package/esm/MultiLinearVariantRenderer/components/{MultiVariantRendering.js → MultiLinearVariantRendering.js} +25 -7
  124. package/esm/MultiLinearVariantRenderer/components/util.d.ts +1 -0
  125. package/esm/MultiLinearVariantRenderer/components/util.js +12 -0
  126. package/esm/MultiLinearVariantRenderer/index.js +1 -1
  127. package/esm/MultiLinearVariantRenderer/makeImageData.d.ts +9 -0
  128. package/esm/MultiLinearVariantRenderer/makeImageData.js +106 -43
  129. package/esm/MultiLinearVariantRenderer/types.d.ts +2 -0
  130. package/esm/MultiVariantBaseRenderer.d.ts +4 -4
  131. package/esm/SplitVcfTabixAdapter/SplitVcfTabixAdapter.d.ts +0 -1
  132. package/esm/SplitVcfTabixAdapter/SplitVcfTabixAdapter.js +0 -1
  133. package/esm/SplitVcfTabixAdapter/configSchema.js +4 -2
  134. package/esm/VariantFeatureWidget/AltFormatter.d.ts +4 -0
  135. package/esm/VariantFeatureWidget/AltFormatter.js +10 -0
  136. package/esm/VariantFeatureWidget/Checkbox2.js +2 -9
  137. package/esm/VariantFeatureWidget/Formatter.d.ts +3 -0
  138. package/esm/VariantFeatureWidget/Formatter.js +17 -0
  139. package/esm/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.js → VariantConsequence/VariantConsequenceDataGridWrapper.js} +4 -6
  140. package/esm/VariantFeatureWidget/VariantFeatureWidget.js +16 -6
  141. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.d.ts +4 -0
  142. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantGenotypeFrequencyTable.js +74 -0
  143. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.d.ts +3 -9
  144. package/esm/VariantFeatureWidget/VariantSampleGrid/VariantSampleGrid.js +43 -22
  145. package/esm/VariantFeatureWidget/VariantSampleGrid/types.d.ts +21 -0
  146. package/esm/VariantFeatureWidget/VariantSampleGrid/util.d.ts +1 -0
  147. package/esm/VariantFeatureWidget/VariantSampleGrid/util.js +11 -0
  148. package/esm/VariantFeatureWidget/stateModelFactory.d.ts +9 -6
  149. package/esm/VariantRPC/MultiVariantClusterGenotypeMatrix.d.ts +2 -16
  150. package/esm/VariantRPC/MultiVariantClusterGenotypeMatrix.js +4 -7
  151. package/esm/VariantRPC/MultiVariantGetGenotypeMatrix.d.ts +2 -15
  152. package/esm/VariantRPC/MultiVariantGetSimplifiedFeatures.d.ts +3 -13
  153. package/esm/VariantRPC/MultiVariantGetSimplifiedFeatures.js +14 -8
  154. package/esm/VariantRPC/getGenotypeMatrix.js +20 -7
  155. package/esm/VariantRPC/types.d.ts +23 -0
  156. package/esm/VcfAdapter/VcfAdapter.d.ts +0 -1
  157. package/esm/VcfAdapter/VcfAdapter.js +0 -1
  158. package/esm/VcfFeature/index.js +0 -1
  159. package/esm/VcfFeature/util.d.ts +2 -0
  160. package/esm/VcfFeature/util.js +121 -25
  161. package/esm/VcfTabixAdapter/VcfTabixAdapter.d.ts +0 -1
  162. package/esm/VcfTabixAdapter/VcfTabixAdapter.js +13 -9
  163. package/esm/getMultiVariantFeaturesAutorun.d.ts +2 -0
  164. package/esm/getMultiVariantFeaturesAutorun.js +9 -2
  165. package/esm/getMultiVariantSourcesAutorun.js +3 -2
  166. package/esm/shared/MultiVariantBaseModel.d.ts +41 -4
  167. package/esm/shared/MultiVariantBaseModel.js +71 -5
  168. package/esm/shared/SharedVariantMixin.d.ts +1 -1
  169. package/esm/shared/components/AddFiltersDialog.d.ts +9 -0
  170. package/esm/shared/components/AddFiltersDialog.js +59 -0
  171. package/esm/shared/components/MultiVariantBaseDisplayComponent.d.ts +5 -0
  172. package/esm/shared/components/MultiVariantBaseDisplayComponent.js +24 -0
  173. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.js +2 -2
  174. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.js +9 -4
  175. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.js +29 -28
  176. package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/types.d.ts +1 -0
  177. package/esm/shared/components/MultiVariantClusterDialog/types.js +1 -0
  178. package/{dist/shared/components/ColorLegend.d.ts → esm/shared/components/MultiVariantColorLegend.d.ts} +2 -2
  179. package/esm/shared/components/{ColorLegend.js → MultiVariantColorLegend.js} +6 -4
  180. package/esm/shared/components/MultiVariantCrosshairs.d.ts +7 -0
  181. package/esm/shared/components/MultiVariantCrosshairs.js +35 -0
  182. package/esm/shared/components/MultiVariantLegendBar.d.ts +7 -0
  183. package/esm/shared/components/{LegendBar.js → MultiVariantLegendBar.js} +1 -1
  184. package/esm/shared/components/MultiVariantTooltip.d.ts +4 -0
  185. package/esm/shared/components/MultiVariantTooltip.js +3 -2
  186. package/esm/shared/components/RectBg.js +4 -2
  187. package/esm/shared/components/SetColorDialog.js +1 -1
  188. package/esm/shared/components/SourcesDataGrid.d.ts +2 -1
  189. package/esm/shared/components/SourcesDataGrid.js +40 -47
  190. package/esm/shared/components/SourcesGrid.js +1 -1
  191. package/esm/shared/components/SourcesGridHeader.d.ts +2 -1
  192. package/esm/shared/drawAlleleCount.d.ts +2 -1
  193. package/esm/shared/drawAlleleCount.js +25 -24
  194. package/esm/shared/drawPhased.d.ts +1 -1
  195. package/esm/shared/drawPhased.js +14 -10
  196. package/esm/shared/minorAlleleFrequencyUtils.d.ts +9 -4
  197. package/esm/shared/minorAlleleFrequencyUtils.js +20 -15
  198. package/esm/shared/sourcesGridUtils.d.ts +3 -2
  199. package/package.json +12 -11
  200. package/dist/MultiLinearVariantDisplay/components/Crosshair.d.ts +0 -7
  201. package/dist/MultiLinearVariantDisplay/components/Crosshair.js +0 -35
  202. package/dist/MultiLinearVariantMatrixDisplay/components/Crosshair.d.ts +0 -7
  203. package/dist/MultiLinearVariantMatrixDisplay/components/Crosshair.js +0 -28
  204. package/dist/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.d.ts +0 -7
  205. package/dist/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.js +0 -38
  206. package/dist/MultiLinearVariantRenderer/MultiVariantRendering.d.ts +0 -22
  207. package/dist/MultiLinearVariantRenderer/components/MultiVariantRendering.js +0 -52
  208. package/dist/VariantFeatureWidget/VariantConsequencePanel.d.ts +0 -5
  209. package/dist/VariantFeatureWidget/VariantConsequencePanel.js +0 -15
  210. package/dist/VariantRPC/cluster.d.ts +0 -17
  211. package/dist/VariantRPC/cluster.js +0 -84
  212. package/dist/shared/components/LegendBar.d.ts +0 -18
  213. package/esm/MultiLinearVariantDisplay/components/Crosshair.d.ts +0 -7
  214. package/esm/MultiLinearVariantDisplay/components/Crosshair.js +0 -30
  215. package/esm/MultiLinearVariantMatrixDisplay/components/Crosshair.d.ts +0 -7
  216. package/esm/MultiLinearVariantMatrixDisplay/components/Crosshair.js +0 -23
  217. package/esm/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.d.ts +0 -7
  218. package/esm/MultiLinearVariantMatrixRenderer/components/LinearVariantMatrixRendering.js +0 -36
  219. package/esm/MultiLinearVariantRenderer/MultiVariantRendering.d.ts +0 -22
  220. package/esm/MultiLinearVariantRenderer/MultiVariantRendering.js +0 -47
  221. package/esm/VariantFeatureWidget/VariantConsequencePanel.d.ts +0 -5
  222. package/esm/VariantFeatureWidget/VariantConsequencePanel.js +0 -9
  223. package/esm/VariantRPC/cluster.d.ts +0 -17
  224. package/esm/VariantRPC/cluster.js +0 -79
  225. package/esm/shared/components/LegendBar.d.ts +0 -18
  226. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGrid.d.ts → VariantConsequence/VariantConsequenceDataGrid.d.ts} +0 -0
  227. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGrid.js → VariantConsequence/VariantConsequenceDataGrid.js} +0 -0
  228. /package/dist/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.d.ts → VariantConsequence/VariantConsequenceDataGridWrapper.d.ts} +0 -0
  229. /package/dist/{shared/components/ClusterDialog → VariantFeatureWidget/VariantSampleGrid}/types.js +0 -0
  230. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.d.ts +0 -0
  231. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.d.ts +0 -0
  232. /package/dist/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.d.ts +0 -0
  233. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGrid.d.ts → VariantConsequence/VariantConsequenceDataGrid.d.ts} +0 -0
  234. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGrid.js → VariantConsequence/VariantConsequenceDataGrid.js} +0 -0
  235. /package/esm/VariantFeatureWidget/{VariantConsequenceDataGridWrapper.d.ts → VariantConsequence/VariantConsequenceDataGridWrapper.d.ts} +0 -0
  236. /package/esm/{shared/components/ClusterDialog → VariantFeatureWidget/VariantSampleGrid}/types.js +0 -0
  237. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialog.d.ts +0 -0
  238. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogAuto.d.ts +0 -0
  239. /package/esm/shared/components/{ClusterDialog → MultiVariantClusterDialog}/ClusterDialogManual.d.ts +0 -0
@@ -1,27 +1,40 @@
1
1
  import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache';
2
+ import { forEachWithStopTokenCheck } from '@jbrowse/core/util';
2
3
  import { firstValueFrom, toArray } from 'rxjs';
3
4
  import { getFeaturesThatPassMinorAlleleFrequencyFilter } from '../shared/minorAlleleFrequencyUtils';
4
5
  export async function getGenotypeMatrix({ pluginManager, args, }) {
5
- const { sources, minorAlleleFrequencyFilter, regions, adapterConfig, sessionId, } = args;
6
+ const { sources, minorAlleleFrequencyFilter, regions, adapterConfig, sessionId, lengthCutoffFilter, stopToken, } = args;
6
7
  const adapter = await getAdapter(pluginManager, sessionId, adapterConfig);
7
8
  const dataAdapter = adapter.dataAdapter;
8
- const feats = await firstValueFrom(dataAdapter.getFeaturesInMultipleRegions(regions, args).pipe(toArray()));
9
9
  const genotypeFactor = new Set();
10
- const mafs = getFeaturesThatPassMinorAlleleFrequencyFilter(feats, minorAlleleFrequencyFilter);
10
+ const mafs = getFeaturesThatPassMinorAlleleFrequencyFilter({
11
+ minorAlleleFrequencyFilter,
12
+ lengthCutoffFilter,
13
+ stopToken,
14
+ features: await firstValueFrom(dataAdapter.getFeaturesInMultipleRegions(regions, args).pipe(toArray())),
15
+ });
11
16
  for (const { alleleCounts } of mafs) {
12
- for (const alt of alleleCounts.keys()) {
17
+ for (const alt of Object.keys(alleleCounts)) {
13
18
  genotypeFactor.add(alt);
14
19
  }
15
20
  }
16
21
  const rows = {};
17
- for (const { feature } of mafs) {
22
+ const cacheSplit = {};
23
+ forEachWithStopTokenCheck(mafs, stopToken, ({ feature }) => {
18
24
  const genotypes = feature.get('genotypes');
19
25
  for (const { name } of sources) {
20
26
  if (!rows[name]) {
21
27
  rows[name] = [];
22
28
  }
23
29
  const val = genotypes[name];
24
- const alleles = val.split(/[/|]/);
30
+ let alleles;
31
+ if (cacheSplit[val]) {
32
+ alleles = cacheSplit[val];
33
+ }
34
+ else {
35
+ alleles = val.split(/[/|]/);
36
+ cacheSplit[val] = alleles;
37
+ }
25
38
  let genotypeStatus = 0;
26
39
  let nonRefCount = 0;
27
40
  let uncalledCount = 0;
@@ -47,6 +60,6 @@ export async function getGenotypeMatrix({ pluginManager, args, }) {
47
60
  }
48
61
  rows[name].push(genotypeStatus);
49
62
  }
50
- }
63
+ });
51
64
  return rows;
52
65
  }
@@ -10,4 +10,27 @@ export interface GetGenotypeMatrixArgs {
10
10
  headers?: Record<string, string>;
11
11
  regions: Region[];
12
12
  bpPerPx: number;
13
+ lengthCutoffFilter: number;
14
+ }
15
+ export interface GetSimplifiedFeaturesArgs {
16
+ adapterConfig: AnyConfigurationModel;
17
+ stopToken?: string;
18
+ sessionId: string;
19
+ headers?: Record<string, string>;
20
+ regions: Region[];
21
+ bpPerPx: number;
22
+ minorAlleleFrequencyFilter: number;
23
+ lengthCutoffFilter: number;
24
+ }
25
+ export interface ClusterGenotypeMatrixArgs {
26
+ adapterConfig: AnyConfigurationModel;
27
+ stopToken?: string;
28
+ statusCallback: (arg: string) => void;
29
+ sessionId: string;
30
+ headers?: Record<string, string>;
31
+ regions: Region[];
32
+ bpPerPx: number;
33
+ sources: Source[];
34
+ minorAlleleFrequencyFilter: number;
35
+ lengthCutoffFilter: number;
13
36
  }
@@ -31,6 +31,5 @@ export default class VcfAdapter extends BaseFeatureDataAdapter {
31
31
  getSources(): Promise<{
32
32
  name: string;
33
33
  }[]>;
34
- freeResources(): void;
35
34
  }
36
35
  export {};
@@ -135,7 +135,6 @@ class VcfAdapter extends BaseFeatureDataAdapter {
135
135
  .filter(f => s.has(f.name));
136
136
  }
137
137
  }
138
- freeResources() { }
139
138
  }
140
139
  VcfAdapter.capabilities = ['getFeatures', 'getRefNames'];
141
140
  export default VcfAdapter;
@@ -10,7 +10,6 @@ function dataFromVariant(variant, parser) {
10
10
  description,
11
11
  type,
12
12
  name: ID === null || ID === void 0 ? void 0 : ID.join(','),
13
- aliases: ID && ID.length > 1 ? ID.slice(1) : undefined,
14
13
  };
15
14
  }
16
15
  function getEnd(variant) {
@@ -2,3 +2,5 @@ import type VCF from '@gmod/vcf';
2
2
  export declare function getSOTermAndDescription(ref: string, alt: string[] | undefined, parser: VCF): string[];
3
3
  export declare function getSOAndDescFromAltDefs(alt: string, parser: VCF): string[];
4
4
  export declare function getSOAndDescByExamination(ref: string, alt: string): string[];
5
+ export declare function getMinimalDesc(ref: string, alt: string): string;
6
+ export declare function makeSimpleAltString(genotype: string, ref: string, alt: string[]): string;
@@ -1,4 +1,5 @@
1
1
  import { parseBreakend } from '@gmod/vcf';
2
+ import { getBpDisplayStr } from '@jbrowse/core/util';
2
3
  const altTypeToSO = {
3
4
  DEL: 'deletion',
4
5
  INS: 'insertion',
@@ -62,63 +63,158 @@ export function getSOAndDescFromAltDefs(alt, parser) {
62
63
  return [soTerm, alt];
63
64
  }
64
65
  const modAlt = alt.split(':');
65
- if (modAlt.length > 1) {
66
- return getSOAndDescFromAltDefs(`<${modAlt.slice(0, -1).join(':')}>`, parser);
67
- }
68
- return [];
66
+ return modAlt.length > 1
67
+ ? getSOAndDescFromAltDefs(`<${modAlt.slice(0, -1).join(':')}>`, parser)
68
+ : [];
69
69
  }
70
70
  export function getSOAndDescByExamination(ref, alt) {
71
71
  const bnd = parseBreakend(alt);
72
72
  if (bnd) {
73
73
  return ['breakend', alt];
74
74
  }
75
- if (ref.length === 1 && alt.length === 1) {
75
+ else if (ref.length === 1 && alt.length === 1) {
76
76
  return ['SNV', makeDescriptionString('SNV', ref, alt)];
77
77
  }
78
- if (alt === '<INS>') {
78
+ else if (alt === '<INS>') {
79
79
  return ['insertion', alt];
80
80
  }
81
- if (alt === '<DEL>') {
81
+ else if (alt === '<DEL>') {
82
82
  return ['deletion', alt];
83
83
  }
84
- if (alt === '<DUP>') {
84
+ else if (alt === '<DUP>') {
85
85
  return ['duplication', alt];
86
86
  }
87
- if (alt === '<CNV>') {
87
+ else if (alt === '<CNV>') {
88
88
  return ['cnv', alt];
89
89
  }
90
- if (alt === '<INV>') {
90
+ else if (alt === '<INV>') {
91
91
  return ['inversion', alt];
92
92
  }
93
- if (alt === '<TRA>') {
93
+ else if (alt === '<TRA>') {
94
94
  return ['translocation', alt];
95
95
  }
96
- if (alt.includes('<')) {
96
+ else if (alt.includes('<')) {
97
97
  return ['sv', alt];
98
98
  }
99
- if (ref.length === alt.length) {
100
- return ref.split('').reverse().join('') === alt
101
- ? ['inversion', makeDescriptionString('inversion', ref, alt)]
102
- : ['substitution', makeDescriptionString('substitution', ref, alt)];
99
+ else if (ref.length === alt.length) {
100
+ const lenRef = ref.length;
101
+ const lenAlt = alt.length;
102
+ if (lenRef > 5 || lenAlt > 5) {
103
+ const lena = getBpDisplayStr(lenRef);
104
+ const lenb = getBpDisplayStr(lenAlt);
105
+ return ref.split('').reverse().join('') === alt
106
+ ? ['inverson', makeDescriptionString('inv', lena, lenb)]
107
+ : ['substitution', makeDescriptionString('substitution', lena, lenb)];
108
+ }
109
+ else {
110
+ return ref.split('').reverse().join('') === alt
111
+ ? ['inversion', makeDescriptionString('inv', ref, alt)]
112
+ : ['substitution', makeDescriptionString('substitution', ref, alt)];
113
+ }
103
114
  }
104
- if (ref.length <= alt.length) {
115
+ else if (ref.length <= alt.length) {
105
116
  const len = alt.length - ref.length;
106
- const lena = len.toLocaleString('en-US');
117
+ const lenAlt = alt.length;
118
+ const lenRef = ref.length;
119
+ const lena = getBpDisplayStr(len);
107
120
  return [
108
121
  'insertion',
109
- len > 5 ? `${lena}bp INS` : makeDescriptionString('insertion', ref, alt),
122
+ lenRef > 5 || lenAlt > 5
123
+ ? `${lena} INS`
124
+ : makeDescriptionString('insertion', len > 5 ? lena : ref, alt),
110
125
  ];
111
126
  }
112
- if (ref.length > alt.length) {
113
- const len = ref.length - alt.length;
114
- const lena = len.toLocaleString('en-US');
127
+ else if (ref.length > alt.length) {
128
+ const lenRef = ref.length;
129
+ const lenAlt = alt.length;
130
+ const lena = getBpDisplayStr(lenRef - lenAlt);
115
131
  return [
116
132
  'deletion',
117
- len > 5 ? `${lena}bp DEL` : makeDescriptionString('deletion', ref, alt),
133
+ lenRef > 5 || lenAlt > 5
134
+ ? `${lena} DEL`
135
+ : makeDescriptionString('deletion', ref, alt),
118
136
  ];
119
137
  }
120
- return ['indel', makeDescriptionString('indel', ref, alt)];
138
+ else {
139
+ return ['indel', makeDescriptionString('indel', ref, alt)];
140
+ }
141
+ }
142
+ export function getMinimalDesc(ref, alt) {
143
+ const bnd = parseBreakend(alt);
144
+ if (bnd) {
145
+ return alt;
146
+ }
147
+ else if (ref.length === 1 && alt.length === 1) {
148
+ return alt;
149
+ }
150
+ else if (alt === '<INS>') {
151
+ return alt;
152
+ }
153
+ else if (alt === '<DEL>') {
154
+ return alt;
155
+ }
156
+ else if (alt === '<DUP>') {
157
+ return alt;
158
+ }
159
+ else if (alt === '<CNV>') {
160
+ return alt;
161
+ }
162
+ else if (alt === '<INV>') {
163
+ return alt;
164
+ }
165
+ else if (alt === '<TRA>') {
166
+ return alt;
167
+ }
168
+ else if (alt.includes('<')) {
169
+ return alt;
170
+ }
171
+ else if (ref.length === alt.length) {
172
+ const lenRef = ref.length;
173
+ const lenAlt = alt.length;
174
+ if (lenRef > 5 || lenAlt > 5) {
175
+ const lena = getBpDisplayStr(lenRef);
176
+ const lenb = getBpDisplayStr(lenAlt);
177
+ return ref.split('').reverse().join('') === alt
178
+ ? makeDescriptionString('inv', lena, lenb)
179
+ : makeDescriptionString('substitution', lena, lenb);
180
+ }
181
+ else {
182
+ return ref.split('').reverse().join('') === alt
183
+ ? makeDescriptionString('inv', ref, alt)
184
+ : makeDescriptionString('substitution', ref, alt);
185
+ }
186
+ }
187
+ else if (ref.length <= alt.length) {
188
+ const len = alt.length - ref.length;
189
+ const lenAlt = alt.length;
190
+ const lenRef = ref.length;
191
+ const lena = getBpDisplayStr(len);
192
+ return lenRef > 5 || lenAlt > 5
193
+ ? `${lena} INS`
194
+ : makeDescriptionString('insertion', len > 5 ? lena : ref, alt);
195
+ }
196
+ else if (ref.length > alt.length) {
197
+ const lenRef = ref.length;
198
+ const lenAlt = alt.length;
199
+ const lena = getBpDisplayStr(lenRef - lenAlt);
200
+ return lenRef > 5 || lenAlt > 5
201
+ ? `${lena} DEL`
202
+ : makeDescriptionString('deletion', ref, alt);
203
+ }
204
+ else {
205
+ return makeDescriptionString('indel', ref, alt);
206
+ }
121
207
  }
122
208
  function makeDescriptionString(soTerm, ref, alt) {
123
- return `${soTerm} ${ref} -> ${alt}`;
209
+ return `${soTerm} ${[ref, alt].join(' -> ')}`;
210
+ }
211
+ export function makeSimpleAltString(genotype, ref, alt) {
212
+ return genotype
213
+ .split(/[/|]/)
214
+ .map(r => r === '.'
215
+ ? '.'
216
+ : +r === 0
217
+ ? `ref(${ref.length < 10 ? ref : getBpDisplayStr(ref.length)})`
218
+ : getMinimalDesc(ref, alt[+r - 1] || ''))
219
+ .join(genotype.includes('|') ? '|' : '/');
124
220
  }
@@ -22,5 +22,4 @@ export default class VcfTabixAdapter extends BaseFeatureDataAdapter {
22
22
  getSources(): Promise<{
23
23
  name: string;
24
24
  }[]>;
25
- freeResources(): void;
26
25
  }
@@ -1,7 +1,7 @@
1
1
  import { TabixIndexedFile } from '@gmod/tabix';
2
2
  import VcfParser from '@gmod/vcf';
3
3
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
4
- import { fetchAndMaybeUnzipText, updateStatus } from '@jbrowse/core/util';
4
+ import { fetchAndMaybeUnzipText, shorten2, updateStatus, } from '@jbrowse/core/util';
5
5
  import { openLocation } from '@jbrowse/core/util/io';
6
6
  import { ObservableCreate } from '@jbrowse/core/util/rxjs';
7
7
  import VcfFeature from '../VcfFeature';
@@ -85,23 +85,27 @@ export default class VcfTabixAdapter extends BaseFeatureDataAdapter {
85
85
  const lines = txt.split(/\n|\r\n|\r/);
86
86
  const header = lines[0].split('\t');
87
87
  const { parser } = await this.configure();
88
- const s = new Set(parser.samples);
89
- const ret = lines
88
+ const metadataLines = lines
90
89
  .slice(1)
91
90
  .filter(f => !!f)
92
91
  .map(line => {
93
92
  const [name, ...rest] = line.split('\t');
94
93
  return {
95
- ...Object.fromEntries(rest.map((c, idx) => [header[idx + 1], c])),
94
+ ...Object.fromEntries(header.slice(1).map((c, idx) => [c, rest[idx] || ''])),
96
95
  name: name,
97
96
  };
98
97
  });
99
- const missing = ret.filter(f => !s.has(f.name));
100
- if (missing.length) {
101
- console.warn('Samples in metadata file not in VCF:', ret.filter(f => !s.has(f.name)));
98
+ const vcfSampleSet = new Set(parser.samples);
99
+ const metadataSet = new Set(metadataLines.map(r => r.name));
100
+ const metadataNotInVcfSamples = [...metadataSet].filter(f => !vcfSampleSet.has(f));
101
+ const vcfSamplesNotInMetadata = [...vcfSampleSet].filter(f => !metadataSet.has(f));
102
+ if (metadataNotInVcfSamples.length) {
103
+ console.warn(`There are ${metadataNotInVcfSamples.length} samples in metadata file (${metadataLines.length} lines) not in VCF (${parser.samples.length} samples):`, shorten2(metadataNotInVcfSamples.join(',')));
102
104
  }
103
- return ret.filter(f => s.has(f.name));
105
+ if (vcfSamplesNotInMetadata.length) {
106
+ console.warn(`There are ${vcfSamplesNotInMetadata.length} samples in VCF file (${parser.samples.length} samples) not in metadata file (${metadataLines.length} lines):`, shorten2(vcfSamplesNotInMetadata.map(m => m).join(',')));
107
+ }
108
+ return metadataLines.filter(f => vcfSampleSet.has(f.name));
104
109
  }
105
110
  }
106
- freeResources() { }
107
111
  }
@@ -6,6 +6,7 @@ export declare function getMultiVariantFeaturesAutorun(self: {
6
6
  adapterConfig: AnyConfigurationModel;
7
7
  sources?: Source[];
8
8
  minorAlleleFrequencyFilter: number;
9
+ lengthCutoffFilter: number;
9
10
  statsReadyAndRegionNotTooLarge: boolean;
10
11
  adapterProps: () => Record<string, unknown>;
11
12
  setError: (error: unknown) => void;
@@ -13,4 +14,5 @@ export declare function getMultiVariantFeaturesAutorun(self: {
13
14
  setMessage: (str: string) => void;
14
15
  setHasPhased: (arg: boolean) => void;
15
16
  setSampleInfo: (arg: Record<string, SampleInfo>) => void;
17
+ setSimplifiedFeaturesLoading: (arg: string) => void;
16
18
  }): void;
@@ -1,5 +1,6 @@
1
1
  import { SimpleFeature, getContainingView, getSession, } from '@jbrowse/core/util';
2
2
  import { isAbortException } from '@jbrowse/core/util/aborting';
3
+ import { createStopToken } from '@jbrowse/core/util/stopToken';
3
4
  import { getRpcSessionId } from '@jbrowse/core/util/tracks';
4
5
  import { autorun } from 'mobx';
5
6
  import { addDisposer, isAlive } from 'mobx-state-tree';
@@ -10,16 +11,20 @@ export function getMultiVariantFeaturesAutorun(self) {
10
11
  if (!view.initialized || !self.statsReadyAndRegionNotTooLarge) {
11
12
  return;
12
13
  }
14
+ const stopToken = createStopToken();
15
+ self.setSimplifiedFeaturesLoading(stopToken);
13
16
  const { rpcManager } = getSession(self);
14
- const { sources, minorAlleleFrequencyFilter, adapterConfig } = self;
17
+ const { lengthCutoffFilter, sources, minorAlleleFrequencyFilter, adapterConfig, } = self;
15
18
  if (sources) {
16
19
  const sessionId = getRpcSessionId(self);
17
20
  const { sampleInfo, hasPhased, features } = (await rpcManager.call(sessionId, 'MultiVariantGetSimplifiedFeatures', {
18
21
  regions: view.dynamicBlocks.contentBlocks,
19
22
  sources,
20
23
  minorAlleleFrequencyFilter,
24
+ lengthCutoffFilter,
21
25
  sessionId,
22
26
  adapterConfig,
27
+ stopToken,
23
28
  }));
24
29
  if (isAlive(self)) {
25
30
  self.setHasPhased(hasPhased);
@@ -34,5 +39,7 @@ export function getMultiVariantFeaturesAutorun(self) {
34
39
  getSession(self).notifyError(`${e}`, e);
35
40
  }
36
41
  }
37
- }, { delay: 1000 }));
42
+ }, {
43
+ delay: 1000,
44
+ }));
38
45
  }
@@ -13,12 +13,13 @@ export function getMultiVariantSourcesAutorun(self) {
13
13
  }
14
14
  const { rpcManager } = getSession(self);
15
15
  const { adapterConfig } = self;
16
- const token = createStopToken();
17
- self.setSourcesLoading(token);
16
+ const stopToken = createStopToken();
17
+ self.setSourcesLoading(stopToken);
18
18
  const sessionId = getRpcSessionId(self);
19
19
  const sources = (await rpcManager.call(sessionId, 'MultiVariantGetSources', {
20
20
  sessionId,
21
21
  adapterConfig,
22
+ stopToken,
22
23
  }));
23
24
  if (isAlive(self)) {
24
25
  self.setSources(sources);
@@ -1,4 +1,4 @@
1
- import type { SampleInfo, Source } from '../shared/types';
1
+ import type { SampleInfo, Source } from './types';
2
2
  import type { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
3
3
  import type { Feature } from '@jbrowse/core/util';
4
4
  import type { Instance } from 'mobx-state-tree';
@@ -90,6 +90,9 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
90
90
  renderingMode: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
91
91
  rowHeightSetting: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
92
92
  autoHeight: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
93
+ lengthCutoffFilter: import("mobx-state-tree").IType<number | undefined, number, number>;
94
+ jexlFilters: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>>;
95
+ referenceDrawingMode: import("mobx-state-tree").IType<string | undefined, string, string>;
93
96
  }, {
94
97
  rendererTypeName: string;
95
98
  error: unknown;
@@ -202,7 +205,7 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
202
205
  } & {
203
206
  addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
204
207
  deleteBlock(key: string): void;
205
- selectFeature(feature: Feature): void;
208
+ selectFeature(feature: Feature): Promise<void>;
206
209
  navToFeature(feature: Feature): void;
207
210
  clearFeatureSelection(): void;
208
211
  setFeatureIdUnderMouse(feature?: string): void;
@@ -233,19 +236,28 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
233
236
  renderProps(): any;
234
237
  } & {
235
238
  sourcesLoadingStopToken: string | undefined;
239
+ simplifiedFeaturesStopToken: string | undefined;
236
240
  featureUnderMouseVolatile: Feature | undefined;
237
241
  sourcesVolatile: Source[] | undefined;
238
242
  featuresVolatile: Feature[] | undefined;
239
243
  hasPhased: boolean;
240
244
  sampleInfo: undefined | Record<string, SampleInfo>;
241
- hoveredGenotype: string | undefined;
245
+ hoveredGenotype: {
246
+ genotype: string;
247
+ name: string;
248
+ } | undefined;
242
249
  } & {
250
+ setJexlFilters(f?: string[]): void;
243
251
  setRowHeight(arg: number): void;
244
- setHoveredGenotype(arg: string): void;
252
+ setHoveredGenotype(arg?: {
253
+ genotype: string;
254
+ name: string;
255
+ }): void;
245
256
  setFeatures(f: Feature[]): void;
246
257
  setLayout(layout: Source[]): void;
247
258
  clearLayout(): void;
248
259
  setSourcesLoading(str: string): void;
260
+ setSimplifiedFeaturesLoading(str: string): void;
249
261
  setSources(sources: Source[]): void;
250
262
  setMafFilter(arg: number): void;
251
263
  setShowSidebarLabels(arg: boolean): void;
@@ -253,7 +265,9 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
253
265
  setAutoHeight(arg: boolean): void;
254
266
  setHasPhased(arg: boolean): void;
255
267
  setSampleInfo(arg: Record<string, SampleInfo>): void;
268
+ setReferenceDrawingMode(arg: string): void;
256
269
  } & {
270
+ readonly activeFilters: any;
257
271
  readonly preSources: Source[] | undefined;
258
272
  readonly sourcesWithoutLayout: {
259
273
  label: string;
@@ -274,6 +288,17 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
274
288
  HP?: number;
275
289
  }[] | undefined;
276
290
  } & {
291
+ readonly sourceMap: {
292
+ [k: string]: {
293
+ label: string;
294
+ id: string;
295
+ baseUri?: string;
296
+ name: string;
297
+ color?: string;
298
+ group?: string;
299
+ HP?: number;
300
+ };
301
+ } | undefined;
277
302
  readonly rowHeight: number;
278
303
  adapterProps(): any;
279
304
  trackMenuItems(): (import("@jbrowse/core/ui").MenuDivider | import("@jbrowse/core/ui").MenuSubHeader | import("@jbrowse/core/ui").NormalMenuItem | import("@jbrowse/core/ui").CheckboxMenuItem | import("@jbrowse/core/ui").RadioMenuItem | import("@jbrowse/core/ui").SubMenuItem | {
@@ -327,6 +352,18 @@ export default function MultiVariantBaseModelF(configSchema: AnyConfigurationSch
327
352
  type?: undefined;
328
353
  checked?: undefined;
329
354
  onClick?: undefined;
355
+ } | {
356
+ label: string;
357
+ type: string;
358
+ subMenu: {
359
+ label: string;
360
+ type: string;
361
+ checked: boolean;
362
+ onClick: () => void;
363
+ }[];
364
+ icon?: undefined;
365
+ checked?: undefined;
366
+ onClick?: undefined;
330
367
  } | {
331
368
  label: string;
332
369
  icon: import("@mui/material/OverridableComponent").OverridableComponent<import("@mui/material").SvgIconTypeMap<{}, "svg">> & {