view x/static/js/6834.bc9e9f2b.chunk.js.map @ 133:cec274db51c0 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 7d28252954cae9f8db5f8a85d8f29cb2865b504b-dirty
author fubar
date Fri, 18 Oct 2024 11:57:55 +0000
parents 49f3d3878413
children
line wrap: on
line source

{"version":3,"file":"static/js/6834.bc9e9f2b.chunk.js","mappings":"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","sources":["../../../plugins/bed/src/BigBedAdapter/BigBedAdapter.ts","../../../plugins/bed/src/util.ts"],"sourcesContent":["import { BigBed } from '@gmod/bbi'\nimport BED from '@gmod/bed'\nimport {\n  BaseFeatureDataAdapter,\n  BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { Region } from '@jbrowse/core/util/types'\nimport { openLocation } from '@jbrowse/core/util/io'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\nimport {\n  doesIntersect2,\n  max,\n  min,\n  Feature,\n  SimpleFeature,\n} from '@jbrowse/core/util'\nimport { Observer } from 'rxjs'\nimport { SimpleFeatureSerializedNoId } from '@jbrowse/core/util/simpleFeature'\n\n// locals\nimport {\n  isUcscProcessedTranscript,\n  makeBlocks,\n  ucscProcessedTranscript,\n} from '../util'\n\nexport default class BigBedAdapter extends BaseFeatureDataAdapter {\n  private cached?: Promise<{\n    bigbed: BigBed\n    header: Awaited<ReturnType<BigBed['getHeader']>>\n    parser: BED\n  }>\n\n  public async configurePre(opts?: BaseOptions) {\n    const pm = this.pluginManager\n    const bigbed = new BigBed({\n      filehandle: openLocation(this.getConf('bigBedLocation'), pm),\n    })\n    const header = await bigbed.getHeader(opts)\n    const parser = new BED({ autoSql: header.autoSql })\n    return { bigbed, header, parser }\n  }\n\n  public async configure(opts?: BaseOptions) {\n    if (!this.cached) {\n      this.cached = this.configurePre(opts).catch((e: unknown) => {\n        this.cached = undefined\n        throw e\n      })\n    }\n    return this.cached\n  }\n\n  public async getRefNames(opts?: BaseOptions) {\n    const { header } = await this.configure(opts)\n    return Object.keys(header.refsByName)\n  }\n\n  async getHeader(opts?: BaseOptions) {\n    const { parser, header } = await this.configure(opts)\n    const { version, fileType } = header\n    const { fields, ...rest } = parser.autoSql\n    return {\n      version,\n      fileType,\n      autoSql: { ...rest },\n      fields: Object.fromEntries(\n        fields.map(({ name, comment }) => [name, comment]),\n      ),\n    }\n  }\n\n  public async getFeaturesHelper(\n    query: Region,\n    opts: BaseOptions,\n    observer: Observer<Feature>,\n    allowRedispatch: boolean,\n    originalQuery = query,\n  ) {\n    const { signal } = opts\n    const scoreColumn = this.getConf('scoreColumn')\n    const aggregateField = this.getConf('aggregateField')\n    const { parser, bigbed } = await this.configure(opts)\n    const feats = await bigbed.getFeatures(\n      query.refName,\n      query.start,\n      query.end,\n      {\n        signal,\n        basesPerSpan: query.end - query.start,\n      },\n    )\n    if (allowRedispatch && feats.length) {\n      let minStart = Number.POSITIVE_INFINITY\n      let maxEnd = Number.NEGATIVE_INFINITY\n      for (const feat of feats) {\n        if (feat.start < minStart) {\n          minStart = feat.start\n        }\n        if (feat.end > maxEnd) {\n          maxEnd = feat.end\n        }\n      }\n      if (maxEnd > query.end || minStart < query.start) {\n        await this.getFeaturesHelper(\n          { ...query, start: minStart, end: maxEnd },\n          opts,\n          observer,\n          false,\n          query,\n        )\n        return\n      }\n    }\n\n    const parentAggregation = {} as Record<\n      string,\n      SimpleFeatureSerializedNoId[]\n    >\n\n    if (feats.some(f => f.uniqueId === undefined)) {\n      throw new Error('found uniqueId undefined')\n    }\n    for (const feat of feats) {\n      const data = parser.parseLine(\n        `${query.refName}\\t${feat.start}\\t${feat.end}\\t${feat.rest}`,\n        { uniqueId: feat.uniqueId! },\n      )\n\n      const aggr = data[aggregateField]\n      if (!parentAggregation[aggr]) {\n        parentAggregation[aggr] = []\n      }\n      const {\n        uniqueId,\n        type,\n        chromStart,\n        chromStarts,\n        blockStarts,\n        blockCount,\n        blockSizes,\n        chromEnd,\n        thickStart,\n        thickEnd,\n        chrom,\n        score,\n        ...rest\n      } = data\n\n      const subfeatures = blockCount\n        ? makeBlocks({\n            chromStarts,\n            blockStarts,\n            blockCount,\n            blockSizes,\n            uniqueId,\n            refName: query.refName,\n            start: feat.start,\n          })\n        : []\n\n      if (isUcscProcessedTranscript(data)) {\n        const f = ucscProcessedTranscript({\n          ...rest,\n          uniqueId,\n          type,\n          start: feat.start,\n          end: feat.end,\n          refName: query.refName,\n          score: scoreColumn ? +data[scoreColumn] : score,\n          chromStarts,\n          blockCount,\n          blockSizes,\n          thickStart,\n          thickEnd,\n          subfeatures,\n        })\n        if (aggr) {\n          parentAggregation[aggr].push(f)\n        } else {\n          if (\n            doesIntersect2(\n              f.start,\n              f.end,\n              originalQuery.start,\n              originalQuery.end,\n            )\n          ) {\n            observer.next(\n              new SimpleFeature({ id: `${this.id}-${uniqueId}`, data: f }),\n            )\n          }\n        }\n      } else {\n        if (\n          doesIntersect2(\n            feat.start,\n            feat.end,\n            originalQuery.start,\n            originalQuery.end,\n          )\n        ) {\n          observer.next(\n            new SimpleFeature({\n              id: `${this.id}-${uniqueId}`,\n              data: {\n                ...rest,\n                uniqueId,\n                type,\n                start: feat.start,\n                score: scoreColumn ? +data[scoreColumn] : score,\n                end: feat.end,\n                refName: query.refName,\n                subfeatures,\n              },\n            }),\n          )\n        }\n      }\n    }\n\n    Object.entries(parentAggregation).map(([name, subfeatures]) => {\n      const s = min(subfeatures.map(f => f.start))\n      const e = max(subfeatures.map(f => f.end))\n      if (doesIntersect2(s, e, originalQuery.start, originalQuery.end)) {\n        const { uniqueId, strand } = subfeatures[0]!\n        observer.next(\n          new SimpleFeature({\n            id: `${this.id}-${uniqueId}-parent`,\n            data: {\n              type: 'gene',\n              subfeatures,\n              strand,\n              name,\n              start: s,\n              end: e,\n              refName: query.refName,\n            },\n          }),\n        )\n      }\n    })\n    observer.complete()\n  }\n  public getFeatures(query: Region, opts: BaseOptions = {}) {\n    return ObservableCreate<Feature>(async observer => {\n      try {\n        await this.getFeaturesHelper(query, opts, observer, true)\n      } catch (e) {\n        observer.error(e)\n      }\n    }, opts.signal)\n  }\n\n  public freeResources(): void {}\n}\n","import BED from '@gmod/bed'\nimport { SimpleFeature } from '@jbrowse/core/util'\n\nexport interface MinimalFeature {\n  type: string\n  start: number\n  end: number\n  refName: string\n  [key: string]: unknown\n}\nexport interface TranscriptFeat extends MinimalFeature {\n  thickStart: number\n  thickEnd: number\n  blockCount: number\n  blockSizes: number[]\n  chromStarts: number[]\n  refName: string\n  strand?: number\n  subfeatures: MinimalFeature[]\n}\n\nexport function ucscProcessedTranscript(feature: TranscriptFeat) {\n  const {\n    subfeatures: oldSubfeatures,\n    thickStart,\n    thickEnd,\n    blockCount,\n    blockSizes,\n    chromStarts,\n    refName,\n    strand = 0,\n    ...rest\n  } = feature\n\n  if (!thickStart || !thickEnd || !strand) {\n    return feature\n  }\n\n  const subfeatures: MinimalFeature[] = []\n  oldSubfeatures\n    .filter(child => child.type === 'block')\n    .sort((a, b) => a.start - b.start)\n    .forEach(block => {\n      const start = block.start\n      const end = block.end\n      if (thickStart >= end) {\n        // left-side UTR\n        const prime = strand > 0 ? 'five' : 'three'\n        subfeatures.push({\n          type: `${prime}_prime_UTR`,\n          start,\n          end,\n          refName,\n        })\n      } else if (thickStart > start && thickStart < end && thickEnd >= end) {\n        // UTR | CDS\n        const prime = strand > 0 ? 'five' : 'three'\n        subfeatures.push(\n          {\n            type: `${prime}_prime_UTR`,\n            start,\n            end: thickStart,\n            refName,\n          },\n          {\n            type: 'CDS',\n            start: thickStart,\n            end,\n            refName,\n          },\n        )\n      } else if (thickStart <= start && thickEnd >= end) {\n        // CDS\n        subfeatures.push({\n          type: 'CDS',\n          start,\n          end,\n          refName,\n        })\n      } else if (thickStart > start && thickStart < end && thickEnd < end) {\n        // UTR | CDS | UTR\n        const leftPrime = strand > 0 ? 'five' : 'three'\n        const rightPrime = strand > 0 ? 'three' : 'five'\n        subfeatures.push(\n          {\n            type: `${leftPrime}_prime_UTR`,\n            start,\n            end: thickStart,\n            refName,\n          },\n          {\n            type: 'CDS',\n            start: thickStart,\n            end: thickEnd,\n            refName,\n          },\n          {\n            type: `${rightPrime}_prime_UTR`,\n            start: thickEnd,\n            end,\n            refName,\n          },\n        )\n      } else if (thickStart <= start && thickEnd > start && thickEnd < end) {\n        // CDS | UTR\n        const prime = strand > 0 ? 'three' : 'five'\n        subfeatures.push(\n          {\n            type: 'CDS',\n            start,\n            end: thickEnd,\n            refName,\n          },\n          {\n            type: `${prime}_prime_UTR`,\n            start: thickEnd,\n            end,\n            refName,\n          },\n        )\n      } else if (thickEnd <= start) {\n        // right-side UTR\n        const prime = strand > 0 ? 'three' : 'five'\n        subfeatures.push({\n          type: `${prime}_prime_UTR`,\n          start,\n          end,\n          refName,\n        })\n      }\n    })\n\n  return { ...rest, strand, type: 'mRNA', refName, subfeatures }\n}\n\nfunction defaultParser(fields: string[], line: string) {\n  const obj = Object.fromEntries(\n    line.split('\\t').map((f, i) => [fields[i]!, f] as const),\n  )\n  const {\n    blockStarts,\n    blockCount,\n    chromStarts,\n    thickEnd,\n    thickStart,\n    blockSizes,\n    ...rest\n  } = obj\n\n  return {\n    ...rest,\n    blockStarts: blockStarts?.split(',').map(r => +r),\n    chromStarts: chromStarts?.split(',').map(r => +r),\n    blockSizes: blockSizes?.split(',').map(r => +r),\n    thickStart: thickStart ? +thickStart : undefined,\n    thickEnd: thickEnd ? +thickEnd : undefined,\n    blockCount: blockCount ? +blockCount : undefined,\n  } as Record<string, unknown>\n}\n\nexport function makeBlocks({\n  start,\n  uniqueId,\n  refName,\n  chromStarts,\n  blockCount,\n  blockSizes,\n  blockStarts,\n}: {\n  blockCount: number\n  start: number\n  uniqueId: string\n  refName: string\n  chromStarts?: number[]\n  blockSizes: number[]\n  blockStarts?: number[]\n}) {\n  const subfeatures = []\n  const starts = chromStarts || blockStarts || []\n  for (let b = 0; b < blockCount; b++) {\n    const bmin = (starts[b] || 0) + start\n    const bmax = bmin + (blockSizes[b] || 0)\n    subfeatures.push({\n      uniqueId: `${uniqueId}-${b}`,\n      start: bmin,\n      end: bmax,\n      refName,\n      type: 'block',\n    })\n  }\n  return subfeatures\n}\nexport function featureData(\n  line: string,\n  colRef: number,\n  colStart: number,\n  colEnd: number,\n  scoreColumn: string,\n  parser: BED,\n  uniqueId: string,\n  names?: string[],\n) {\n  const l = line.split('\\t')\n  const refName = l[colRef]!\n  const start = +l[colStart]!\n  const colSame = colStart === colEnd ? 1 : 0\n  const end = +l[colEnd]! + colSame\n  const data = names\n    ? defaultParser(names, line)\n    : parser.parseLine(line, { uniqueId })\n\n  const {\n    blockCount,\n    blockSizes,\n    blockStarts,\n    chromStarts,\n    thickStart,\n    thickEnd,\n    type,\n    score,\n    chrom: _1,\n    chromStart: _2,\n    chromEnd: _3,\n    ...rest\n  } = data\n  const subfeatures = blockCount\n    ? makeBlocks({\n        start,\n        uniqueId,\n        refName,\n        chromStarts,\n        blockCount,\n        blockSizes,\n        blockStarts,\n      })\n    : []\n  const f = {\n    ...rest,\n    type,\n    score: scoreColumn ? +data[scoreColumn] : score,\n    start,\n    end,\n    refName,\n    uniqueId,\n    subfeatures,\n  }\n  return new SimpleFeature({\n    id: uniqueId,\n    data: isUcscProcessedTranscript(data)\n      ? ucscProcessedTranscript({\n          thickStart: thickStart!,\n          thickEnd: thickEnd!,\n          blockCount: blockCount!,\n          blockSizes: blockSizes!,\n          chromStarts: chromStarts,\n          ...f,\n        })\n      : f,\n  })\n}\n\nexport function isUcscProcessedTranscript(f: {\n  thickStart?: number\n  blockCount?: number\n  strand?: number\n}) {\n  return f.thickStart && f.blockCount && f.strand !== 0\n}\n"],"names":["BigBedAdapter","BaseFeatureDataAdapter","configurePre","opts","pm","this","pluginManager","bigbed","BigBed","filehandle","openLocation","getConf","header","getHeader","parser","BED","autoSql","configure","cached","catch","e","undefined","getRefNames","Object","keys","refsByName","version","fileType","fields","rest","fromEntries","map","name","comment","getFeaturesHelper","query","observer","allowRedispatch","originalQuery","signal","scoreColumn","aggregateField","feats","getFeatures","refName","start","end","basesPerSpan","length","minStart","Number","POSITIVE_INFINITY","maxEnd","NEGATIVE_INFINITY","feat","parentAggregation","some","f","uniqueId","Error","data","parseLine","aggr","type","chromStart","chromStarts","blockStarts","blockCount","blockSizes","chromEnd","thickStart","thickEnd","chrom","score","subfeatures","makeBlocks","isUcscProcessedTranscript","ucscProcessedTranscript","push","doesIntersect2","next","SimpleFeature","id","entries","s","min","max","strand","complete","ObservableCreate","async","error","freeResources","feature","oldSubfeatures","filter","child","sort","a","b","forEach","block","prime","leftPrime","rightPrime","starts","bmin","bmax","featureData","line","colRef","colStart","colEnd","names","l","split","colSame","obj","i","r","defaultParser","_1","_2","_3"],"sourceRoot":""}