diff --git a/examples/data.js b/examples/data.js index af1bb412..50e6a49f 100644 --- a/examples/data.js +++ b/examples/data.js @@ -15,6 +15,11 @@ var sources = [ }), name: 'Reference' }, + { + viz: pileup.viz.idiogram(), + data: pileup.formats.cytoBand('/test-data/cytoBand.txt.gz'), + name: 'Idiogram' + }, { viz: pileup.viz.scale(), name: 'Scale' diff --git a/lib/underscore.js b/lib/underscore.js index 4c46165f..f0c24870 100644 --- a/lib/underscore.js +++ b/lib/underscore.js @@ -42,6 +42,7 @@ declare module "underscore" { declare function groupBy(a: Array, iteratee: (val: T, index: number)=>K): {[key:K]: T[]}; declare function min(a: Array|{[key:any]: T}, iteratee: (val: T)=>any): T; + declare function max(a: Array|{[key:any]: T}, iteratee: (val: T)=>any): T; declare function max(a: Array|{[key:any]: T}): T; declare function values(o: {[key: any]: T}): T[]; diff --git a/src/main/data/chromosome.js b/src/main/data/chromosome.js new file mode 100644 index 00000000..fbc3c5f6 --- /dev/null +++ b/src/main/data/chromosome.js @@ -0,0 +1,57 @@ +/** + * Class for parsing chromosome bands for idiograms. + * Format taken from https://github.com/hammerlab/idiogrammatik. + * @flow + */ +'use strict'; + +import ContigInterval from '../ContigInterval'; +import type {CoverageCount} from '../viz/pileuputils'; +import _ from 'underscore'; + +// chromosomal band (see https://github.com/hammerlab/idiogrammatik/blob/master/data/basic-chromosomes.json) +// for an example +export type Band = { + start: number; + end: number; + name: string; + value: string; +} + +class Chromosome { + name: string; + bands: Band[]; + position: ContigInterval; + + constructor(chromosome: Object) { + this.name = chromosome.name; + this.bands = chromosome.bands; + // create region for chromosome + var start = _.min(this.bands, band => band.start).start; + + + var stop = _.max(this.bands, band => band.end).end; + this.position = new ContigInterval(this.name, start, stop); + } + + getKey(): string { + return this.name; + } + + getInterval(): ContigInterval { + return this.position; + } + + getCoverage(referenceSource: Object): CoverageCount { + return { + range: this.getInterval(), + opInfo: null + }; + } + + intersects(range: ContigInterval): boolean { + return range.intersects(this.position); + } +} + +module.exports = Chromosome; diff --git a/src/main/data/cytoBand.js b/src/main/data/cytoBand.js new file mode 100644 index 00000000..d36f61cd --- /dev/null +++ b/src/main/data/cytoBand.js @@ -0,0 +1,82 @@ +/** + * Fetcher/parser for gzipped Cytoband files. Cytoband files can be downloaded + * or accessed from http://hgdownload.cse.ucsc.edu/goldenpath for a genome build. + * + * extracts CONTIG, START, END, NAME and VALUE + * + * @flow + */ +'use strict'; + +import type AbstractFile from '../AbstractFile'; +import type Q from 'q'; +import _ from 'underscore'; +import ContigInterval from '../ContigInterval'; +import Chromosome from './chromosome'; +import pako from 'pako/lib/inflate'; // for gzip inflation + +function extractLine(cytoBandLine: string): Object { + var split = cytoBandLine.split('\t'); + return { + contig: split[0], + band: { + start: Number(split[1]), + end: Number(split[2]), + name: split[3], + value: split[4] + } + }; +} + +function groupedBandsToChromosome(grouped: Object[]): Chromosome { + var bands = _.map(grouped, g => g.band); + return new Chromosome( + {name: grouped[0].contig, + bands: bands, + position: new ContigInterval(grouped[0].contig, bands[0].start, bands.slice(-1)[0].end)} + ); +} + +class ImmediateCytoBandFile { + chrs: {[key:string]:Chromosome}; + + constructor(chrs: {[key:string]:Chromosome}) { + this.chrs = chrs; + } + + getFeaturesInRange(range: ContigInterval): Chromosome { + return this.chrs[range.contig]; + } +} + +class CytoBandFile { + remoteFile: AbstractFile; + immediate: Q.Promise; + + constructor(remoteFile: AbstractFile) { + this.remoteFile = remoteFile; + + this.immediate = this.remoteFile.getAll().then(bytes => { + var txt = pako.inflate(bytes, {to: 'string'}); + var txtLines = _.filter(txt.split('\n'), i => i); // gets rid of empty lines + var lines = txtLines.map(extractLine); + return lines; + }).then(lines => { + // group bands by contig + var grouped = _.groupBy(lines, l => l.contig); + var chrs = _.mapObject(grouped, g => groupedBandsToChromosome(g)); + return new ImmediateCytoBandFile(chrs); + }); + this.immediate.done(); + } + + getFeaturesInRange(range: ContigInterval): Q.Promise { + return this.immediate.then(immediate => { + return immediate.getFeaturesInRange(range); + }); + } +} + +module.exports = { + CytoBandFile +}; diff --git a/src/main/data/genericFeature.js b/src/main/data/genericFeature.js index ec3e6406..31b74f81 100644 --- a/src/main/data/genericFeature.js +++ b/src/main/data/genericFeature.js @@ -15,8 +15,8 @@ class GenericFeature { gFeature: Object; constructor(id: string, position: ContigInterval, genericFeature: Object) { - this.id = genericFeature.id; - this.position = genericFeature.position; + this.id = id; + this.position = position; this.gFeature = genericFeature; } } diff --git a/src/main/json/IdiogramJson.js b/src/main/json/IdiogramJson.js new file mode 100644 index 00000000..eafb68e9 --- /dev/null +++ b/src/main/json/IdiogramJson.js @@ -0,0 +1,55 @@ +/** + * A data source which implements generic JSON protocol. + * Currently only used to load alignments. + * @flow + */ +'use strict'; + +import type {DataSource} from '../sources/DataSource'; +import Chromosome from '../data/chromosome'; + +import _ from 'underscore'; +import {Events} from 'backbone'; + +import ContigInterval from '../ContigInterval'; +import type {GenomeRange} from '../types'; + +function create(json: string): DataSource { + + // parse json + var parsedJson = JSON.parse(json); + var chromosomes: Chromosome[] = []; + + // fill chromosomes with json + if (!_.isEmpty(parsedJson)) { + chromosomes = _.values(parsedJson).map(chr => new Chromosome(chr)); + } + + function rangeChanged(newRange: GenomeRange) { + // Data is already parsed, so immediately return + var range = new ContigInterval(newRange.contig, newRange.start, newRange.stop); + o.trigger('newdata', range); + o.trigger('networkdone'); + return; + } + + function getFeaturesInRange(range: ContigInterval): Chromosome[] { + return _.filter(chromosomes, chr => range.chrOnContig(chr.name)); + } + + var o = { + rangeChanged, + getFeaturesInRange, + + on: () => {}, + once: () => {}, + off: () => {}, + trigger: (string, any) => {} + }; + _.extend(o, Events); + return o; +} + +module.exports = { + create +}; diff --git a/src/main/pileup.js b/src/main/pileup.js index 074d3d7d..4ecd60f8 100644 --- a/src/main/pileup.js +++ b/src/main/pileup.js @@ -17,6 +17,8 @@ import saveAs from 'file-saver'; // Data sources import TwoBitDataSource from './sources/TwoBitDataSource'; +import CytoBandDataSource from './sources/CytoBandDataSource'; + import BigBedDataSource from './sources/BigBedDataSource'; import VcfDataSource from './sources/VcfDataSource'; import BamDataSource from './sources/BamDataSource'; @@ -29,6 +31,7 @@ import Interval from './Interval'; import GA4GHAlignmentJson from './json/GA4GHAlignmentJson'; import GA4GHVariantJson from './json/GA4GHVariantJson'; import GA4GHFeatureJson from './json/GA4GHFeatureJson'; +import IdiogramJson from './json/IdiogramJson'; // GA4GH sources import GA4GHAlignmentSource from './sources/GA4GHAlignmentSource'; @@ -41,6 +44,7 @@ import CoverageTrack from './viz/CoverageTrack'; import GenomeTrack from './viz/GenomeTrack'; import GeneTrack from './viz/GeneTrack'; import FeatureTrack from './viz/FeatureTrack'; +import IdiogramTrack from './viz/IdiogramTrack'; import LocationTrack from './viz/LocationTrack'; import PileupTrack from './viz/PileupTrack'; import ScaleTrack from './viz/ScaleTrack'; @@ -236,6 +240,8 @@ var pileup = { alignmentJson: GA4GHAlignmentJson.create, variantJson: GA4GHVariantJson.create, featureJson: GA4GHFeatureJson.create, + idiogramJson: IdiogramJson.create, + cytoBand: CytoBandDataSource.create, vcf: VcfDataSource.create, twoBit: TwoBitDataSource.create, bigBed: BigBedDataSource.create, @@ -250,6 +256,7 @@ var pileup = { genome: makeVizObject(GenomeTrack), genes: makeVizObject(GeneTrack), features: makeVizObject(FeatureTrack), + idiogram: makeVizObject(IdiogramTrack), location: makeVizObject(LocationTrack), scale: makeVizObject(ScaleTrack), variants: makeVizObject(VariantTrack), diff --git a/src/main/sources/CytoBandDataSource.js b/src/main/sources/CytoBandDataSource.js new file mode 100644 index 00000000..10398f60 --- /dev/null +++ b/src/main/sources/CytoBandDataSource.js @@ -0,0 +1,83 @@ +/** + * The "glue" between cytoBand.js and IdiogramTrack.js. + * + * Allows loading remote gzipped cytoband files into an Idiogram visualization. + * + * @flow + */ +'use strict'; + +import _ from 'underscore'; +import {Events} from 'backbone'; + +import ContigInterval from '../ContigInterval'; +import Chromosome from '../data/chromosome'; +import type {GenomeRange} from '../types'; +import {CytoBandFile} from '../data/cytoBand'; +import type {DataSource} from '../sources/DataSource'; + +import RemoteFile from '../RemoteFile'; +import utils from '../utils'; + +var createFromCytoBandFile = function(remoteSource: CytoBandFile): DataSource { + // Local cache of genomic data. + var contigMap: {[key:string]: Chromosome} = {}; + + // This either adds or removes a 'chr' as needed. + function normalizeRange(range: ContigInterval): ContigInterval { + if (contigMap[range.contig] !== undefined) { + return range; + } + var altContig = utils.altContigName(range.contig); + if (contigMap[altContig] !== undefined) { + return new ContigInterval(altContig, range.start(), range.stop()); + } + return range; + } + + function fetch(range: ContigInterval) { + remoteSource.getFeaturesInRange(range) + .then(chr => { + contigMap[chr.name] = chr; + }).then(() => { + o.trigger('newdata', range); + }).done(); + } + + function getFeaturesInRange(range: ContigInterval): Chromosome[] { + return [contigMap[normalizeRange(range).contig]]; + } + + var o = { + // The range here is 0-based, inclusive + rangeChanged: function(newRange: GenomeRange) { + // Check if this interval is already in the cache. + if ( contigMap[newRange.contig] !== undefined ) { + return; + } + fetch(new ContigInterval(newRange.contig, newRange.start, newRange.stop)); + }, + getFeaturesInRange, + // These are here to make Flow happy. + on: () => {}, + once: () => {}, + off: () => {}, + trigger: (status: string, param: any) => {} + }; + _.extend(o, Events); // Make this an event emitter + + return o; +}; + +function create(url:string): DataSource { + if (!url) { + throw new Error(`Missing URL from track: ${url}`); + } + return createFromCytoBandFile(new CytoBandFile(new RemoteFile(url))); +} + + +module.exports = { + create, + createFromCytoBandFile, +}; diff --git a/src/main/sources/DataSource.js b/src/main/sources/DataSource.js index 72b68510..80a1c5e0 100644 --- a/src/main/sources/DataSource.js +++ b/src/main/sources/DataSource.js @@ -7,11 +7,12 @@ import type {GenomeRange} from '../types'; import type ContigInterval from '../ContigInterval'; import type {Alignment} from '../Alignment'; +import Chromosome from '../data/chromosome'; import Feature from '../data/feature'; import Gene from '../data/gene'; // Flow type for export. -export type DataSource = { +export type DataSource = { rangeChanged: (newRange: GenomeRange) => void; getFeaturesInRange: (range: ContigInterval, resolution: ?number) => T[]; on: (event: string, handler: Function) => void; diff --git a/src/main/style.js b/src/main/style.js index 4b2088f8..0e9f62c3 100644 --- a/src/main/style.js +++ b/src/main/style.js @@ -59,6 +59,21 @@ module.exports = { READ_SPACING: 2, // vertical spacing between reads READ_HEIGHT: 13, // Height of read + // Idiogram track + IDIOGRAM_LINEWIDTH: 1, + IDIOGRAM_COLORS: { + "gpos100": "#000000", + "gpos": "#000000", + "gpos75": "#828282", + "gpos66": "#a0a0a0", + "gpos50": "#c8c8c8", + "gpos33": "#d2d2d2", + "gpos25": "#c8c8c8", + "gvar": "#dcdcdc", + "gneg": "#ffffff", + "acen": "#d92f27", + "stalk": "#647fa4", + }, // Coverage track COVERAGE_FONT_STYLE: `bold 9px 'Helvetica Neue', Helvetica, Arial, sans-serif`, diff --git a/src/main/viz/GeneTrack.js b/src/main/viz/GeneTrack.js index cdb8c872..1d56c73b 100644 --- a/src/main/viz/GeneTrack.js +++ b/src/main/viz/GeneTrack.js @@ -193,7 +193,7 @@ class GeneTrack extends React.Component>, State> { ctx.popObject(); }); - } // end typecheck for canvasß + } // end typecheck for canvas } } diff --git a/src/main/viz/IdiogramTrack.js b/src/main/viz/IdiogramTrack.js new file mode 100644 index 00000000..f80ddd09 --- /dev/null +++ b/src/main/viz/IdiogramTrack.js @@ -0,0 +1,185 @@ +/** + * A track which shows an idiogram. + * + * @flow + */ +'use strict'; + +import type {VizProps} from '../VisualizationWrapper'; +import type {State} from '../types'; +import type {DataSource} from '../sources/DataSource'; +import React from 'react'; +import ContigInterval from '../ContigInterval'; +import Chromosome from '../data/chromosome'; +import canvasUtils from './canvas-utils'; +import dataCanvas from 'data-canvas'; +import style from '../style'; + +import ReactDOM from 'react-dom'; +import shallowEquals from 'shallow-equals'; +import d3utils from './d3utils'; +import _ from 'underscore'; + +import GenericFeature from '../data/genericFeature'; +import {GenericFeatureCache} from './GenericFeatureCache'; + +function gstainFiller(d): string { + var stain = style.IDIOGRAM_COLORS[d.value]; + if (stain === undefined) { + return 'white'; + } else { + return stain; + } +} + +class IdiogramTrack extends React.Component>, State> { + props: VizProps>; + state: State; + cache: GenericFeatureCache; + + constructor(props: VizProps>) { + super(props); + this.state = { + networkStatus: null + }; + } + + render(): any { + return ; + } + + componentDidMount() { + this.cache = new GenericFeatureCache(this.props.referenceSource); + // Visualize new reference data as it comes in from the network. + this.props.source.on('newdata', (range) => { + // add to generic cache + var chrs = this.props.source.getFeaturesInRange(range); + chrs.forEach(chr => this.cache.addFeature(new GenericFeature(chr.name, chr.position, chr))) ; + this.updateVisualization(); + }); + this.props.referenceSource.on('newdata', range => { + this.updateVisualization(); + }); + this.props.source.on('networkprogress', e => { + this.setState({networkStatus: e}); + }); + this.props.source.on('networkdone', e => { + this.setState({networkStatus: null}); + }); + + this.updateVisualization(); + } + + componentDidUpdate(prevProps: any, prevState: any) { + if (!shallowEquals(this.props, prevProps) || + !shallowEquals(this.state, prevState)) { + this.updateVisualization(prevProps); + } + } + + updateVisualization(prevProps: any) { + var canvas = ReactDOM.findDOMNode(this), + {width, height} = this.props; + + var range = new ContigInterval(this.props.range.contig, this.props.range.start, this.props.range.stop); + + // Hold off until height & width are known. + if (width === 0 || typeof canvas == 'undefined' || canvas == null) return; + + this.updateChromosome(canvas, height, width,range); + this.updateChromosomeLocation(canvas, height, width, range); + } + + updateChromosomeLocation(canvas: Object, height: number, width: number ,range: ContigInterval) { + var chrs = _.flatten(_.map(this.cache.getGroupsOverlapping(range), + g => g.items)); + + + // Hold off until height & width are known. + if (width === 0 || typeof canvas == 'undefined' || canvas == null) return; + + if (!chrs || chrs.length == 0) { + return; + } + var chr = chrs[0]; + var ctx = dataCanvas.getDataContext(canvasUtils.getContext(canvas)); + + var iv = {'start':chr.position.start(), + 'stop': chr.position.stop()}; + var sc = d3utils.getTrackScale(iv, this.props.width); + + var viewWidth = Math.ceil(sc(range.stop()) - sc(range.start()) ); + ctx.strokeStyle='red'; + ctx.strokeRect(sc(range.start()), + style.IDIOGRAM_LINEWIDTH*2, + viewWidth, + style.READ_HEIGHT); + + ctx.popObject(); + } + + updateChromosome(canvas: Object, height: number, width: number, range: ContigInterval) { + + // Hold off until height & width are known. + if (width === 0 || typeof canvas == 'undefined' || canvas == null) return; + + d3utils.sizeCanvas(canvas, width, height); + var ctx = dataCanvas.getDataContext(canvasUtils.getContext(canvas)); + + ctx.reset(); + ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); + + height = d3utils.heightForCanvas(canvas, style.READ_HEIGHT); + + var chrs = _.flatten(_.map(this.cache.getGroupsOverlapping(range), + g => g.items)); + + chrs.forEach(chr => { + var iv = {'start':chr.position.start(), + 'stop': chr.position.stop()}; + // add bands + var band_sc = d3utils.getTrackScale(iv, this.props.width); + chr.gFeature.bands.forEach(band => { + ctx.pushObject(band); + var filler = gstainFiller(band); + + var width = Math.ceil(band_sc(band.end) - band_sc(band.start)); + var start = band_sc(band.start)+style.IDIOGRAM_LINEWIDTH; + + + if (band.value == "acen") { + ctx.fillStyle='red'; + ctx.beginPath(); + if (band.name.startsWith("p")) { + ctx.moveTo(start+style.IDIOGRAM_LINEWIDTH, style.IDIOGRAM_LINEWIDTH*2 ); + ctx.lineTo(start+width,style.READ_HEIGHT/2); + ctx.lineTo(start+style.IDIOGRAM_LINEWIDTH, style.READ_HEIGHT+style.IDIOGRAM_LINEWIDTH); + ctx.fill(); + } else { + ctx.moveTo(start+style.IDIOGRAM_LINEWIDTH, style.READ_HEIGHT/2); + ctx.lineTo(start+width,style.IDIOGRAM_LINEWIDTH*2); + ctx.lineTo(start+width, style.READ_HEIGHT+style.IDIOGRAM_LINEWIDTH); + ctx.fill(); + } + } else { + ctx.fillStyle = filler; + ctx.strokeStyle = 'black'; + ctx.fillRect(start, + style.IDIOGRAM_LINEWIDTH*2, + width, + style.READ_HEIGHT); + ctx.strokeRect(start, + style.IDIOGRAM_LINEWIDTH*2, + width, + style.READ_HEIGHT); + } + ctx.popObject(); + }); + }); + } + +} + +IdiogramTrack.displayName = 'idiogram'; + +module.exports = IdiogramTrack; diff --git a/src/test/data/cytoBand-test.js b/src/test/data/cytoBand-test.js new file mode 100644 index 00000000..c94aa9fb --- /dev/null +++ b/src/test/data/cytoBand-test.js @@ -0,0 +1,26 @@ +/* @flow */ +'use strict'; + +import {expect} from 'chai'; + +import {CytoBandFile} from '../../main/data/cytoBand'; +import ContigInterval from '../../main/ContigInterval'; +import RemoteFile from '../../main/RemoteFile'; + +describe('CytoBand', function() { + var remoteFile = new RemoteFile('/test-data/cytoBand.txt.gz'); + + it('should get chromosomes from cytoband file', function(): any { + var cytoBand = new CytoBandFile(remoteFile); + var range = new ContigInterval('chr20', 63799, 69094); + + return cytoBand.getFeaturesInRange(range).then(chr => { + expect(chr.name).to.equal('chr20'); + expect(chr.position.start()).to.equal(0); + expect(chr.position.stop()).to.equal(63025520); + expect(chr.bands).to.have.length(20); + expect(chr.bands[0].name).to.equal('p13'); + expect(chr.bands[0].value).to.equal('gneg'); + }); + }); +}); diff --git a/src/test/json/IdiogramJson-test.js b/src/test/json/IdiogramJson-test.js new file mode 100644 index 00000000..041a5c47 --- /dev/null +++ b/src/test/json/IdiogramJson-test.js @@ -0,0 +1,42 @@ +/** @flow */ +'use strict'; + +import {expect} from 'chai'; + +import ContigInterval from '../../main/ContigInterval'; +import IdiogramJson from '../../main/json/IdiogramJson'; +import RemoteFile from '../../main/RemoteFile'; + +describe('IdiogramJson', function() { + var json; + + before(function(): any { + return new RemoteFile('/test-data/gstained_chromosomes_data.json').getAllString().then(data => { + json = data; + }); + }); + + it('should filter features from json', function(done) { + + var source = IdiogramJson.create(json); + + var requestInterval = new ContigInterval('chr1', 130000, 135000); + + var features = source.getFeaturesInRange(requestInterval)[0]; + expect(features.bands).to.have.length(63); + done(); + + }); + + it('should not fail on empty json string', function(done) { + + var source = IdiogramJson.create("{}"); + + var requestInterval = new ContigInterval('chr17', 10, 20); + + var chromosomes = source.getFeaturesInRange(requestInterval); + expect(chromosomes).to.have.length(0); + done(); + + }); +}); diff --git a/src/test/sources/CytoBandDataSource-test.js b/src/test/sources/CytoBandDataSource-test.js new file mode 100644 index 00000000..6285d44e --- /dev/null +++ b/src/test/sources/CytoBandDataSource-test.js @@ -0,0 +1,52 @@ +/* @flow */ +'use strict'; + +import {expect} from 'chai'; + +import CytoBandDataSource from '../../main/sources/CytoBandDataSource'; +import {CytoBandFile} from '../../main/data/cytoBand'; +import RemoteFile from '../../main/RemoteFile'; +import ContigInterval from '../../main/ContigInterval'; + +describe('CytoBandDataSource', function() { + function getTestSource () { + // cytoband file downloaded from + // http://hgdownload.cse.ucsc.edu/goldenpath/hg19/database/cytoBand.txt.gz + var f = new CytoBandFile(new RemoteFile('/test-data/cytoBand.txt.gz')); + return CytoBandDataSource.createFromCytoBandFile(f); + } + + it('should fetch chromsome', function(done) { + var source = getTestSource(); + var range = new ContigInterval('chr22',0,3); + // Before data has been fetched, all base pairs are null. + expect(source.getFeaturesInRange(range)).to.deep.equal([undefined]); + + source.on('newdata', () => { + var chr = source.getFeaturesInRange(range)[0]; + expect(chr.name).to.equal('chr22'); + expect(chr.bands).to.have.length(16); + expect(chr.bands[0].name).to.equal('p13'); + expect(chr.bands[0].value).to.equal('gvar'); + done(); + }); + source.rangeChanged(range); + }); + + it('should allow a mix of chr and non-chr', function(done) { + var source = getTestSource(); + var chrRange = {contig: 'chr1', start: 0, stop: 3}; + + var range = new ContigInterval('1',0,3); + + source.on('newdata', () => { + var chr = source.getFeaturesInRange(range)[0]; + expect(chr.name).to.equal('chr1'); + expect(chr.bands).to.have.length(63); + expect(chr.bands[0].name).to.equal('p36.33'); + expect(chr.bands[0].value).to.equal('gneg'); + done(); + }); + source.rangeChanged(chrRange); + }); +}); diff --git a/src/test/viz/IdiogramTrack-test.js b/src/test/viz/IdiogramTrack-test.js new file mode 100644 index 00000000..c31b9a51 --- /dev/null +++ b/src/test/viz/IdiogramTrack-test.js @@ -0,0 +1,105 @@ +/** + * This tests whether feature information is being shown/drawn correctly + * in the track. + * + * @flow + */ +'use strict'; + +import pileup from '../../main/pileup'; +import dataCanvas from 'data-canvas'; +import {waitFor} from '../async'; +import {expect} from 'chai'; +import RemoteFile from '../../main/RemoteFile'; + +describe('IdiogramTrack', function() { + var testDiv= document.getElementById('testdiv'); + if (!testDiv) throw new Error("Failed to match: testdiv"); + + var drawnObjects = dataCanvas.RecordingContext.drawnObjects; + + function ready(): boolean { + return testDiv.querySelector('.idiogram canvas') !== null && + testDiv.querySelector('.idiogram canvas') !== undefined && + drawnObjects(testDiv, '.idiogram').length > 0; + } + + beforeEach(() => { + testDiv.style.width = '800px'; + dataCanvas.RecordingContext.recordAll(); + }); + + afterEach(() => { + dataCanvas.RecordingContext.reset(); + // avoid pollution between tests. + testDiv.innerHTML = ''; + }); + + describe('json features', function() { + var json; + + before(function(): any { + return new RemoteFile('/test-data/gstained_chromosomes_data.json').getAllString().then(data => { + json = data; + }); + }); + + it('should render idiogram with json', function(): any { + var p = pileup.create(testDiv, { + range: {contig: 'chr17', start: 7500000, stop: 7500500}, + tracks: [ + { + viz: pileup.viz.genome(), + data: pileup.formats.twoBit({ + url: '/test-data/test.2bit' + }), + isReference: true + }, + { + viz: pileup.viz.idiogram(), + data: pileup.formats.idiogramJson(json), + name: 'Idiogram' + } + ] + }); + + return waitFor(ready, 2000) + .then(() => { + var bands = drawnObjects(testDiv, '.idiogram'); + expect(bands).to.have.length(24); + p.destroy(); + }); + }); + }); + + describe('cytoband features', function() { + + it('should render idiogram with gzipped file', function(): any { + var p = pileup.create(testDiv, { + range: {contig: 'chr1', start: 7500000, stop: 7500500}, + tracks: [ + { + viz: pileup.viz.genome(), + data: pileup.formats.twoBit({ + url: '/test-data/test.2bit' + }), + isReference: true + }, + { + viz: pileup.viz.idiogram(), + data: pileup.formats.cytoBand('/test-data/cytoBand.txt.gz'), + name: 'Idiogram' + } + ] + }); + + return waitFor(ready, 2000) + .then(() => { + var bands = drawnObjects(testDiv, '.idiogram'); + expect(bands).to.have.length(63); + p.destroy(); + }); + }); + + }); +}); diff --git a/style/pileup.css b/style/pileup.css index 11044df0..4c911985 100644 --- a/style/pileup.css +++ b/style/pileup.css @@ -60,14 +60,21 @@ overflow-x: hidden; position: relative; } -.features > .track-content, .pileup > .track-content, .genes > .track-content, -.variants > .track-content, .coverage > .track-content { +.track-content { border-top-left-radius: 5px; border-bottom-left-radius: 5px; border-color: #bcbbbb; border-left: 7px solid #bcbbbb; } +.reference > .track-content, .controls > .track-content, + .scale > .track-content, .location > .track-content { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-color: None; + border-left: None; +} + .track-content > div { position: absolute; /* Gets the child of the flex-item to fill height 100% */ } diff --git a/test-data/cytoBand.txt.gz b/test-data/cytoBand.txt.gz new file mode 100644 index 00000000..ee9ab76f Binary files /dev/null and b/test-data/cytoBand.txt.gz differ diff --git a/test-data/gstained_chromosomes_data.json b/test-data/gstained_chromosomes_data.json new file mode 100644 index 00000000..ffcd866a --- /dev/null +++ b/test-data/gstained_chromosomes_data.json @@ -0,0 +1,5294 @@ +[ + { + "bands": [ + { + "start": 0, + "end": 2300000, + "name": "p36.33", + "value": "gneg" + }, + { + "start": 2300000, + "end": 5300000, + "name": "p36.32", + "value": "gpos" + }, + { + "start": 5300000, + "end": 7100000, + "name": "p36.31", + "value": "gneg" + }, + { + "start": 7100000, + "end": 9100000, + "name": "p36.23", + "value": "gpos" + }, + { + "start": 9100000, + "end": 12500000, + "name": "p36.22", + "value": "gneg" + }, + { + "start": 12500000, + "end": 15900000, + "name": "p36.21", + "value": "gpos" + }, + { + "start": 15900000, + "end": 20100000, + "name": "p36.13", + "value": "gneg" + }, + { + "start": 20100000, + "end": 23600000, + "name": "p36.12", + "value": "gpos" + }, + { + "start": 23600000, + "end": 27600000, + "name": "p36.11", + "value": "gneg" + }, + { + "start": 27600000, + "end": 29900000, + "name": "p35.3", + "value": "gpos" + }, + { + "start": 29900000, + "end": 32300000, + "name": "p35.2", + "value": "gneg" + }, + { + "start": 32300000, + "end": 34300000, + "name": "p35.1", + "value": "gpos" + }, + { + "start": 34300000, + "end": 39600000, + "name": "p34.3", + "value": "gneg" + }, + { + "start": 39600000, + "end": 43700000, + "name": "p34.2", + "value": "gpos" + }, + { + "start": 43700000, + "end": 46300000, + "name": "p34.1", + "value": "gneg" + }, + { + "start": 46300000, + "end": 50200000, + "name": "p33", + "value": "gpos" + }, + { + "start": 50200000, + "end": 55600000, + "name": "p32.3", + "value": "gneg" + }, + { + "start": 55600000, + "end": 58500000, + "name": "p32.2", + "value": "gpos" + }, + { + "start": 58500000, + "end": 60800000, + "name": "p32.1", + "value": "gneg" + }, + { + "start": 60800000, + "end": 68500000, + "name": "p31.3", + "value": "gpos" + }, + { + "start": 68500000, + "end": 69300000, + "name": "p31.2", + "value": "gneg" + }, + { + "start": 69300000, + "end": 84400000, + "name": "p31.1", + "value": "gpos" + }, + { + "start": 84400000, + "end": 87900000, + "name": "p22.3", + "value": "gneg" + }, + { + "start": 87900000, + "end": 91500000, + "name": "p22.2", + "value": "gpos" + }, + { + "start": 91500000, + "end": 94300000, + "name": "p22.1", + "value": "gneg" + }, + { + "start": 94300000, + "end": 99300000, + "name": "p21.3", + "value": "gpos" + }, + { + "start": 99300000, + "end": 101800000, + "name": "p21.2", + "value": "gneg" + }, + { + "start": 101800000, + "end": 106700000, + "name": "p21.1", + "value": "gpos" + }, + { + "start": 106700000, + "end": 111200000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 111200000, + "end": 115500000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 115500000, + "end": 117200000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 117200000, + "end": 120400000, + "name": "p12", + "value": "gpos" + }, + { + "start": 120400000, + "end": 121700000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 121700000, + "end": 123400000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 123400000, + "end": 125100000, + "name": "q11", + "value": "acen" + }, + { + "start": 125100000, + "end": 143200000, + "name": "q12", + "value": "gvar" + }, + { + "start": 143200000, + "end": 147500000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 147500000, + "end": 150600000, + "name": "q21.2", + "value": "gpos" + }, + { + "start": 150600000, + "end": 155100000, + "name": "q21.3", + "value": "gneg" + }, + { + "start": 155100000, + "end": 156600000, + "name": "q22", + "value": "gpos" + }, + { + "start": 156600000, + "end": 159100000, + "name": "q23.1", + "value": "gneg" + }, + { + "start": 159100000, + "end": 160500000, + "name": "q23.2", + "value": "gpos" + }, + { + "start": 160500000, + "end": 165500000, + "name": "q23.3", + "value": "gneg" + }, + { + "start": 165500000, + "end": 167200000, + "name": "q24.1", + "value": "gpos" + }, + { + "start": 167200000, + "end": 170900000, + "name": "q24.2", + "value": "gneg" + }, + { + "start": 170900000, + "end": 173000000, + "name": "q24.3", + "value": "gpos" + }, + { + "start": 173000000, + "end": 176100000, + "name": "q25.1", + "value": "gneg" + }, + { + "start": 176100000, + "end": 180300000, + "name": "q25.2", + "value": "gpos" + }, + { + "start": 180300000, + "end": 185800000, + "name": "q25.3", + "value": "gneg" + }, + { + "start": 185800000, + "end": 190800000, + "name": "q31.1", + "value": "gpos" + }, + { + "start": 190800000, + "end": 193800000, + "name": "q31.2", + "value": "gneg" + }, + { + "start": 193800000, + "end": 198700000, + "name": "q31.3", + "value": "gpos" + }, + { + "start": 198700000, + "end": 207100000, + "name": "q32.1", + "value": "gneg" + }, + { + "start": 207100000, + "end": 211300000, + "name": "q32.2", + "value": "gpos" + }, + { + "start": 211300000, + "end": 214400000, + "name": "q32.3", + "value": "gneg" + }, + { + "start": 214400000, + "end": 223900000, + "name": "q41", + "value": "gpos" + }, + { + "start": 223900000, + "end": 224400000, + "name": "q42.11", + "value": "gneg" + }, + { + "start": 224400000, + "end": 226800000, + "name": "q42.12", + "value": "gpos" + }, + { + "start": 226800000, + "end": 230500000, + "name": "q42.13", + "value": "gneg" + }, + { + "start": 230500000, + "end": 234600000, + "name": "q42.2", + "value": "gpos" + }, + { + "start": 234600000, + "end": 236400000, + "name": "q42.3", + "value": "gneg" + }, + { + "start": 236400000, + "end": 243500000, + "name": "q43", + "value": "gpos" + }, + { + "start": 243500000, + "end": 248956422, + "name": "q44", + "value": "gneg" + } + ], + "name": "chr1" + }, + { + "bands": [ + { + "start": 0, + "end": 4400000, + "name": "p25.3", + "value": "gneg" + }, + { + "start": 4400000, + "end": 6900000, + "name": "p25.2", + "value": "gpos" + }, + { + "start": 6900000, + "end": 12000000, + "name": "p25.1", + "value": "gneg" + }, + { + "start": 12000000, + "end": 16500000, + "name": "p24.3", + "value": "gpos" + }, + { + "start": 16500000, + "end": 19000000, + "name": "p24.2", + "value": "gneg" + }, + { + "start": 19000000, + "end": 23800000, + "name": "p24.1", + "value": "gpos" + }, + { + "start": 23800000, + "end": 27700000, + "name": "p23.3", + "value": "gneg" + }, + { + "start": 27700000, + "end": 29800000, + "name": "p23.2", + "value": "gpos" + }, + { + "start": 29800000, + "end": 31800000, + "name": "p23.1", + "value": "gneg" + }, + { + "start": 31800000, + "end": 36300000, + "name": "p22.3", + "value": "gpos" + }, + { + "start": 36300000, + "end": 38300000, + "name": "p22.2", + "value": "gneg" + }, + { + "start": 38300000, + "end": 41500000, + "name": "p22.1", + "value": "gpos" + }, + { + "start": 41500000, + "end": 47500000, + "name": "p21", + "value": "gneg" + }, + { + "start": 47500000, + "end": 52600000, + "name": "p16.3", + "value": "gpos" + }, + { + "start": 52600000, + "end": 54700000, + "name": "p16.2", + "value": "gneg" + }, + { + "start": 54700000, + "end": 61000000, + "name": "p16.1", + "value": "gpos" + }, + { + "start": 61000000, + "end": 63900000, + "name": "p15", + "value": "gneg" + }, + { + "start": 63900000, + "end": 68400000, + "name": "p14", + "value": "gpos" + }, + { + "start": 68400000, + "end": 71300000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 71300000, + "end": 73300000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 73300000, + "end": 74800000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 74800000, + "end": 83100000, + "name": "p12", + "value": "gpos" + }, + { + "start": 83100000, + "end": 91800000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 91800000, + "end": 93900000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 93900000, + "end": 96000000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 96000000, + "end": 102100000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 102100000, + "end": 105300000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 105300000, + "end": 106700000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 106700000, + "end": 108700000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 108700000, + "end": 112200000, + "name": "q13", + "value": "gneg" + }, + { + "start": 112200000, + "end": 118100000, + "name": "q14.1", + "value": "gpos" + }, + { + "start": 118100000, + "end": 121600000, + "name": "q14.2", + "value": "gneg" + }, + { + "start": 121600000, + "end": 129100000, + "name": "q14.3", + "value": "gpos" + }, + { + "start": 129100000, + "end": 131700000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 131700000, + "end": 134300000, + "name": "q21.2", + "value": "gpos" + }, + { + "start": 134300000, + "end": 136100000, + "name": "q21.3", + "value": "gneg" + }, + { + "start": 136100000, + "end": 141500000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 141500000, + "end": 143400000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 143400000, + "end": 147900000, + "name": "q22.3", + "value": "gpos" + }, + { + "start": 147900000, + "end": 149000000, + "name": "q23.1", + "value": "gneg" + }, + { + "start": 149000000, + "end": 149600000, + "name": "q23.2", + "value": "gpos" + }, + { + "start": 149600000, + "end": 154000000, + "name": "q23.3", + "value": "gneg" + }, + { + "start": 154000000, + "end": 158900000, + "name": "q24.1", + "value": "gpos" + }, + { + "start": 158900000, + "end": 162900000, + "name": "q24.2", + "value": "gneg" + }, + { + "start": 162900000, + "end": 168900000, + "name": "q24.3", + "value": "gpos" + }, + { + "start": 168900000, + "end": 177100000, + "name": "q31.1", + "value": "gneg" + }, + { + "start": 177100000, + "end": 179700000, + "name": "q31.2", + "value": "gpos" + }, + { + "start": 179700000, + "end": 182100000, + "name": "q31.3", + "value": "gneg" + }, + { + "start": 182100000, + "end": 188500000, + "name": "q32.1", + "value": "gpos" + }, + { + "start": 188500000, + "end": 191100000, + "name": "q32.2", + "value": "gneg" + }, + { + "start": 191100000, + "end": 196600000, + "name": "q32.3", + "value": "gpos" + }, + { + "start": 196600000, + "end": 202500000, + "name": "q33.1", + "value": "gneg" + }, + { + "start": 202500000, + "end": 204100000, + "name": "q33.2", + "value": "gpos" + }, + { + "start": 204100000, + "end": 208200000, + "name": "q33.3", + "value": "gneg" + }, + { + "start": 208200000, + "end": 214500000, + "name": "q34", + "value": "gpos" + }, + { + "start": 214500000, + "end": 220700000, + "name": "q35", + "value": "gneg" + }, + { + "start": 220700000, + "end": 224300000, + "name": "q36.1", + "value": "gpos" + }, + { + "start": 224300000, + "end": 225200000, + "name": "q36.2", + "value": "gneg" + }, + { + "start": 225200000, + "end": 230100000, + "name": "q36.3", + "value": "gpos" + }, + { + "start": 230100000, + "end": 234700000, + "name": "q37.1", + "value": "gneg" + }, + { + "start": 234700000, + "end": 236400000, + "name": "q37.2", + "value": "gpos" + }, + { + "start": 236400000, + "end": 242193529, + "name": "q37.3", + "value": "gneg" + } + ], + "name": "chr2" + }, + { + "bands": [ + { + "start": 0, + "end": 2800000, + "name": "p26.3", + "value": "gpos" + }, + { + "start": 2800000, + "end": 4000000, + "name": "p26.2", + "value": "gneg" + }, + { + "start": 4000000, + "end": 8100000, + "name": "p26.1", + "value": "gpos" + }, + { + "start": 8100000, + "end": 11600000, + "name": "p25.3", + "value": "gneg" + }, + { + "start": 11600000, + "end": 13200000, + "name": "p25.2", + "value": "gpos" + }, + { + "start": 13200000, + "end": 16300000, + "name": "p25.1", + "value": "gneg" + }, + { + "start": 16300000, + "end": 23800000, + "name": "p24.3", + "value": "gpos" + }, + { + "start": 23800000, + "end": 26300000, + "name": "p24.2", + "value": "gneg" + }, + { + "start": 26300000, + "end": 30800000, + "name": "p24.1", + "value": "gpos" + }, + { + "start": 30800000, + "end": 32000000, + "name": "p23", + "value": "gneg" + }, + { + "start": 32000000, + "end": 36400000, + "name": "p22.3", + "value": "gpos" + }, + { + "start": 36400000, + "end": 39300000, + "name": "p22.2", + "value": "gneg" + }, + { + "start": 39300000, + "end": 43600000, + "name": "p22.1", + "value": "gpos" + }, + { + "start": 43600000, + "end": 44100000, + "name": "p21.33", + "value": "gneg" + }, + { + "start": 44100000, + "end": 44200000, + "name": "p21.32", + "value": "gpos" + }, + { + "start": 44200000, + "end": 50600000, + "name": "p21.31", + "value": "gneg" + }, + { + "start": 50600000, + "end": 52300000, + "name": "p21.2", + "value": "gpos" + }, + { + "start": 52300000, + "end": 54400000, + "name": "p21.1", + "value": "gneg" + }, + { + "start": 54400000, + "end": 58600000, + "name": "p14.3", + "value": "gpos" + }, + { + "start": 58600000, + "end": 63800000, + "name": "p14.2", + "value": "gneg" + }, + { + "start": 63800000, + "end": 69700000, + "name": "p14.1", + "value": "gpos" + }, + { + "start": 69700000, + "end": 74100000, + "name": "p13", + "value": "gneg" + }, + { + "start": 74100000, + "end": 79800000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 79800000, + "end": 83500000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 83500000, + "end": 87100000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 87100000, + "end": 87800000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 87800000, + "end": 90900000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 90900000, + "end": 94000000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 94000000, + "end": 98600000, + "name": "q11.2", + "value": "gvar" + }, + { + "start": 98600000, + "end": 100300000, + "name": "q12.1", + "value": "gneg" + }, + { + "start": 100300000, + "end": 101200000, + "name": "q12.2", + "value": "gpos" + }, + { + "start": 101200000, + "end": 103100000, + "name": "q12.3", + "value": "gneg" + }, + { + "start": 103100000, + "end": 106500000, + "name": "q13.11", + "value": "gpos" + }, + { + "start": 106500000, + "end": 108200000, + "name": "q13.12", + "value": "gneg" + }, + { + "start": 108200000, + "end": 111600000, + "name": "q13.13", + "value": "gpos" + }, + { + "start": 111600000, + "end": 113700000, + "name": "q13.2", + "value": "gneg" + }, + { + "start": 113700000, + "end": 117600000, + "name": "q13.31", + "value": "gpos" + }, + { + "start": 117600000, + "end": 119300000, + "name": "q13.32", + "value": "gneg" + }, + { + "start": 119300000, + "end": 122200000, + "name": "q13.33", + "value": "gpos" + }, + { + "start": 122200000, + "end": 124100000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 124100000, + "end": 126100000, + "name": "q21.2", + "value": "gpos" + }, + { + "start": 126100000, + "end": 129500000, + "name": "q21.3", + "value": "gneg" + }, + { + "start": 129500000, + "end": 134000000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 134000000, + "end": 136000000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 136000000, + "end": 139000000, + "name": "q22.3", + "value": "gpos" + }, + { + "start": 139000000, + "end": 143100000, + "name": "q23", + "value": "gneg" + }, + { + "start": 143100000, + "end": 149200000, + "name": "q24", + "value": "gpos" + }, + { + "start": 149200000, + "end": 152300000, + "name": "q25.1", + "value": "gneg" + }, + { + "start": 152300000, + "end": 155300000, + "name": "q25.2", + "value": "gpos" + }, + { + "start": 155300000, + "end": 157300000, + "name": "q25.31", + "value": "gneg" + }, + { + "start": 157300000, + "end": 159300000, + "name": "q25.32", + "value": "gpos" + }, + { + "start": 159300000, + "end": 161000000, + "name": "q25.33", + "value": "gneg" + }, + { + "start": 161000000, + "end": 167900000, + "name": "q26.1", + "value": "gpos" + }, + { + "start": 167900000, + "end": 171200000, + "name": "q26.2", + "value": "gneg" + }, + { + "start": 171200000, + "end": 176000000, + "name": "q26.31", + "value": "gpos" + }, + { + "start": 176000000, + "end": 179300000, + "name": "q26.32", + "value": "gneg" + }, + { + "start": 179300000, + "end": 183000000, + "name": "q26.33", + "value": "gpos" + }, + { + "start": 183000000, + "end": 184800000, + "name": "q27.1", + "value": "gneg" + }, + { + "start": 184800000, + "end": 186300000, + "name": "q27.2", + "value": "gpos" + }, + { + "start": 186300000, + "end": 188200000, + "name": "q27.3", + "value": "gneg" + }, + { + "start": 188200000, + "end": 192600000, + "name": "q28", + "value": "gpos" + }, + { + "start": 192600000, + "end": 198295559, + "name": "q29", + "value": "gneg" + } + ], + "name": "chr3" + }, + { + "bands": [ + { + "start": 0, + "end": 4500000, + "name": "p16.3", + "value": "gneg" + }, + { + "start": 4500000, + "end": 6000000, + "name": "p16.2", + "value": "gpos" + }, + { + "start": 6000000, + "end": 11300000, + "name": "p16.1", + "value": "gneg" + }, + { + "start": 11300000, + "end": 15000000, + "name": "p15.33", + "value": "gpos" + }, + { + "start": 15000000, + "end": 17700000, + "name": "p15.32", + "value": "gneg" + }, + { + "start": 17700000, + "end": 21300000, + "name": "p15.31", + "value": "gpos" + }, + { + "start": 21300000, + "end": 27700000, + "name": "p15.2", + "value": "gneg" + }, + { + "start": 27700000, + "end": 35800000, + "name": "p15.1", + "value": "gpos" + }, + { + "start": 35800000, + "end": 41200000, + "name": "p14", + "value": "gneg" + }, + { + "start": 41200000, + "end": 44600000, + "name": "p13", + "value": "gpos" + }, + { + "start": 44600000, + "end": 48200000, + "name": "p12", + "value": "gneg" + }, + { + "start": 48200000, + "end": 50000000, + "name": "p11", + "value": "acen" + }, + { + "start": 50000000, + "end": 51800000, + "name": "q11", + "value": "acen" + }, + { + "start": 51800000, + "end": 58500000, + "name": "q12", + "value": "gneg" + }, + { + "start": 58500000, + "end": 65500000, + "name": "q13.1", + "value": "gpos" + }, + { + "start": 65500000, + "end": 69400000, + "name": "q13.2", + "value": "gneg" + }, + { + "start": 69400000, + "end": 75300000, + "name": "q13.3", + "value": "gpos" + }, + { + "start": 75300000, + "end": 78000000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 78000000, + "end": 81500000, + "name": "q21.21", + "value": "gpos" + }, + { + "start": 81500000, + "end": 83200000, + "name": "q21.22", + "value": "gneg" + }, + { + "start": 83200000, + "end": 86000000, + "name": "q21.23", + "value": "gpos" + }, + { + "start": 86000000, + "end": 87100000, + "name": "q21.3", + "value": "gneg" + }, + { + "start": 87100000, + "end": 92800000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 92800000, + "end": 94200000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 94200000, + "end": 97900000, + "name": "q22.3", + "value": "gpos" + }, + { + "start": 97900000, + "end": 100100000, + "name": "q23", + "value": "gneg" + }, + { + "start": 100100000, + "end": 106700000, + "name": "q24", + "value": "gpos" + }, + { + "start": 106700000, + "end": 113200000, + "name": "q25", + "value": "gneg" + }, + { + "start": 113200000, + "end": 119900000, + "name": "q26", + "value": "gpos" + }, + { + "start": 119900000, + "end": 122800000, + "name": "q27", + "value": "gneg" + }, + { + "start": 122800000, + "end": 127900000, + "name": "q28.1", + "value": "gpos" + }, + { + "start": 127900000, + "end": 130100000, + "name": "q28.2", + "value": "gneg" + }, + { + "start": 130100000, + "end": 138500000, + "name": "q28.3", + "value": "gpos" + }, + { + "start": 138500000, + "end": 140600000, + "name": "q31.1", + "value": "gneg" + }, + { + "start": 140600000, + "end": 145900000, + "name": "q31.21", + "value": "gpos" + }, + { + "start": 145900000, + "end": 147500000, + "name": "q31.22", + "value": "gneg" + }, + { + "start": 147500000, + "end": 150200000, + "name": "q31.23", + "value": "gpos" + }, + { + "start": 150200000, + "end": 154600000, + "name": "q31.3", + "value": "gneg" + }, + { + "start": 154600000, + "end": 160800000, + "name": "q32.1", + "value": "gpos" + }, + { + "start": 160800000, + "end": 163600000, + "name": "q32.2", + "value": "gneg" + }, + { + "start": 163600000, + "end": 169200000, + "name": "q32.3", + "value": "gpos" + }, + { + "start": 169200000, + "end": 171000000, + "name": "q33", + "value": "gneg" + }, + { + "start": 171000000, + "end": 175400000, + "name": "q34.1", + "value": "gpos" + }, + { + "start": 175400000, + "end": 176600000, + "name": "q34.2", + "value": "gneg" + }, + { + "start": 176600000, + "end": 182300000, + "name": "q34.3", + "value": "gpos" + }, + { + "start": 182300000, + "end": 186200000, + "name": "q35.1", + "value": "gneg" + }, + { + "start": 186200000, + "end": 190214555, + "name": "q35.2", + "value": "gpos" + } + ], + "name": "chr4" + }, + { + "bands": [ + { + "start": 0, + "end": 4400000, + "name": "p15.33", + "value": "gneg" + }, + { + "start": 4400000, + "end": 6300000, + "name": "p15.32", + "value": "gpos" + }, + { + "start": 6300000, + "end": 9900000, + "name": "p15.31", + "value": "gneg" + }, + { + "start": 9900000, + "end": 15000000, + "name": "p15.2", + "value": "gpos" + }, + { + "start": 15000000, + "end": 18400000, + "name": "p15.1", + "value": "gneg" + }, + { + "start": 18400000, + "end": 23300000, + "name": "p14.3", + "value": "gpos" + }, + { + "start": 23300000, + "end": 24600000, + "name": "p14.2", + "value": "gneg" + }, + { + "start": 24600000, + "end": 28900000, + "name": "p14.1", + "value": "gpos" + }, + { + "start": 28900000, + "end": 33800000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 33800000, + "end": 38400000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 38400000, + "end": 42500000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 42500000, + "end": 46100000, + "name": "p12", + "value": "gpos" + }, + { + "start": 46100000, + "end": 48800000, + "name": "p11", + "value": "acen" + }, + { + "start": 48800000, + "end": 51400000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 51400000, + "end": 59600000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 59600000, + "end": 63600000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 63600000, + "end": 63900000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 63900000, + "end": 67400000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 67400000, + "end": 69100000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 69100000, + "end": 74000000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 74000000, + "end": 77600000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 77600000, + "end": 82100000, + "name": "q14.1", + "value": "gpos" + }, + { + "start": 82100000, + "end": 83500000, + "name": "q14.2", + "value": "gneg" + }, + { + "start": 83500000, + "end": 93000000, + "name": "q14.3", + "value": "gpos" + }, + { + "start": 93000000, + "end": 98900000, + "name": "q15", + "value": "gneg" + }, + { + "start": 98900000, + "end": 103400000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 103400000, + "end": 105100000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 105100000, + "end": 110200000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 110200000, + "end": 112200000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 112200000, + "end": 113800000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 113800000, + "end": 115900000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 115900000, + "end": 122100000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 122100000, + "end": 127900000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 127900000, + "end": 131200000, + "name": "q23.3", + "value": "gpos" + }, + { + "start": 131200000, + "end": 136900000, + "name": "q31.1", + "value": "gneg" + }, + { + "start": 136900000, + "end": 140100000, + "name": "q31.2", + "value": "gpos" + }, + { + "start": 140100000, + "end": 145100000, + "name": "q31.3", + "value": "gneg" + }, + { + "start": 145100000, + "end": 150400000, + "name": "q32", + "value": "gpos" + }, + { + "start": 150400000, + "end": 153300000, + "name": "q33.1", + "value": "gneg" + }, + { + "start": 153300000, + "end": 156300000, + "name": "q33.2", + "value": "gpos" + }, + { + "start": 156300000, + "end": 160500000, + "name": "q33.3", + "value": "gneg" + }, + { + "start": 160500000, + "end": 169000000, + "name": "q34", + "value": "gpos" + }, + { + "start": 169000000, + "end": 173300000, + "name": "q35.1", + "value": "gneg" + }, + { + "start": 173300000, + "end": 177100000, + "name": "q35.2", + "value": "gpos" + }, + { + "start": 177100000, + "end": 181538259, + "name": "q35.3", + "value": "gneg" + } + ], + "name": "chr5" + }, + { + "bands": [ + { + "start": 0, + "end": 2300000, + "name": "p25.3", + "value": "gneg" + }, + { + "start": 2300000, + "end": 4200000, + "name": "p25.2", + "value": "gpos" + }, + { + "start": 4200000, + "end": 7100000, + "name": "p25.1", + "value": "gneg" + }, + { + "start": 7100000, + "end": 10600000, + "name": "p24.3", + "value": "gpos" + }, + { + "start": 10600000, + "end": 11600000, + "name": "p24.2", + "value": "gneg" + }, + { + "start": 11600000, + "end": 13400000, + "name": "p24.1", + "value": "gpos" + }, + { + "start": 13400000, + "end": 15200000, + "name": "p23", + "value": "gneg" + }, + { + "start": 15200000, + "end": 25200000, + "name": "p22.3", + "value": "gpos" + }, + { + "start": 25200000, + "end": 27100000, + "name": "p22.2", + "value": "gneg" + }, + { + "start": 27100000, + "end": 30500000, + "name": "p22.1", + "value": "gpos" + }, + { + "start": 30500000, + "end": 32100000, + "name": "p21.33", + "value": "gneg" + }, + { + "start": 32100000, + "end": 33500000, + "name": "p21.32", + "value": "gpos" + }, + { + "start": 33500000, + "end": 36600000, + "name": "p21.31", + "value": "gneg" + }, + { + "start": 36600000, + "end": 40500000, + "name": "p21.2", + "value": "gpos" + }, + { + "start": 40500000, + "end": 46200000, + "name": "p21.1", + "value": "gneg" + }, + { + "start": 46200000, + "end": 51800000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 51800000, + "end": 53000000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 53000000, + "end": 57200000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 57200000, + "end": 58500000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 58500000, + "end": 59800000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 59800000, + "end": 62600000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 62600000, + "end": 62700000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 62700000, + "end": 69200000, + "name": "q12", + "value": "gpos" + }, + { + "start": 69200000, + "end": 75200000, + "name": "q13", + "value": "gneg" + }, + { + "start": 75200000, + "end": 83200000, + "name": "q14.1", + "value": "gpos" + }, + { + "start": 83200000, + "end": 84200000, + "name": "q14.2", + "value": "gneg" + }, + { + "start": 84200000, + "end": 87300000, + "name": "q14.3", + "value": "gpos" + }, + { + "start": 87300000, + "end": 92500000, + "name": "q15", + "value": "gneg" + }, + { + "start": 92500000, + "end": 98900000, + "name": "q16.1", + "value": "gpos" + }, + { + "start": 98900000, + "end": 100000000, + "name": "q16.2", + "value": "gneg" + }, + { + "start": 100000000, + "end": 105000000, + "name": "q16.3", + "value": "gpos" + }, + { + "start": 105000000, + "end": 114200000, + "name": "q21", + "value": "gneg" + }, + { + "start": 114200000, + "end": 117900000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 117900000, + "end": 118100000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 118100000, + "end": 125800000, + "name": "q22.31", + "value": "gpos" + }, + { + "start": 125800000, + "end": 126800000, + "name": "q22.32", + "value": "gneg" + }, + { + "start": 126800000, + "end": 130000000, + "name": "q22.33", + "value": "gpos" + }, + { + "start": 130000000, + "end": 130900000, + "name": "q23.1", + "value": "gneg" + }, + { + "start": 130900000, + "end": 134700000, + "name": "q23.2", + "value": "gpos" + }, + { + "start": 134700000, + "end": 138300000, + "name": "q23.3", + "value": "gneg" + }, + { + "start": 138300000, + "end": 142200000, + "name": "q24.1", + "value": "gpos" + }, + { + "start": 142200000, + "end": 145100000, + "name": "q24.2", + "value": "gneg" + }, + { + "start": 145100000, + "end": 148500000, + "name": "q24.3", + "value": "gpos" + }, + { + "start": 148500000, + "end": 152100000, + "name": "q25.1", + "value": "gneg" + }, + { + "start": 152100000, + "end": 155200000, + "name": "q25.2", + "value": "gpos" + }, + { + "start": 155200000, + "end": 160600000, + "name": "q25.3", + "value": "gneg" + }, + { + "start": 160600000, + "end": 164100000, + "name": "q26", + "value": "gpos" + }, + { + "start": 164100000, + "end": 170805979, + "name": "q27", + "value": "gneg" + } + ], + "name": "chr6" + }, + { + "bands": [ + { + "start": 0, + "end": 2800000, + "name": "p22.3", + "value": "gneg" + }, + { + "start": 2800000, + "end": 4500000, + "name": "p22.2", + "value": "gpos" + }, + { + "start": 4500000, + "end": 7200000, + "name": "p22.1", + "value": "gneg" + }, + { + "start": 7200000, + "end": 13700000, + "name": "p21.3", + "value": "gpos" + }, + { + "start": 13700000, + "end": 16500000, + "name": "p21.2", + "value": "gneg" + }, + { + "start": 16500000, + "end": 20900000, + "name": "p21.1", + "value": "gpos" + }, + { + "start": 20900000, + "end": 25500000, + "name": "p15.3", + "value": "gneg" + }, + { + "start": 25500000, + "end": 27900000, + "name": "p15.2", + "value": "gpos" + }, + { + "start": 27900000, + "end": 28800000, + "name": "p15.1", + "value": "gneg" + }, + { + "start": 28800000, + "end": 34900000, + "name": "p14.3", + "value": "gpos" + }, + { + "start": 34900000, + "end": 37100000, + "name": "p14.2", + "value": "gneg" + }, + { + "start": 37100000, + "end": 43300000, + "name": "p14.1", + "value": "gpos" + }, + { + "start": 43300000, + "end": 45400000, + "name": "p13", + "value": "gneg" + }, + { + "start": 45400000, + "end": 49000000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 49000000, + "end": 50500000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 50500000, + "end": 53900000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 53900000, + "end": 58100000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 58100000, + "end": 60100000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 60100000, + "end": 62100000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 62100000, + "end": 67500000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 67500000, + "end": 72700000, + "name": "q11.22", + "value": "gpos" + }, + { + "start": 72700000, + "end": 77900000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 77900000, + "end": 86700000, + "name": "q21.11", + "value": "gpos" + }, + { + "start": 86700000, + "end": 88500000, + "name": "q21.12", + "value": "gneg" + }, + { + "start": 88500000, + "end": 91500000, + "name": "q21.13", + "value": "gpos" + }, + { + "start": 91500000, + "end": 93300000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 93300000, + "end": 98400000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 98400000, + "end": 104200000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 104200000, + "end": 104900000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 104900000, + "end": 107800000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 107800000, + "end": 115000000, + "name": "q31.1", + "value": "gpos" + }, + { + "start": 115000000, + "end": 117700000, + "name": "q31.2", + "value": "gneg" + }, + { + "start": 117700000, + "end": 121400000, + "name": "q31.31", + "value": "gpos" + }, + { + "start": 121400000, + "end": 124100000, + "name": "q31.32", + "value": "gneg" + }, + { + "start": 124100000, + "end": 127500000, + "name": "q31.33", + "value": "gpos" + }, + { + "start": 127500000, + "end": 129600000, + "name": "q32.1", + "value": "gneg" + }, + { + "start": 129600000, + "end": 130800000, + "name": "q32.2", + "value": "gpos" + }, + { + "start": 130800000, + "end": 132900000, + "name": "q32.3", + "value": "gneg" + }, + { + "start": 132900000, + "end": 138500000, + "name": "q33", + "value": "gpos" + }, + { + "start": 138500000, + "end": 143400000, + "name": "q34", + "value": "gneg" + }, + { + "start": 143400000, + "end": 148200000, + "name": "q35", + "value": "gpos" + }, + { + "start": 148200000, + "end": 152800000, + "name": "q36.1", + "value": "gneg" + }, + { + "start": 152800000, + "end": 155200000, + "name": "q36.2", + "value": "gpos" + }, + { + "start": 155200000, + "end": 159345973, + "name": "q36.3", + "value": "gneg" + } + ], + "name": "chr7" + }, + { + "bands": [ + { + "start": 0, + "end": 2300000, + "name": "p23.3", + "value": "gneg" + }, + { + "start": 2300000, + "end": 6300000, + "name": "p23.2", + "value": "gpos" + }, + { + "start": 6300000, + "end": 12800000, + "name": "p23.1", + "value": "gneg" + }, + { + "start": 12800000, + "end": 19200000, + "name": "p22", + "value": "gpos" + }, + { + "start": 19200000, + "end": 23500000, + "name": "p21.3", + "value": "gneg" + }, + { + "start": 23500000, + "end": 27500000, + "name": "p21.2", + "value": "gpos" + }, + { + "start": 27500000, + "end": 29000000, + "name": "p21.1", + "value": "gneg" + }, + { + "start": 29000000, + "end": 36700000, + "name": "p12", + "value": "gpos" + }, + { + "start": 36700000, + "end": 38500000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 38500000, + "end": 39900000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 39900000, + "end": 43200000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 43200000, + "end": 45200000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 45200000, + "end": 47200000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 47200000, + "end": 51300000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 51300000, + "end": 51700000, + "name": "q11.22", + "value": "gpos" + }, + { + "start": 51700000, + "end": 54600000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 54600000, + "end": 60600000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 60600000, + "end": 61300000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 61300000, + "end": 65100000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 65100000, + "end": 67100000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 67100000, + "end": 69600000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 69600000, + "end": 72000000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 72000000, + "end": 74600000, + "name": "q21.11", + "value": "gpos" + }, + { + "start": 74600000, + "end": 74700000, + "name": "q21.12", + "value": "gneg" + }, + { + "start": 74700000, + "end": 83500000, + "name": "q21.13", + "value": "gpos" + }, + { + "start": 83500000, + "end": 85900000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 85900000, + "end": 92300000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 92300000, + "end": 97900000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 97900000, + "end": 100500000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 100500000, + "end": 105100000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 105100000, + "end": 109500000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 109500000, + "end": 111100000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 111100000, + "end": 116700000, + "name": "q23.3", + "value": "gpos" + }, + { + "start": 116700000, + "end": 118300000, + "name": "q24.11", + "value": "gneg" + }, + { + "start": 118300000, + "end": 121500000, + "name": "q24.12", + "value": "gpos" + }, + { + "start": 121500000, + "end": 126300000, + "name": "q24.13", + "value": "gneg" + }, + { + "start": 126300000, + "end": 130400000, + "name": "q24.21", + "value": "gpos" + }, + { + "start": 130400000, + "end": 135400000, + "name": "q24.22", + "value": "gneg" + }, + { + "start": 135400000, + "end": 138900000, + "name": "q24.23", + "value": "gpos" + }, + { + "start": 138900000, + "end": 145138636, + "name": "q24.3", + "value": "gneg" + } + ], + "name": "chr8" + }, + { + "bands": [ + { + "start": 0, + "end": 2200000, + "name": "p24.3", + "value": "gneg" + }, + { + "start": 2200000, + "end": 4600000, + "name": "p24.2", + "value": "gpos" + }, + { + "start": 4600000, + "end": 9000000, + "name": "p24.1", + "value": "gneg" + }, + { + "start": 9000000, + "end": 14200000, + "name": "p23", + "value": "gpos" + }, + { + "start": 14200000, + "end": 16600000, + "name": "p22.3", + "value": "gneg" + }, + { + "start": 16600000, + "end": 18500000, + "name": "p22.2", + "value": "gpos" + }, + { + "start": 18500000, + "end": 19900000, + "name": "p22.1", + "value": "gneg" + }, + { + "start": 19900000, + "end": 25600000, + "name": "p21.3", + "value": "gpos" + }, + { + "start": 25600000, + "end": 28000000, + "name": "p21.2", + "value": "gneg" + }, + { + "start": 28000000, + "end": 33200000, + "name": "p21.1", + "value": "gpos" + }, + { + "start": 33200000, + "end": 36300000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 36300000, + "end": 37900000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 37900000, + "end": 39000000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 39000000, + "end": 40000000, + "name": "p12", + "value": "gpos" + }, + { + "start": 40000000, + "end": 42200000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 42200000, + "end": 43000000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 43000000, + "end": 45500000, + "name": "q11", + "value": "acen" + }, + { + "start": 45500000, + "end": 61500000, + "name": "q12", + "value": "gvar" + }, + { + "start": 61500000, + "end": 65000000, + "name": "q13", + "value": "gneg" + }, + { + "start": 65000000, + "end": 69300000, + "name": "q21.11", + "value": "gpos" + }, + { + "start": 69300000, + "end": 71300000, + "name": "q21.12", + "value": "gneg" + }, + { + "start": 71300000, + "end": 76600000, + "name": "q21.13", + "value": "gpos" + }, + { + "start": 76600000, + "end": 78500000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 78500000, + "end": 81500000, + "name": "q21.31", + "value": "gpos" + }, + { + "start": 81500000, + "end": 84300000, + "name": "q21.32", + "value": "gneg" + }, + { + "start": 84300000, + "end": 87800000, + "name": "q21.33", + "value": "gpos" + }, + { + "start": 87800000, + "end": 89200000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 89200000, + "end": 91200000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 91200000, + "end": 93900000, + "name": "q22.31", + "value": "gneg" + }, + { + "start": 93900000, + "end": 96500000, + "name": "q22.32", + "value": "gpos" + }, + { + "start": 96500000, + "end": 99800000, + "name": "q22.33", + "value": "gneg" + }, + { + "start": 99800000, + "end": 105400000, + "name": "q31.1", + "value": "gpos" + }, + { + "start": 105400000, + "end": 108500000, + "name": "q31.2", + "value": "gneg" + }, + { + "start": 108500000, + "end": 112100000, + "name": "q31.3", + "value": "gpos" + }, + { + "start": 112100000, + "end": 114900000, + "name": "q32", + "value": "gneg" + }, + { + "start": 114900000, + "end": 119800000, + "name": "q33.1", + "value": "gpos" + }, + { + "start": 119800000, + "end": 123100000, + "name": "q33.2", + "value": "gneg" + }, + { + "start": 123100000, + "end": 127500000, + "name": "q33.3", + "value": "gpos" + }, + { + "start": 127500000, + "end": 130600000, + "name": "q34.11", + "value": "gneg" + }, + { + "start": 130600000, + "end": 131100000, + "name": "q34.12", + "value": "gpos" + }, + { + "start": 131100000, + "end": 133100000, + "name": "q34.13", + "value": "gneg" + }, + { + "start": 133100000, + "end": 134500000, + "name": "q34.2", + "value": "gpos" + }, + { + "start": 134500000, + "end": 138394717, + "name": "q34.3", + "value": "gneg" + } + ], + "name": "chr9" + }, + { + "bands": [ + { + "start": 0, + "end": 3000000, + "name": "p15.3", + "value": "gneg" + }, + { + "start": 3000000, + "end": 3800000, + "name": "p15.2", + "value": "gpos" + }, + { + "start": 3800000, + "end": 6600000, + "name": "p15.1", + "value": "gneg" + }, + { + "start": 6600000, + "end": 12200000, + "name": "p14", + "value": "gpos" + }, + { + "start": 12200000, + "end": 17300000, + "name": "p13", + "value": "gneg" + }, + { + "start": 17300000, + "end": 18300000, + "name": "p12.33", + "value": "gpos" + }, + { + "start": 18300000, + "end": 18400000, + "name": "p12.32", + "value": "gneg" + }, + { + "start": 18400000, + "end": 22300000, + "name": "p12.31", + "value": "gpos" + }, + { + "start": 22300000, + "end": 24300000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 24300000, + "end": 29300000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 29300000, + "end": 31100000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 31100000, + "end": 34200000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 34200000, + "end": 38000000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 38000000, + "end": 39800000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 39800000, + "end": 41600000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 41600000, + "end": 45500000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 45500000, + "end": 48600000, + "name": "q11.22", + "value": "gpos" + }, + { + "start": 48600000, + "end": 51100000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 51100000, + "end": 59400000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 59400000, + "end": 62800000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 62800000, + "end": 68800000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 68800000, + "end": 73100000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 73100000, + "end": 75900000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 75900000, + "end": 80300000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 80300000, + "end": 86100000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 86100000, + "end": 87700000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 87700000, + "end": 91100000, + "name": "q23.31", + "value": "gpos" + }, + { + "start": 91100000, + "end": 92300000, + "name": "q23.32", + "value": "gneg" + }, + { + "start": 92300000, + "end": 95300000, + "name": "q23.33", + "value": "gpos" + }, + { + "start": 95300000, + "end": 97500000, + "name": "q24.1", + "value": "gneg" + }, + { + "start": 97500000, + "end": 100100000, + "name": "q24.2", + "value": "gpos" + }, + { + "start": 100100000, + "end": 101200000, + "name": "q24.31", + "value": "gneg" + }, + { + "start": 101200000, + "end": 103100000, + "name": "q24.32", + "value": "gpos" + }, + { + "start": 103100000, + "end": 104000000, + "name": "q24.33", + "value": "gneg" + }, + { + "start": 104000000, + "end": 110100000, + "name": "q25.1", + "value": "gpos" + }, + { + "start": 110100000, + "end": 113100000, + "name": "q25.2", + "value": "gneg" + }, + { + "start": 113100000, + "end": 117300000, + "name": "q25.3", + "value": "gpos" + }, + { + "start": 117300000, + "end": 119900000, + "name": "q26.11", + "value": "gneg" + }, + { + "start": 119900000, + "end": 121400000, + "name": "q26.12", + "value": "gpos" + }, + { + "start": 121400000, + "end": 125700000, + "name": "q26.13", + "value": "gneg" + }, + { + "start": 125700000, + "end": 128800000, + "name": "q26.2", + "value": "gpos" + }, + { + "start": 128800000, + "end": 133797422, + "name": "q26.3", + "value": "gneg" + } + ], + "name": "chr10" + }, + { + "bands": [ + { + "start": 0, + "end": 2800000, + "name": "p15.5", + "value": "gneg" + }, + { + "start": 2800000, + "end": 11700000, + "name": "p15.4", + "value": "gpos" + }, + { + "start": 11700000, + "end": 13800000, + "name": "p15.3", + "value": "gneg" + }, + { + "start": 13800000, + "end": 16900000, + "name": "p15.2", + "value": "gpos" + }, + { + "start": 16900000, + "end": 22000000, + "name": "p15.1", + "value": "gneg" + }, + { + "start": 22000000, + "end": 26200000, + "name": "p14.3", + "value": "gpos" + }, + { + "start": 26200000, + "end": 27200000, + "name": "p14.2", + "value": "gneg" + }, + { + "start": 27200000, + "end": 31000000, + "name": "p14.1", + "value": "gpos" + }, + { + "start": 31000000, + "end": 36400000, + "name": "p13", + "value": "gneg" + }, + { + "start": 36400000, + "end": 43400000, + "name": "p12", + "value": "gpos" + }, + { + "start": 43400000, + "end": 48800000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 48800000, + "end": 51000000, + "name": "p11.12", + "value": "gpos" + }, + { + "start": 51000000, + "end": 53400000, + "name": "p11.11", + "value": "acen" + }, + { + "start": 53400000, + "end": 55800000, + "name": "q11", + "value": "acen" + }, + { + "start": 55800000, + "end": 60100000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 60100000, + "end": 61900000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 61900000, + "end": 63600000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 63600000, + "end": 66100000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 66100000, + "end": 68700000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 68700000, + "end": 70500000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 70500000, + "end": 75500000, + "name": "q13.4", + "value": "gpos" + }, + { + "start": 75500000, + "end": 77400000, + "name": "q13.5", + "value": "gneg" + }, + { + "start": 77400000, + "end": 85900000, + "name": "q14.1", + "value": "gpos" + }, + { + "start": 85900000, + "end": 88600000, + "name": "q14.2", + "value": "gneg" + }, + { + "start": 88600000, + "end": 93000000, + "name": "q14.3", + "value": "gpos" + }, + { + "start": 93000000, + "end": 97400000, + "name": "q21", + "value": "gneg" + }, + { + "start": 97400000, + "end": 102300000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 102300000, + "end": 103000000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 103000000, + "end": 110600000, + "name": "q22.3", + "value": "gpos" + }, + { + "start": 110600000, + "end": 112700000, + "name": "q23.1", + "value": "gneg" + }, + { + "start": 112700000, + "end": 114600000, + "name": "q23.2", + "value": "gpos" + }, + { + "start": 114600000, + "end": 121300000, + "name": "q23.3", + "value": "gneg" + }, + { + "start": 121300000, + "end": 124000000, + "name": "q24.1", + "value": "gpos" + }, + { + "start": 124000000, + "end": 127900000, + "name": "q24.2", + "value": "gneg" + }, + { + "start": 127900000, + "end": 130900000, + "name": "q24.3", + "value": "gpos" + }, + { + "start": 130900000, + "end": 135086622, + "name": "q25", + "value": "gneg" + } + ], + "name": "chr11" + }, + { + "bands": [ + { + "start": 0, + "end": 3200000, + "name": "p13.33", + "value": "gneg" + }, + { + "start": 3200000, + "end": 5300000, + "name": "p13.32", + "value": "gpos" + }, + { + "start": 5300000, + "end": 10000000, + "name": "p13.31", + "value": "gneg" + }, + { + "start": 10000000, + "end": 12600000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 12600000, + "end": 14600000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 14600000, + "end": 19800000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 19800000, + "end": 21100000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 21100000, + "end": 26300000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 26300000, + "end": 27600000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 27600000, + "end": 30500000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 30500000, + "end": 33200000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 33200000, + "end": 35500000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 35500000, + "end": 37800000, + "name": "q11", + "value": "acen" + }, + { + "start": 37800000, + "end": 46000000, + "name": "q12", + "value": "gpos" + }, + { + "start": 46000000, + "end": 48700000, + "name": "q13.11", + "value": "gneg" + }, + { + "start": 48700000, + "end": 51100000, + "name": "q13.12", + "value": "gpos" + }, + { + "start": 51100000, + "end": 54500000, + "name": "q13.13", + "value": "gneg" + }, + { + "start": 54500000, + "end": 56200000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 56200000, + "end": 57700000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 57700000, + "end": 62700000, + "name": "q14.1", + "value": "gpos" + }, + { + "start": 62700000, + "end": 64700000, + "name": "q14.2", + "value": "gneg" + }, + { + "start": 64700000, + "end": 67300000, + "name": "q14.3", + "value": "gpos" + }, + { + "start": 67300000, + "end": 71100000, + "name": "q15", + "value": "gneg" + }, + { + "start": 71100000, + "end": 75300000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 75300000, + "end": 79900000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 79900000, + "end": 86300000, + "name": "q21.31", + "value": "gpos" + }, + { + "start": 86300000, + "end": 88600000, + "name": "q21.32", + "value": "gneg" + }, + { + "start": 88600000, + "end": 92200000, + "name": "q21.33", + "value": "gpos" + }, + { + "start": 92200000, + "end": 95800000, + "name": "q22", + "value": "gneg" + }, + { + "start": 95800000, + "end": 101200000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 101200000, + "end": 103500000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 103500000, + "end": 108600000, + "name": "q23.3", + "value": "gpos" + }, + { + "start": 108600000, + "end": 111300000, + "name": "q24.11", + "value": "gneg" + }, + { + "start": 111300000, + "end": 111900000, + "name": "q24.12", + "value": "gpos" + }, + { + "start": 111900000, + "end": 113900000, + "name": "q24.13", + "value": "gneg" + }, + { + "start": 113900000, + "end": 116400000, + "name": "q24.21", + "value": "gpos" + }, + { + "start": 116400000, + "end": 117700000, + "name": "q24.22", + "value": "gneg" + }, + { + "start": 117700000, + "end": 120300000, + "name": "q24.23", + "value": "gpos" + }, + { + "start": 120300000, + "end": 125400000, + "name": "q24.31", + "value": "gneg" + }, + { + "start": 125400000, + "end": 128700000, + "name": "q24.32", + "value": "gpos" + }, + { + "start": 128700000, + "end": 133275309, + "name": "q24.33", + "value": "gneg" + } + ], + "name": "chr12" + }, + { + "bands": [ + { + "start": 0, + "end": 4600000, + "name": "p13", + "value": "gvar" + }, + { + "start": 4600000, + "end": 10100000, + "name": "p12", + "value": "stalk" + }, + { + "start": 10100000, + "end": 16500000, + "name": "p11.2", + "value": "gvar" + }, + { + "start": 16500000, + "end": 17700000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 17700000, + "end": 18900000, + "name": "q11", + "value": "acen" + }, + { + "start": 18900000, + "end": 22600000, + "name": "q12.11", + "value": "gneg" + }, + { + "start": 22600000, + "end": 24900000, + "name": "q12.12", + "value": "gpos" + }, + { + "start": 24900000, + "end": 27200000, + "name": "q12.13", + "value": "gneg" + }, + { + "start": 27200000, + "end": 28300000, + "name": "q12.2", + "value": "gpos" + }, + { + "start": 28300000, + "end": 31600000, + "name": "q12.3", + "value": "gneg" + }, + { + "start": 31600000, + "end": 33400000, + "name": "q13.1", + "value": "gpos" + }, + { + "start": 33400000, + "end": 34900000, + "name": "q13.2", + "value": "gneg" + }, + { + "start": 34900000, + "end": 39500000, + "name": "q13.3", + "value": "gpos" + }, + { + "start": 39500000, + "end": 44600000, + "name": "q14.11", + "value": "gneg" + }, + { + "start": 44600000, + "end": 45200000, + "name": "q14.12", + "value": "gpos" + }, + { + "start": 45200000, + "end": 46700000, + "name": "q14.13", + "value": "gneg" + }, + { + "start": 46700000, + "end": 50300000, + "name": "q14.2", + "value": "gpos" + }, + { + "start": 50300000, + "end": 54700000, + "name": "q14.3", + "value": "gneg" + }, + { + "start": 54700000, + "end": 59000000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 59000000, + "end": 61800000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 61800000, + "end": 65200000, + "name": "q21.31", + "value": "gpos" + }, + { + "start": 65200000, + "end": 68100000, + "name": "q21.32", + "value": "gneg" + }, + { + "start": 68100000, + "end": 72800000, + "name": "q21.33", + "value": "gpos" + }, + { + "start": 72800000, + "end": 74900000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 74900000, + "end": 76700000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 76700000, + "end": 78500000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 78500000, + "end": 87100000, + "name": "q31.1", + "value": "gpos" + }, + { + "start": 87100000, + "end": 89400000, + "name": "q31.2", + "value": "gneg" + }, + { + "start": 89400000, + "end": 94400000, + "name": "q31.3", + "value": "gpos" + }, + { + "start": 94400000, + "end": 97500000, + "name": "q32.1", + "value": "gneg" + }, + { + "start": 97500000, + "end": 98700000, + "name": "q32.2", + "value": "gpos" + }, + { + "start": 98700000, + "end": 101100000, + "name": "q32.3", + "value": "gneg" + }, + { + "start": 101100000, + "end": 104200000, + "name": "q33.1", + "value": "gpos" + }, + { + "start": 104200000, + "end": 106400000, + "name": "q33.2", + "value": "gneg" + }, + { + "start": 106400000, + "end": 109600000, + "name": "q33.3", + "value": "gpos" + }, + { + "start": 109600000, + "end": 114364328, + "name": "q34", + "value": "gneg" + } + ], + "name": "chr13" + }, + { + "bands": [ + { + "start": 0, + "end": 3600000, + "name": "p13", + "value": "gvar" + }, + { + "start": 3600000, + "end": 8000000, + "name": "p12", + "value": "stalk" + }, + { + "start": 8000000, + "end": 16100000, + "name": "p11.2", + "value": "gvar" + }, + { + "start": 16100000, + "end": 17200000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 17200000, + "end": 18200000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 18200000, + "end": 24100000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 24100000, + "end": 32900000, + "name": "q12", + "value": "gpos" + }, + { + "start": 32900000, + "end": 34800000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 34800000, + "end": 36100000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 36100000, + "end": 37400000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 37400000, + "end": 43000000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 43000000, + "end": 46700000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 46700000, + "end": 50400000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 50400000, + "end": 53600000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 53600000, + "end": 55000000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 55000000, + "end": 57600000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 57600000, + "end": 61600000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 61600000, + "end": 64300000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 64300000, + "end": 67400000, + "name": "q23.3", + "value": "gpos" + }, + { + "start": 67400000, + "end": 69800000, + "name": "q24.1", + "value": "gneg" + }, + { + "start": 69800000, + "end": 73300000, + "name": "q24.2", + "value": "gpos" + }, + { + "start": 73300000, + "end": 78800000, + "name": "q24.3", + "value": "gneg" + }, + { + "start": 78800000, + "end": 83100000, + "name": "q31.1", + "value": "gpos" + }, + { + "start": 83100000, + "end": 84400000, + "name": "q31.2", + "value": "gneg" + }, + { + "start": 84400000, + "end": 89300000, + "name": "q31.3", + "value": "gpos" + }, + { + "start": 89300000, + "end": 91400000, + "name": "q32.11", + "value": "gneg" + }, + { + "start": 91400000, + "end": 94200000, + "name": "q32.12", + "value": "gpos" + }, + { + "start": 94200000, + "end": 95800000, + "name": "q32.13", + "value": "gneg" + }, + { + "start": 95800000, + "end": 100900000, + "name": "q32.2", + "value": "gpos" + }, + { + "start": 100900000, + "end": 102700000, + "name": "q32.31", + "value": "gneg" + }, + { + "start": 102700000, + "end": 103500000, + "name": "q32.32", + "value": "gpos" + }, + { + "start": 103500000, + "end": 107043718, + "name": "q32.33", + "value": "gneg" + } + ], + "name": "chr14" + }, + { + "bands": [ + { + "start": 0, + "end": 4200000, + "name": "p13", + "value": "gvar" + }, + { + "start": 4200000, + "end": 9700000, + "name": "p12", + "value": "stalk" + }, + { + "start": 9700000, + "end": 17500000, + "name": "p11.2", + "value": "gvar" + }, + { + "start": 17500000, + "end": 19000000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 19000000, + "end": 20500000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 20500000, + "end": 25500000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 25500000, + "end": 27800000, + "name": "q12", + "value": "gpos" + }, + { + "start": 27800000, + "end": 30000000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 30000000, + "end": 30900000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 30900000, + "end": 33400000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 33400000, + "end": 39800000, + "name": "q14", + "value": "gpos" + }, + { + "start": 39800000, + "end": 42500000, + "name": "q15.1", + "value": "gneg" + }, + { + "start": 42500000, + "end": 43300000, + "name": "q15.2", + "value": "gpos" + }, + { + "start": 43300000, + "end": 44500000, + "name": "q15.3", + "value": "gneg" + }, + { + "start": 44500000, + "end": 49200000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 49200000, + "end": 52600000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 52600000, + "end": 58800000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 58800000, + "end": 59000000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 59000000, + "end": 63400000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 63400000, + "end": 66900000, + "name": "q22.31", + "value": "gneg" + }, + { + "start": 66900000, + "end": 67000000, + "name": "q22.32", + "value": "gpos" + }, + { + "start": 67000000, + "end": 67200000, + "name": "q22.33", + "value": "gneg" + }, + { + "start": 67200000, + "end": 72400000, + "name": "q23", + "value": "gpos" + }, + { + "start": 72400000, + "end": 74900000, + "name": "q24.1", + "value": "gneg" + }, + { + "start": 74900000, + "end": 76300000, + "name": "q24.2", + "value": "gpos" + }, + { + "start": 76300000, + "end": 78000000, + "name": "q24.3", + "value": "gneg" + }, + { + "start": 78000000, + "end": 81400000, + "name": "q25.1", + "value": "gpos" + }, + { + "start": 81400000, + "end": 84700000, + "name": "q25.2", + "value": "gneg" + }, + { + "start": 84700000, + "end": 88500000, + "name": "q25.3", + "value": "gpos" + }, + { + "start": 88500000, + "end": 93800000, + "name": "q26.1", + "value": "gneg" + }, + { + "start": 93800000, + "end": 98000000, + "name": "q26.2", + "value": "gpos" + }, + { + "start": 98000000, + "end": 101991189, + "name": "q26.3", + "value": "gneg" + } + ], + "name": "chr15" + }, + { + "bands": [ + { + "start": 0, + "end": 7800000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 7800000, + "end": 10400000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 10400000, + "end": 12500000, + "name": "p13.13", + "value": "gneg" + }, + { + "start": 12500000, + "end": 14700000, + "name": "p13.12", + "value": "gpos" + }, + { + "start": 14700000, + "end": 16700000, + "name": "p13.11", + "value": "gneg" + }, + { + "start": 16700000, + "end": 21200000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 21200000, + "end": 24200000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 24200000, + "end": 28500000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 28500000, + "end": 35300000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 35300000, + "end": 36800000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 36800000, + "end": 38400000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 38400000, + "end": 47000000, + "name": "q11.2", + "value": "gvar" + }, + { + "start": 47000000, + "end": 52600000, + "name": "q12.1", + "value": "gneg" + }, + { + "start": 52600000, + "end": 56000000, + "name": "q12.2", + "value": "gpos" + }, + { + "start": 56000000, + "end": 57300000, + "name": "q13", + "value": "gneg" + }, + { + "start": 57300000, + "end": 66600000, + "name": "q21", + "value": "gpos" + }, + { + "start": 66600000, + "end": 70800000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 70800000, + "end": 72800000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 72800000, + "end": 74100000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 74100000, + "end": 79200000, + "name": "q23.1", + "value": "gpos" + }, + { + "start": 79200000, + "end": 81600000, + "name": "q23.2", + "value": "gneg" + }, + { + "start": 81600000, + "end": 84100000, + "name": "q23.3", + "value": "gpos" + }, + { + "start": 84100000, + "end": 87000000, + "name": "q24.1", + "value": "gneg" + }, + { + "start": 87000000, + "end": 88700000, + "name": "q24.2", + "value": "gpos" + }, + { + "start": 88700000, + "end": 90338345, + "name": "q24.3", + "value": "gneg" + } + ], + "name": "chr16" + }, + { + "bands": [ + { + "start": 0, + "end": 3400000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 3400000, + "end": 6500000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 6500000, + "end": 10800000, + "name": "p13.1", + "value": "gneg" + }, + { + "start": 10800000, + "end": 16100000, + "name": "p12", + "value": "gpos" + }, + { + "start": 16100000, + "end": 22700000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 22700000, + "end": 25100000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 25100000, + "end": 27400000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 27400000, + "end": 33500000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 33500000, + "end": 39800000, + "name": "q12", + "value": "gpos" + }, + { + "start": 39800000, + "end": 40200000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 40200000, + "end": 42800000, + "name": "q21.2", + "value": "gpos" + }, + { + "start": 42800000, + "end": 46800000, + "name": "q21.31", + "value": "gneg" + }, + { + "start": 46800000, + "end": 49300000, + "name": "q21.32", + "value": "gpos" + }, + { + "start": 49300000, + "end": 52100000, + "name": "q21.33", + "value": "gneg" + }, + { + "start": 52100000, + "end": 59500000, + "name": "q22", + "value": "gpos" + }, + { + "start": 59500000, + "end": 60200000, + "name": "q23.1", + "value": "gneg" + }, + { + "start": 60200000, + "end": 63100000, + "name": "q23.2", + "value": "gpos" + }, + { + "start": 63100000, + "end": 64600000, + "name": "q23.3", + "value": "gneg" + }, + { + "start": 64600000, + "end": 66200000, + "name": "q24.1", + "value": "gpos" + }, + { + "start": 66200000, + "end": 69100000, + "name": "q24.2", + "value": "gneg" + }, + { + "start": 69100000, + "end": 72900000, + "name": "q24.3", + "value": "gpos" + }, + { + "start": 72900000, + "end": 76800000, + "name": "q25.1", + "value": "gneg" + }, + { + "start": 76800000, + "end": 77200000, + "name": "q25.2", + "value": "gpos" + }, + { + "start": 77200000, + "end": 83257441, + "name": "q25.3", + "value": "gneg" + } + ], + "name": "chr17" + }, + { + "bands": [ + { + "start": 0, + "end": 2900000, + "name": "p11.32", + "value": "gneg" + }, + { + "start": 2900000, + "end": 7200000, + "name": "p11.31", + "value": "gpos" + }, + { + "start": 7200000, + "end": 8500000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 8500000, + "end": 10900000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 10900000, + "end": 15400000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 15400000, + "end": 18500000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 18500000, + "end": 21500000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 21500000, + "end": 27500000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 27500000, + "end": 35100000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 35100000, + "end": 39500000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 39500000, + "end": 45900000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 45900000, + "end": 50700000, + "name": "q21.1", + "value": "gneg" + }, + { + "start": 50700000, + "end": 56200000, + "name": "q21.2", + "value": "gpos" + }, + { + "start": 56200000, + "end": 58600000, + "name": "q21.31", + "value": "gneg" + }, + { + "start": 58600000, + "end": 61300000, + "name": "q21.32", + "value": "gpos" + }, + { + "start": 61300000, + "end": 63900000, + "name": "q21.33", + "value": "gneg" + }, + { + "start": 63900000, + "end": 69100000, + "name": "q22.1", + "value": "gpos" + }, + { + "start": 69100000, + "end": 71000000, + "name": "q22.2", + "value": "gneg" + }, + { + "start": 71000000, + "end": 75400000, + "name": "q22.3", + "value": "gpos" + }, + { + "start": 75400000, + "end": 80373285, + "name": "q23", + "value": "gneg" + } + ], + "name": "chr18" + }, + { + "bands": [ + { + "start": 0, + "end": 6900000, + "name": "p13.3", + "value": "gneg" + }, + { + "start": 6900000, + "end": 12600000, + "name": "p13.2", + "value": "gpos" + }, + { + "start": 12600000, + "end": 13800000, + "name": "p13.13", + "value": "gneg" + }, + { + "start": 13800000, + "end": 16100000, + "name": "p13.12", + "value": "gpos" + }, + { + "start": 16100000, + "end": 19900000, + "name": "p13.11", + "value": "gneg" + }, + { + "start": 19900000, + "end": 24200000, + "name": "p12", + "value": "gvar" + }, + { + "start": 24200000, + "end": 26200000, + "name": "p11", + "value": "acen" + }, + { + "start": 26200000, + "end": 28100000, + "name": "q11", + "value": "acen" + }, + { + "start": 28100000, + "end": 31900000, + "name": "q12", + "value": "gvar" + }, + { + "start": 31900000, + "end": 35100000, + "name": "q13.11", + "value": "gneg" + }, + { + "start": 35100000, + "end": 37800000, + "name": "q13.12", + "value": "gpos" + }, + { + "start": 37800000, + "end": 38200000, + "name": "q13.13", + "value": "gneg" + }, + { + "start": 38200000, + "end": 42900000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 42900000, + "end": 44700000, + "name": "q13.31", + "value": "gneg" + }, + { + "start": 44700000, + "end": 47500000, + "name": "q13.32", + "value": "gpos" + }, + { + "start": 47500000, + "end": 50900000, + "name": "q13.33", + "value": "gneg" + }, + { + "start": 50900000, + "end": 53100000, + "name": "q13.41", + "value": "gpos" + }, + { + "start": 53100000, + "end": 55800000, + "name": "q13.42", + "value": "gneg" + }, + { + "start": 55800000, + "end": 58617616, + "name": "q13.43", + "value": "gpos" + } + ], + "name": "chr19" + }, + { + "bands": [ + { + "start": 0, + "end": 5100000, + "name": "p13", + "value": "gneg" + }, + { + "start": 5100000, + "end": 9200000, + "name": "p12.3", + "value": "gpos" + }, + { + "start": 9200000, + "end": 12000000, + "name": "p12.2", + "value": "gneg" + }, + { + "start": 12000000, + "end": 17900000, + "name": "p12.1", + "value": "gpos" + }, + { + "start": 17900000, + "end": 21300000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 21300000, + "end": 22300000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 22300000, + "end": 25700000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 25700000, + "end": 28100000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 28100000, + "end": 30400000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 30400000, + "end": 33500000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 33500000, + "end": 35800000, + "name": "q11.22", + "value": "gpos" + }, + { + "start": 35800000, + "end": 39000000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 39000000, + "end": 43100000, + "name": "q12", + "value": "gpos" + }, + { + "start": 43100000, + "end": 43500000, + "name": "q13.11", + "value": "gneg" + }, + { + "start": 43500000, + "end": 47800000, + "name": "q13.12", + "value": "gpos" + }, + { + "start": 47800000, + "end": 51200000, + "name": "q13.13", + "value": "gneg" + }, + { + "start": 51200000, + "end": 56400000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 56400000, + "end": 57800000, + "name": "q13.31", + "value": "gneg" + }, + { + "start": 57800000, + "end": 59700000, + "name": "q13.32", + "value": "gpos" + }, + { + "start": 59700000, + "end": 64444167, + "name": "q13.33", + "value": "gneg" + } + ], + "name": "chr20" + }, + { + "bands": [ + { + "start": 0, + "end": 3100000, + "name": "p13", + "value": "gvar" + }, + { + "start": 3100000, + "end": 7000000, + "name": "p12", + "value": "stalk" + }, + { + "start": 7000000, + "end": 10900000, + "name": "p11.2", + "value": "gvar" + }, + { + "start": 10900000, + "end": 12000000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 12000000, + "end": 13000000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 13000000, + "end": 15000000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 15000000, + "end": 22600000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 22600000, + "end": 25500000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 25500000, + "end": 30200000, + "name": "q21.3", + "value": "gpos" + }, + { + "start": 30200000, + "end": 34400000, + "name": "q22.11", + "value": "gneg" + }, + { + "start": 34400000, + "end": 36400000, + "name": "q22.12", + "value": "gpos" + }, + { + "start": 36400000, + "end": 38300000, + "name": "q22.13", + "value": "gneg" + }, + { + "start": 38300000, + "end": 41200000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 41200000, + "end": 46709983, + "name": "q22.3", + "value": "gneg" + } + ], + "name": "chr21" + }, + { + "bands": [ + { + "start": 0, + "end": 4300000, + "name": "p13", + "value": "gvar" + }, + { + "start": 4300000, + "end": 9400000, + "name": "p12", + "value": "stalk" + }, + { + "start": 9400000, + "end": 13700000, + "name": "p11.2", + "value": "gvar" + }, + { + "start": 13700000, + "end": 15000000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 15000000, + "end": 17400000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 17400000, + "end": 21700000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 21700000, + "end": 23100000, + "name": "q11.22", + "value": "gpos" + }, + { + "start": 23100000, + "end": 25500000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 25500000, + "end": 29200000, + "name": "q12.1", + "value": "gpos" + }, + { + "start": 29200000, + "end": 31800000, + "name": "q12.2", + "value": "gneg" + }, + { + "start": 31800000, + "end": 37200000, + "name": "q12.3", + "value": "gpos" + }, + { + "start": 37200000, + "end": 40600000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 40600000, + "end": 43800000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 43800000, + "end": 48100000, + "name": "q13.31", + "value": "gneg" + }, + { + "start": 48100000, + "end": 49100000, + "name": "q13.32", + "value": "gpos" + }, + { + "start": 49100000, + "end": 50818468, + "name": "q13.33", + "value": "gneg" + } + ], + "name": "chr22" + }, + { + "bands": [ + { + "start": 0, + "end": 4400000, + "name": "p22.33", + "value": "gneg" + }, + { + "start": 4400000, + "end": 6100000, + "name": "p22.32", + "value": "gpos" + }, + { + "start": 6100000, + "end": 9600000, + "name": "p22.31", + "value": "gneg" + }, + { + "start": 9600000, + "end": 17400000, + "name": "p22.2", + "value": "gpos" + }, + { + "start": 17400000, + "end": 19200000, + "name": "p22.13", + "value": "gneg" + }, + { + "start": 19200000, + "end": 21900000, + "name": "p22.12", + "value": "gpos" + }, + { + "start": 21900000, + "end": 24900000, + "name": "p22.11", + "value": "gneg" + }, + { + "start": 24900000, + "end": 29300000, + "name": "p21.3", + "value": "gpos" + }, + { + "start": 29300000, + "end": 31500000, + "name": "p21.2", + "value": "gneg" + }, + { + "start": 31500000, + "end": 37800000, + "name": "p21.1", + "value": "gpos" + }, + { + "start": 37800000, + "end": 42500000, + "name": "p11.4", + "value": "gneg" + }, + { + "start": 42500000, + "end": 47600000, + "name": "p11.3", + "value": "gpos" + }, + { + "start": 47600000, + "end": 50100000, + "name": "p11.23", + "value": "gneg" + }, + { + "start": 50100000, + "end": 54800000, + "name": "p11.22", + "value": "gpos" + }, + { + "start": 54800000, + "end": 58100000, + "name": "p11.21", + "value": "gneg" + }, + { + "start": 58100000, + "end": 61000000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 61000000, + "end": 63800000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 63800000, + "end": 65400000, + "name": "q11.2", + "value": "gneg" + }, + { + "start": 65400000, + "end": 68500000, + "name": "q12", + "value": "gpos" + }, + { + "start": 68500000, + "end": 73000000, + "name": "q13.1", + "value": "gneg" + }, + { + "start": 73000000, + "end": 74700000, + "name": "q13.2", + "value": "gpos" + }, + { + "start": 74700000, + "end": 76800000, + "name": "q13.3", + "value": "gneg" + }, + { + "start": 76800000, + "end": 85400000, + "name": "q21.1", + "value": "gpos" + }, + { + "start": 85400000, + "end": 87000000, + "name": "q21.2", + "value": "gneg" + }, + { + "start": 87000000, + "end": 92700000, + "name": "q21.31", + "value": "gpos" + }, + { + "start": 92700000, + "end": 94300000, + "name": "q21.32", + "value": "gneg" + }, + { + "start": 94300000, + "end": 99100000, + "name": "q21.33", + "value": "gpos" + }, + { + "start": 99100000, + "end": 103300000, + "name": "q22.1", + "value": "gneg" + }, + { + "start": 103300000, + "end": 104500000, + "name": "q22.2", + "value": "gpos" + }, + { + "start": 104500000, + "end": 109400000, + "name": "q22.3", + "value": "gneg" + }, + { + "start": 109400000, + "end": 117400000, + "name": "q23", + "value": "gpos" + }, + { + "start": 117400000, + "end": 121800000, + "name": "q24", + "value": "gneg" + }, + { + "start": 121800000, + "end": 129500000, + "name": "q25", + "value": "gpos" + }, + { + "start": 129500000, + "end": 131300000, + "name": "q26.1", + "value": "gneg" + }, + { + "start": 131300000, + "end": 134500000, + "name": "q26.2", + "value": "gpos" + }, + { + "start": 134500000, + "end": 138900000, + "name": "q26.3", + "value": "gneg" + }, + { + "start": 138900000, + "end": 141200000, + "name": "q27.1", + "value": "gpos" + }, + { + "start": 141200000, + "end": 143000000, + "name": "q27.2", + "value": "gneg" + }, + { + "start": 143000000, + "end": 148000000, + "name": "q27.3", + "value": "gpos" + }, + { + "start": 148000000, + "end": 156040895, + "name": "q28", + "value": "gneg" + } + ], + "name": "chrX" + }, + { + "bands": [ + { + "start": 0, + "end": 300000, + "name": "p11.32", + "value": "gneg" + }, + { + "start": 300000, + "end": 600000, + "name": "p11.31", + "value": "gpos" + }, + { + "start": 600000, + "end": 10300000, + "name": "p11.2", + "value": "gneg" + }, + { + "start": 10300000, + "end": 10400000, + "name": "p11.1", + "value": "acen" + }, + { + "start": 10400000, + "end": 10600000, + "name": "q11.1", + "value": "acen" + }, + { + "start": 10600000, + "end": 12400000, + "name": "q11.21", + "value": "gneg" + }, + { + "start": 12400000, + "end": 17100000, + "name": "q11.221", + "value": "gpos" + }, + { + "start": 17100000, + "end": 19600000, + "name": "q11.222", + "value": "gneg" + }, + { + "start": 19600000, + "end": 23800000, + "name": "q11.223", + "value": "gpos" + }, + { + "start": 23800000, + "end": 26600000, + "name": "q11.23", + "value": "gneg" + }, + { + "start": 26600000, + "end": 57227415, + "name": "q12", + "value": "gvar" + } + ], + "name": "chrY" + } +] \ No newline at end of file