public SearchModificationAndSymbol(SearchModificationObj mod, char symbol) { Mod = mod; Symbol = symbol; IsNTerm = GetIsNTerm(mod); IsCTerm = GetIsCTerm(mod); Residues = mod.Residues; }
private void CreateMzidSettings(SpectrumIdentificationProtocolObj settings) { settings.AdditionalSearchParams.Items.AddRange(new ParamBaseObj[] { new CVParamObj(CV.CVID.MS_parent_mass_type_mono), new CVParamObj(CV.CVID.MS_fragment_mass_type_mono), new UserParamObj() { Name = "TargetDecoyApproach", Value = (options.TargetDecoySearchMode == DatabaseSearchMode.Both).ToString() }, new UserParamObj() { Name = "MinSequenceLength", Value = options.MinSequenceLength.ToString() }, new UserParamObj() { Name = "MaxSequenceLength", Value = options.MaxSequenceLength.ToString() }, new UserParamObj() { Name = "MaxNumNTermCleavages", Value = options.MaxNumNTermCleavages.ToString() }, new UserParamObj() { Name = "MaxNumCTermCleavages", Value = options.MaxNumCTermCleavages.ToString() }, new UserParamObj() { Name = "MinPrecursorIonCharge", Value = options.MinPrecursorIonCharge.ToString() }, new UserParamObj() { Name = "MaxPrecursorIonCharge", Value = options.MaxPrecursorIonCharge.ToString() }, new UserParamObj() { Name = "MinProductIonCharge", Value = options.MinProductIonCharge.ToString() }, new UserParamObj() { Name = "MaxProductIonCharge", Value = options.MaxProductIonCharge.ToString() }, new UserParamObj() { Name = "MinSequenceMass", Value = options.MinSequenceMass.ToString(CultureInfo.InvariantCulture) }, new UserParamObj() { Name = "MaxSequenceMass", Value = options.MaxSequenceMass.ToString(CultureInfo.InvariantCulture) }, new UserParamObj() { Name = "PrecursorIonTolerance", Value = options.PrecursorIonTolerance.ToString() }, new UserParamObj() { Name = "ProductIonTolerance", Value = options.ProductIonTolerance.ToString() }, new UserParamObj() { Name = "SearchMode", Value = options.InternalCleavageMode.ToString() }, new UserParamObj() { Name = "NumMatchesPerSpectrum", Value = options.NumMatchesPerSpectrum.ToString() }, new UserParamObj() { Name = "TagBasedSearch", Value = options.TagBasedSearch.ToString() }, }); var activationMethod = options.ActivationMethod.ToString(); if (options.ActivationMethod == ActivationMethod.Unknown) { activationMethod = $"Determined By Spectrum ({options.ActivationMethod})"; } settings.AdditionalSearchParams.Items.Add(new UserParamObj() { Name = "SpecifiedActivationMethod", Value = activationMethod }); // Add search type, if not a target-deacoy search if (options.TargetDecoySearchMode != DatabaseSearchMode.Both) { settings.AdditionalSearchParams.Items.Add(new UserParamObj() { Name = "SearchType", Value = options.TargetDecoySearchMode.ToString() }); } // Get the search modifications as they were passed into the AminoAcidSet constructor... foreach (var mod in options.AminoAcidSet.SearchModifications) { var modObj = new SearchModificationObj() { FixedMod = mod.IsFixedModification, MassDelta = (float)mod.Modification.Mass, Residues = mod.TargetResidue.ToString(), }; // "*" is used for wildcard residue N-Term or C-Term modifications. mzIdentML standard says that "." should be used instead. if (modObj.Residues.Contains("*")) { modObj.Residues = modObj.Residues.Replace("*", "."); } // Really only using this for the modification name parsing for CVParams that exists with ModificationObj var tempMod = new ModificationObj(CV.CVID.MS_unknown_modification, mod.Modification.Name, 0, modObj.MassDelta); modObj.CVParams.Add(tempMod.CVParams.First()); if (mod.Location != SequenceLocation.Everywhere) { // specificity rules should be added var rule = new SpecificityRulesListObj(); switch (mod.Location) { case SequenceLocation.PeptideNTerm: rule.CVParams.Add(new CVParamObj(CV.CVID.MS_modification_specificity_peptide_N_term)); break; case SequenceLocation.PeptideCTerm: rule.CVParams.Add(new CVParamObj(CV.CVID.MS_modification_specificity_peptide_C_term)); break; case SequenceLocation.ProteinNTerm: rule.CVParams.Add(new CVParamObj(CV.CVID.MS_modification_specificity_protein_N_term)); break; case SequenceLocation.ProteinCTerm: rule.CVParams.Add(new CVParamObj(CV.CVID.MS_modification_specificity_protein_C_term)); break; case SequenceLocation.Everywhere: // not needed, the enclosing if should prevent ever hitting this break; default: // Limited by enum... break; } modObj.SpecificityRules.Add(rule); } settings.ModificationParams.Add(modObj); } // No enzyme for top-down search //settings.Enzymes.Enzymes.Add(new EnzymeObj()); settings.ParentTolerances.AddRange(new CVParamObj[] { new CVParamObj(CV.CVID.MS_search_tolerance_plus_value, options.PrecursorIonTolerancePpm.ToString(CultureInfo.InvariantCulture)) { UnitCvid = CV.CVID.UO_parts_per_million }, new CVParamObj(CV.CVID.MS_search_tolerance_minus_value, options.PrecursorIonTolerancePpm.ToString(CultureInfo.InvariantCulture)) { UnitCvid = CV.CVID.UO_parts_per_million }, }); settings.FragmentTolerances.AddRange(new CVParamObj[] { new CVParamObj(CV.CVID.MS_search_tolerance_plus_value, options.ProductIonTolerancePpm.ToString(CultureInfo.InvariantCulture)) { UnitCvid = CV.CVID.UO_parts_per_million }, new CVParamObj(CV.CVID.MS_search_tolerance_minus_value, options.ProductIonTolerancePpm.ToString(CultureInfo.InvariantCulture)) { UnitCvid = CV.CVID.UO_parts_per_million }, }); settings.Threshold.Items.Add(new CVParamObj(CV.CVID.MS_no_threshold)); }