From 518783a0a3c6e7a9cd6a703a8825d2e08ab40a8d Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 18 Feb 2025 23:30:52 -0500 Subject: [PATCH] Adjust to height --- plugins/hic/src/HicRenderer/HicRenderer.tsx | 8 ++++--- plugins/hic/src/HicRenderer/makeImageData.ts | 10 ++++++++- plugins/hic/src/LinearHicDisplay/model.ts | 22 +++++++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/plugins/hic/src/HicRenderer/HicRenderer.tsx b/plugins/hic/src/HicRenderer/HicRenderer.tsx index e8be938646..73435cb008 100644 --- a/plugins/hic/src/HicRenderer/HicRenderer.tsx +++ b/plugins/hic/src/HicRenderer/HicRenderer.tsx @@ -1,4 +1,3 @@ -import { readConfObject } from '@jbrowse/core/configuration' import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache' import ServerSideRendererType from '@jbrowse/core/pluggableElementTypes/renderers/ServerSideRendererType' import { renderToAbstractCanvas } from '@jbrowse/core/util/offscreenCanvasUtils' @@ -37,6 +36,7 @@ export interface RenderArgsDeserialized highResolutionScaling: number resolution: number adapterConfig: AnyConfigurationModel + displayHeight?: number } export interface RenderArgsDeserializedWithFeatures @@ -53,16 +53,18 @@ export default class HicRenderer extends ServerSideRendererType { supportsSVG = true async render(renderProps: RenderArgsDeserialized) { - const { config, regions, bpPerPx } = renderProps + const { displayHeight, regions, bpPerPx } = renderProps const region = regions[0]! const width = (region.end - region.start) / bpPerPx - const height = readConfObject(config, 'maxHeight') + const hyp = width / 2 + const height = displayHeight ?? hyp const features = await this.getFeatures(renderProps) const { makeImageData } = await import('./makeImageData') const res = await renderToAbstractCanvas(width, height, renderProps, ctx => makeImageData(ctx, { ...renderProps, + yScalar: height / Math.max(height, hyp), features, pluginManager: this.pluginManager, }), diff --git a/plugins/hic/src/HicRenderer/makeImageData.ts b/plugins/hic/src/HicRenderer/makeImageData.ts index a83d2bb3ce..259ee48415 100644 --- a/plugins/hic/src/HicRenderer/makeImageData.ts +++ b/plugins/hic/src/HicRenderer/makeImageData.ts @@ -26,7 +26,10 @@ export interface RenderArgs extends ServerSideRenderArgs { export async function makeImageData( ctx: CanvasRenderingContext2D, - props: RenderArgsDeserializedWithFeatures & { pluginManager: PluginManager }, + props: RenderArgsDeserializedWithFeatures & { + yScalar: number + pluginManager: PluginManager + }, ) { const { features, @@ -40,6 +43,7 @@ export async function makeImageData( colorScheme, regions, pluginManager, + yScalar, } = props const { statusCallback = () => {} } = props @@ -93,6 +97,9 @@ export async function makeImageData( const scale = useLogScale ? scaleSequentialLog(x1).domain([1, m]) : scaleSequential(x1).domain([0, m]) + if (yScalar) { + ctx.scale(1, yScalar) + } ctx.save() if (region.reversed === true) { @@ -116,6 +123,7 @@ export async function makeImageData( } } ctx.restore() + console.log({ yScalar }) } return undefined } diff --git a/plugins/hic/src/LinearHicDisplay/model.ts b/plugins/hic/src/LinearHicDisplay/model.ts index b2bc1c81c6..b26c97fa20 100644 --- a/plugins/hic/src/LinearHicDisplay/model.ts +++ b/plugins/hic/src/LinearHicDisplay/model.ts @@ -45,6 +45,10 @@ export default function stateModelFactory( * #property */ activeNormalization: 'KR', + /** + * #property + */ + adjustToHeight: false, }), ) .volatile(() => ({ @@ -87,6 +91,7 @@ export default function stateModelFactory( return { ...superRenderProps(), config, + displayHeight: self.adjustToHeight ? self.height : undefined, normalization: self.activeNormalization, rpcDriverName: self.rpcDriverName, displayModel: self, @@ -128,12 +133,18 @@ export default function stateModelFactory( setAvailableNormalizations(f: string[]) { self.availableNormalizations = f }, + /** + * #action + */ + setAdjustToHeight(arg: boolean) { + self.adjustToHeight = arg + }, })) .views(self => { const { trackMenuItems: superTrackMenuItems } = self return { /** - * #getter + * #method */ trackMenuItems() { return [ @@ -146,6 +157,14 @@ export default function stateModelFactory( self.setUseLogScale(!self.useLogScale) }, }, + { + label: 'Adjust to height of display', + type: 'checkbox', + checked: self.adjustToHeight, + onClick: () => { + self.setAdjustToHeight(!self.adjustToHeight) + }, + }, { label: 'Color scheme', type: 'subMenu', @@ -176,6 +195,7 @@ export default function stateModelFactory( }, ], }, + { label: 'Resolution', subMenu: [