UNPKG

myseq-vcf

Version:

Query local or remote Tabix-indexed VCFs by genomic position

1,130 lines (1,094 loc) 22.6 kB
"use strict"; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const difference = require('lodash/difference'); const hg38SeqDict = require('./hg38SeqDict'); class ReferenceGenome { constructor(shortName, leadingChr, seqDict, liftoverTo = {}) { _defineProperty(this, "shortName", void 0); _defineProperty(this, "leadingChr", void 0); _defineProperty(this, "_seqDict", void 0); _defineProperty(this, "_liftoverTo", void 0); // Not currently supported in Babel: https://github.com/babel/babel/issues/1088 // if (new.target === ReferenceGenome) { // throw new Error("Cannot construct ReferenceGenome instances directly"); // } this.shortName = shortName; this.leadingChr = leadingChr; this._seqDict = seqDict; this._liftoverTo = liftoverTo; } /** * Normalize contig name for current reference, e.g. convert chr1 to 1 * @param {string} contig Contig name * @return {string} Normalized contig name */ normalizeContig(contig) { if (Object.prototype.hasOwnProperty.call(this._seqDict, contig)) { return contig; } // Translate contigs from other references to this reference const lifted = this._liftoverTo[contig]; if (lifted === undefined) { throw new RangeError(`Unknown contig: ${contig}`); } return lifted; } /** * Compare contigs in reference order * @param {string} lhsContig Contig name * @param {string} rhsContig Contig name * @return {number} A negative number the lhsContig is reference-less * than rhsContig; positive if reference greater; 0 * if they are the same. */ compareContig(lhsContig, rhsContig) { if (lhsContig === rhsContig) { return 0; } const lhs = this._seqDict[lhsContig]; const rhs = this._seqDict[rhsContig]; if (!lhs || !rhs) { throw new RangeError(`One or more unknown contigs: ${lhsContig} or ${rhsContig}`); } return lhs.order - rhs.order; } contigs() { return Object.keys(this._seqDict); } } const hg19SeqDict = { chrM: { LN: 16571, M5: 'd2ed829b8a1628d16cbeee88e88e39eb', order: 0 }, chr1: { LN: 249250621, M5: '1b22b98cdeb4a9304cb5d48026a85128', order: 1 }, chr2: { LN: 243199373, M5: 'a0d9851da00400dec1098a9255ac712e', order: 2 }, chr3: { LN: 198022430, M5: '641e4338fa8d52a5b781bd2a2c08d3c3', order: 3 }, chr4: { LN: 191154276, M5: '23dccd106897542ad87d2765d28a19a1', order: 4 }, chr5: { LN: 180915260, M5: '0740173db9ffd264d728f32784845cd7', order: 5 }, chr6: { LN: 171115067, M5: '1d3a93a248d92a729ee764823acbbc6b', order: 6 }, chr7: { LN: 159138663, M5: '618366e953d6aaad97dbe4777c29375e', order: 7 }, chr8: { LN: 146364022, M5: '96f514a9929e410c6651697bded59aec', order: 8 }, chr9: { LN: 141213431, M5: '3e273117f15e0a400f01055d9f393768', order: 9 }, chr10: { LN: 135534747, M5: '988c28e000e84c26d552359af1ea2e1d', order: 10 }, chr11: { LN: 135006516, M5: '98c59049a2df285c76ffb1c6db8f8b96', order: 11 }, chr12: { LN: 133851895, M5: '51851ac0e1a115847ad36449b0015864', order: 12 }, chr13: { LN: 115169878, M5: '283f8d7892baa81b510a015719ca7b0b', order: 13 }, chr14: { LN: 107349540, M5: '98f3cae32b2a2e9524bc19813927542e', order: 14 }, chr15: { LN: 102531392, M5: 'e5645a794a8238215b2cd77acb95a078', order: 15 }, chr16: { LN: 90354753, M5: 'fc9b1a7b42b97a864f56b348b06095e6', order: 16 }, chr17: { LN: 81195210, M5: '351f64d4f4f9ddd45b35336ad97aa6de', order: 17 }, chr18: { LN: 78077248, M5: 'b15d4b2d29dde9d3e4f93d1d0f2cbc9c', order: 18 }, chr19: { LN: 59128983, M5: '1aacd71f30db8e561810913e0b72636d', order: 19 }, chr20: { LN: 63025520, M5: '0dec9660ec1efaaf33281c0d5ea2560f', order: 20 }, chr21: { LN: 48129895, M5: '2979a6085bfe28e3ad6f552f361ed74d', order: 21 }, chr22: { LN: 51304566, M5: 'a718acaa6135fdca8357d5bfe94211dd', order: 22 }, chrX: { LN: 155270560, M5: '7e0e2e580297b7764e31dbc80c2540dd', order: 23 }, chrY: { LN: 59373566, M5: '1e86411d73e6f00a10590f976be01623', order: 24 }, chr1_gl000191_random: { LN: 106433, M5: 'd75b436f50a8214ee9c2a51d30b2c2cc', order: 25 }, chr1_gl000192_random: { LN: 547496, M5: '325ba9e808f669dfeee210fdd7b470ac', order: 26 }, chr4_ctg9_hap1: { LN: 590426, M5: 'fa24f81b680df26bcfb6d69b784fbe36', order: 27 }, chr4_gl000193_random: { LN: 189789, M5: 'dbb6e8ece0b5de29da56601613007c2a', order: 28 }, chr4_gl000194_random: { LN: 191469, M5: '6ac8f815bf8e845bb3031b73f812c012', order: 29 }, chr6_apd_hap1: { LN: 4622290, M5: 'fe71bc63420d666884f37a3ad79f3317', order: 30 }, chr6_cox_hap2: { LN: 4795371, M5: '18c17e1641ef04873b15f40f6c8659a4', order: 31 }, chr6_dbb_hap3: { LN: 4610396, M5: '2a3c677c426a10e137883ae1ffb8da3f', order: 32 }, chr6_mann_hap4: { LN: 4683263, M5: '9d51d4152174461cd6715c7ddc588dc8', order: 33 }, chr6_mcf_hap5: { LN: 4833398, M5: 'efed415dd8742349cb7aaca054675b9a', order: 34 }, chr6_qbl_hap6: { LN: 4611984, M5: '094d037050cad692b57ea12c4fef790f', order: 35 }, chr6_ssto_hap7: { LN: 4928567, M5: '3b6d666200e72bcc036bf88a4d7e0749', order: 36 }, chr7_gl000195_random: { LN: 182896, M5: '5d9ec007868d517e73543b005ba48535', order: 37 }, chr8_gl000196_random: { LN: 38914, M5: 'd92206d1bb4c3b4019c43c0875c06dc0', order: 38 }, chr8_gl000197_random: { LN: 37175, M5: '6f5efdd36643a9b8c8ccad6f2f1edc7b', order: 39 }, chr9_gl000198_random: { LN: 90085, M5: '868e7784040da90d900d2d1b667a1383', order: 40 }, chr9_gl000199_random: { LN: 169874, M5: '569af3b73522fab4b40995ae4944e78e', order: 41 }, chr9_gl000200_random: { LN: 187035, M5: '75e4c8d17cd4addf3917d1703cacaf25', order: 42 }, chr9_gl000201_random: { LN: 36148, M5: 'dfb7e7ec60ffdcb85cb359ea28454ee9', order: 43 }, chr11_gl000202_random: { LN: 40103, M5: '06cbf126247d89664a4faebad130fe9c', order: 44 }, chr17_ctg5_hap1: { LN: 1680828, M5: 'd89517b400226d3b56e753972a7cad67', order: 45 }, chr17_gl000203_random: { LN: 37498, M5: '96358c325fe0e70bee73436e8bb14dbd', order: 46 }, chr17_gl000204_random: { LN: 81310, M5: 'efc49c871536fa8d79cb0a06fa739722', order: 47 }, chr17_gl000205_random: { LN: 174588, M5: 'd22441398d99caf673e9afb9a1908ec5', order: 48 }, chr17_gl000206_random: { LN: 41001, M5: '43f69e423533e948bfae5ce1d45bd3f1', order: 49 }, chr18_gl000207_random: { LN: 4262, M5: 'f3814841f1939d3ca19072d9e89f3fd7', order: 50 }, chr19_gl000208_random: { LN: 92689, M5: 'aa81be49bf3fe63a79bdc6a6f279abf6', order: 51 }, chr19_gl000209_random: { LN: 159169, M5: 'f40598e2a5a6b26e84a3775e0d1e2c81', order: 52 }, chr21_gl000210_random: { LN: 27682, M5: '851106a74238044126131ce2a8e5847c', order: 53 }, chrUn_gl000211: { LN: 166566, M5: '7daaa45c66b288847b9b32b964e623d3', order: 54 }, chrUn_gl000212: { LN: 186858, M5: '563531689f3dbd691331fd6c5730a88b', order: 55 }, chrUn_gl000213: { LN: 164239, M5: '9d424fdcc98866650b58f004080a992a', order: 56 }, chrUn_gl000214: { LN: 137718, M5: '46c2032c37f2ed899eb41c0473319a69', order: 57 }, chrUn_gl000215: { LN: 172545, M5: '5eb3b418480ae67a997957c909375a73', order: 58 }, chrUn_gl000216: { LN: 172294, M5: '642a232d91c486ac339263820aef7fe0', order: 59 }, chrUn_gl000217: { LN: 172149, M5: '6d243e18dea1945fb7f2517615b8f52e', order: 60 }, chrUn_gl000218: { LN: 161147, M5: '1d708b54644c26c7e01c2dad5426d38c', order: 61 }, chrUn_gl000219: { LN: 179198, M5: 'f977edd13bac459cb2ed4a5457dba1b3', order: 62 }, chrUn_gl000220: { LN: 161802, M5: 'fc35de963c57bf7648429e6454f1c9db', order: 63 }, chrUn_gl000221: { LN: 155397, M5: '3238fb74ea87ae857f9c7508d315babb', order: 64 }, chrUn_gl000222: { LN: 186861, M5: '6fe9abac455169f50470f5a6b01d0f59', order: 65 }, chrUn_gl000223: { LN: 180455, M5: '399dfa03bf32022ab52a846f7ca35b30', order: 66 }, chrUn_gl000224: { LN: 179693, M5: 'd5b2fc04f6b41b212a4198a07f450e20', order: 67 }, chrUn_gl000225: { LN: 211173, M5: '63945c3e6962f28ffd469719a747e73c', order: 68 }, chrUn_gl000226: { LN: 15008, M5: '1c1b2cd1fccbc0a99b6a447fa24d1504', order: 69 }, chrUn_gl000227: { LN: 128374, M5: 'a4aead23f8053f2655e468bcc6ecdceb', order: 70 }, chrUn_gl000228: { LN: 129120, M5: 'c5a17c97e2c1a0b6a9cc5a6b064b714f', order: 71 }, chrUn_gl000229: { LN: 19913, M5: 'd0f40ec87de311d8e715b52e4c7062e1', order: 72 }, chrUn_gl000230: { LN: 43691, M5: 'b4eb71ee878d3706246b7c1dbef69299', order: 73 }, chrUn_gl000231: { LN: 27386, M5: 'ba8882ce3a1efa2080e5d29b956568a4', order: 74 }, chrUn_gl000232: { LN: 40652, M5: '3e06b6741061ad93a8587531307057d8', order: 75 }, chrUn_gl000233: { LN: 45941, M5: '7fed60298a8d62ff808b74b6ce820001', order: 76 }, chrUn_gl000234: { LN: 40531, M5: '93f998536b61a56fd0ff47322a911d4b', order: 77 }, chrUn_gl000235: { LN: 34474, M5: '118a25ca210cfbcdfb6c2ebb249f9680', order: 78 }, chrUn_gl000236: { LN: 41934, M5: 'fdcd739913efa1fdc64b6c0cd7016779', order: 79 }, chrUn_gl000237: { LN: 45867, M5: 'e0c82e7751df73f4f6d0ed30cdc853c0', order: 80 }, chrUn_gl000238: { LN: 39939, M5: '131b1efc3270cc838686b54e7c34b17b', order: 81 }, chrUn_gl000239: { LN: 33824, M5: '99795f15702caec4fa1c4e15f8a29c07', order: 82 }, chrUn_gl000240: { LN: 41933, M5: '445a86173da9f237d7bcf41c6cb8cc62', order: 83 }, chrUn_gl000241: { LN: 42152, M5: 'ef4258cdc5a45c206cea8fc3e1d858cf', order: 84 }, chrUn_gl000242: { LN: 43523, M5: '2f8694fc47576bc81b5fe9e7de0ba49e', order: 85 }, chrUn_gl000243: { LN: 43341, M5: 'cc34279a7e353136741c9fce79bc4396', order: 86 }, chrUn_gl000244: { LN: 39929, M5: '0996b4475f353ca98bacb756ac479140', order: 87 }, chrUn_gl000245: { LN: 36651, M5: '89bc61960f37d94abf0df2d481ada0ec', order: 88 }, chrUn_gl000246: { LN: 38154, M5: 'e4afcd31912af9d9c2546acf1cb23af2', order: 89 }, chrUn_gl000247: { LN: 36422, M5: '7de00226bb7df1c57276ca6baabafd15', order: 90 }, chrUn_gl000248: { LN: 39786, M5: '5a8e43bec9be36c7b49c84d585107776', order: 91 }, chrUn_gl000249: { LN: 38502, M5: '1d78abec37c15fe29a275eb08d5af236', order: 92 } }; const liftToHg19 = { MT: 'chrM', 1: 'chr1', 2: 'chr2', 3: 'chr3', 4: 'chr4', 5: 'chr5', 6: 'chr6', 7: 'chr7', 8: 'chr8', 9: 'chr9', 10: 'chr10', 11: 'chr11', 12: 'chr12', 13: 'chr13', 14: 'chr14', 15: 'chr15', 16: 'chr16', 17: 'chr17', 18: 'chr18', 19: 'chr19', 20: 'chr20', 21: 'chr21', 22: 'chr22', X: 'chrX', Y: 'chrY' }; class Hg19Reference extends ReferenceGenome { constructor() { super('hg19', true, hg19SeqDict, liftToHg19); } } const b37SeqDict = { 1: { LN: 249250621, M5: '1b22b98cdeb4a9304cb5d48026a85128', order: 0 }, 2: { LN: 243199373, M5: 'a0d9851da00400dec1098a9255ac712e', order: 1 }, 3: { LN: 198022430, M5: 'fdfd811849cc2fadebc929bb925902e5', order: 2 }, 4: { LN: 191154276, M5: '23dccd106897542ad87d2765d28a19a1', order: 3 }, 5: { LN: 180915260, M5: '0740173db9ffd264d728f32784845cd7', order: 4 }, 6: { LN: 171115067, M5: '1d3a93a248d92a729ee764823acbbc6b', order: 5 }, 7: { LN: 159138663, M5: '618366e953d6aaad97dbe4777c29375e', order: 6 }, 8: { LN: 146364022, M5: '96f514a9929e410c6651697bded59aec', order: 7 }, 9: { LN: 141213431, M5: '3e273117f15e0a400f01055d9f393768', order: 8 }, 10: { LN: 135534747, M5: '988c28e000e84c26d552359af1ea2e1d', order: 9 }, 11: { LN: 135006516, M5: '98c59049a2df285c76ffb1c6db8f8b96', order: 10 }, 12: { LN: 133851895, M5: '51851ac0e1a115847ad36449b0015864', order: 11 }, 13: { LN: 115169878, M5: '283f8d7892baa81b510a015719ca7b0b', order: 12 }, 14: { LN: 107349540, M5: '98f3cae32b2a2e9524bc19813927542e', order: 13 }, 15: { LN: 102531392, M5: 'e5645a794a8238215b2cd77acb95a078', order: 14 }, 16: { LN: 90354753, M5: 'fc9b1a7b42b97a864f56b348b06095e6', order: 15 }, 17: { LN: 81195210, M5: '351f64d4f4f9ddd45b35336ad97aa6de', order: 16 }, 18: { LN: 78077248, M5: 'b15d4b2d29dde9d3e4f93d1d0f2cbc9c', order: 17 }, 19: { LN: 59128983, M5: '1aacd71f30db8e561810913e0b72636d', order: 18 }, 20: { LN: 63025520, M5: '0dec9660ec1efaaf33281c0d5ea2560f', order: 19 }, 21: { LN: 48129895, M5: '2979a6085bfe28e3ad6f552f361ed74d', order: 20 }, 22: { LN: 51304566, M5: 'a718acaa6135fdca8357d5bfe94211dd', order: 21 }, X: { LN: 155270560, M5: '7e0e2e580297b7764e31dbc80c2540dd', order: 22 }, Y: { LN: 59373566, M5: '1fa3474750af0948bdf97d5a0ee52e51', order: 23 }, MT: { LN: 16569, M5: 'c68f52674c9fb33aef52dcf399755519', order: 24 }, 'GL000207.1': { LN: 4262, M5: 'f3814841f1939d3ca19072d9e89f3fd7', order: 25 }, 'GL000226.1': { LN: 15008, M5: '1c1b2cd1fccbc0a99b6a447fa24d1504', order: 26 }, 'GL000229.1': { LN: 19913, M5: 'd0f40ec87de311d8e715b52e4c7062e1', order: 27 }, 'GL000231.1': { LN: 27386, M5: 'ba8882ce3a1efa2080e5d29b956568a4', order: 28 }, 'GL000210.1': { LN: 27682, M5: '851106a74238044126131ce2a8e5847c', order: 29 }, 'GL000239.1': { LN: 33824, M5: '99795f15702caec4fa1c4e15f8a29c07', order: 30 }, 'GL000235.1': { LN: 34474, M5: '118a25ca210cfbcdfb6c2ebb249f9680', order: 31 }, 'GL000201.1': { LN: 36148, M5: 'dfb7e7ec60ffdcb85cb359ea28454ee9', order: 32 }, 'GL000247.1': { LN: 36422, M5: '7de00226bb7df1c57276ca6baabafd15', order: 33 }, 'GL000245.1': { LN: 36651, M5: '89bc61960f37d94abf0df2d481ada0ec', order: 34 }, 'GL000197.1': { LN: 37175, M5: '6f5efdd36643a9b8c8ccad6f2f1edc7b', order: 35 }, 'GL000203.1': { LN: 37498, M5: '96358c325fe0e70bee73436e8bb14dbd', order: 36 }, 'GL000246.1': { LN: 38154, M5: 'e4afcd31912af9d9c2546acf1cb23af2', order: 37 }, 'GL000249.1': { LN: 38502, M5: '1d78abec37c15fe29a275eb08d5af236', order: 38 }, 'GL000196.1': { LN: 38914, M5: 'd92206d1bb4c3b4019c43c0875c06dc0', order: 39 }, 'GL000248.1': { LN: 39786, M5: '5a8e43bec9be36c7b49c84d585107776', order: 40 }, 'GL000244.1': { LN: 39929, M5: '0996b4475f353ca98bacb756ac479140', order: 41 }, 'GL000238.1': { LN: 39939, M5: '131b1efc3270cc838686b54e7c34b17b', order: 42 }, 'GL000202.1': { LN: 40103, M5: '06cbf126247d89664a4faebad130fe9c', order: 43 }, 'GL000234.1': { LN: 40531, M5: '93f998536b61a56fd0ff47322a911d4b', order: 44 }, 'GL000232.1': { LN: 40652, M5: '3e06b6741061ad93a8587531307057d8', order: 45 }, 'GL000206.1': { LN: 41001, M5: '43f69e423533e948bfae5ce1d45bd3f1', order: 46 }, 'GL000240.1': { LN: 41933, M5: '445a86173da9f237d7bcf41c6cb8cc62', order: 47 }, 'GL000236.1': { LN: 41934, M5: 'fdcd739913efa1fdc64b6c0cd7016779', order: 48 }, 'GL000241.1': { LN: 42152, M5: 'ef4258cdc5a45c206cea8fc3e1d858cf', order: 49 }, 'GL000243.1': { LN: 43341, M5: 'cc34279a7e353136741c9fce79bc4396', order: 50 }, 'GL000242.1': { LN: 43523, M5: '2f8694fc47576bc81b5fe9e7de0ba49e', order: 51 }, 'GL000230.1': { LN: 43691, M5: 'b4eb71ee878d3706246b7c1dbef69299', order: 52 }, 'GL000237.1': { LN: 45867, M5: 'e0c82e7751df73f4f6d0ed30cdc853c0', order: 53 }, 'GL000233.1': { LN: 45941, M5: '7fed60298a8d62ff808b74b6ce820001', order: 54 }, 'GL000204.1': { LN: 81310, M5: 'efc49c871536fa8d79cb0a06fa739722', order: 55 }, 'GL000198.1': { LN: 90085, M5: '868e7784040da90d900d2d1b667a1383', order: 56 }, 'GL000208.1': { LN: 92689, M5: 'aa81be49bf3fe63a79bdc6a6f279abf6', order: 57 }, 'GL000191.1': { LN: 106433, M5: 'd75b436f50a8214ee9c2a51d30b2c2cc', order: 58 }, 'GL000227.1': { LN: 128374, M5: 'a4aead23f8053f2655e468bcc6ecdceb', order: 59 }, 'GL000228.1': { LN: 129120, M5: 'c5a17c97e2c1a0b6a9cc5a6b064b714f', order: 60 }, 'GL000214.1': { LN: 137718, M5: '46c2032c37f2ed899eb41c0473319a69', order: 61 }, 'GL000221.1': { LN: 155397, M5: '3238fb74ea87ae857f9c7508d315babb', order: 62 }, 'GL000209.1': { LN: 159169, M5: 'f40598e2a5a6b26e84a3775e0d1e2c81', order: 63 }, 'GL000218.1': { LN: 161147, M5: '1d708b54644c26c7e01c2dad5426d38c', order: 64 }, 'GL000220.1': { LN: 161802, M5: 'fc35de963c57bf7648429e6454f1c9db', order: 65 }, 'GL000213.1': { LN: 164239, M5: '9d424fdcc98866650b58f004080a992a', order: 66 }, 'GL000211.1': { LN: 166566, M5: '7daaa45c66b288847b9b32b964e623d3', order: 67 }, 'GL000199.1': { LN: 169874, M5: '569af3b73522fab4b40995ae4944e78e', order: 68 }, 'GL000217.1': { LN: 172149, M5: '6d243e18dea1945fb7f2517615b8f52e', order: 69 }, 'GL000216.1': { LN: 172294, M5: '642a232d91c486ac339263820aef7fe0', order: 70 }, 'GL000215.1': { LN: 172545, M5: '5eb3b418480ae67a997957c909375a73', order: 71 }, 'GL000205.1': { LN: 174588, M5: 'd22441398d99caf673e9afb9a1908ec5', order: 72 }, 'GL000219.1': { LN: 179198, M5: 'f977edd13bac459cb2ed4a5457dba1b3', order: 73 }, 'GL000224.1': { LN: 179693, M5: 'd5b2fc04f6b41b212a4198a07f450e20', order: 74 }, 'GL000223.1': { LN: 180455, M5: '399dfa03bf32022ab52a846f7ca35b30', order: 75 }, 'GL000195.1': { LN: 182896, M5: '5d9ec007868d517e73543b005ba48535', order: 76 }, 'GL000212.1': { LN: 186858, M5: '563531689f3dbd691331fd6c5730a88b', order: 77 }, 'GL000222.1': { LN: 186861, M5: '6fe9abac455169f50470f5a6b01d0f59', order: 78 }, 'GL000200.1': { LN: 187035, M5: '75e4c8d17cd4addf3917d1703cacaf25', order: 79 }, 'GL000193.1': { LN: 189789, M5: 'dbb6e8ece0b5de29da56601613007c2a', order: 80 }, 'GL000194.1': { LN: 191469, M5: '6ac8f815bf8e845bb3031b73f812c012', order: 81 }, 'GL000225.1': { LN: 211173, M5: '63945c3e6962f28ffd469719a747e73c', order: 82 }, 'GL000192.1': { LN: 547496, M5: '325ba9e808f669dfeee210fdd7b470ac', order: 83 } }; const liftToB37 = { chrM: 'MT', chr1: '1', chr2: '2', chr3: '3', chr4: '4', chr5: '5', chr6: '6', chr7: '7', chr8: '8', chr9: '9', chr10: '11', chr11: '11', chr12: '12', chr13: '13', chr14: '14', chr15: '15', chr16: '16', chr17: '17', chr18: '18', chr19: '19', chr20: '20', chr21: '21', chr22: '22', chrX: 'X', chrY: 'Y' }; class B37Reference extends ReferenceGenome { constructor() { super('b37', false, b37SeqDict, liftToB37); } } const liftToHg38 = { MT: 'chrM', 1: 'chr1', 2: 'chr2', 3: 'chr3', 4: 'chr4', 5: 'chr5', 6: 'chr6', 7: 'chr7', 8: 'chr8', 9: 'chr9', 10: 'chr10', 11: 'chr11', 12: 'chr12', 13: 'chr13', 14: 'chr14', 15: 'chr15', 16: 'chr16', 17: 'chr17', 18: 'chr18', 19: 'chr19', 20: 'chr20', 21: 'chr21', 22: 'chr22', X: 'chrX', Y: 'chrY' }; class Hg38Reference extends ReferenceGenome { constructor() { super('hg38', true, hg38SeqDict, liftToHg38); } } const hg19Reference = new Hg19Reference(); const b37Reference = new B37Reference(); const hg38Reference = new Hg38Reference(); const fileNamesToRef = { 'human_g1k_v37.fasta': b37Reference, 'human_g1k_v37.fasta.gz': b37Reference, 'human_g1k_v37.fa': b37Reference, 'human_g1k_v37.fa.gz': b37Reference, 'GRCh37.fasta': b37Reference, 'GRCh37.fasta.gz': b37Reference, 'GRCh37.fa': b37Reference, 'GRCh37.fa.gz': b37Reference, 'ucsc.hg19.fasta': hg19Reference, 'ucsc.hg19.fasta.gz': hg19Reference, 'ucsc.hg19.fa': hg19Reference, 'ucsc.hg19.fa.gz': hg19Reference, 'hg19.fasta': hg19Reference, 'hg19.fasta.gz': hg19Reference, 'hg19.fa': hg19Reference, 'hg19.fa.gz': hg19Reference, 'Homo_sapiens_assembly38.fasta': hg38Reference, 'Homo_sapiens_assembly38.fasta.gz': hg38Reference, 'Homo_sapiens_assembly38.fa': hg38Reference, 'Homo_sapiens_assembly38.fa.gz': hg38Reference, 'hs37d5.fasta': b37Reference, 'hs37d5.fasta.gz': b37Reference, 'hs37d5.fa': b37Reference, 'hs37d5.fa.gz': b37Reference }; const references = [hg19Reference, b37Reference, hg38Reference]; const shortNameToRef = { hg19: hg19Reference, b37: b37Reference, hg38: hg38Reference, 'GRCh38.p2': hg38Reference }; module.exports = { ReferenceGenome, hg19Reference, b37Reference, hg38Reference, referenceFromFile(filename) { return fileNamesToRef[filename.split(/[\\/]/).pop()]; }, referenceFromContigs(contigs) { const possibleRefs = references.filter(ref => difference(contigs, ref.contigs()).length === 0); // Only return reference if we generate a unique match return possibleRefs.length === 1 ? possibleRefs[0] : undefined; }, referenceFromShortName(shortName) { return shortNameToRef[shortName]; } };