private void AddRetentionTimePredictor(LibraryManager.BuildState buildState) { var predictorName = Helpers.GetUniqueName(buildState.LibrarySpec.Name, Settings.Default.RetentionTimeList.Select(rt => rt.Name).ToArray()); using (var addPredictorDlg = new AddRetentionTimePredictorDlg(predictorName, buildState.LibrarySpec.FilePath, false)) { if (addPredictorDlg.ShowDialog(TopMostApplicationForm) == DialogResult.OK) { Settings.Default.RTScoreCalculatorList.Add(addPredictorDlg.Calculator); Settings.Default.RetentionTimeList.Add(addPredictorDlg.Regression); NotificationContainer.ModifyDocument(Resources.LibraryBuildNotificationHandler_AddRetentionTimePredictor_Add_retention_time_predictor, doc => doc.ChangeSettings(doc.Settings.ChangePeptidePrediction(predict => predict.ChangeRetentionTime(addPredictorDlg.Regression)))); } } }
public void LibraryBuildCompleteCallback(LibraryManager.BuildState buildState, bool success) { // Completion needs to happen on a separate thread because of the access to UI elements // In order to make sure the thread handle is released, it needs to call Application.ThreadExit() var threadComplete = BackgroundEventThreads.CreateThreadForAction(() => { if (success && NotificationContainerForm.IsHandleCreated) { // Only one form showing at a time lock (this) { RemoveLibraryBuildNotification(); var frm = new BuildLibraryNotification(buildState.LibrarySpec.Name); frm.Activated += notification_Activated; frm.Shown += notification_Shown; frm.ExploreLibrary += notification_ExploreLibrary; frm.NotificationComplete += notification_NotificationComplete; Point anchor = NotificationAnchor; frm.Left = anchor.X; frm.Top = anchor.Y - frm.Height; NotificationContainerForm.BeginInvoke(new Action(() => { if (!string.IsNullOrEmpty(buildState.ExtraMessage)) { MessageDlg.Show(TopMostApplicationForm, buildState.ExtraMessage); } if (buildState.IrtStandard != null && !buildState.IrtStandard.Name.Equals(IrtStandard.EMPTY.Name) && AddIrts(buildState)) { AddRetentionTimePredictor(buildState); } })); frm.Start(); Assume.IsNull(Interlocked.Exchange(ref _notification, frm)); } } }); threadComplete.Name = @"Library Build Completion"; threadComplete.Start(); }
private bool AddIrts(LibraryManager.BuildState buildState) { try { Library lib; ProcessedIrtAverages processed = null; var initialMessage = Resources.LibraryBuildNotificationHandler_LibraryBuildCompleteCallback_Adding_iRTs_to_library; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_LibraryBuildCompleteCallback_Adding_iRTs_to_library }) { var status = longWait.PerformWork(TopMostApplicationForm, 800, monitor => { var initStatus = new ProgressStatus(initialMessage).ChangeSegments(0, 2); monitor.UpdateProgress(initStatus); lib = NotificationContainer.LibraryManager.TryGetLibrary(buildState.LibrarySpec) ?? NotificationContainer.LibraryManager.LoadLibrary(buildState.LibrarySpec, () => new DefaultFileLoadMonitor(monitor)); foreach (var stream in lib.ReadStreams) { stream.CloseStream(); } if (longWait.IsCanceled) { return; } var irtProviders = lib.RetentionTimeProvidersIrt.ToArray(); if (!irtProviders.Any()) { irtProviders = lib.RetentionTimeProviders.ToArray(); } processed = RCalcIrt.ProcessRetentionTimes(monitor, irtProviders, irtProviders.Length, buildState.IrtStandard.Peptides.ToArray(), new DbIrtPeptide[0]); }); if (status.IsCanceled) { return(false); } if (status.IsError) { throw status.ErrorException; } } using (var resultsDlg = new AddIrtPeptidesDlg(AddIrtPeptidesLocation.spectral_library, processed)) { if (resultsDlg.ShowDialog(TopMostApplicationForm) != DialogResult.OK) { return(false); } } var recalibrate = false; if (processed.CanRecalibrateStandards(buildState.IrtStandard.Peptides)) { using (var dlg = new MultiButtonMsgDlg( TextUtil.LineSeparate(Resources.LibraryGridViewDriver_AddToLibrary_Do_you_want_to_recalibrate_the_iRT_standard_values_relative_to_the_peptides_being_added_, Resources.LibraryGridViewDriver_AddToLibrary_This_can_improve_retention_time_alignment_under_stable_chromatographic_conditions_), MultiButtonMsgDlg.BUTTON_YES, MultiButtonMsgDlg.BUTTON_NO, false)) { if (dlg.ShowDialog(TopMostApplicationForm) == DialogResult.Yes) { recalibrate = true; } } } var processedDbIrtPeptides = processed.DbIrtPeptides.ToArray(); if (!processedDbIrtPeptides.Any()) { return(false); } using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_LibraryBuildCompleteCallback_Adding_iRTs_to_library }) { ImmutableList <DbIrtPeptide> newStandards = null; var status = longWait.PerformWork(TopMostApplicationForm, 800, monitor => { if (recalibrate) { monitor.UpdateProgress(new ProgressStatus().ChangeSegments(0, 2)); newStandards = ImmutableList.ValueOf(processed.RecalibrateStandards(buildState.IrtStandard.Peptides)); processed = RCalcIrt.ProcessRetentionTimes( monitor, processed.ProviderData.Select(data => data.Value.RetentionTimeProvider), processed.ProviderData.Count, newStandards.ToArray(), new DbIrtPeptide[0]); } var irtDb = IrtDb.CreateIrtDb(buildState.LibrarySpec.FilePath); irtDb.AddPeptides(monitor, (newStandards ?? buildState.IrtStandard.Peptides).Concat(processedDbIrtPeptides).ToList()); }); if (status.IsError) { throw status.ErrorException; } } } catch (Exception x) { MessageDlg.ShowWithException(TopMostApplicationForm, TextUtil.LineSeparate(Resources.LibraryBuildNotificationHandler_LibraryBuildCompleteCallback_An_error_occurred_trying_to_add_iRTs_to_the_library_, x.Message), x); return(false); } return(true); }
public void LibraryBuildCompleteCallback(LibraryManager.BuildState buildState, bool success) { // Completion needs to happen on a separate thread because of the access to UI elements // In order to make sure the thread handle is released, it needs to call Application.ThreadExit() var threadComplete = BackgroundEventThreads.CreateThreadForAction(() => { if (success && NotificationContainerForm.IsHandleCreated) { // Only one form showing at a time lock (this) { RemoveLibraryBuildNotification(); var frm = new BuildLibraryNotification(buildState.LibrarySpec.Name); frm.Activated += notification_Activated; frm.Shown += notification_Shown; frm.ExploreLibrary += notification_ExploreLibrary; frm.NotificationComplete += notification_NotificationComplete; Point anchor = NotificationAnchor; frm.Left = anchor.X; frm.Top = anchor.Y - frm.Height; NotificationContainerForm.BeginInvoke(new Action(() => { if (!string.IsNullOrEmpty(buildState.ExtraMessage)) { MessageDlg.Show(TopMostApplicationForm, buildState.ExtraMessage); } if (buildState.IrtStandard != null && !buildState.IrtStandard.Name.Equals(IrtStandard.EMPTY.Name)) { // Load library Library lib = null; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Loading_library }) { var status = longWait.PerformWork(TopMostApplicationForm, 800, monitor => { lib = NotificationContainer.LibraryManager.TryGetLibrary(buildState.LibrarySpec) ?? NotificationContainer.LibraryManager.LoadLibrary(buildState.LibrarySpec, () => new DefaultFileLoadMonitor(monitor)); foreach (var stream in lib.ReadStreams) { stream.CloseStream(); } }); if (status.IsCanceled) { lib = null; } if (status.IsError) { throw status.ErrorException; } } // Add iRTs to library if (AddIrts(lib, buildState.LibrarySpec, buildState.IrtStandard, NotificationContainerForm, true)) { AddRetentionTimePredictor(buildState); } } })); frm.Start(); Assume.IsNull(Interlocked.Exchange(ref _notification, frm)); } } }); threadComplete.Name = @"Library Build Completion"; threadComplete.Start(); }
private bool BuildPeptideSearchLibrary(CancelEventArgs e) { // Nothing to build, if now search files were specified if (!SearchFilenames.Any()) { var libraries = DocumentContainer.Document.Settings.PeptideSettings.Libraries; if (!libraries.HasLibraries) { return(false); } var libSpec = libraries.LibrarySpecs.FirstOrDefault(s => s.IsDocumentLibrary); return(libSpec != null && LoadPeptideSearchLibrary(libSpec)); } double cutOffScore; MessageBoxHelper helper = new MessageBoxHelper(WizardForm); if (!helper.ValidateDecimalTextBox(textCutoff, 0, 1.0, out cutOffScore)) { e.Cancel = true; return(false); } ImportPeptideSearch.CutoffScore = cutOffScore; BiblioSpecLiteBuilder builder; try { builder = ImportPeptideSearch.GetLibBuilder(DocumentContainer.Document, DocumentContainer.DocumentFilePath, cbIncludeAmbiguousMatches.Checked); builder.PreferEmbeddedSpectra = PreferEmbeddedSpectra; builder.DebugMode = DebugMode; } catch (FileEx.DeleteException de) { MessageDlg.ShowException(this, de); return(false); } bool retry = false; do { using (var longWaitDlg = new LongWaitDlg { Text = Resources.BuildPeptideSearchLibraryControl_BuildPeptideSearchLibrary_Building_Peptide_Search_Library, Message = Resources.BuildPeptideSearchLibraryControl_BuildPeptideSearchLibrary_Building_document_library_for_peptide_search_, }) { // Disable the wizard, because the LongWaitDlg does not try { ImportPeptideSearch.ClosePeptideSearchLibraryStreams(DocumentContainer.Document); var buildState = new LibraryManager.BuildState(null, null); var status = longWaitDlg.PerformWork(WizardForm, 800, monitor => LibraryManager.BuildLibraryBackground(DocumentContainer, builder, monitor, buildState)); LastBuildCommandArgs = buildState.BuildCommandArgs; LastBuildOutput = buildState.BuildOutput; if (status.IsError) { // E.g. could not find external raw data for MaxQuant msms.txt; ask user if they want to retry with "prefer embedded spectra" option if (BiblioSpecLiteBuilder.IsLibraryMissingExternalSpectraError(status.ErrorException)) { var response = ShowLibraryMissingExternalSpectraError(WizardForm, status.ErrorException); if (response == UpdateProgressResponse.cancel) { return(false); } else if (response == UpdateProgressResponse.normal) { builder.PreferEmbeddedSpectra = true; } retry = true; } else { MessageDlg.ShowException(WizardForm, status.ErrorException); return(false); } } } catch (Exception x) { MessageDlg.ShowWithException(WizardForm, TextUtil.LineSeparate(string.Format(Resources.BuildPeptideSearchLibraryControl_BuildPeptideSearchLibrary_Failed_to_build_the_library__0__, Path.GetFileName(BiblioSpecLiteSpec.GetLibraryFileName(DocumentContainer.DocumentFilePath))), x.Message), x); return(false); } } } while (retry); var docLibSpec = builder.LibrarySpec.ChangeDocumentLibrary(true); Settings.Default.SpectralLibraryList.Insert(0, docLibSpec); // Go ahead and load the library - we'll need it for // the modifications and chromatograms page. if (!LoadPeptideSearchLibrary(docLibSpec)) { return(false); } var selectedIrtStandard = _driverStandards.SelectedItem; var addedIrts = false; if (selectedIrtStandard != null && !selectedIrtStandard.Name.Equals(IrtStandard.EMPTY.Name)) { addedIrts = AddIrtLibraryTable(docLibSpec.FilePath, selectedIrtStandard); } var docNew = ImportPeptideSearch.AddDocumentSpectralLibrary(DocumentContainer.Document, docLibSpec); if (docNew == null) { return(false); } if (addedIrts) { docNew = ImportPeptideSearch.AddRetentionTimePredictor(docNew, docLibSpec); } DocumentContainer.ModifyDocumentNoUndo(doc => docNew); if (!string.IsNullOrEmpty(builder.AmbiguousMatchesMessage)) { MessageDlg.Show(WizardForm, builder.AmbiguousMatchesMessage); } return(true); }