UNPKG

@jbrowse/plugin-wiggle

Version:

JBrowse 2 wiggle adapters, tracks, etc.

33 lines (32 loc) 1.34 kB
import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache'; import { groupBy } from '@jbrowse/core/util'; import { firstValueFrom, toArray } from 'rxjs'; export async function getScoreMatrix({ pluginManager, args, }) { const { sources, regions, adapterConfig, sessionId, bpPerPx } = args; const adapter = await getAdapter(pluginManager, sessionId, adapterConfig); const dataAdapter = adapter.dataAdapter; const r0 = regions[0]; const r0len = r0.end - r0.start; const w = Math.floor(r0len / bpPerPx); const feats = await firstValueFrom(dataAdapter.getFeatures(r0, args).pipe(toArray())); const groups = groupBy(feats, f => f.get('source')); const rows = {}; for (const source of sources) { const { name } = source; const features = groups[name] || []; const arr = new Array(w).fill(0); for (const feat of features) { const fstart = feat.get('start'); const fend = feat.get('end'); const score = feat.get('score'); for (let i = fstart; i < fend; i += bpPerPx) { const x = Math.floor((i - r0.start) / bpPerPx); if (x >= 0 && x < w) { arr[x] || (arr[x] = score); } } } rows[name] = arr; } return rows; }