package org.broadinstitute.sting.gatk.refdata; import net.sf.picard.reference.ReferenceSequenceFile; import net.sf.picard.reference.ReferenceSequenceFileFactory; import org.broadinstitute.sting.BaseTest; import org.broadinstitute.sting.utils.GenomeLocParser; import org.junit.Assert; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.io.File; /** * Created by IntelliJ IDEA. * User: aaron * Date: Jul 15, 2009 * Time: 12:18:50 AM *
* These tests work upon a very small data set, with the following samtools glfview dump: * * chrM 1 A 5 20 0 0 127 127 127 254 254 254 254 254 254 * chrM 2 A 5 20 0 254 254 254 127 254 254 127 254 127 0 * chrM 3 A 5 20 0 254 127 254 254 0 127 127 254 254 254 * * You'll notice that the first is a hom ref, and the other two are hom alt SNP's */ public class RodGLFUnitTest extends BaseTest { static final File glfFile = new File(validationDataLocation + "glfTestFile.glf"); static final int finalRecordCount = 100; // the number of records in the above file static final int contigCount = 1; static final String ref = oneKGLocation + "reference/human_b36_both.fasta"; static ReferenceSequenceFile r; private RodGLF iter = null; @BeforeClass public static void before() { r = ReferenceSequenceFileFactory.getReferenceSequenceFile(new File(ref)); GenomeLocParser.setupRefContigOrdering(r); } @Before public void setup() { iter = RodGLF.createIterator("test", glfFile); } @Test public void testRodCount() { int counter = 0; while (iter.hasNext()) { RodGLF glf = iter.next(); counter++; } assertEquals(finalRecordCount, counter); } @Test public void testIsSNP() { RodGLF glf = iter.next(); Assert.assertFalse(iter.isSNP()); glf = iter.next(); Assert.assertTrue(iter.isSNP()); glf = iter.next(); Assert.assertTrue(iter.isSNP()); } @Test public void testIsReference() { RodGLF glf = iter.next(); Assert.assertTrue(iter.isReference()); glf = iter.next(); Assert.assertFalse(iter.isReference()); glf = iter.next(); Assert.assertFalse(iter.isReference()); } @Test(expected = IllegalStateException.class) public void testGetAltSnpFWDIllegalException() { RodGLF glf = iter.next(); iter.getAlternativeBaseForSNP(); } @Test public void testCompareTo() { RodGLF iter2 = RodGLF.createIterator("test", glfFile); RodGLF glf = iter.next(); RodGLF glf2 = iter2.next(); assertEquals(0, glf.compareTo(glf2)); glf2 = iter2.next(); assertEquals(-1, glf.compareTo(glf2)); assertEquals(1, glf2.compareTo(glf)); } @Test public void testGetAltSnpFWD() { RodGLF glf = iter.next(); glf = iter.next(); Assert.assertEquals('C', iter.getAlternativeBaseForSNP()); } @Test public void testGetRefSnpFWD() { RodGLF glf = iter.next(); glf = iter.next(); glf = iter.next(); Assert.assertEquals('A', iter.getReferenceForSNP()); } /** * move to the second and third bases, and check that the * alternate bases are correct. * @Test public void testGetAltBasesFWD() { RodGLF glf = iter.next(); glf = iter.next(); Assert.assertTrue("GT".equals(iter.getAltBasesFWD())); glf = iter.next(); Assert.assertTrue("CT".equals(iter.getAltBasesFWD())); } @Test public void testRodLocations() { GenomeLoc loc = null; while (iter.hasNext()) { RodGLF glf = iter.next(); if (loc != null) { if (iter.getLocation().isBefore(loc)) { Assert.fail("locations in the GLF came out of order loc = " + loc.toString() + " new loc = " + iter.getLocation().toString()); } } loc = iter.getLocation(); } } //@Test /** * create the example glf file for the test, you can uncomment the above test line to have this * test run, regenerating the file. * public void createRodFile() { GenotypeWriter writer = new GLFWriter("", new File("glfTestFile.glf")); int location = 1; int x = 0; writer.addGenotypeCall(r.getSequenceDictionary().getSequence(0), 1, 20, 'A', 5, createLikelihood('A')); writer.addGenotypeCall(r.getSequenceDictionary().getSequence(0), 2, 20, 'A', 5, createLikelihood('T')); writer.addGenotypeCall(r.getSequenceDictionary().getSequence(0), 3, 20, 'A', 5, createLikelihood('C')); writer.close(); }*/ /** * create a likelihood object, given the appropriate reference base * * @param ref the reference base * * @return the likelihood object * private LikelihoodObject createLikelihood(char ref) { ArrayList