/*
* The MIT License
*
* Copyright (c) 2009 The Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package htsjdk.samtools.liftover;
import htsjdk.samtools.util.Interval;
import htsjdk.samtools.util.OverlapDetector;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.File;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* @author alecw@broadinstitute.org
*/
public class LiftOverTest {
private static final File TEST_DATA_DIR = new File("testdata/htsjdk/samtools/liftover");
private static final File CHAIN_FILE = new File(TEST_DATA_DIR, "hg18ToHg19.over.chain");
private LiftOver liftOver;
@BeforeClass
public void initLiftOver() {
liftOver = new LiftOver(CHAIN_FILE);
}
@Test(dataProvider = "testIntervals")
public void testBasic(final Interval in, final Interval expected) {
final Interval out = liftOver.liftOver(in);
Assert.assertEquals(out, expected);
}
@DataProvider(name = "testIntervals")
public Object[][] makeTestIntervals() {
return new Object[][] {
{new Interval("chr3", 50911035, 50911051), null},
{new Interval("chr1", 16776377, 16776452), new Interval("chr1", 16903790, 16903865)},
{new Interval("chr2", 30575990, 30576065), new Interval("chr2", 30722486, 30722561)},
{new Interval("chr3", 12157217, 12157292), new Interval("chr3", 12182217, 12182292)},
{new Interval("chr4", 12503121, 12503196), new Interval("chr4", 12894023, 12894098)},
{new Interval("chr5", 13970930, 13971005), new Interval("chr5", 13917930, 13918005)},
{new Interval("chr6", 13838774, 13838849), new Interval("chr6", 13730795, 13730870)},
{new Interval("chr7", 23978336, 23978411), new Interval("chr7", 24011811, 24011886)},
{new Interval("chr8", 13337368, 13337443), new Interval("chr8", 13292997, 13293072)},
{new Interval("chr9", 35059282, 35059357), new Interval("chr9", 35069282, 35069357)},
{new Interval("chr10", 7893794, 7893869), new Interval("chr10", 7853788, 7853863)},
{new Interval("chr11", 17365784, 17365859), new Interval("chr11", 17409208, 17409283)},
{new Interval("chr12", 4530193, 4530268), new Interval("chr12", 4659932, 4660007)},
{new Interval("chr13", 29398707, 29398782), new Interval("chr13", 30500707, 30500782)},
{new Interval("chr14", 22955252, 22955327), new Interval("chr14", 23885412, 23885487)},
{new Interval("chr15", 27477379, 27477454), new Interval("chr15", 29690087, 29690162)},
{new Interval("chr16", 13016380, 13016455), new Interval("chr16", 13108879, 13108954)},
{new Interval("chr17", 28318218, 28318293), new Interval("chr17", 31294105, 31294180)},
{new Interval("chr18", 42778225, 42778300), new Interval("chr18", 44524227, 44524302)},
{new Interval("chr19", 8340119, 8340194), new Interval("chr19", 8434119, 8434194)},
{new Interval("chr20", 39749226, 39749301), new Interval("chr20", 40315812, 40315887)},
{new Interval("chr21", 20945136, 20945211), new Interval("chr21", 22023265, 22023340)},
{new Interval("chr22", 32307031, 32307106), new Interval("chr22", 33977031, 33977106)},
{new Interval("chrX", 34252958, 34253033) , new Interval("chrX", 34343037, 34343112)},
// Sampling from /seq/references/HybSelOligos/whole_exome_refseq_coding/whole_exome_refseq_coding.targets.interval_list
{new Interval("chr1", 58952, 59873), new Interval("chr1", 69089, 70010)},
{new Interval("chr1", 7733844, 7734041), new Interval("chr1", 7811257, 7811454)},
{new Interval("chr1", 16261179, 16261276), new Interval("chr1", 16388592, 16388689)},
{new Interval("chr1", 23634929, 23635110), new Interval("chr1", 23762342, 23762523)},
{new Interval("chr1", 31910910, 31911030), new Interval("chr1", 32138323, 32138443)},
{new Interval("chr1", 39686851, 39687024), new Interval("chr1", 39914264, 39914437)},
{new Interval("chr1", 46434068, 46434185), new Interval("chr1", 46661481, 46661598)},
{new Interval("chr1", 60102890, 60102928), new Interval("chr1", 60330302, 60330340)},
{new Interval("chr1", 84734151, 84734336), new Interval("chr1", 84961563, 84961748)},
{new Interval("chr1", 100529545, 100529650), new Interval("chr1", 100756957, 100757062)},
{new Interval("chr1", 114771320, 114771441), new Interval("chr1", 114969797, 114969918)},
{new Interval("chr1", 148564831, 148564965), new Interval("chr1", 150298207, 150298341)},
{new Interval("chr1", 153293008, 153293090), new Interval("chr1", 155026384, 155026466)},
{new Interval("chr1", 158167550, 158167677), new Interval("chr1", 159900926, 159901053)},
{new Interval("chr1", 169444555, 169444718), new Interval("chr1", 171177931, 171178094)},
{new Interval("chr1", 183535970, 183536100), new Interval("chr1", 185269347, 185269477)},
{new Interval("chr1", 201411300, 201411508), new Interval("chr1", 203144677, 203144885)},
{new Interval("chr1", 212862043, 212862249), new Interval("chr1", 214795420, 214795626)},
{new Interval("chr1", 228992499, 228992560), new Interval("chr1", 230925876, 230925937)},
{new Interval("chr1", 246268191, 246269133), new Interval("chr1", 248201568, 248202510)},
{new Interval("chr2", 25027765, 25027929), new Interval("chr2", 25174261, 25174425)},
{new Interval("chr2", 32572109, 32572240), new Interval("chr2", 32718605, 32718736)},
{new Interval("chr2", 53988959, 53989061), new Interval("chr2", 54135455, 54135557)},
{new Interval("chr2", 71749748, 71749847), new Interval("chr2", 71896240, 71896339)},
{new Interval("chr2", 96059879, 96060011), new Interval("chr2", 96696152, 96696284)},
{new Interval("chr2", 109923614, 109923763), new Interval("chr2", 110566325, 110566474)},
{new Interval("chr2", 130655571, 130655646), new Interval("chr2", 130939101, 130939176)},
{new Interval("chr2", 159228028, 159228205), new Interval("chr2", 159519782, 159519959)},
{new Interval("chr2", 172639236, 172639282), new Interval("chr2", 172930990, 172931036)},
{new Interval("chr2", 189558634, 189558751), new Interval("chr2", 189850389, 189850506)},
{new Interval("chr2", 203547300, 203547466), new Interval("chr2", 203839055, 203839221)},
{new Interval("chr2", 219578985, 219579191), new Interval("chr2", 219870741, 219870947)},
{new Interval("chr2", 232982284, 232982404), new Interval("chr2", 233274040, 233274160)},
{new Interval("chr3", 3114819, 3114976), new Interval("chr3", 3139819, 3139976)},
{new Interval("chr3", 16333337, 16333745), new Interval("chr3", 16358333, 16358741)},
{new Interval("chr3", 40183652, 40183736), new Interval("chr3", 40208648, 40208732)},
{new Interval("chr3", 48601077, 48601227), new Interval("chr3", 48626073, 48626223)},
{new Interval("chr3", 52287255, 52287419), new Interval("chr3", 52312215, 52312379)},
{new Interval("chr3", 63979313, 63979425), new Interval("chr3", 64004273, 64004385)},
{new Interval("chr3", 110234255, 110234364), new Interval("chr3", 108751565, 108751674)},
{new Interval("chr3", 126088466, 126088539), new Interval("chr3", 124605776, 124605849)},
{new Interval("chr3", 137600279, 137600363), new Interval("chr3", 136117589, 136117673)},
{new Interval("chr3", 159845116, 159845200), new Interval("chr3", 158362422, 158362506)},
{new Interval("chr3", 185387877, 185387927), new Interval("chr3", 183905183, 183905233)},
{new Interval("chr3", 199065658, 199065715), new Interval("chr3", 197581261, 197581318)},
{new Interval("chr4", 10152742, 10152765), new Interval("chr4", 10543644, 10543667)},
{new Interval("chr4", 47243396, 47243638), new Interval("chr4", 47548639, 47548881)},
{new Interval("chr4", 72632227, 72632303), new Interval("chr4", 72413363, 72413439)},
{new Interval("chr4", 88942682, 88942736), new Interval("chr4", 88723658, 88723712)},
{new Interval("chr4", 114381088, 114381190), new Interval("chr4", 114161639, 114161741)},
{new Interval("chr4", 151338602, 151338707), new Interval("chr4", 151119152, 151119257)},
{new Interval("chr4", 184429225, 184429390), new Interval("chr4", 184192231, 184192396)},
{new Interval("chr5", 14804176, 14804350), new Interval("chr5", 14751176, 14751350)},
{new Interval("chr5", 43687596, 43687745), new Interval("chr5", 43651839, 43651988)},
{new Interval("chr5", 71651730, 71651806), new Interval("chr5", 71615974, 71616050)},
{new Interval("chr5", 95017504, 95017771), new Interval("chr5", 94991748, 94992015)},
{new Interval("chr5", 128984208, 128984352), new Interval("chr5", 128956309, 128956453)},
{new Interval("chr5", 140033038, 140033159), new Interval("chr5", 140052854, 140052975)},
{new Interval("chr5", 153045976, 153046084), new Interval("chr5", 153065783, 153065891)},
{new Interval("chr5", 176255669, 176255768), new Interval("chr5", 176323063, 176323162)},
{new Interval("chr6", 10810586, 10810710), new Interval("chr6", 10702600, 10702724)},
{new Interval("chr6", 30666289, 30666459), new Interval("chr6", 30558310, 30558480)},
{new Interval("chr6", 33082591, 33082598), new Interval("chr6", 32974613, 32974620)},
{new Interval("chr6", 39940185, 39940263), new Interval("chr6", 39832207, 39832285)},
{new Interval("chr6", 50789726, 50789768), new Interval("chr6", 50681767, 50681809)},
{new Interval("chr6", 79721666, 79721720), new Interval("chr6", 79664947, 79665001)},
{new Interval("chr6", 108336822, 108336934), new Interval("chr6", 108230129, 108230241)},
{new Interval("chr6", 131240935, 131241085), new Interval("chr6", 131199242, 131199392)},
{new Interval("chr6", 151799272, 151799384), new Interval("chr6", 151757579, 151757691)},
{new Interval("chr6", 169897302, 169897445), new Interval("chr6", 170155377, 170155520)},
{new Interval("chr7", 17341792, 17341937), new Interval("chr7", 17375267, 17375412)},
{new Interval("chr7", 38875269, 38875380), new Interval("chr7", 38908744, 38908855)},
{new Interval("chr7", 72563000, 72563120), new Interval("chr7", 72925064, 72925184)},
{new Interval("chr7", 89839403, 89839480), new Interval("chr7", 90001467, 90001544)},
{new Interval("chr7", 100063781, 100063867), new Interval("chr7", 100225845, 100225931)},
{new Interval("chr7", 111889559, 111889671), new Interval("chr7", 112102323, 112102435)},
{new Interval("chr7", 133900771, 133900840), new Interval("chr7", 134250231, 134250300)},
{new Interval("chr7", 149124615, 149124769), new Interval("chr7", 149493682, 149493836)},
{new Interval("chr8", 9647462, 9647548), new Interval("chr8", 9610052, 9610138)},
{new Interval("chr8", 27203588, 27203614), new Interval("chr8", 27147671, 27147697)},
{new Interval("chr8", 43171970, 43172044), new Interval("chr8", 43052813, 43052887)},
{new Interval("chr8", 76088775, 76088894), new Interval("chr8", 75926220, 75926339)},
{new Interval("chr8", 103641854, 103642290), new Interval("chr8", 103572678, 103573114)},
{new Interval("chr8", 133913660, 133913828), new Interval("chr8", 133844478, 133844646)},
{new Interval("chr8", 145697031, 145697164), new Interval("chr8", 145726223, 145726356)},
{new Interval("chr9", 26985517, 26985849), new Interval("chr9", 26995517, 26995849)},
{new Interval("chr9", 68496721, 68496793), new Interval("chr9", 69206901, 69206973)},
{new Interval("chr9", 94051959, 94052046), new Interval("chr9", 95012138, 95012225)},
{new Interval("chr9", 110750285, 110750337), new Interval("chr9", 111710464, 111710516)},
{new Interval("chr9", 124416836, 124417782), new Interval("chr9", 125377015, 125377961)},
{new Interval("chr9", 130939690, 130939794), new Interval("chr9", 131899869, 131899973)},
{new Interval("chr9", 138395593, 138395667), new Interval("chr9", 139275772, 139275846)},
{new Interval("chr10", 6048112, 6048310), new Interval("chr10", 6008106, 6008304)},
{new Interval("chr10", 26599573, 26599693), new Interval("chr10", 26559567, 26559687)},
{new Interval("chr10", 51507890, 51507920), new Interval("chr10", 51837884, 51837914)},
{new Interval("chr10", 74343070, 74343234), new Interval("chr10", 74673064, 74673228)},
{new Interval("chr10", 93604764, 93604865), new Interval("chr10", 93614784, 93614885)},
{new Interval("chr10", 101985412, 101985513), new Interval("chr10", 101995422, 101995523)},
{new Interval("chr10", 115325644, 115325755), new Interval("chr10", 115335654, 115335765)},
{new Interval("chr10", 129062310, 129062470), new Interval("chr10", 129172320, 129172480)},
{new Interval("chr11", 1904274, 1904289), new Interval("chr11", 1947698, 1947713)},
{new Interval("chr11", 11928485, 11928607), new Interval("chr11", 11971909, 11972031)},
{new Interval("chr11", 33326642, 33326942), new Interval("chr11", 33370066, 33370366)},
{new Interval("chr11", 55554469, 55555445), new Interval("chr11", 55797893, 55798869)},
{new Interval("chr11", 62505888, 62506060), new Interval("chr11", 62749312, 62749484)},
{new Interval("chr11", 65488560, 65488619), new Interval("chr11", 65731984, 65732043)},
{new Interval("chr11", 71618353, 71618446), new Interval("chr11", 71940705, 71940798)},
{new Interval("chr11", 89174516, 89174750), new Interval("chr11", 89534868, 89535102)},
{new Interval("chr11", 111349955, 111350190), new Interval("chr11", 111844745, 111844980)},
{new Interval("chr11", 120195672, 120195841), new Interval("chr11", 120690462, 120690631)},
{new Interval("chr12", 1089617, 1089776), new Interval("chr12", 1219356, 1219515)},
{new Interval("chr12", 8894021, 8894139), new Interval("chr12", 9002754, 9002872)},
{new Interval("chr12", 26455518, 26455614), new Interval("chr12", 26564251, 26564347)},
{new Interval("chr12", 46663731, 46663788), new Interval("chr12", 48377464, 48377521)},
{new Interval("chr12", 51502394, 51502432), new Interval("chr12", 53216127, 53216165)},
{new Interval("chr12", 55603883, 55604103), new Interval("chr12", 57317616, 57317836)},
{new Interval("chr12", 69218200, 69218280), new Interval("chr12", 70931933, 70932013)},
{new Interval("chr12", 97543837, 97544677), new Interval("chr12", 99019706, 99020546)},
{new Interval("chr12", 108438951, 108439074), new Interval("chr12", 109954568, 109954691)},
{new Interval("chr12", 119021215, 119021343), new Interval("chr12", 120536832, 120536960)},
{new Interval("chr12", 127849755, 127849917), new Interval("chr12", 129283802, 129283964)},
{new Interval("chr13", 28900978, 28901035), new Interval("chr13", 30002978, 30003035)},
{new Interval("chr13", 48646570, 48646698), new Interval("chr13", 49748569, 49748697)},
{new Interval("chr13", 98989699, 98989814), new Interval("chr13", 100191698, 100191813)},
{new Interval("chr14", 20929460, 20929643), new Interval("chr14", 21859620, 21859803)},
{new Interval("chr14", 33338689, 33340068), new Interval("chr14", 34268938, 34270317)},
{new Interval("chr14", 55217155, 55217163), new Interval("chr14", 56147402, 56147410)},
{new Interval("chr14", 71260115, 71260358), new Interval("chr14", 72190362, 72190605)},
{new Interval("chr14", 89806293, 89806451), new Interval("chr14", 90736540, 90736698)},
{new Interval("chr14", 102548185, 102548280), new Interval("chr14", 103478432, 103478527)},
{new Interval("chr15", 31917122, 31918453), new Interval("chr15", 34129830, 34131161)},
{new Interval("chr15", 40481129, 40481302), new Interval("chr15", 42693837, 42694010)},
{new Interval("chr15", 48649374, 48649484), new Interval("chr15", 50862082, 50862192)},
{new Interval("chr15", 61768839, 61768953), new Interval("chr15", 63981786, 63981900)},
{new Interval("chr15", 72115399, 72115456), new Interval("chr15", 74328346, 74328403)},
{new Interval("chr15", 83031858, 83032011), new Interval("chr15", 85230854, 85231007)},
{new Interval("chr16", 79709, 79902), new Interval("chr16", 139709, 139902)},
{new Interval("chr16", 2285590, 2285744), new Interval("chr16", 2345589, 2345743)},
{new Interval("chr16", 14872977, 14873044), new Interval("chr16", 14965476, 14965543)},
{new Interval("chr16", 23611004, 23611155), new Interval("chr16", 23703503, 23703654)},
{new Interval("chr16", 31004784, 31005007), new Interval("chr16", 31097283, 31097506)},
{new Interval("chr16", 55745701, 55745922), new Interval("chr16", 57188200, 57188421)},
{new Interval("chr16", 66647766, 66647830), new Interval("chr16", 68090265, 68090329)},
{new Interval("chr16", 79224415, 79224636), new Interval("chr16", 80666914, 80667135)},
{new Interval("chr17", 1320663, 1320735), new Interval("chr17", 1373913, 1373985)},
{new Interval("chr17", 5304981, 5305155), new Interval("chr17", 5364257, 5364431)},
{new Interval("chr17", 8588568, 8588654), new Interval("chr17", 8647843, 8647929)},
{new Interval("chr17", 18192362, 18192481), new Interval("chr17", 18251637, 18251756)},
{new Interval("chr17", 26514328, 26514522), new Interval("chr17", 29490202, 29490396)},
{new Interval("chr17", 35069238, 35069334), new Interval("chr17", 37815712, 37815808)},
{new Interval("chr17", 38377148, 38377241), new Interval("chr17", 41123622, 41123715)},
{new Interval("chr17", 44472316, 44472454), new Interval("chr17", 47117317, 47117455)},
{new Interval("chr17", 55482984, 55483122), new Interval("chr17", 58128202, 58128340)},
{new Interval("chr17", 64595087, 64595211), new Interval("chr17", 67083492, 67083616)},
{new Interval("chr17", 72814816, 72814876), new Interval("chr17", 75303221, 75303281)},
{new Interval("chr17", 78167687, 78167812), new Interval("chr17", 80574398, 80574523)},
{new Interval("chr18", 19653801, 19653961), new Interval("chr18", 21399803, 21399963)},
{new Interval("chr18", 46766985, 46767455), new Interval("chr18", 48512987, 48513457)},
{new Interval("chr19", 822924, 823120), new Interval("chr19", 871924, 872120)},
{new Interval("chr19", 4200223, 4200327), new Interval("chr19", 4249223, 4249327)},
{new Interval("chr19", 8094666, 8094894), new Interval("chr19", 8188666, 8188894)},
{new Interval("chr19", 11657040, 11657607), new Interval("chr19", 11796040, 11796607)},
{new Interval("chr19", 16298665, 16298844), new Interval("chr19", 16437665, 16437844)},
{new Interval("chr19", 19650533, 19650597), new Interval("chr19", 19789533, 19789597)},
{new Interval("chr19", 42008351, 42008363), new Interval("chr19", 37316511, 37316523)},
{new Interval("chr19", 46446486, 46446567), new Interval("chr19", 41754646, 41754727)},
{new Interval("chr19", 51212087, 51212169), new Interval("chr19", 46520247, 46520329)},
{new Interval("chr19", 55052042, 55052201), new Interval("chr19", 50360230, 50360389)},
{new Interval("chr19", 60200495, 60200669), new Interval("chr19", 55508683, 55508857)},
{new Interval("chr20", 3244380, 3244434), new Interval("chr20", 3296380, 3296434)},
{new Interval("chr20", 25145282, 25145374), new Interval("chr20", 25197282, 25197374)},
{new Interval("chr20", 35182714, 35182855), new Interval("chr20", 35749300, 35749441)},
{new Interval("chr20", 46797751, 46797826), new Interval("chr20", 47364344, 47364419)},
{new Interval("chr20", 61546454, 61546633), new Interval("chr20", 62076010, 62076189)},
{new Interval("chr21", 36666540, 36666701), new Interval("chr21", 37744670, 37744831)},
{new Interval("chr21", 46450176, 46450285), new Interval("chr21", 47625748, 47625857)},
{new Interval("chr22", 22890366, 22890533), new Interval("chr22", 24560366, 24560533)},
{new Interval("chr22", 32487356, 32487465), new Interval("chr22", 34157356, 34157465)},
{new Interval("chr22", 40469028, 40469146), new Interval("chr22", 42139082, 42139200)},
{new Interval("chr22", 49365651, 49365713), new Interval("chr22", 51018785, 51018847)},
{new Interval("chrX", 24135748, 24135895), new Interval("chrX", 24225827, 24225974)},
{new Interval("chrX", 48708293, 48708459), new Interval("chrX", 48823349, 48823515)},
{new Interval("chrX", 69406673, 69406721), new Interval("chrX", 69489948, 69489996)},
{new Interval("chrX", 101459444, 101459531), new Interval("chrX", 101572788, 101572875)},
{new Interval("chrX", 128442357, 128442474), new Interval("chrX", 128614676, 128614793)},
{new Interval("chrX", 152701873, 152701902), new Interval("chrX", 153048679, 153048708)},
{new Interval("chrY", 2715028, 2715646), new Interval("chrY", 2655028, 2655646)},
{new Interval("chrY", 26179988, 26180064), new Interval("chrY", 27770600, 27770676)},
// Some intervals that are flipped in the new genome
{new Interval("chr1", 2479704, 2479833, false, "target_549"), new Interval("chr1", 2494585, 2494714, true, "target_549")},
{new Interval("chr1", 2480081, 2480116, false, "target_550"), new Interval("chr1", 2494302, 2494337, true, "target_550")},
{new Interval("chr1", 2481162, 2481308, false, "target_551"), new Interval("chr1", 2493110, 2493256, true, "target_551")},
{new Interval("chr1", 2482263, 2482357, false, "target_552"), new Interval("chr1", 2492061, 2492155, true, "target_552")},
{new Interval("chr1", 2482999, 2483158, false, "target_553"), new Interval("chr1", 2491260, 2491419, true, "target_553")},
{new Interval("chr1", 2484509, 2484638, false, "target_554"), new Interval("chr1", 2489780, 2489909, true, "target_554")},
{new Interval("chr1", 2485143, 2485255, false, "target_555"), new Interval("chr1", 2489163, 2489275, true, "target_555")},
{new Interval("chr1", 2486244, 2486316, false, "target_556"), new Interval("chr1", 2488102, 2488174, true, "target_556")},
{new Interval("chr2", 110735471, 110735558, false, "target_101982"), new Interval("chr2", 110585640, 110585727, true, "target_101982")},
{new Interval("chr2", 110735648, 110735831, false, "target_101983"), new Interval("chr2", 110585367, 110585550, true, "target_101983")},
{new Interval("chr2", 110736772, 110736922, false, "target_101984"), new Interval("chr2", 110584276, 110584426, true, "target_101984")},
{new Interval("chr2", 110737181, 110737322, false, "target_101985"), new Interval("chr2", 110583876, 110584017, true, "target_101985")},
{new Interval("chr2", 110737585, 110737747, false, "target_101986"), new Interval("chr2", 110583451, 110583613, true, "target_101986")},
{new Interval("chr2", 110738666, 110738793, false, "target_101987"), new Interval("chr2", 110582405, 110582532, true, "target_101987")},
{new Interval("chr2", 110738957, 110739136, false, "target_101988"), new Interval("chr2", 110582062, 110582241, true, "target_101988")},
{new Interval("chr2", 110739216, 110739401, false, "target_101989"), new Interval("chr2", 110581797, 110581982, true, "target_101989")},
{new Interval("chr2", 110741555, 110741768, false, "target_101990"), new Interval("chr2", 110579480, 110579693, true, "target_101990")},
{new Interval("chr2", 110743887, 110743978, false, "target_101991"), new Interval("chr2", 110577271, 110577362, true, "target_101991")},
{new Interval("chr2", 110750021, 110750220, false, "target_101992"), new Interval("chr2", 110571035, 110571234, true, "target_101992")},
{new Interval("chr2", 110754786, 110754935, false, "target_101993"), new Interval("chr2", 110566325, 110566474, true, "target_101993")},
{new Interval("chr2", 110755277, 110755511, false, "target_101994"), new Interval("chr2", 110565749, 110565983, true, "target_101994")},
{new Interval("chr2", 110759547, 110759703, false, "target_101995"), new Interval("chr2", 110561554, 110561710, true, "target_101995")},
{new Interval("chr2", 110760135, 110760250, false, "target_101996"), new Interval("chr2", 110561007, 110561122, true, "target_101996")},
{new Interval("chr2", 110761828, 110761899, false, "target_101997"), new Interval("chr2", 110559358, 110559429, true, "target_101997")},
{new Interval("chr2", 110769521, 110769596, false, "target_101998"), new Interval("chr2", 110552041, 110552116, true, "target_101998")},
{new Interval("chr2", 111012182, 111012298, false, "target_101999"), new Interval("chr2", 108484181, 108484297, true, "target_101999")},
{new Interval("chr13", 113547048, 113547139, false, "target_51005"), new Interval("chr13", 114566804, 114566895, true, "target_51005")},
{new Interval("chr13", 113547227, 113547397, false, "target_51006"), new Interval("chr13", 114566546, 114566716, true, "target_51006")},
{new Interval("chr13", 113562918, 113562946, false, "target_51007"), new Interval("chr13", 114550997, 114551025, true, "target_51007")},
{new Interval("chr13", 113564379, 113564445, false, "target_51008"), new Interval("chr13", 114549498, 114549564, true, "target_51008")},
{new Interval("chr13", 113571118, 113571244, false, "target_51009"), new Interval("chr13", 114542699, 114542825, true, "target_51009")},
{new Interval("chr13", 113572777, 113572903, false, "target_51010"), new Interval("chr13", 114541040, 114541166, true, "target_51010")},
{new Interval("chr13", 113575333, 113575459, false, "target_51011"), new Interval("chr13", 114538484, 114538610, true, "target_51011")},
{new Interval("chr13", 113576296, 113576421, false, "target_51012"), new Interval("chr13", 114537522, 114537647, true, "target_51012")},
{new Interval("chr13", 113578216, 113578338, false, "target_51013"), new Interval("chr13", 114535605, 114535727, true, "target_51013")},
{new Interval("chr13", 113578480, 113578673, false, "target_51014"), new Interval("chr13", 114535270, 114535463, true, "target_51014")},
{new Interval("chr13", 113582257, 113582425, false, "target_51015"), new Interval("chr13", 114531518, 114531686, true, "target_51015")},
{new Interval("chr13", 113583804, 113583976, false, "target_51016"), new Interval("chr13", 114529967, 114530139, true, "target_51016")},
{new Interval("chr13", 113587418, 113587597, false, "target_51017"), new Interval("chr13", 114526346, 114526525, true, "target_51017")},
{new Interval("chr13", 113588782, 113589014, false, "target_51018"), new Interval("chr13", 114524929, 114525161, true, "target_51018")},
{new Interval("chr13", 113589950, 113590108, false, "target_51019"), new Interval("chr13", 114523835, 114523993, true, "target_51019")},
{new Interval("chr13", 113599065, 113599236, false, "target_51020"), new Interval("chr13", 114514707, 114514878, true, "target_51020")},
{new Interval("chr13", 113605940, 113606087, false, "target_51021"), new Interval("chr13", 114507856, 114508003, true, "target_51021")},
{new Interval("chr13", 113609156, 113609319, false, "target_51022"), new Interval("chr13", 114504624, 114504787, true, "target_51022")},
{new Interval("chr13", 113610056, 113610145, false, "target_51023"), new Interval("chr13", 114503798, 114503887, true, "target_51023")},
{new Interval("chr13", 113611549, 113611633, false, "target_51024"), new Interval("chr13", 114502310, 114502394, true, "target_51024")},
{new Interval("chr13", 113615731, 113615824, false, "target_51025"), new Interval("chr13", 114498119, 114498212, true, "target_51025")},
{new Interval("chr13", 113641808, 113641874, false, "target_51026"), new Interval("chr13", 114472069, 114472135, true, "target_51026")},
{new Interval("chr13", 113644711, 113644857, false, "target_51027"), new Interval("chr13", 114469086, 114469232, true, "target_51027")},
{new Interval("chr13", 113651799, 113651848, false, "target_51028"), new Interval("chr13", 114462241, 114462290, true, "target_51028")},
{new Interval("chr17", 33541604, 33542176, false, "target_76102"), new Interval("chr17", 36294030, 36294602, true, "target_76102")},
{new Interval("chr17", 33543154, 33543310, false, "target_76103"), new Interval("chr17", 36292896, 36293052, true, "target_76103")},
{new Interval("chr17", 33543677, 33543780, false, "target_76104"), new Interval("chr17", 36292426, 36292529, true, "target_76104")},
{new Interval("chr17", 33544240, 33544309, false, "target_76105"), new Interval("chr17", 36291897, 36291966, true, "target_76105")},
{new Interval("chr17", 33544690, 33544788, false, "target_76106"), new Interval("chr17", 36291418, 36291516, true, "target_76106")},
{new Interval("chr17", 33545498, 33545622, false, "target_76107"), new Interval("chr17", 36290584, 36290708, true, "target_76107")},
{new Interval("chr17", 33547465, 33547578, false, "target_76109"), new Interval("chr17", 36288629, 36288742, true, "target_76109")},
{new Interval("chr17", 33547904, 33548015, false, "target_76110"), new Interval("chr17", 36288192, 36288303, true, "target_76110")},
{new Interval("chr17", 33548455, 33548539, false, "target_76111"), new Interval("chr17", 36287668, 36287752, true, "target_76111")},
{new Interval("chr17", 33549018, 33549061, false, "target_76112"), new Interval("chr17", 36287146, 36287189, true, "target_76112")},
{new Interval("chr17", 33550341, 33550430, false, "target_76113"), new Interval("chr17", 36285777, 36285866, true, "target_76113")},
{new Interval("chr17", 33550589, 33550664, false, "target_76114"), new Interval("chr17", 36285543, 36285618, true, "target_76114")},
{new Interval("chrX", 148575967, 148576994, false, "target_184692"), new Interval("chrX", 148797411, 148798438, true, "target_184692")},
{new Interval("chrX", 148577066, 148577143, false, "target_184693"), new Interval("chrX", 148797262, 148797339, true, "target_184693")},
{new Interval("chrX", 148578167, 148578266, false, "target_184694"), new Interval("chrX", 148796139, 148796238, true, "target_184694")},
{new Interval("chrX", 148579488, 148579587, false, "target_184695"), new Interval("chrX", 148794818, 148794917, true, "target_184695")},
{new Interval("chrX", 148603758, 148603770, false, "target_184696"), new Interval("chrX", 148770634, 148770646, true, "target_184696")},
// Some that don't map in hg19
{new Interval("chr2", 111013693, 111013832), null},
{new Interval("chr3", 14174511, 14175398), null},
{new Interval("chr3", 50911035, 50911051), null},
{new Interval("chr6", 32071709, 32071869), null},
{new Interval("chr6", 32072183, 32072358), null},
{new Interval("chr6", 32104446, 32104606), null},
{new Interval("chr6", 32104920, 32105095), null},
{new Interval("chr7", 101995561, 101995739), null},
{new Interval("chr7", 142178782, 142178825), null},
{new Interval("chr7", 142179850, 142180013), null},
{new Interval("chr7", 142181067, 142181324), null},
{new Interval("chr7", 142181720, 142181860), null},
{new Interval("chr7", 142182157, 142182313), null},
{new Interval("chr15", 19335778, 19336302), null},
{new Interval("chr17", 33364376, 33364428), null},
{new Interval("chr17", 33546162, 33546214), null},
{new Interval("chr17", 33706667, 33706736), null},
{new Interval("chr17", 59772721, 59772781), null},
{new Interval("chr17", 59779355, 59779421), null},
{new Interval("chr17", 59781483, 59781540), null},
{new Interval("chr17", 59783488, 59783565), null},
{new Interval("chr17", 59784584, 59784615), null},
{new Interval("chr17", 59786025, 59786136), null},
{new Interval("chr17", 59787203, 59787494), null},
{new Interval("chr17", 59791235, 59791514), null},
{new Interval("chr17", 59794247, 59794502), null},
{new Interval("chr17", 59801884, 59802193), null},
{new Interval("chr17", 59804685, 59804982), null},
{new Interval("chr17", 59817352, 59817382), null},
{new Interval("chr17", 59817465, 59817532), null},
{new Interval("chr17", 59875754, 59875812), null},
{new Interval("chr17", 59875899, 59875944), null},
{new Interval("chr17", 59879183, 59879456), null},
{new Interval("chr17", 59883988, 59884276), null},
{new Interval("chr17", 59887398, 59887512), null},
{new Interval("chrX", 48774611, 48775058), null},
};
}
@Test(dataProvider = "failingIntervals")
public void testDiagnosticLiftover(final Interval fromInterval) {
final List<LiftOver.PartialLiftover> partials = liftOver.diagnosticLiftover(fromInterval);
System.out.println("Diagnosing " + fromInterval + " (len " + fromInterval.length() + ")");
for (final LiftOver.PartialLiftover partial : partials) {
System.out.println(partial);
}
}
@DataProvider(name = "failingIntervals")
public Object[][] makeFailingIntervals() {
return new Object[][] {
{new Interval("chr3", 50911035, 50911051)},
{new Interval("chr2", 111013693, 111013832)},
{new Interval("chr3", 14174511, 14175398)},
{new Interval("chr3", 50911035, 50911051)},
{new Interval("chr6", 32071709, 32071869)},
{new Interval("chr6", 32072183, 32072358)},
{new Interval("chr6", 32104446, 32104606)},
{new Interval("chr6", 32104920, 32105095)},
{new Interval("chr7", 101995561, 101995739)},
{new Interval("chr7", 142178782, 142178825)},
{new Interval("chr7", 142179850, 142180013)},
{new Interval("chr7", 142181067, 142181324)},
{new Interval("chr7", 142181720, 142181860)},
{new Interval("chr7", 142182157, 142182313)},
{new Interval("chr15", 19335778, 19336302)},
{new Interval("chr17", 33364376, 33364428)},
{new Interval("chr17", 33546162, 33546214)},
{new Interval("chr17", 33706667, 33706736)},
{new Interval("chr17", 59772721, 59772781)},
{new Interval("chr17", 59779355, 59779421)},
{new Interval("chr17", 59781483, 59781540)},
{new Interval("chr17", 59783488, 59783565)},
{new Interval("chr17", 59784584, 59784615)},
{new Interval("chr17", 59786025, 59786136)},
{new Interval("chr17", 59787203, 59787494)},
{new Interval("chr17", 59791235, 59791514)},
{new Interval("chr17", 59794247, 59794502)},
{new Interval("chr17", 59801884, 59802193)},
{new Interval("chr17", 59804685, 59804982)},
{new Interval("chr17", 59817352, 59817382)},
{new Interval("chr17", 59817465, 59817532)},
{new Interval("chr17", 59875754, 59875812)},
{new Interval("chr17", 59875899, 59875944)},
{new Interval("chr17", 59879183, 59879456)},
{new Interval("chr17", 59883988, 59884276)},
{new Interval("chr17", 59887398, 59887512)},
{new Interval("chrX", 48774611, 48775058)},
};
}
@Test
public void testWriteChain() throws Exception {
final OverlapDetector<Chain> chains = Chain.loadChains(CHAIN_FILE);
File outFile = File.createTempFile("test.", ".chain");
outFile.deleteOnExit();
PrintWriter pw = new PrintWriter(outFile);
final Map<Integer, Chain> originalChainMap = new TreeMap<Integer, Chain>();
for (final Chain chain : chains.getAll()) {
chain.write(pw);
originalChainMap.put(chain.id, chain);
}
pw.close();
final OverlapDetector<Chain> newChains = Chain.loadChains(outFile);
final Map<Integer, Chain> newChainMap = new TreeMap<Integer, Chain>();
for (final Chain chain : newChains.getAll()) {
newChainMap.put(chain.id, chain);
}
Assert.assertEquals(newChainMap, originalChainMap);
}
}