Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow changing between xyplot,line,density for linear wiggle tracks and other small fixes #3065

Merged
merged 4 commits into from
Jun 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 0 additions & 68 deletions plugins/wiggle/src/LinePlotRenderer/configSchema.js

This file was deleted.

8 changes: 7 additions & 1 deletion plugins/wiggle/src/LinePlotRenderer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ export { default } from './LinePlotRenderer'

export const configSchema = ConfigurationSchema(
'LinePlotRenderer',
{},
{
displayCrossHatches: {
type: 'boolean',
description: 'choose to draw cross hatches (sideways lines)',
defaultValue: false,
},
},
{ baseConfiguration: ConfigSchema, explicitlyTyped: true },
)
121 changes: 56 additions & 65 deletions plugins/wiggle/src/LinearWiggleDisplay/models/model.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -214,16 +214,26 @@ const stateModelFactory = (
const configBlob =
getConf(self, ['renderers', self.rendererTypeName]) || {}

const {
color,
posColor,
negColor,
summaryScoreMode,
scaleType,
displayCrossHatches,
fill,
} = self

return self.rendererType.configSchema.create(
{
...configBlob,
filled: self.fill,
scaleType: self.scaleType,
displayCrossHatches: self.displayCrossHatches,
summaryScoreMode: self.summaryScoreMode,
...(self.color ? { color: self.color } : {}),
...(self.negColor ? { negColor: self.negColor } : {}),
...(self.posColor ? { posColor: self.posColor } : {}),
...(scaleType ? { scaleType } : {}),
...(fill ? { filled: fill } : {}),
...(displayCrossHatches ? { displayCrossHatches } : {}),
...(summaryScoreMode ? { summaryScoreMode } : {}),
...(color ? { color } : {}),
...(negColor ? { negColor } : {}),
...(posColor ? { posColor } : {}),
},
getEnv(self),
)
Expand All @@ -233,20 +243,18 @@ const stateModelFactory = (
let oldDomain: [number, number] = [0, 0]
return {
get filled() {
return self.fill ?? readConfObject(self.rendererConfig, 'filled')
const { fill, rendererConfig: conf } = self
return fill ?? readConfObject(conf, 'filled')
},
get summaryScoreModeSetting() {
return (
self.summaryScoreMode ||
readConfObject(self.rendererConfig, 'summaryScoreMode')
)
const { summaryScoreMode, rendererConfig: conf } = self
return summaryScoreMode ?? readConfObject(conf, 'summaryScoreMode')
},
get domain() {
const { stats, scaleType, minScore, maxScore } = self
const { scoreMin, scoreMax } = stats

const ret = getNiceDomain({
domain: [scoreMin, scoreMax],
domain: [stats.scoreMin, stats.scoreMax],
bounds: [minScore, maxScore],
scaleType,
})
Expand Down Expand Up @@ -285,14 +293,12 @@ const stateModelFactory = (
},

get autoscaleType() {
return self.autoscale || getConf(self, 'autoscale')
return self.autoscale ?? getConf(self, 'autoscale')
},

get displayCrossHatchesSetting() {
return (
self.displayCrossHatches ||
readConfObject(self.rendererConfig, 'displayCrossHatches')
)
const { displayCrossHatches: hatches, rendererConfig: conf } = self
return hatches ?? readConfObject(conf, 'displayCrossHatches')
},
}
})
Expand All @@ -318,18 +324,19 @@ const stateModelFactory = (
return {
renderProps() {
const superProps = superRenderProps()
const { filters, ticks, height, resolution, scaleOpts } = self
return {
...superProps,
notReady: superProps.notReady || !self.statsReady,
rpcDriverName: self.rpcDriverName,
displayModel: self,
config: self.rendererConfig,
scaleOpts: self.scaleOpts,
resolution: self.resolution,
height: self.height,
ticks: self.ticks,
displayCrossHatches: self.displayCrossHatches,
filters: self.filters,
displayCrossHatches: self.displayCrossHatchesSetting,
scaleOpts,
resolution,
height,
ticks,
filters,
}
},

Expand All @@ -349,6 +356,7 @@ const stateModelFactory = (
})
.views(self => {
const { trackMenuItems: superTrackMenuItems } = self
const hasRenderings = getConf(self, 'defaultRendering')
return {
trackMenuItems() {
return [
Expand All @@ -360,26 +368,20 @@ const stateModelFactory = (
subMenu: [
{
label: 'Finer resolution',
onClick: () => {
self.setResolution(self.resolution * 5)
},
onClick: () => self.setResolution(self.resolution * 5),
},
{
label: 'Coarser resolution',
onClick: () => {
self.setResolution(self.resolution / 5)
},
onClick: () => self.setResolution(self.resolution / 5),
},
],
},
{
label: 'Summary score mode',
subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => {
return {
label: elt,
onClick: () => self.setSummaryScoreMode(elt),
}
}),
subMenu: ['min', 'max', 'avg', 'whiskers'].map(elt => ({
label: elt,
onClick: () => self.setSummaryScoreMode(elt),
})),
},
]
: []),
Expand All @@ -389,33 +391,26 @@ const stateModelFactory = (
label: self.filled
? 'Turn off histogram fill'
: 'Turn on histogram fill',
onClick: () => {
self.setFill(!self.filled)
},
onClick: () => self.setFill(!self.filled),
},
]
: []),
{
label:
self.scaleType === 'log' ? 'Set linear scale' : 'Set log scale',
onClick: () => {
self.toggleLogScale()
},
onClick: () => self.toggleLogScale(),
},
{
type: 'checkbox',
label: 'Draw cross hatches',
checked: self.displayCrossHatchesSetting,
onClick: () => {
self.toggleCrossHatches()
},
onClick: () => self.toggleCrossHatches(),
},

...(Object.keys(getConf(self, 'renderers') || {}).length > 1
...(hasRenderings
? [
{
label: 'Renderer type',
subMenu: [...rendererTypes.keys()].map(key => ({
subMenu: ['xyplot', 'density', 'line'].map(key => ({
label: key,
onClick: () => self.setRendererType(key),
})),
Expand All @@ -433,30 +428,26 @@ const stateModelFactory = (
]
: []),
['localsd', 'Local ± 3σ'],
].map(([val, label]) => {
return {
label,
onClick() {
self.setAutoscale(val)
},
}
}),
].map(([val, label]) => ({
label,
onClick: () => self.setAutoscale(val),
})),
},
{
label: 'Set min/max score',
onClick: () => {
getSession(self).queueDialog(doneCallback => [
getSession(self).queueDialog(handleClose => [
SetMinMaxDlg,
{ model: self, handleClose: doneCallback },
{ model: self, handleClose },
])
},
},
{
label: 'Set color',
onClick: () => {
getSession(self).queueDialog(doneCallback => [
getSession(self).queueDialog(handleClose => [
SetColorDlg,
{ model: self, handleClose: doneCallback },
{ model: self, handleClose },
])
},
},
Expand Down Expand Up @@ -552,9 +543,9 @@ const stateModelFactory = (
async reload() {
self.setError()
const aborter = new AbortController()
let stats
self.setLoading(aborter)
try {
stats = await getStats({
const stats = await getStats({
signal: aborter.signal,
...self.renderProps(),
})
Expand All @@ -572,9 +563,7 @@ const stateModelFactory = (
autorun(
async () => {
try {
const aborter = new AbortController()
const view = getContainingView(self) as LGV
self.setLoading(aborter)

if (!view.initialized) {
return
Expand All @@ -586,6 +575,8 @@ const stateModelFactory = (
if (self.regionTooLarge) {
return
}
const aborter = new AbortController()
self.setLoading(aborter)

const wiggleStats = await getStats({
signal: aborter.signal,
Expand Down
21 changes: 19 additions & 2 deletions plugins/wiggle/src/XYPlotRenderer/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,28 @@
import { ConfigurationSchema } from '@jbrowse/core/configuration'
import ConfigSchema from '../configSchema'

import { types } from 'mobx-state-tree'
export { default as ReactComponent } from '../WiggleRendering'
export { default } from './XYPlotRenderer'

export const configSchema = ConfigurationSchema(
'XYPlotRenderer',
{},
{
filled: {
type: 'boolean',
defaultValue: true,
},
displayCrossHatches: {
type: 'boolean',
description: 'choose to draw cross hatches (sideways lines)',
defaultValue: false,
},
summaryScoreMode: {
type: 'stringEnum',
model: types.enumeration('Score type', ['max', 'min', 'avg', 'whiskers']),
description:
'choose whether to use max/min/average or whiskers which combines all three into the same rendering',
defaultValue: 'whiskers',
},
},
{ baseConfiguration: ConfigSchema, explicitlyTyped: true },
)
Loading