UNPKG

@jbrowse/plugin-wiggle

Version:

JBrowse 2 wiggle adapters, tracks, etc.

68 lines (67 loc) 2.61 kB
import { getConf } from '@jbrowse/core/configuration'; import { getContainingView, getSession } from '@jbrowse/core/util'; import { getRpcSessionId } from '@jbrowse/core/util/tracks'; import { isAlive } from 'mobx-state-tree'; export async function getQuantitativeStats(self, opts) { const { rpcManager } = getSession(self); const numStdDev = getConf(self, 'numStdDev') || 3; const { adapterConfig, autoscaleType } = self; const sessionId = getRpcSessionId(self); const { currStatsBpPerPx } = opts; const params = { sessionId, adapterConfig, statusCallback: (message) => { if (isAlive(self)) { self.setMessage(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, }; } if (autoscaleType === 'local' || autoscaleType === 'localsd') { const { dynamicBlocks, 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), }; }), bpPerPx, })); const { scoreMin, scoreMean, scoreStdDev } = results; return autoscaleType === 'localsd' ? { ...results, scoreMin: scoreMin >= 0 ? 0 : scoreMean - numStdDev * scoreStdDev, scoreMax: scoreMean + numStdDev * scoreStdDev, currStatsBpPerPx, } : { ...results, currStatsBpPerPx, }; } if (autoscaleType === 'zscale') { return rpcManager.call(sessionId, 'WiggleGetGlobalQuantitativeStats', params); } throw new Error(`invalid autoscaleType '${autoscaleType}'`); }