public IEnumerable <DigestedPeptide> DigestSequence(string proteinSequence, int maxMissedCleavages, int?maxPeptideSequenceLength) { if (string.IsNullOrEmpty(proteinSequence)) { yield break; } FastaSequence fastaSequence; try { fastaSequence = new FastaSequence(@"name", @"description", new List <ProteinMetadata>(), proteinSequence); } catch (InvalidDataException) { // It's possible that the peptide sequence in the fasta file was bogus, in which case we just don't digest it. yield break; } var digestSettings = new DigestSettings(maxMissedCleavages, false); foreach (var digest in _enzyme.Digest(fastaSequence, digestSettings, maxPeptideSequenceLength)) { var digestedPeptide = new DigestedPeptide { Index = digest.Begin ?? 0, Sequence = digest.Target.Sequence }; yield return(digestedPeptide); } }
public IEnumerable <PeptideDocNode> CreatePeptideDocNodes(SrmSettings settings, bool useFilter, Target peptideSequence) { PeptideSettings pepSettings = settings.PeptideSettings; DigestSettings digest = pepSettings.DigestSettings; IPeptideFilter filter = (useFilter ? settings : PeptideFilter.UNFILTERED); int? maxLen = null, minLen = null; var pick = pepSettings.Libraries.Pick; if (useFilter && pick != PeptidePick.library && pick != PeptidePick.either) { // CONSIDER(brendanx): It should be possible to get min and max length from libraries maxLen = pepSettings.Filter.MaxPeptideLength; minLen = pepSettings.Filter.MinPeptideLength; } foreach (var peptide in pepSettings.Enzyme.Digest(this, digest, maxLen, minLen)) { if (null != peptideSequence && !Equals(peptideSequence, peptide.Target)) { continue; } foreach (var nodePep in peptide.CreateDocNodes(settings, filter)) { yield return(nodePep); } } }
public IEnumerable <DigestedPeptide> Digest(Protein protein) { if (string.IsNullOrEmpty(protein.Sequence)) { yield break; } FastaSequence fastaSequence; try { fastaSequence = new FastaSequence("name", "description", new List <ProteinMetadata>(), protein.Sequence); // Not L10N } catch (InvalidDataException) { // It's possible that the peptide sequence in the fasta file was bogus, in which case we just don't digest it. yield break; } DigestSettings digestSettings = new DigestSettings(6, false); foreach (var digest in _enzyme.Digest(fastaSequence, digestSettings)) { var digestedPeptide = new DigestedPeptide { Index = digest.Begin ?? 0, Sequence = digest.Sequence }; yield return(digestedPeptide); } }
public Digestion Digest(Enzyme enzyme, DigestSettings digestSettings, ILoadMonitor loader) { IProgressStatus progressStatus = new ProgressStatus(string.Format(Resources.BackgroundProteomeSpec_Digest_Digesting__0__, enzyme.Name)); loader.UpdateProgress(progressStatus); using (var proteomeDb = OpenProteomeDb()) { return(proteomeDb.Digest(new ProteaseImpl(enzyme), digestSettings.MaxMissedCleavages, loader, ref progressStatus)); } }
public Digestion Digest(Enzyme enzyme, DigestSettings digestSettings, ILoadMonitor loader) { ProgressStatus progressStatus = new ProgressStatus(string.Format(Resources.BackgroundProteomeSpec_Digest_Digesting__0__, enzyme.Name)); using (var proteomeDb = OpenProteomeDb()) { return(proteomeDb.Digest(new ProteaseImpl(enzyme), (s, i) => { loader.UpdateProgress(progressStatus.ChangePercentComplete(i)); return !loader.IsCanceled; })); } }
public IEnumerable <PeptideDocNode> CreatePeptideDocNodes(SrmSettings settings, bool useFilter, string peptideSequence) { PeptideSettings pepSettings = settings.PeptideSettings; DigestSettings digest = pepSettings.DigestSettings; IPeptideFilter filter = (useFilter ? settings : PeptideFilter.UNFILTERED); foreach (var peptide in pepSettings.Enzyme.Digest(this, digest)) { if (null != peptideSequence && peptideSequence != peptide.Sequence) { continue; } foreach (var nodePep in peptide.CreateDocNodes(settings, filter)) { yield return(nodePep); } } }
public bool ImportFasta() { var settings = SkylineWindow.Document.Settings; var peptideSettings = settings.PeptideSettings; int missedCleavages = MaxMissedCleavages; var enzyme = Enzyme; if (!Equals(missedCleavages, peptideSettings.DigestSettings.MaxMissedCleavages) || !Equals(enzyme, peptideSettings.Enzyme)) { var digest = new DigestSettings(missedCleavages, peptideSettings.DigestSettings.ExcludeRaggedEnds); peptideSettings = peptideSettings.ChangeDigestSettings(digest).ChangeEnzyme(enzyme); SkylineWindow.ModifyDocument(string.Format(Resources.ImportFastaControl_ImportFasta_Change_digestion_settings), doc => doc.ChangeSettings(settings.ChangePeptideSettings(peptideSettings))); } if (!ContainsFastaContent) // The user didn't specify any FASTA content { var docCurrent = SkylineWindow.DocumentUI; // If the document has precursor transitions already, then just trust the user // knows what they are doing, and this document is already set up for MS1 filtering if (HasPrecursorTransitions(docCurrent)) { return(true); } if (docCurrent.PeptideCount == 0) { MessageDlg.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_peptides_, Resources.ImportFastaControl_ImportFasta_Please_import_FASTA_to_add_peptides_to_the_document_)); return(false); } if (MessageBox.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_precursor_transitions_, Resources.ImportFastaControl_ImportFasta_Would_you_like_to_change_the_document_settings_to_automatically_pick_the_precursor_transitions_specified_in_the_full_scan_settings_), Program.Name, MessageBoxButtons.OKCancel) != DialogResult.OK) { return(false); } SkylineWindow.ModifyDocument(Resources.ImportFastaControl_ImportFasta_Change_settings_to_add_precursors, doc => ImportPeptideSearch.ChangeAutoManageChildren(doc, PickLevel.transitions, true)); } else // The user specified some FASTA content { // If the user is about to add any new transitions by importing // FASTA, set FragmentType='p' and AutoSelect=true var docCurrent = SkylineWindow.Document; var docNew = ImportPeptideSearch.PrepareImportFasta(docCurrent); var nodeInsert = SkylineWindow.SequenceTree.SelectedNode as SrmTreeNode; IdentityPath selectedPath = nodeInsert != null ? nodeInsert.Path : null; int emptyPeptideGroups = 0; if (!_fastaFile) { // Import FASTA as content docNew = ImportFastaHelper.AddFasta(docNew, ref selectedPath, out emptyPeptideGroups); // Document will be null if there was an error if (docNew == null) { return(false); } } else { // Import FASTA as file var fastaPath = tbxFasta.Text; try { using (var longWaitDlg = new LongWaitDlg(SkylineWindow) { Text = Resources.ImportFastaControl_ImportFasta_Insert_FASTA }) { IdentityPath to = selectedPath; var docImportFasta = docNew; longWaitDlg.PerformWork(WizardForm, 1000, longWaitBroker => { IdentityPath nextAdd; docImportFasta = ImportPeptideSearch.ImportFasta(docImportFasta, fastaPath, longWaitBroker, to, out selectedPath, out nextAdd, out emptyPeptideGroups); }); docNew = docImportFasta; } } catch (Exception x) { MessageDlg.ShowWithException(this, string.Format(Resources.SkylineWindow_ImportFastaFile_Failed_reading_the_file__0__1__, fastaPath, x.Message), x); return(false); } } // Check for empty proteins docNew = ImportFastaHelper.HandleEmptyPeptideGroups(WizardForm, emptyPeptideGroups, docNew); // Document will be null if user was given option to keep or remove empty proteins and pressed cancel if (docNew == null) { return(false); } SkylineWindow.ModifyDocument(Resources.ImportFastaControl_ImportFasta_Insert_FASTA, doc => { if (!ReferenceEquals(doc, docCurrent)) { throw new InvalidDataException(Resources.SkylineWindow_ImportFasta_Unexpected_document_change_during_operation); } return(docNew); }); if (!VerifyAtLeastOnePrecursorTransition(SkylineWindow.Document)) { return(false); } } return(true); }
public bool ImportFasta(IrtStandard irtStandard) { var settings = DocumentContainer.Document.Settings; var peptideSettings = settings.PeptideSettings; int missedCleavages = MaxMissedCleavages; var enzyme = Enzyme; if (!Equals(missedCleavages, peptideSettings.DigestSettings.MaxMissedCleavages) || !Equals(enzyme, peptideSettings.Enzyme)) { var digest = new DigestSettings(missedCleavages, peptideSettings.DigestSettings.ExcludeRaggedEnds); peptideSettings = peptideSettings.ChangeDigestSettings(digest).ChangeEnzyme(enzyme); DocumentContainer.ModifyDocumentNoUndo(doc => doc.ChangeSettings(settings.ChangePeptideSettings(peptideSettings))); } if (!string.IsNullOrEmpty(DecoyGenerationMethod)) { if (!NumDecoys.HasValue || NumDecoys <= 0) { MessageDlg.Show(WizardForm, Resources.ImportFastaControl_ImportFasta_Please_enter_a_valid_number_of_decoys_per_target_greater_than_0_); txtNumDecoys.Focus(); return(false); } else if (Equals(DecoyGenerationMethod, DecoyGeneration.REVERSE_SEQUENCE) && NumDecoys > 1) { MessageDlg.Show(WizardForm, Resources.ImportFastaControl_ImportFasta_A_maximum_of_one_decoy_per_target_may_be_generated_when_using_reversed_decoys_); txtNumDecoys.Focus(); return(false); } } if (!ContainsFastaContent) // The user didn't specify any FASTA content { var docCurrent = DocumentContainer.Document; // If the document has precursor transitions already, then just trust the user // knows what they are doing, and this document is already set up for MS1 filtering if (HasPrecursorTransitions(docCurrent)) { return(true); } if (docCurrent.PeptideCount == 0) { MessageDlg.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_peptides_, Resources.ImportFastaControl_ImportFasta_Please_import_FASTA_to_add_peptides_to_the_document_)); return(false); } if (MessageBox.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_precursor_transitions_, Resources.ImportFastaControl_ImportFasta_Would_you_like_to_change_the_document_settings_to_automatically_pick_the_precursor_transitions_specified_in_the_full_scan_settings_), Program.Name, MessageBoxButtons.OKCancel) != DialogResult.OK) { return(false); } DocumentContainer.ModifyDocumentNoUndo(doc => ImportPeptideSearch.ChangeAutoManageChildren(doc, PickLevel.transitions, true)); } else // The user specified some FASTA content { // If the user is about to add any new transitions by importing // FASTA, set FragmentType='p' and AutoSelect=true var docCurrent = DocumentContainer.Document; var docNew = ImportPeptideSearch.PrepareImportFasta(docCurrent); var nodeInsert = _sequenceTree.SelectedNode as SrmTreeNode; IdentityPath selectedPath = nodeInsert != null ? nodeInsert.Path : null; var newPeptideGroups = new List <PeptideGroupDocNode>(); if (!_fastaFile) { FastaText = tbxFasta.Text; PasteError error = null; // Import FASTA as content using (var longWaitDlg = new LongWaitDlg(DocumentContainer) { Text = Resources.ImportFastaControl_ImportFasta_Insert_FASTA }) { var docImportFasta = docNew; longWaitDlg.PerformWork(WizardForm, 1000, longWaitBroker => { docImportFasta = ImportFastaHelper.AddFasta(docImportFasta, longWaitBroker, ref selectedPath, out newPeptideGroups, out error); }); docNew = docImportFasta; } // Document will be null if there was an error if (docNew == null) { ImportFastaHelper.ShowFastaError(error); return(false); } } else { // Import FASTA as file var fastaPath = tbxFasta.Text; try { using (var longWaitDlg = new LongWaitDlg(DocumentContainer) { Text = Resources.ImportFastaControl_ImportFasta_Insert_FASTA }) { IdentityPath to = selectedPath; var docImportFasta = docNew; longWaitDlg.PerformWork(WizardForm, 1000, longWaitBroker => { IdentityPath nextAdd; docImportFasta = ImportPeptideSearch.ImportFasta(docImportFasta, fastaPath, longWaitBroker, to, out selectedPath, out nextAdd, out newPeptideGroups); }); docNew = docImportFasta; } } catch (Exception x) { MessageDlg.ShowWithException(this, string.Format(Resources.SkylineWindow_ImportFastaFile_Failed_reading_the_file__0__1__, fastaPath, x.Message), x); return(false); } } if (!newPeptideGroups.Any()) { MessageDlg.Show(this, Resources.ImportFastaControl_ImportFasta_Importing_the_FASTA_did_not_create_any_target_proteins_); return(false); } // Filter proteins based on number of peptides and add decoys using (var dlg = new PeptidesPerProteinDlg(docNew, newPeptideGroups, DecoyGenerationMethod, NumDecoys ?? 0)) { docNew = dlg.ShowDialog(WizardForm) == DialogResult.OK ? dlg.DocumentFinal : null; } // Document will be null if user was given option to keep or remove empty proteins and pressed cancel if (docNew == null) { return(false); } // Add iRT standards if not present if (irtStandard != null && !irtStandard.Name.Equals(IrtStandard.EMPTY.Name)) { using (var reader = irtStandard.GetDocumentReader()) { if (reader != null) { var standardMap = new TargetMap <bool>(irtStandard.Peptides.Select(pep => new KeyValuePair <Target, bool>(pep.ModifiedTarget, true))); var docStandards = new TargetMap <bool>(docNew.Peptides .Where(nodePep => standardMap.ContainsKey(nodePep.ModifiedTarget)).Select(nodePep => new KeyValuePair <Target, bool>(nodePep.ModifiedTarget, true))); if (irtStandard.Peptides.Any(pep => !docStandards.ContainsKey(pep.ModifiedTarget))) { docNew = docNew.ImportDocumentXml(reader, string.Empty, Model.Results.MeasuredResults.MergeAction.remove, false, null, Settings.Default.StaticModList, Settings.Default.HeavyModList, new IdentityPath(docNew.Children.First().Id), out _, out _, false); } } } } if (AutoTrain) { if (!docNew.Peptides.Any(pep => pep.IsDecoy)) { MessageDlg.Show(this, Resources.ImportFastaControl_ImportFasta_Cannot_automatically_train_mProphet_model_without_decoys__but_decoy_options_resulted_in_no_decoys_being_generated__Please_increase_number_of_decoys_per_target__or_disable_automatic_training_of_mProphet_model_); return(false); } docNew = docNew.ChangeSettings(docNew.Settings.ChangePeptideIntegration(integration => integration.ChangeAutoTrain(true))); } DocumentContainer.ModifyDocumentNoUndo(doc => { if (!ReferenceEquals(doc, docCurrent)) { throw new InvalidDataException(Resources.SkylineWindow_ImportFasta_Unexpected_document_change_during_operation); } return(docNew); }); if (RequirePrecursorTransition && !VerifyAtLeastOnePrecursorTransition(DocumentContainer.Document)) { return(false); } } return(true); }
public bool ImportFasta() { var settings = SkylineWindow.Document.Settings; var peptideSettings = settings.PeptideSettings; int missedCleavages = MaxMissedCleavages; var enzyme = Enzyme; if (!Equals(missedCleavages, peptideSettings.DigestSettings.MaxMissedCleavages) || !Equals(enzyme, peptideSettings.Enzyme)) { var digest = new DigestSettings(missedCleavages, peptideSettings.DigestSettings.ExcludeRaggedEnds); peptideSettings = peptideSettings.ChangeDigestSettings(digest).ChangeEnzyme(enzyme); SkylineWindow.ModifyDocument(string.Format(Resources.ImportFastaControl_ImportFasta_Change_digestion_settings), doc => doc.ChangeSettings(settings.ChangePeptideSettings(peptideSettings))); } if (!string.IsNullOrEmpty(DecoyGenerationMethod)) { if (!NumDecoys.HasValue || NumDecoys < 0) { MessageDlg.Show(WizardForm, Resources.ImportFastaControl_ImportFasta_Please_enter_a_valid_non_negative_number_of_decoys_per_target_); txtNumDecoys.Focus(); return(false); } else if (Equals(DecoyGenerationMethod, DecoyGeneration.REVERSE_SEQUENCE) && NumDecoys > 1) { MessageDlg.Show(WizardForm, Resources.ImportFastaControl_ImportFasta_A_maximum_of_one_decoy_per_target_may_be_generated_when_using_reversed_decoys_); txtNumDecoys.Focus(); return(false); } } if (!ContainsFastaContent) // The user didn't specify any FASTA content { var docCurrent = SkylineWindow.DocumentUI; // If the document has precursor transitions already, then just trust the user // knows what they are doing, and this document is already set up for MS1 filtering if (HasPrecursorTransitions(docCurrent)) { return(true); } if (docCurrent.PeptideCount == 0) { MessageDlg.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_peptides_, Resources.ImportFastaControl_ImportFasta_Please_import_FASTA_to_add_peptides_to_the_document_)); return(false); } if (MessageBox.Show(WizardForm, TextUtil.LineSeparate(Resources.ImportFastaControl_ImportFasta_The_document_does_not_contain_any_precursor_transitions_, Resources.ImportFastaControl_ImportFasta_Would_you_like_to_change_the_document_settings_to_automatically_pick_the_precursor_transitions_specified_in_the_full_scan_settings_), Program.Name, MessageBoxButtons.OKCancel) != DialogResult.OK) { return(false); } SkylineWindow.ModifyDocument(Resources.ImportFastaControl_ImportFasta_Change_settings_to_add_precursors, doc => ImportPeptideSearch.ChangeAutoManageChildren(doc, PickLevel.transitions, true)); } else // The user specified some FASTA content { // If the user is about to add any new transitions by importing // FASTA, set FragmentType='p' and AutoSelect=true var docCurrent = SkylineWindow.Document; var docNew = ImportPeptideSearch.PrepareImportFasta(docCurrent); var nodeInsert = SkylineWindow.SequenceTree.SelectedNode as SrmTreeNode; IdentityPath selectedPath = nodeInsert != null ? nodeInsert.Path : null; var newPeptideGroups = new List <PeptideGroupDocNode>(); if (!_fastaFile) { // Import FASTA as content using (var longWaitDlg = new LongWaitDlg(SkylineWindow) { Text = Resources.ImportFastaControl_ImportFasta_Insert_FASTA }) { var docImportFasta = docNew; longWaitDlg.PerformWork(WizardForm, 1000, longWaitBroker => { docImportFasta = ImportFastaHelper.AddFasta(docImportFasta, longWaitBroker, ref selectedPath, out newPeptideGroups); }); docNew = docImportFasta; } // Document will be null if there was an error if (docNew == null) { return(false); } } else { // Import FASTA as file var fastaPath = tbxFasta.Text; try { using (var longWaitDlg = new LongWaitDlg(SkylineWindow) { Text = Resources.ImportFastaControl_ImportFasta_Insert_FASTA }) { IdentityPath to = selectedPath; var docImportFasta = docNew; longWaitDlg.PerformWork(WizardForm, 1000, longWaitBroker => { IdentityPath nextAdd; docImportFasta = ImportPeptideSearch.ImportFasta(docImportFasta, fastaPath, longWaitBroker, to, out selectedPath, out nextAdd, out newPeptideGroups); }); docNew = docImportFasta; } } catch (Exception x) { MessageDlg.ShowWithException(this, string.Format(Resources.SkylineWindow_ImportFastaFile_Failed_reading_the_file__0__1__, fastaPath, x.Message), x); return(false); } } if (!newPeptideGroups.Any()) { MessageDlg.Show(this, Resources.ImportFastaControl_ImportFasta_Importing_the_FASTA_did_not_create_any_target_proteins_); return(false); } // Filter proteins based on number of peptides and add decoys using (var dlg = new PeptidesPerProteinDlg(docNew, newPeptideGroups, DecoyGenerationMethod, NumDecoys ?? 0)) { docNew = dlg.ShowDialog(WizardForm) == DialogResult.OK ? dlg.DocumentFinal : null; } // Document will be null if user was given option to keep or remove empty proteins and pressed cancel if (docNew == null) { return(false); } if (AutoTrain) { docNew = docNew.ChangeSettings(docNew.Settings.ChangePeptideIntegration(integration => integration.ChangeAutoTrain(true))); } SkylineWindow.ModifyDocument(Resources.ImportFastaControl_ImportFasta_Insert_FASTA, doc => { if (!ReferenceEquals(doc, docCurrent)) { throw new InvalidDataException(Resources.SkylineWindow_ImportFasta_Unexpected_document_change_during_operation); } return(docNew); }); if (RequirePrecursorTransition && !VerifyAtLeastOnePrecursorTransition(SkylineWindow.Document)) { return(false); } } return(true); }