public static void GetLibIrtProviders(Library lib, IrtStandard standard, IProgressMonitor monitor, out IRetentionTimeProvider[] irtProviders, out List <IrtStandard> autoStandards, out DbIrtPeptide[] cirtPeptides) { monitor?.UpdateProgress(new ProgressStatus().ChangePercentComplete(-1)); irtProviders = lib.RetentionTimeProvidersIrt.ToArray(); if (!irtProviders.Any()) { irtProviders = lib.RetentionTimeProviders.ToArray(); } var isAuto = ReferenceEquals(standard, IrtStandard.AUTO); autoStandards = isAuto ? IrtStandard.BestMatch(irtProviders.SelectMany(provider => provider.PeptideRetentionTimes).Select(rt => rt.PeptideSequence)) : null; if (ReferenceEquals(standard, IrtStandard.CIRT_SHORT) || isAuto && autoStandards.Count == 0) { var libPeptides = new TargetMap <bool>(irtProviders .SelectMany(provider => provider.PeptideRetentionTimes) .Select(rt => new KeyValuePair <Target, bool>(rt.PeptideSequence, true))); cirtPeptides = IrtStandard.CIRT.Peptides.Where(pep => libPeptides.ContainsKey(pep.ModifiedTarget)).ToArray(); } else { cirtPeptides = new DbIrtPeptide[0]; } }
public void OkDialog() { var reader = new StringReader(textPeptides.Text); var standardPeptides = new List <DbIrtPeptide>(); var invalidLines = new List <string>(); string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); // Skip blank lines if (string.IsNullOrEmpty(line)) { continue; } DbIrtPeptide peptide = null; var target = TargetResolver.ResolveTarget(line); if (target == null || !_dictSequenceToPeptide.TryGetValue(target, out peptide)) // CONSIDER(bspratt) - small molecule equivalent? { invalidLines.Add(line); } standardPeptides.Add(peptide); } if (invalidLines.Count > 0) { string message; if (invalidLines.Count == 1) { message = ModeUIAwareStringFormat(Resources.ChangeIrtPeptidesDlg_OkDialog_The_sequence__0__is_not_currently_in_the_database, invalidLines[0]); MessageBox.Show(this, message, Program.Name); } else { message = TextUtil.LineSeparate(GetModeUIHelper().Translate(Resources.ChangeIrtPeptidesDlg_OkDialog_The_following_sequences_are_not_currently_in_the_database), string.Empty, TextUtil.LineSeparate(invalidLines), string.Empty, GetModeUIHelper().Translate(Resources.ChangeIrtPeptidesDlg_OkDialog_Standard_peptides_must_exist_in_the_database)); MessageBox.Show(this, message, Program.Name); } return; } _standardPeptides = standardPeptides.ToArray(); DialogResult = DialogResult.OK; }
public IrtDb UpdatePeptides(IList<DbIrtPeptide> newPeptides, IList<DbIrtPeptide> oldPeptides) { var setNew = new HashSet<long>(newPeptides.Select(pep => pep.Id.HasValue ? pep.Id.Value : 0)); var dictOld = oldPeptides.ToDictionary(pep => pep.PeptideModSeq); using (var session = OpenWriteSession()) using (var transaction = session.BeginTransaction()) { // Remove peptides that are no longer in the list foreach (var peptideOld in oldPeptides) { if (!peptideOld.Id.HasValue) continue; if (!setNew.Contains(peptideOld.Id.Value)) session.Delete(peptideOld); } // Add or update peptides that have changed from the old list foreach (var peptideNew in newPeptides) { DbIrtPeptide peptideOld; if (dictOld.TryGetValue(peptideNew.PeptideModSeq, out peptideOld) && Equals(peptideNew, peptideOld)) continue; // Create a new instance, because not doing this causes a BindingSource leak var peptideNewDisconnected = new DbIrtPeptide(peptideNew); session.SaveOrUpdate(peptideNewDisconnected); } transaction.Commit(); } return ChangeProp(ImClone(this), im => im.LoadPeptides(newPeptides)); }
public static bool AddIrts(Library lib, LibrarySpec libSpec, IrtStandard standard, Control parent, bool useTopMostForm = false) { if (lib == null || !lib.IsLoaded || standard == null || standard.Name.Equals(IrtStandard.EMPTY.Name)) { return(false); } Control GetParent() { return(useTopMostForm ? FormUtil.FindTopLevelOpenForm(f => f is BuildLibraryNotification) ?? parent : parent); } IRetentionTimeProvider[] irtProviders = null; var cirtPeptides = new DbIrtPeptide[0]; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Loading_retention_time_providers }) { var status = longWait.PerformWork(GetParent(), 800, monitor => { monitor.UpdateProgress(new ProgressStatus().ChangePercentComplete(-1)); irtProviders = lib.RetentionTimeProvidersIrt.ToArray(); if (!irtProviders.Any()) { irtProviders = lib.RetentionTimeProviders.ToArray(); } if (ReferenceEquals(standard, IrtStandard.CIRT_SHORT)) { var libPeptides = irtProviders.SelectMany(provider => provider.PeptideRetentionTimes).Select(rt => rt.PeptideSequence).ToHashSet(); cirtPeptides = IrtStandard.CIRT.Peptides.Where(pep => libPeptides.Contains(pep.ModifiedTarget)).ToArray(); } }); if (status.IsCanceled) { return(false); } if (status.IsError) { throw status.ErrorException; } } int?numCirt = null; if (cirtPeptides.Length >= RCalcIrt.MIN_PEPTIDES_COUNT) { using (var dlg = new AddIrtStandardsDlg(cirtPeptides.Length, string.Format( Resources.LibraryBuildNotificationHandler_AddIrts__0__distinct_CiRT_peptides_were_found__How_many_would_you_like_to_use_as_iRT_standards_, cirtPeptides.Length))) { if (dlg.ShowDialog(GetParent()) != DialogResult.OK) { return(false); } numCirt = dlg.StandardCount; } } var standardPeptides = standard.Peptides.ToArray(); ProcessedIrtAverages processed = null; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Processing_retention_times }) { try { var status = longWait.PerformWork(GetParent(), 800, monitor => { processed = !numCirt.HasValue ? RCalcIrt.ProcessRetentionTimes(monitor, irtProviders, standardPeptides, new DbIrtPeptide[0]) : RCalcIrt.ProcessRetentionTimesCirt(monitor, irtProviders, cirtPeptides, numCirt.Value, out standardPeptides); }); if (status.IsCanceled) { return(false); } if (status.IsError) { throw status.ErrorException; } } catch (Exception x) { MessageDlg.ShowWithException(GetParent(), TextUtil.LineSeparate( Resources.BuildPeptideSearchLibraryControl_AddIrtLibraryTable_An_error_occurred_while_processing_retention_times_, x.Message), x); return(false); } } using (var resultsDlg = new AddIrtPeptidesDlg(AddIrtPeptidesLocation.spectral_library, processed)) { if (resultsDlg.ShowDialog(GetParent()) != DialogResult.OK) { return(false); } } var recalibrate = false; if (processed.CanRecalibrateStandards(standardPeptides)) { 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)) { recalibrate = dlg.ShowDialog(GetParent()) == DialogResult.Yes; } } var processedDbIrtPeptides = processed.DbIrtPeptides.ToArray(); if (!processedDbIrtPeptides.Any()) { return(false); } using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Adding_iRTs_to_library }) { try { DbIrtPeptide[] newStandards = null; var status = longWait.PerformWork(GetParent(), 800, monitor => { if (recalibrate) { monitor.UpdateProgress(new ProgressStatus().ChangeSegments(0, 2)); newStandards = processed.RecalibrateStandards(standardPeptides).ToArray(); processed = RCalcIrt.ProcessRetentionTimes(monitor, processed.ProviderData.Select(data => data.RetentionTimeProvider).ToArray(), newStandards.ToArray(), new DbIrtPeptide[0]); } var irtDb = IrtDb.CreateIrtDb(libSpec.FilePath); irtDb.AddPeptides(monitor, (newStandards ?? standardPeptides).Concat(processed.DbIrtPeptides).ToList()); }); if (status.IsError) { throw status.ErrorException; } } catch (Exception x) { MessageDlg.ShowWithException(GetParent(), TextUtil.LineSeparate( Resources.LibraryBuildNotificationHandler_AddIrts_An_error_occurred_trying_to_add_iRTs_to_the_library_, x.Message), x); return(false); } } return(true); }
private DbIrtPeptide NewPeptide(DbIrtPeptide dbPeptide) { return new DbIrtPeptide(dbPeptide.PeptideModSeq, dbPeptide.Irt, dbPeptide.Standard, dbPeptide.TimeSource); }
private static void CheckIrtStandardPeptides(DbIrtPeptide[] standardPeptidesArray, string irtDefText, double threshold) { int iRow = 0; var irtDefReader = new StringReader(irtDefText); string line; while ((line = irtDefReader.ReadLine()) != null) { Assert.AreEqual(standardPeptidesArray[iRow].Irt, double.Parse(line.Split(TextUtil.SEPARATOR_TSV)[1]), threshold); iRow++; } }
public void OkDialog() { var reader = new StringReader(textPeptides.Text); var standardPeptides = new List <DbIrtPeptide>(); var invalidLines = new List <string>(); string line; while ((line = reader.ReadLine()) != null) { line = line.Trim(); // Skip blank lines if (string.IsNullOrEmpty(line)) { continue; } DbIrtPeptide peptide = null; var target = TargetResolver.ResolveTarget(line); if (target == null || !_dictSequenceToPeptide.TryGetValue(target, out peptide)) // CONSIDER(bspratt) - small molecule equivalent? { invalidLines.Add(line); } standardPeptides.Add(peptide); } if (invalidLines.Count > 0) { string message; if (invalidLines.Count == 1) { message = ModeUIAwareStringFormat(Resources.ChangeIrtPeptidesDlg_OkDialog_The_sequence__0__is_not_currently_in_the_database, invalidLines[0]); MessageBox.Show(this, message, Program.Name); } else { message = TextUtil.LineSeparate(GetModeUIHelper().Translate(Resources.ChangeIrtPeptidesDlg_OkDialog_The_following_sequences_are_not_currently_in_the_database), string.Empty, TextUtil.LineSeparate(invalidLines), string.Empty, GetModeUIHelper().Translate(Resources.ChangeIrtPeptidesDlg_OkDialog_Standard_peptides_must_exist_in_the_database)); MessageBox.Show(this, message, Program.Name); } return; } ReplacementProtein = null; var selected = (ComboBoxProtein)comboProteins.SelectedItem; if (selected.IsNotNull) { var removedPeptides = selected.RemovedPeptides(TargetResolver, textPeptides.Lines).ToArray(); if (removedPeptides.Any()) { switch (MultiButtonMsgDlg.Show(this, TextUtil.LineSeparate( Resources.ChangeIrtPeptidesDlg_OkDialog_The_following_peptides_were_removed_, TextUtil.LineSeparate(removedPeptides.Select(nodePep => nodePep.ModifiedSequenceDisplay)), Resources.ChangeIrtPeptidesDlg_OkDialog_Would_you_like_to_remove_them_from_the_document_), MultiButtonMsgDlg.BUTTON_YES, MultiButtonMsgDlg.BUTTON_NO, true)) { case DialogResult.Yes: ReplacementProtein = selected.RemovePeptides(TargetResolver, textPeptides.Lines); break; case DialogResult.No: break; case DialogResult.Cancel: return; } } } _standardPeptides = standardPeptides.ToArray(); DialogResult = DialogResult.OK; }
/// <summary> /// Determines whether a peptide is contained in this set of standard peptides. /// </summary> /// <param name="peptide">The peptide to check for.</param> /// <param name="irtTolerance">Tolerance used to compare iRTs; if null, iRTs are not required to match.</param> /// <returns>True if the peptide is contained in this set of standard peptides; false otherwise.</returns> public bool Contains(DbIrtPeptide peptide, double? irtTolerance) { return ContainsMatch(Peptides, peptide, irtTolerance); }
private DbIrtPeptide MatchingStandard(DbIrtPeptide peptide, double? irtTolerance) { return Peptides.FirstOrDefault(p => Match(peptide, p, irtTolerance)); }
public static bool Match(DbIrtPeptide x, DbIrtPeptide y, double? irtTolerance) { return Equals(x.PeptideModSeq, y.PeptideModSeq) && (!irtTolerance.HasValue || Math.Abs(x.Irt - y.Irt) < irtTolerance.Value); }
public static bool ContainsMatch(IEnumerable<DbIrtPeptide> peptides, DbIrtPeptide peptide, double? irtTolerance) { return peptides.Any(p => Match(p, peptide, irtTolerance)); }
/// <summary> /// Determines whether any of the iRT standards contain the peptide. /// </summary> /// <param name="peptide">The peptide to check for.</param> /// <param name="irtTolerance">Tolerance used to compare iRTs; if null, iRTs are not required to match.</param> /// <returns>True if the peptide is in any of the iRT standards; false otherwise.</returns> public static bool AnyContains(DbIrtPeptide peptide, double? irtTolerance) { return ALL.Any(standard => standard.Contains(peptide, irtTolerance)); }
/// <summary> /// This function requires that Database not be null, that is, either OpenDatabase has been /// successfully called (nothing thrown), or a valid IrtDb was passed to the constructor /// </summary> public override double ScoreSequence(string seq) { DbIrtPeptide pep = Database.GetPeptide(seq); return(pep == null ? 0 : pep.Irt); }
public static bool AddIrts(IrtRegressionType regressionType, Library lib, LibrarySpec libSpec, IrtStandard standard, Control parent, bool useTopMostForm) { if (lib == null || !lib.IsLoaded || standard == null || standard.Name.Equals(IrtStandard.EMPTY.Name)) { return(false); } Control GetParent() { return(useTopMostForm ? FormUtil.FindTopLevelOpenForm(f => f is BuildLibraryNotification) ?? parent : parent); } IRetentionTimeProvider[] irtProviders = null; var isAuto = ReferenceEquals(standard, IrtStandard.AUTO); List <IrtStandard> autoStandards = null; var cirtPeptides = new DbIrtPeptide[0]; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Loading_retention_time_providers }) { var standard1 = standard; var status = longWait.PerformWork(GetParent(), 800, monitor => { ImportPeptideSearch.GetLibIrtProviders(lib, standard1, monitor, out irtProviders, out autoStandards, out cirtPeptides); }); if (status.IsCanceled) { return(false); } if (status.IsError) { throw status.ErrorException; } } int?numCirt = null; if (cirtPeptides.Length >= RCalcIrt.MIN_PEPTIDES_COUNT) { using (var dlg = new AddIrtStandardsDlg(cirtPeptides.Length, string.Format( Resources.LibraryBuildNotificationHandler_AddIrts__0__distinct_CiRT_peptides_were_found__How_many_would_you_like_to_use_as_iRT_standards_, cirtPeptides.Length))) { if (dlg.ShowDialog(GetParent()) != DialogResult.OK) { return(false); } numCirt = dlg.StandardCount; } } else if (isAuto) { switch (autoStandards.Count) { case 0: standard = new IrtStandard(XmlNamedElement.NAME_INTERNAL, null, null, IrtPeptidePicker.Pick(irtProviders, 10)); break; case 1: standard = autoStandards[0]; break; default: using (var selectIrtStandardDlg = new SelectIrtStandardDlg(autoStandards)) { if (selectIrtStandardDlg.ShowDialog(GetParent()) != DialogResult.OK) { return(false); } standard = selectIrtStandardDlg.Selected; } break; } } var standardPeptides = standard.Peptides.ToArray(); ProcessedIrtAverages processed = null; using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Processing_retention_times }) { try { var status = longWait.PerformWork(GetParent(), 800, monitor => { processed = ImportPeptideSearch.ProcessRetentionTimes(numCirt, irtProviders, standardPeptides, cirtPeptides, regressionType, monitor, out var newStandardPeptides); if (newStandardPeptides != null) { standardPeptides = newStandardPeptides; } }); if (status.IsCanceled) { return(false); } if (status.IsError) { throw status.ErrorException; } } catch (Exception x) { MessageDlg.ShowWithException(GetParent(), TextUtil.LineSeparate( Resources.BuildPeptideSearchLibraryControl_AddIrtLibraryTable_An_error_occurred_while_processing_retention_times_, x.Message), x); return(false); } } using (var resultsDlg = new AddIrtPeptidesDlg(AddIrtPeptidesLocation.spectral_library, processed)) { if (resultsDlg.ShowDialog(GetParent()) != DialogResult.OK) { return(false); } } var recalibrate = false; if (processed.CanRecalibrateStandards(standardPeptides)) { 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)) { recalibrate = dlg.ShowDialog(GetParent()) == DialogResult.Yes; } } if (!processed.DbIrtPeptides.Any()) { return(false); } using (var longWait = new LongWaitDlg { Text = Resources.LibraryBuildNotificationHandler_AddIrts_Adding_iRTs_to_library }) { try { var status = longWait.PerformWork(GetParent(), 800, monitor => { ImportPeptideSearch.CreateIrtDb(libSpec.FilePath, processed, standardPeptides, recalibrate, regressionType, monitor); }); if (status.IsError) { throw status.ErrorException; } } catch (Exception x) { MessageDlg.ShowWithException(GetParent(), TextUtil.LineSeparate( Resources.LibraryBuildNotificationHandler_AddIrts_An_error_occurred_trying_to_add_iRTs_to_the_library_, x.Message), x); return(false); } } return(true); }