UNPKG

@jbrowse/plugin-wiggle

Version:

JBrowse 2 wiggle adapters, tracks, etc.

79 lines (78 loc) 3.15 kB
import { getConf } from '@jbrowse/core/configuration'; import { getContainingTrack, getContainingView, getSession, } from '@jbrowse/core/util'; import { getRpcSessionId } from '@jbrowse/core/util/tracks'; import { isAlive } from '@jbrowse/mobx-state-tree'; export async function getQuantitativeStats(self, opts) { const { rpcManager } = getSession(self); const numStdDev = getConf(self, 'numStdDev') || 3; const { adapterConfig, autoscaleType, effectiveRpcDriverName } = self; const sessionId = getRpcSessionId(self); const trackInstanceId = getContainingTrack(self).id; const { currStatsBpPerPx } = opts; const params = { sessionId, trackInstanceId, adapterConfig, rpcDriverName: effectiveRpcDriverName, statusCallback: (message) => { if (isAlive(self)) { self.setStatusMessage(message); } }, ...opts, }; if (autoscaleType === 'global' || autoscaleType === 'globalsd') { const results = (await rpcManager.call(sessionId, 'WiggleGetGlobalQuantitativeStats', params)); const { scoreMin, scoreMean, scoreStdDev } = results; return autoscaleType === 'globalsd' ? { ...results, scoreMin: scoreMin >= 0 ? 0 : scoreMean - numStdDev * scoreStdDev, scoreMax: scoreMean + numStdDev * scoreStdDev, currStatsBpPerPx, } : { ...results, currStatsBpPerPx, }; } else if (autoscaleType === 'local' || autoscaleType === 'localsd') { const { dynamicBlocks, staticBlocks, bpPerPx } = getContainingView(self); const results = (await rpcManager.call(sessionId, 'WiggleGetMultiRegionQuantitativeStats', { ...params, regions: dynamicBlocks.contentBlocks.map(region => { const { start, end } = region; return { ...JSON.parse(JSON.stringify(region)), start: Math.floor(start), end: Math.ceil(end), }; }), staticBlocks: staticBlocks.contentBlocks.map(region => { const { start, end } = region; return { ...JSON.parse(JSON.stringify(region)), start: Math.floor(start), end: Math.ceil(end), }; }), bpPerPx, })); const { scoreMin, scoreMean, scoreStdDev } = results; return autoscaleType === 'localsd' ? { ...results, scoreMin: scoreMin >= 0 ? 0 : scoreMean - numStdDev * scoreStdDev, scoreMax: scoreMean + numStdDev * scoreStdDev, currStatsBpPerPx, } : { ...results, currStatsBpPerPx, }; } else if (autoscaleType === 'zscale') { return rpcManager.call(sessionId, 'WiggleGetGlobalQuantitativeStats', params); } throw new Error(`invalid autoscaleType '${autoscaleType}'`); }