@jbrowse/plugin-wiggle 2.4.2 → 2.5.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 (129) hide show
  1. package/dist/BigWigAdapter/BigWigAdapter.d.ts +2 -2
  2. package/dist/BigWigAdapter/BigWigAdapter.js +2 -2
  3. package/dist/BigWigAdapter/BigWigAdapter.js.map +1 -1
  4. package/dist/BigWigAdapter/configSchema.d.ts +20 -1
  5. package/dist/CreateMultiWiggleExtension/ConfirmDialog.d.ts +0 -1
  6. package/dist/DensityRenderer/configSchema.d.ts +33 -1
  7. package/dist/LinePlotRenderer/configSchema.d.ts +44 -1
  8. package/dist/LinearWiggleDisplay/components/SetColorDialog.d.ts +0 -1
  9. package/dist/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +0 -1
  10. package/dist/LinearWiggleDisplay/models/configSchema.d.ts +98 -1
  11. package/dist/LinearWiggleDisplay/models/model.d.ts +82 -35
  12. package/dist/LinearWiggleDisplay/models/model.js +8 -25
  13. package/dist/LinearWiggleDisplay/models/model.js.map +1 -1
  14. package/dist/MultiDensityRenderer/configSchema.d.ts +33 -1
  15. package/dist/MultiLineRenderer/configSchema.d.ts +51 -1
  16. package/dist/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +0 -1
  17. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +0 -1
  18. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js +36 -37
  19. package/dist/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  20. package/dist/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +0 -1
  21. package/dist/MultiLinearWiggleDisplay/models/configSchema.d.ts +107 -1
  22. package/dist/MultiLinearWiggleDisplay/models/model.d.ts +58 -11
  23. package/dist/MultiLinearWiggleDisplay/models/model.js +3 -19
  24. package/dist/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  25. package/dist/MultiQuantitativeTrack/configSchema.d.ts +73 -1
  26. package/dist/MultiRowLineRenderer/configSchema.d.ts +51 -1
  27. package/dist/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
  28. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
  29. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js +2 -2
  30. package/dist/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
  31. package/dist/MultiWiggleAdapter/configSchema.d.ts +18 -1
  32. package/dist/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +0 -1
  33. package/dist/MultiWiggleRendering.d.ts +0 -1
  34. package/dist/MultiXYPlotRenderer/configSchema.d.ts +65 -1
  35. package/dist/QuantitativeTrack/configSchema.d.ts +73 -1
  36. package/dist/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
  37. package/dist/WiggleRPC/MultiWiggleGetSources.js +51 -0
  38. package/dist/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
  39. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
  40. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +37 -0
  41. package/dist/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
  42. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
  43. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +54 -0
  44. package/dist/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
  45. package/dist/WiggleRPC/rpcMethods.d.ts +3 -47
  46. package/dist/WiggleRPC/rpcMethods.js +16 -117
  47. package/dist/WiggleRPC/rpcMethods.js.map +1 -1
  48. package/dist/WiggleRendering.d.ts +0 -1
  49. package/dist/XYPlotRenderer/configSchema.d.ts +65 -1
  50. package/dist/configSchema.d.ts +51 -1
  51. package/dist/index.d.ts +148 -23
  52. package/dist/index.js +2 -2
  53. package/dist/index.js.map +1 -1
  54. package/dist/shared/SetMinMaxDialog.d.ts +0 -1
  55. package/dist/shared/YScaleBar.d.ts +0 -1
  56. package/dist/util.d.ts +9 -6
  57. package/dist/util.js +13 -12
  58. package/dist/util.js.map +1 -1
  59. package/esm/BigWigAdapter/BigWigAdapter.d.ts +2 -2
  60. package/esm/BigWigAdapter/BigWigAdapter.js +4 -3
  61. package/esm/BigWigAdapter/BigWigAdapter.js.map +1 -1
  62. package/esm/BigWigAdapter/configSchema.d.ts +20 -1
  63. package/esm/CreateMultiWiggleExtension/ConfirmDialog.d.ts +0 -1
  64. package/esm/DensityRenderer/configSchema.d.ts +33 -1
  65. package/esm/LinePlotRenderer/configSchema.d.ts +44 -1
  66. package/esm/LinearWiggleDisplay/components/SetColorDialog.d.ts +0 -1
  67. package/esm/LinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +0 -1
  68. package/esm/LinearWiggleDisplay/models/configSchema.d.ts +98 -1
  69. package/esm/LinearWiggleDisplay/models/model.d.ts +82 -35
  70. package/esm/LinearWiggleDisplay/models/model.js +10 -27
  71. package/esm/LinearWiggleDisplay/models/model.js.map +1 -1
  72. package/esm/MultiDensityRenderer/configSchema.d.ts +33 -1
  73. package/esm/MultiLineRenderer/configSchema.d.ts +51 -1
  74. package/esm/MultiLinearWiggleDisplay/components/DraggableDialog.d.ts +0 -1
  75. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.d.ts +0 -1
  76. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js +36 -37
  77. package/esm/MultiLinearWiggleDisplay/components/SetColorDialog.js.map +1 -1
  78. package/esm/MultiLinearWiggleDisplay/components/WiggleDisplayComponent.d.ts +0 -1
  79. package/esm/MultiLinearWiggleDisplay/models/configSchema.d.ts +107 -1
  80. package/esm/MultiLinearWiggleDisplay/models/model.d.ts +58 -11
  81. package/esm/MultiLinearWiggleDisplay/models/model.js +4 -20
  82. package/esm/MultiLinearWiggleDisplay/models/model.js.map +1 -1
  83. package/esm/MultiQuantitativeTrack/configSchema.d.ts +73 -1
  84. package/esm/MultiRowLineRenderer/configSchema.d.ts +51 -1
  85. package/esm/MultiRowXYPlotRenderer/configSchema.d.ts +68 -1
  86. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.d.ts +1 -1
  87. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js +3 -2
  88. package/esm/MultiWiggleAdapter/MultiWiggleAdapter.js.map +1 -1
  89. package/esm/MultiWiggleAdapter/configSchema.d.ts +18 -1
  90. package/esm/MultiWiggleAddTrackWidget/AddTrackWorkflow.d.ts +0 -1
  91. package/esm/MultiWiggleRendering.d.ts +0 -1
  92. package/esm/MultiXYPlotRenderer/configSchema.d.ts +65 -1
  93. package/esm/QuantitativeTrack/configSchema.d.ts +73 -1
  94. package/esm/WiggleRPC/MultiWiggleGetSources.d.ts +21 -0
  95. package/esm/WiggleRPC/MultiWiggleGetSources.js +44 -0
  96. package/esm/WiggleRPC/MultiWiggleGetSources.js.map +1 -0
  97. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.d.ts +14 -0
  98. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js +30 -0
  99. package/esm/WiggleRPC/WiggleGetGlobalQuantitativeStats.js.map +1 -0
  100. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.d.ts +20 -0
  101. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js +47 -0
  102. package/esm/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.js.map +1 -0
  103. package/esm/WiggleRPC/rpcMethods.d.ts +3 -47
  104. package/esm/WiggleRPC/rpcMethods.js +3 -111
  105. package/esm/WiggleRPC/rpcMethods.js.map +1 -1
  106. package/esm/WiggleRendering.d.ts +0 -1
  107. package/esm/XYPlotRenderer/configSchema.d.ts +65 -1
  108. package/esm/configSchema.d.ts +51 -1
  109. package/esm/index.d.ts +148 -23
  110. package/esm/index.js +3 -3
  111. package/esm/index.js.map +1 -1
  112. package/esm/shared/SetMinMaxDialog.d.ts +0 -1
  113. package/esm/shared/YScaleBar.d.ts +0 -1
  114. package/esm/util.d.ts +9 -6
  115. package/esm/util.js +10 -9
  116. package/esm/util.js.map +1 -1
  117. package/package.json +3 -3
  118. package/src/BigWigAdapter/BigWigAdapter.test.ts +8 -3
  119. package/src/BigWigAdapter/BigWigAdapter.ts +6 -3
  120. package/src/LinearWiggleDisplay/models/model.tsx +11 -29
  121. package/src/MultiLinearWiggleDisplay/components/SetColorDialog.tsx +53 -50
  122. package/src/MultiLinearWiggleDisplay/models/model.tsx +4 -20
  123. package/src/MultiWiggleAdapter/MultiWiggleAdapter.ts +1 -1
  124. package/src/WiggleRPC/MultiWiggleGetSources.ts +68 -0
  125. package/src/WiggleRPC/WiggleGetGlobalQuantitativeStats.ts +44 -0
  126. package/src/WiggleRPC/WiggleGetMultiRegionQuantitativeStats.ts +73 -0
  127. package/src/WiggleRPC/rpcMethods.ts +3 -170
  128. package/src/index.ts +4 -4
  129. package/src/util.ts +24 -17
