public void BuildScaffold() { const int kmerLength = 6; const int dangleThreshold = 3; const int redundantThreshold = 7; var sequences = new List <ISequence>(TestInputs.GetReadsForScaffolds()); KmerLength = kmerLength; SequenceReads.Clear(); this.SetSequenceReads(sequences); CreateGraph(); DanglingLinksThreshold = dangleThreshold; DanglingLinksPurger = new DanglingLinksPurger(dangleThreshold); RedundantPathLengthThreshold = redundantThreshold; RedundantPathsPurger = new RedundantPathsPurger(redundantThreshold); UnDangleGraph(); RemoveRedundancy(); IList <ISequence> contigs = BuildContigs().ToList(); CloneLibrary.Instance.AddLibrary("abc", 5, 20); using (GraphScaffoldBuilder scaffold = new GraphScaffoldBuilder()) { IEnumerable <ISequence> scaffoldSeq = scaffold.BuildScaffold(sequences, contigs, this.KmerLength, 3, 0); HashSet <string> expected = new HashSet <string> { "ATGCCTCCTATCTTAGCGCGC", "CGCGCCGCGC", "TTTTTT", "CGCGCG", "TTTTAGC", "TTTTTA", "TTTAAA", "TTTTAA", }; AlignmentHelpers.CompareSequenceLists(expected, scaffoldSeq); } }
public void AssemblerTestWithScaffoldBuilder() { const int kmerLength = 6; const int dangleThreshold = 3; const int redundantThreshold = 7; using (ParallelDeNovoAssembler assembler = new ParallelDeNovoAssembler()) { assembler.KmerLength = kmerLength; assembler.DanglingLinksThreshold = dangleThreshold; assembler.RedundantPathLengthThreshold = redundantThreshold; assembler.ScaffoldRedundancy = 0; assembler.Depth = 3; CloneLibrary.Instance.AddLibrary("abc", 5, 20); PadenaAssembly result = (PadenaAssembly)assembler.Assemble(TestInputs.GetReadsForScaffolds(), true); HashSet <string> expectedContigs = new HashSet <string> { "TTTTTT", "CGCGCG", "TTAGCGCG", "CGCGCCGCGC", "GCGCGC", "TTTTTA", "TTTTAA", "TTTAAA", "TTTTAGC", "ATGCCTCCTATCTTAGC" }; AlignmentHelpers.CompareSequenceLists(expectedContigs, result.ContigSequences); HashSet <string> expectedScaffolds = new HashSet <string> { "ATGCCTCCTATCTTAGCGCGC", "TTTAAA", "TTTTTT", "TTTTAGC", "TTTTAA", "CGCGCCGCGC", "TTTTTA", "CGCGCG" }; AlignmentHelpers.CompareSequenceLists(expectedScaffolds, result.Scaffolds); } }
public void TestDanglingLinksPurger() { const int KmerLength = 11; const int DangleThreshold = 3; List <ISequence> readSeqs = TestInputs.GetDanglingReads(); SequenceReads.Clear(); this.SetSequenceReads(readSeqs); this.KmerLength = KmerLength; DanglingLinksThreshold = DangleThreshold; DanglingLinksPurger = new DanglingLinksPurger(DangleThreshold); CreateGraph(); long graphCount = Graph.NodeCount; long graphEdges = Graph.GetNodes().Select(n => n.ExtensionsCount).Sum(); var graphNodes = Graph.GetNodes().Select(n => Graph.GetNodeSequence(n)).ToList(); DanglingLinksThreshold = DangleThreshold; UnDangleGraph(); long dangleRemovedGraphCount = Graph.NodeCount; long dangleRemovedGraphEdge = Graph.GetNodes().Select(n => n.ExtensionsCount).Sum(); var dangleRemovedGraphNodes = Graph.GetNodes().Select(n => Graph.GetNodeSequence(n)).ToList(); // Compare the two graphs Assert.AreEqual(2, graphCount - dangleRemovedGraphCount); Assert.AreEqual(4, graphEdges - dangleRemovedGraphEdge); var checkList = graphNodes.Except(dangleRemovedGraphNodes, new SequenceEqualityComparer()); HashSet <string> expected = new HashSet <string> { "ATCGAACGATG", "TCGAACGATGA" }; AlignmentHelpers.CompareSequenceLists(expected, checkList); }