/// <summary> /// This executes the discarding of reads on a background thread /// </summary> /// <param name="sender">BackgoundWorker instance</param> /// <param name="e">DoWorkEvent arguments</param> private void DoDiscardReads(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; if (worker != null) { try { Discarder myDiscarder = null; FilterToolArgs args = null; if (e.Argument is DiscardByLengthArgs) { args = e.Argument as DiscardByLengthArgs; myDiscarder = ((DiscardByLengthArgs)args).discarder; // If possible, verify that the discard length is not larger than the maximum read length. MessageBoxResult tooLargeReadLength = TryConfirmLargeReadLength(args.InputInfo.Filename, (myDiscarder as DiscardByLength).MinLengthThreshold); if (tooLargeReadLength == MessageBoxResult.Cancel) { e.Cancel = true; return; } } else if (e.Argument is DiscardByMeanQualityArgs) { args = e.Argument as DiscardByMeanQualityArgs; myDiscarder = (e.Argument as DiscardByMeanQualityArgs).discarder; } else { args = e.Argument as DiscardByRegexArgs; myDiscarder = (e.Argument as DiscardByRegexArgs).discarder; } myDiscarder.DiscardReads(); // Report results string report = string.Format(Resource.DiscardReport, myDiscarder.DiscardCount, myDiscarder.Counted); this.OpenInExplorer(args.OutputFilename); e.Result = report.ToString(); } catch (Exception ex) { e.Cancel = true; if (worker.CancellationPending) { return; } MessageBox.Show(ex.TargetSite + ": " + ex.Message); } } }
/// <summary> /// This event is raised when the user selects to run the discard tool /// after specifying all the required input parameters. /// </summary> /// <param name="sender">DiscardToolDialog window</param> /// <param name="e">Discard arguments</param> private void OnDiscardRunClick(object sender, FilterToolArgs e) { run = new RunProgressDialog(true); run.ProgressText = "Discarding reads..."; run.StartRun += new EventHandler(this.OnRunDiscardStarted); run.CancelRun += new EventHandler(this.OnCancelAnalysisClicked); run.Args = e; run.Owner = this; this.IsEnabled = false; run.ShowDialog(); this.IsEnabled = true; }
/// <summary> /// This executes the trimming of reads as a background thread. /// </summary> /// <param name="sender">BackgoundWorker instance</param> /// <param name="e">DoWorkEvent arguments</param> private void DoTrimReads(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; if (worker != null) { try { Trimmer myTrimmer = null; FilterToolArgs args = null; if (e.Argument is TrimByLengthArgs) { args = e.Argument as TrimByLengthArgs; myTrimmer = (e.Argument as TrimByLengthArgs).trimmer; // If possible, verify that the trim length is not larger than the maximum read length, if it // is known (e.g. if a QC analysis was run just before Trim was called). if ((myTrimmer as TrimByLength).TrimLength >= 1) { MessageBoxResult tooLargeReadLength = TryConfirmLargeReadLength(args.InputInfo.Filename, Convert.ToInt64(Math.Round((myTrimmer as TrimByLength).TrimLength))); if (tooLargeReadLength == MessageBoxResult.Cancel) { e.Cancel = true; return; } } } else if (e.Argument is TrimByQualityArgs) { args = e.Argument as TrimByQualityArgs; myTrimmer = (e.Argument as TrimByQualityArgs).trimmer; } else { args = e.Argument as TrimByRegexArgs; myTrimmer = (e.Argument as TrimByRegexArgs).trimmer; } myTrimmer.Worker = worker; myTrimmer.WorkerArgs = e; myTrimmer.TrimAll(); // Report results StringBuilder report = new StringBuilder(); report.AppendLine(string.Format(Resource.TrimReport, myTrimmer.TrimCount, myTrimmer.Counted)); report.AppendLine(string.Format(Resource.DiscardReport, myTrimmer.DiscardCount, myTrimmer.Counted)); this.OpenInExplorer(args.OutputFilename); e.Result = report.ToString(); } catch (ArgumentNullException ex) { e.Cancel = true; if (worker.CancellationPending) { return; } MessageBox.Show(ex.TargetSite + ": " + ex.Message); } catch (Exception ex) { e.Cancel = true; if (worker.CancellationPending) { return; } MessageBox.Show(ex.TargetSite + ": " + ex.Message); } } }