@@ -129,6 +129,11 @@ export default function SetColorDialog({
129
129
  )
130
130
  }
131
131
 
132
+ interface SortField {
133
+ idx: number
134
+ field: string | null
135
+ }
136
+
132
137
  function SourcesGrid({
133
138
  rows,
134
139
  onChange,
@@ -143,53 +148,11 @@ function SourcesGrid({
143
148
 
144
149
  // @ts-expect-error
145
150
  const { name: _name, color: _color, baseUri: _baseUri, ...rest } = rows[0]
146
-
147
- // similar to BaseFeatureDetail data-grid for auto-measuring columns
148
- const columns = [
149
- {
150
- field: 'color',
151
- headerName: 'Color',
152
- renderCell: (params: GridCellParams) => {
153
- const { value, id } = params
154
- return (
155
- <ColorPicker
156
- color={value || 'blue'}
157
- onChange={c => {
158
- const elt = rows.find(f => f.name === id)
159
- if (elt) {
160
- elt.color = c
161
- }
162
- onChange([...rows])
163
- }}
164
- />
165
- )
166
- },
167
- },
168
- {
169
- field: 'name',
170
- sortingOrder: [null],
171
- headerName: 'Name',
172
- width: measureGridWidth(rows.map(r => r.name)),
173
- },
174
- ...Object.keys(rest).map(val => ({
175
- field: val,
176
- sortingOrder: [null],
177
- renderCell: (params: GridCellParams) => {
178
- const { value } = params
179
- return isUriLocation(value) ? <UriLink value={value} /> : getStr(value)
180
- },
181
- // @ts-expect-error
182
- width: measureGridWidth(rows.map(r => r[val])),
183
- })),
184
- ]
185
-
186
- // this helps keep track of the selection, even though it is not used
187
- // anywhere except inside the picker
188
151
  const [widgetColor, setWidgetColor] = useState('blue')
189
- const [currSort, setCurrSort] = useState<{
190
- idx: number
191
- field: string | null
192
- }>({ idx: 0, field: null })
152
+ const [currSort, setCurrSort] = useState<SortField>({
153
+ idx: 0,
154
+ field: null,
155
+ })
193
156
 
194
157
  return (
195
158
  <div>
@@ -247,12 +210,52 @@ function SourcesGrid({
247
210
  <DataGrid
248
211
  getRowId={row => row.name}
249
212
  checkboxSelection
250
- disableSelectionOnClick
251
- onSelectionModelChange={arg => setSelected(arg as string[])}
213
+ disableRowSelectionOnClick
214
+ onRowSelectionModelChange={arg => setSelected(arg as string[])}
252
215
  rows={rows}
253
216
  rowHeight={25}
254
- headerHeight={33}
255
- columns={columns}
217
+ columnHeaderHeight={33}
218
+ columns={[
219
+ {
220
+ field: 'color',
221
+ headerName: 'Color',
222
+ renderCell: params => {
223
+ const { value, id } = params
224
+ return (
225
+ <ColorPicker
226
+ color={value || 'blue'}
227
+ onChange={c => {
228
+ const elt = rows.find(f => f.name === id)
229
+ if (elt) {
230
+ elt.color = c
231
+ }
232
+ onChange([...rows])
233
+ }}
234
+ />
235
+ )
236
+ },
237
+ },
238
+ {
239
+ field: 'name',
240
+ sortingOrder: [null],
241
+ headerName: 'Name',
242
+ width: measureGridWidth(rows.map(r => r.name)),
243
+ },
244
+ ...Object.keys(rest).map(val => ({
245
+ field: val,
246
+ sortingOrder: [null],
247
+ renderCell: (params: GridCellParams) => {
248
+ const { value } = params
249
+ return isUriLocation(value) ? (
250
+ <UriLink value={value} />
251
+ ) : (
252
+ getStr(value)
253
+ )
254
+ },
255
+ // @ts-ignore
256
+ width: measureGridWidth(rows.map(r => r[val])),
257
+ })),
258
+ ]}
256
259
  sortModel={
257
260
  [
258
261
  /* we control the sort as a controlled component using onSortModelChange */
@@ -30,8 +30,7 @@ import {
30
30
  import {
31
31
  getNiceDomain,
32
32
  getScale,
33
- getStats,
34
- statsAutorun,
33
+ quantitativeStatsAutorun,
35
34
  YSCALEBAR_LABEL_OFFSET,
36
35
  } from '../../util'
37
36
 
@@ -110,7 +109,7 @@ const stateModelFactory = (
110
109
  clearLayout() {
111
110
  self.layout = []
112
111
  },
113
- updateStats(stats: { scoreMin: number; scoreMax: number }) {
112
+ updateQuantitativeStats(stats: { scoreMin: number; scoreMax: number }) {
114
113
  const { scoreMin, scoreMax } = stats
115
114
  const EPSILON = 0.000001
116
115
  if (!self.stats) {
@@ -662,27 +661,12 @@ const stateModelFactory = (
662
661
  type ExportSvgOpts = Parameters<typeof superRenderSvg>[0]
663
662
 
664
663
  return {
665
- // re-runs stats and refresh whole display on reload
666
664
  async reload() {
667
665
  self.setError()
668
- const aborter = new AbortController()
669
- let stats
670
- try {
671
- self.setLoading(aborter)
672
- stats = await getStats(self, {
673
- signal: aborter.signal,
674
- ...self.renderProps(),
675
- })
676
- if (isAlive(self)) {
677
- self.updateStats(stats)
678
- superReload()
679
- }
680
- } catch (e) {
681
- self.setError(e)
682
- }
666
+ superReload()
683
667
  },
684
668
  afterAttach() {
685
- statsAutorun(self)
669
+ quantitativeStatsAutorun(self)
686
670
  addDisposer(
687
671
  self,
688
672
  autorun(async () => {
@@ -106,7 +106,7 @@ export default class MultiWiggleAdapter extends BaseFeatureDataAdapter {
106
106
  }
107
107
 
108
108
  // always render bigwig instead of calculating a feature density for it
109
- async estimateRegionsStats(_regions: Region[]) {
109
+ async getMultiRegionFeatureDensityStats(_regions: Region[]) {
110
110
  return { featureDensity: 0 }
111
111
  }
112
112
 
@@ -0,0 +1,68 @@
1
+ import RpcMethodType from '@jbrowse/core/pluggableElementTypes/RpcMethodType'
2
+ import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain'
3
+ import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'
4
+ import { RenderArgs } from '@jbrowse/core/rpc/coreRpcMethods'
5
+ import { renameRegionsIfNeeded, Region } from '@jbrowse/core/util'
6
+ import { RemoteAbortSignal } from '@jbrowse/core/rpc/remoteAbortSignals'
7
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration'
8
+
9
+ export class MultiWiggleGetSources extends RpcMethodType {
10
+ name = 'MultiWiggleGetSources'
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ async deserializeArguments(args: any, rpcDriverClassName: string) {
14
+ const l = await super.deserializeArguments(args, rpcDriverClassName)
15
+ return {
16
+ ...l,
17
+ filters: args.filters
18
+ ? new SerializableFilterChain({
19
+ filters: args.filters,
20
+ })
21
+ : undefined,
22
+ }
23
+ }
24
+
25
+ async serializeArguments(
26
+ args: RenderArgs & {
27
+ signal?: AbortSignal
28
+ statusCallback?: (arg: string) => void
29
+ },
30
+ rpcDriverClassName: string,
31
+ ) {
32
+ const pm = this.pluginManager
33
+ const assemblyManager = pm.rootModel?.session?.assemblyManager
34
+ if (!assemblyManager) {
35
+ return args
36
+ }
37
+
38
+ const renamedArgs = await renameRegionsIfNeeded(assemblyManager, {
39
+ ...args,
40
+ filters: args.filters?.toJSON().filters,
41
+ })
42
+
43
+ return super.serializeArguments(renamedArgs, rpcDriverClassName)
44
+ }
45
+
46
+ async execute(
47
+ args: {
48
+ adapterConfig: AnyConfigurationModel
49
+ signal?: RemoteAbortSignal
50
+ sessionId: string
51
+ headers?: Record<string, string>
52
+ regions: Region[]
53
+ bpPerPx: number
54
+ },
55
+ rpcDriverClassName: string,
56
+ ) {
57
+ const pm = this.pluginManager
58
+ const deserializedArgs = await this.deserializeArguments(
59
+ args,
60
+ rpcDriverClassName,
61
+ )
62
+ const { regions, adapterConfig, sessionId } = deserializedArgs
63
+ const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
64
+
65
+ // @ts-expect-error
66
+ return dataAdapter.getSources(regions, deserializedArgs)
67
+ }
68
+ }
@@ -0,0 +1,44 @@
1
+ import RpcMethodType from '@jbrowse/core/pluggableElementTypes/RpcMethodType'
2
+ import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain'
3
+ import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'
4
+ import { RemoteAbortSignal } from '@jbrowse/core/rpc/remoteAbortSignals'
5
+ import { QuantitativeStats } from '@jbrowse/core/util/stats'
6
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration'
7
+
8
+ export class WiggleGetGlobalQuantitativeStats extends RpcMethodType {
9
+ name = 'WiggleGetGlobalQuantitativeStats'
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ async deserializeArguments(args: any, rpcDriverClassName: string) {
13
+ const l = await super.deserializeArguments(args, rpcDriverClassName)
14
+ return {
15
+ ...l,
16
+ filters: args.filters
17
+ ? new SerializableFilterChain({
18
+ filters: args.filters,
19
+ })
20
+ : undefined,
21
+ }
22
+ }
23
+
24
+ async execute(
25
+ args: {
26
+ adapterConfig: AnyConfigurationModel
27
+ signal?: RemoteAbortSignal
28
+ headers?: Record<string, string>
29
+ sessionId: string
30
+ },
31
+ rpcDriverClassName: string,
32
+ ): Promise<QuantitativeStats> {
33
+ const pm = this.pluginManager
34
+ const deserializedArgs = await this.deserializeArguments(
35
+ args,
36
+ rpcDriverClassName,
37
+ )
38
+ const { adapterConfig, sessionId } = deserializedArgs
39
+ const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
40
+
41
+ // @ts-expect-error
42
+ return dataAdapter.getGlobalStats(deserializedArgs)
43
+ }
44
+ }
@@ -0,0 +1,73 @@
1
+ import RpcMethodType from '@jbrowse/core/pluggableElementTypes/RpcMethodType'
2
+ import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain'
3
+ import { RenderArgs } from '@jbrowse/core/rpc/coreRpcMethods'
4
+ import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'
5
+ import { RemoteAbortSignal } from '@jbrowse/core/rpc/remoteAbortSignals'
6
+ import { Region, renameRegionsIfNeeded } from '@jbrowse/core/util'
7
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'
8
+
9
+ export class WiggleGetMultiRegionQuantitativeStats extends RpcMethodType {
10
+ name = 'WiggleGetMultiRegionQuantitativeStats'
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ async deserializeArguments(args: any, rpcDriverClassName: string) {
14
+ const l = await super.deserializeArguments(args, rpcDriverClassName)
15
+ return {
16
+ ...l,
17
+ filters: args.filters
18
+ ? new SerializableFilterChain({
19
+ filters: args.filters,
20
+ })
21
+ : undefined,
22
+ }
23
+ }
24
+
25
+ async serializeArguments(
26
+ args: RenderArgs & {
27
+ signal?: AbortSignal
28
+ statusCallback?: (arg: string) => void
29
+ },
30
+ rpcDriverClassName: string,
31
+ ) {
32
+ const pm = this.pluginManager
33
+ const assemblyManager = pm.rootModel?.session?.assemblyManager
34
+ if (!assemblyManager) {
35
+ return args
36
+ }
37
+
38
+ const renamedArgs = await renameRegionsIfNeeded(assemblyManager, {
39
+ ...args,
40
+ filters: args.filters?.toJSON().filters,
41
+ })
42
+
43
+ return super.serializeArguments(renamedArgs, rpcDriverClassName)
44
+ }
45
+
46
+ async execute(
47
+ args: {
48
+ adapterConfig: {}
49
+ signal?: RemoteAbortSignal
50
+ sessionId: string
51
+ headers?: Record<string, string>
52
+ regions: Region[]
53
+ bpPerPx: number
54
+ },
55
+ rpcDriverClassName: string,
56
+ ) {
57
+ const pm = this.pluginManager
58
+ const deserializedArgs = await this.deserializeArguments(
59
+ args,
60
+ rpcDriverClassName,
61
+ )
62
+ const { regions, adapterConfig, sessionId } = deserializedArgs
63
+ const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
64
+
65
+ if (dataAdapter instanceof BaseFeatureDataAdapter) {
66
+ return dataAdapter.getMultiRegionQuantitativeStats(
67
+ regions,
68
+ deserializedArgs,
69
+ )
70
+ }
71
+ throw new Error('Data adapter not found')
72
+ }
73
+ }
@@ -1,170 +1,3 @@
1
- import RpcMethodType from '@jbrowse/core/pluggableElementTypes/RpcMethodType'
2
- import SerializableFilterChain from '@jbrowse/core/pluggableElementTypes/renderers/util/serializableFilterChain'
3
- import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'
4
- import { RenderArgs } from '@jbrowse/core/rpc/coreRpcMethods'
5
- import { renameRegionsIfNeeded, Region } from '@jbrowse/core/util'
6
- import { RemoteAbortSignal } from '@jbrowse/core/rpc/remoteAbortSignals'
7
- import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'
8
- import { FeatureStats } from '@jbrowse/core/util/stats'
9
-
10
- export class WiggleGetGlobalStats extends RpcMethodType {
11
- name = 'WiggleGetGlobalStats'
12
-
13
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
- async deserializeArguments(args: any, rpcDriverClassName: string) {
15
- const l = await super.deserializeArguments(args, rpcDriverClassName)
16
- return {
17
- ...l,
18
- filters: args.filters
19
- ? new SerializableFilterChain({
20
- filters: args.filters,
21
- })
22
- : undefined,
23
- }
24
- }
25
-
26
- async execute(
27
- args: {
28
- adapterConfig: {}
29
- signal?: RemoteAbortSignal
30
- headers?: Record<string, string>
31
- sessionId: string
32
- },
33
- rpcDriverClassName: string,
34
- ): Promise<FeatureStats> {
35
- const pm = this.pluginManager
36
- const deserializedArgs = await this.deserializeArguments(
37
- args,
38
- rpcDriverClassName,
39
- )
40
- const { adapterConfig, sessionId } = deserializedArgs
41
- const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
42
-
43
- // @ts-expect-error
44
- return dataAdapter.getGlobalStats(deserializedArgs)
45
- }
46
- }
47
-
48
- export class WiggleGetMultiRegionStats extends RpcMethodType {
49
- name = 'WiggleGetMultiRegionStats'
50
-
51
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
- async deserializeArguments(args: any, rpcDriverClassName: string) {
53
- const l = await super.deserializeArguments(args, rpcDriverClassName)
54
- return {
55
- ...l,
56
- filters: args.filters
57
- ? new SerializableFilterChain({
58
- filters: args.filters,
59
- })
60
- : undefined,
61
- }
62
- }
63
-
64
- async serializeArguments(
65
- args: RenderArgs & {
66
- signal?: AbortSignal
67
- statusCallback?: (arg: string) => void
68
- },
69
- rpcDriverClassName: string,
70
- ) {
71
- const pm = this.pluginManager
72
- const assemblyManager = pm.rootModel?.session?.assemblyManager
73
- if (!assemblyManager) {
74
- return args
75
- }
76
-
77
- const renamedArgs = await renameRegionsIfNeeded(assemblyManager, {
78
- ...args,
79
- filters: args.filters?.toJSON().filters,
80
- })
81
-
82
- return super.serializeArguments(renamedArgs, rpcDriverClassName)
83
- }
84
-
85
- async execute(
86
- args: {
87
- adapterConfig: {}
88
- signal?: RemoteAbortSignal
89
- sessionId: string
90
- headers?: Record<string, string>
91
- regions: Region[]
92
- bpPerPx: number
93
- },
94
- rpcDriverClassName: string,
95
- ) {
96
- const pm = this.pluginManager
97
- const deserializedArgs = await this.deserializeArguments(
98
- args,
99
- rpcDriverClassName,
100
- )
101
- const { regions, adapterConfig, sessionId } = deserializedArgs
102
- const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
103
-
104
- if (dataAdapter instanceof BaseFeatureDataAdapter) {
105
- return dataAdapter.getMultiRegionStats(regions, deserializedArgs)
106
- }
107
- throw new Error('Data adapter not found')
108
- }
109
- }
110
-
111
- export class MultiWiggleGetSources extends RpcMethodType {
112
- name = 'MultiWiggleGetSources'
113
-
114
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
- async deserializeArguments(args: any, rpcDriverClassName: string) {
116
- const l = await super.deserializeArguments(args, rpcDriverClassName)
117
- return {
118
- ...l,
119
- filters: args.filters
120
- ? new SerializableFilterChain({
121
- filters: args.filters,
122
- })
123
- : undefined,
124
- }
125
- }
126
-
127
- async serializeArguments(
128
- args: RenderArgs & {
129
- signal?: AbortSignal
130
- statusCallback?: (arg: string) => void
131
- },
132
- rpcDriverClassName: string,
133
- ) {
134
- const pm = this.pluginManager
135
- const assemblyManager = pm.rootModel?.session?.assemblyManager
136
- if (!assemblyManager) {
137
- return args
138
- }
139
-
140
- const renamedArgs = await renameRegionsIfNeeded(assemblyManager, {
141
- ...args,
142
- filters: args.filters?.toJSON().filters,
143
- })
144
-
145
- return super.serializeArguments(renamedArgs, rpcDriverClassName)
146
- }
147
-
148
- async execute(
149
- args: {
150
- adapterConfig: {}
151
- signal?: RemoteAbortSignal
152
- sessionId: string
153
- headers?: Record<string, string>
154
- regions: Region[]
155
- bpPerPx: number
156
- },
157
- rpcDriverClassName: string,
158
- ) {
159
- const pm = this.pluginManager
160
- const deserializedArgs = await this.deserializeArguments(
161
- args,
162
- rpcDriverClassName,
163
- )
164
- const { regions, adapterConfig, sessionId } = deserializedArgs
165
- const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig)
166
-
167
- // @ts-expect-error
168
- return dataAdapter.getSources(regions, deserializedArgs)
169
- }
170
- }
1
+ export * from './MultiWiggleGetSources'
2
+ export * from './WiggleGetMultiRegionQuantitativeStats'
3
+ export * from './WiggleGetGlobalQuantitativeStats'
package/src/index.ts CHANGED
@@ -30,8 +30,8 @@ import MultiWiggleAddTrackWidgetF from './MultiWiggleAddTrackWidget'
30
30
  import * as utils from './util'
31
31
 
32
32
  import {
33
- WiggleGetGlobalStats,
34
- WiggleGetMultiRegionStats,
33
+ WiggleGetGlobalQuantitativeStats,
34
+ WiggleGetMultiRegionQuantitativeStats,
35
35
  MultiWiggleGetSources,
36
36
  } from './WiggleRPC/rpcMethods'
37
37
 
@@ -101,8 +101,8 @@ export default class WigglePlugin extends Plugin {
101
101
  },
102
102
  )
103
103
 
104
- pm.addRpcMethod(() => new WiggleGetGlobalStats(pm))
105
- pm.addRpcMethod(() => new WiggleGetMultiRegionStats(pm))
104
+ pm.addRpcMethod(() => new WiggleGetGlobalQuantitativeStats(pm))
105
+ pm.addRpcMethod(() => new WiggleGetMultiRegionQuantitativeStats(pm))
106
106
  pm.addRpcMethod(() => new MultiWiggleGetSources(pm))
107
107
  }
108
108
 
package/src/util.ts CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  getSession,
6
6
  getContainingView,
7
7
  } from '@jbrowse/core/util'
8
- import { FeatureStats } from '@jbrowse/core/util/stats'
8
+ import { QuantitativeStats } from '@jbrowse/core/util/stats'
9
9
  import { getRpcSessionId } from '@jbrowse/core/util/tracks'
10
10
  import { addDisposer, isAlive } from 'mobx-state-tree'
11
11
 
@@ -176,9 +176,10 @@ export function groupBy<T>(array: T[], predicate: (v: T) => string) {
176
176
  return result
177
177
  }
178
178
 
179
- export async function getStats(
179
+ export async function getQuantitativeStats(
180
180
  self: {
181
181
  adapterConfig: AnyConfigurationModel
182
+ configuration: AnyConfigurationModel
182
183
  autoscaleType: string
183
184
  setMessage: (str: string) => void
184
185
  },
@@ -187,7 +188,7 @@ export async function getStats(
187
188
  signal?: AbortSignal
188
189
  filters?: string[]
189
190
  },
190
- ): Promise<FeatureStats> {
191
+ ): Promise<QuantitativeStats> {
191
192
  const { rpcManager } = getSession(self)
192
193
  const nd = getConf(self, 'numStdDev') || 3
193
194
  const { adapterConfig, autoscaleType } = self
@@ -204,11 +205,11 @@ export async function getStats(
204
205
  }
205
206
 
206
207
  if (autoscaleType === 'global' || autoscaleType === 'globalsd') {
207
- const results: FeatureStats = (await rpcManager.call(
208
+ const results: QuantitativeStats = (await rpcManager.call(
208
209
  sessionId,
209
- 'WiggleGetGlobalStats',
210
+ 'WiggleGetGlobalQuantitativeStats',
210
211
  params,
211
- )) as FeatureStats
212
+ )) as QuantitativeStats
212
213
  const { scoreMin, scoreMean, scoreStdDev } = results
213
214
  // globalsd uses heuristic to avoid unnecessary scoreMin<0
214
215
  // if the scoreMin is never less than 0
@@ -225,7 +226,7 @@ export async function getStats(
225
226
  const { dynamicBlocks, bpPerPx } = getContainingView(self) as LGV
226
227
  const results = (await rpcManager.call(
227
228
  sessionId,
228
- 'WiggleGetMultiRegionStats',
229
+ 'WiggleGetMultiRegionQuantitativeStats',
229
230
  {
230
231
  ...params,
231
232
  regions: dynamicBlocks.contentBlocks.map(region => {
@@ -238,7 +239,7 @@ export async function getStats(
238
239
  }),
239
240
  bpPerPx,
240
241
  },
241
- )) as FeatureStats
242
+ )) as QuantitativeStats
242
243
  const { scoreMin, scoreMean, scoreStdDev } = results
243
244
 
244
245
  // localsd uses heuristic to avoid unnecessary scoreMin<0 if the
@@ -255,20 +256,25 @@ export async function getStats(
255
256
  if (autoscaleType === 'zscale') {
256
257
  return rpcManager.call(
257
258
  sessionId,
258
- 'WiggleGetGlobalStats',
259
+ 'WiggleGetGlobalQuantitativeStats',
259
260
  params,
260
- ) as Promise<FeatureStats>
261
+ ) as Promise<QuantitativeStats>
261
262
  }
262
263
  throw new Error(`invalid autoscaleType '${autoscaleType}'`)
263
264
  }
264
265
 
265
- export function statsAutorun(self: {
266
- estimatedStatsReady: boolean
266
+ export function quantitativeStatsAutorun(self: {
267
+ featureDensityStatsReady: boolean
267
268
  regionTooLarge: boolean
269
+ error: unknown
268
270
  setLoading: (aborter: AbortController) => void
269
271
  setError: (error: unknown) => void
270
- updateStats: (stats: FeatureStats, statsRegion: string) => void
272
+ updateQuantitativeStats: (
273
+ stats: QuantitativeStats,
274
+ statsRegion: string,
275
+ ) => void
271
276
  renderProps: () => Record<string, unknown>
277
+ configuration: AnyConfigurationModel
272
278
  adapterConfig: AnyConfigurationModel
273
279
  autoscaleType: string
274
280
  setMessage: (str: string) => void
@@ -284,20 +290,21 @@ export function statsAutorun(self: {
284
290
 
285
291
  if (
286
292
  !view.initialized ||
287
- !self.estimatedStatsReady ||
288
- self.regionTooLarge
293
+ !self.featureDensityStatsReady ||
294
+ self.regionTooLarge ||
295
+ self.error
289
296
  ) {
290
297
  return
291
298
  }
292
299
  const statsRegion = JSON.stringify(view.dynamicBlocks)
293
300
 
294
- const wiggleStats = await getStats(self, {
301
+ const wiggleStats = await getQuantitativeStats(self, {
295
302
  signal: aborter.signal,
296
303
  ...self.renderProps(),
297
304
  })
298
305
 
299
306
  if (isAlive(self)) {
300
- self.updateStats(wiggleStats, statsRegion)
307
+ self.updateQuantitativeStats(wiggleStats, statsRegion)
301
308
  }
302
309
  } catch (e) {
303
310
  if (!isAbortException(e) && isAlive(self)) {