public SearchModificationAndSymbol(SearchModificationObj mod, char symbol)
 {
     Mod      = mod;
     Symbol   = symbol;
     IsNTerm  = GetIsNTerm(mod);
     IsCTerm  = GetIsCTerm(mod);
     Residues = mod.Residues;
 }
示例#2
0
        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));
        }