/// <summary> /// It assembles the sequences. /// </summary> public override void AssembleSequences() { TimeSpan algorithmSpan = new TimeSpan(); Stopwatch runAlgorithm = new Stopwatch(); FileInfo refFileinfo = new FileInfo(this.Filename); long refFileLength = refFileinfo.Length; Output.WriteLine(OutputLevel.Information, Resources.AssemblyScaffoldStarting); if (!string.IsNullOrEmpty(this.CloneLibraryName)) { CloneLibrary.Instance.AddLibrary(this.CloneLibraryName, (float)this.MeanLengthOfInsert, (float)this.StandardDeviationOfInsert); } runAlgorithm.Restart(); IEnumerable <ISequence> reads = ParseFile(); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Processed read file: {0}", Path.GetFullPath(this.Filename)); Output.WriteLine(OutputLevel.Verbose, " Read/Processing time: {0}", runAlgorithm.Elapsed); Output.WriteLine(OutputLevel.Verbose, " File Size : {0}", refFileLength); Output.WriteLine(OutputLevel.Verbose, " k-mer Length : {0}", this.KmerLength); } runAlgorithm.Restart(); ValidateAmbiguousReads(reads); runAlgorithm.Stop(); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Time taken for Validating reads: {0}", runAlgorithm.Elapsed); } ParallelDeNovoAssembler assembler = new ParallelDeNovoAssembler(); assembler.StatusChanged += this.AssemblerStatusChanged; assembler.AllowErosion = AllowErosion; assembler.AllowKmerLengthEstimation = AllowKmerLengthEstimation; if (ContigCoverageThreshold != -1) { assembler.AllowLowCoverageContigRemoval = true; assembler.ContigCoverageThreshold = ContigCoverageThreshold; } assembler.DanglingLinksThreshold = DangleThreshold; assembler.ErosionThreshold = ErosionThreshold; if (!this.AllowKmerLengthEstimation) { assembler.KmerLength = this.KmerLength; } assembler.RedundantPathLengthThreshold = RedundantPathLengthThreshold; runAlgorithm.Restart(); IDeNovoAssembly assembly = assembler.Assemble(reads, true); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Compute time: {0}", runAlgorithm.Elapsed); } runAlgorithm.Restart(); WriteContigs(assembly); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Write contigs time: {0}", runAlgorithm.Elapsed); Output.WriteLine(OutputLevel.Verbose, "Total runtime: {0}", algorithmSpan); } }
/// <summary> /// Scaffold function. /// </summary> /// <param name="args">Arguments to Scaffold function.</param> private static void Scaffold(string[] args) { ScaffoldArguments options = new ScaffoldArguments(); CommandLineArguments parser = new CommandLineArguments(); // Add the parameters parser.Parameter(ArgumentType.Optional, "Quiet", ArgumentValueType.Bool, "q", "Display minimal output during processing."); parser.Parameter(ArgumentType.Required, "KmerLength", ArgumentValueType.OptionalInt, "k", "Length of k-mer"); parser.Parameter(ArgumentType.Optional, "Help", ArgumentValueType.Bool, "h", ""); parser.Parameter(ArgumentType.Optional, "OutputFile", ArgumentValueType.String, "o", "Output file"); parser.Parameter(ArgumentType.DefaultArgument, "Filenames", ArgumentValueType.MultipleUniqueStrings, "", "Input file of reads and contigs."); parser.Parameter(ArgumentType.Optional, "CloneLibraryName", ArgumentValueType.String, "n", "Clone Library Name"); parser.Parameter(ArgumentType.Optional, "MeanLengthOfInsert", ArgumentValueType.Int, "m", "Mean Length of clone library."); parser.Parameter(ArgumentType.Optional, "StandardDeviationOfInsert", ArgumentValueType.Int, "s", "Standard Deviation of Clone Library."); parser.Parameter(ArgumentType.Optional, "Redundancy", ArgumentValueType.Int, "r", "Number of paired read required to connect two contigs."); parser.Parameter(ArgumentType.Optional, "Depth", ArgumentValueType.Int, "d", "Depth for graph traversal."); parser.Parameter(ArgumentType.Optional, "Verbose", ArgumentValueType.Bool, "v", "Display verbose logging during processing."); parser.Parameter(ArgumentType.Optional, "ForceKmer", ArgumentValueType.Bool, "fk", "Force specified k-mer to be used without a warning prompt."); if (args.Length > 0) { try { parser.Parse(args, options); } catch (ArgumentParserException ex) { Output.WriteLine(OutputLevel.Error, ex.Message); Output.WriteLine(OutputLevel.Required, Resources.ScaffoldHelp); Environment.Exit(-1); } if (options.Help) { Output.WriteLine(OutputLevel.Required, Resources.ScaffoldHelp); } else if (options.FileNames != null) { if (!options.ForceKmer) { ValidateKmerLength(options.KmerLength, false); } if (options.Verbose) { Output.TraceLevel = OutputLevel.Information | OutputLevel.Verbose; } else if (!options.Quiet) { Output.TraceLevel = OutputLevel.Information; } options.GenerateScaffold(); } else { Output.WriteLine(OutputLevel.Required, Resources.ScaffoldHelp); } } else { Output.WriteLine(OutputLevel.Required, Resources.ScaffoldHelp); } }
/// <summary> /// It assembles the sequences. /// </summary> public virtual void AssembleSequences() { TimeSpan algorithmSpan = new TimeSpan(); Stopwatch runAlgorithm = new Stopwatch(); FileInfo refFileinfo = new FileInfo(this.Filename); long refFileLength = refFileinfo.Length; runAlgorithm.Restart(); IEnumerable <ISequence> reads = this.ParseFile(); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); Output.WriteLine(OutputLevel.Information, Resources.AssemblyStarting); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Processed read file: {0}", Path.GetFullPath(this.Filename)); Output.WriteLine(OutputLevel.Verbose, " Read/Processing time: {0}", runAlgorithm.Elapsed); Output.WriteLine(OutputLevel.Verbose, " File Size : {0}", refFileLength); Output.WriteLine(OutputLevel.Verbose, " k-mer Length : {0}", this.KmerLength); } runAlgorithm.Restart(); if (reads.Any(s => s.Alphabet.HasAmbiguity)) { throw new ArgumentException(Resources.AmbiguousReadsNotSupported); } runAlgorithm.Stop(); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Time taken for Validating reads: {0}", runAlgorithm.Elapsed); } using (ParallelDeNovoAssembler assembler = new ParallelDeNovoAssembler()) { assembler.StatusChanged += this.AssemblerStatusChanged; assembler.AllowErosion = this.AllowErosion; assembler.AllowKmerLengthEstimation = this.AllowKmerLengthEstimation; if (ContigCoverageThreshold != -1) { assembler.AllowLowCoverageContigRemoval = true; assembler.ContigCoverageThreshold = ContigCoverageThreshold; } assembler.DanglingLinksThreshold = this.DangleThreshold; assembler.ErosionThreshold = this.ErosionThreshold; if (!this.AllowKmerLengthEstimation) { assembler.KmerLength = this.KmerLength; } assembler.RedundantPathLengthThreshold = this.RedundantPathLengthThreshold; runAlgorithm.Restart(); IDeNovoAssembly assembly = assembler.Assemble(reads); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Compute time: {0}", runAlgorithm.Elapsed); } runAlgorithm.Restart(); this.WriteContigs(assembly); runAlgorithm.Stop(); algorithmSpan = algorithmSpan.Add(runAlgorithm.Elapsed); if (this.Verbose) { Output.WriteLine(OutputLevel.Verbose); Output.WriteLine(OutputLevel.Verbose, "Write contigs time: {0}", runAlgorithm.Elapsed); Output.WriteLine(OutputLevel.Verbose, "Total runtime: {0}", algorithmSpan); } } }