@jbrowse/plugin-wiggle
Version:
JBrowse 2 wiggle adapters, tracks, etc.
68 lines (67 loc) • 2.61 kB
JavaScript
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}'`);
}