/// <summary> /// This will take the input of a peptide sequence and a bool for the fragmentation mode (false = CID, true = ETD). /// </summary> /// <param name="peptide">This is the peptide sequence.</param> /// <param name="fragmentationModeETD">True when the fragmentation mode is CID</param> /// <returns>List of theoretical ions as key/value pairs (key is ion abbreviation, value is m/z value)</returns> public List <KeyValuePair <string, double> > GetTheoreticalDataByPeptideSequence(string peptide, bool fragmentationModeETD) { // Set the element mode m_mMwtWin.SetElementMode(MwtWinDll.MWElementAndMassRoutines.emElementModeConstants.emIsotopicMass); // Initialize the options MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType udtFragSpectrumOptions = default(MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType); udtFragSpectrumOptions.Initialize(); // Initialize udtFragSpectrumOptions with the defaults udtFragSpectrumOptions = m_mMwtWin.Peptide.GetFragmentationSpectrumOptions(); // The entire list of value will be retirved without any filtering udtFragSpectrumOptions.DoubleChargeIonsShow = true; udtFragSpectrumOptions.TripleChargeIonsShow = true; udtFragSpectrumOptions.DoubleChargeIonsThreshold = 1; udtFragSpectrumOptions.TripleChargeIonsThreshold = 1; // Each label begins with "b", "y", "c", or "z" char modeString1; if (fragmentationModeETD) { modeString1 = 'c'; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itCIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itZIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itAIon].ShowIon = false; } else { modeString1 = 'b'; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itCIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itZIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itAIon].ShowIon = false; } // MolecularWeightTool allowed modification symbols. // 33 ! // 35 # // 36 $ // 37 % // 38 & // 39 ' // 42 * // 43 + // 63 ? // 64 @ // 94 ^ // 95 _ // 96 ` // 126 ~ string allowedSymbols = "!#$%&'*+?@^_`~"; string usedSymbols = new string(m_modificationList.Keys.ToArray()); string availableSymbols = ""; foreach (char c in allowedSymbols) { if (!usedSymbols.Contains(c)) { availableSymbols += c; } } Dictionary <char, char> badSymbolMap = new Dictionary <char, char>(); //Add the modifications if needed. if (m_modificationList != null) { m_mMwtWin.Peptide.RemoveAllModificationSymbols(); // Remove the default MWT modification symbols foreach (KeyValuePair <char, double> modPair in m_modificationList) { // Key is symbol, value is mzValue string modComment = string.Empty; bool indicatesPhospho = Math.Abs(modPair.Value - 79.9663326) < 0.005; int modResult = m_mMwtWin.Peptide.SetModificationSymbol(modPair.Key.ToString(), modPair.Value, indicatesPhospho, modComment); if (modResult != 0) // A symbol that is not allowed, most likely { modResult = m_mMwtWin.Peptide.SetModificationSymbol(availableSymbols[0].ToString(), modPair.Value, indicatesPhospho, modComment); badSymbolMap.Add(modPair.Key, availableSymbols[0]); // Add it to the dictionary availableSymbols = availableSymbols.Substring(1); // Remove it from the available symbols. } //if modresult = 0 symbol add is successful, useful spot for breakpoint //modResult = modResult + 0; } } string peptideFix = peptide; foreach (KeyValuePair <char, char> symfix in badSymbolMap) { peptideFix = peptideFix.Replace(symfix.Key, symfix.Value); } // Obtain the fragmentation spectrum for a peptide // First define the peptide sequence // Need to pass "false" to parameter blnIs3LetterCode since "peptide" is in one-letter notation m_mMwtWin.Peptide.SetSequence(peptideFix, MwtWinDll.MWPeptideClass.ntgNTerminusGroupConstants.ntgHydrogen, MwtWinDll.MWPeptideClass.ctgCTerminusGroupConstants.ctgHydroxyl, false); // Update the options m_mMwtWin.Peptide.SetFragmentationSpectrumOptions(udtFragSpectrumOptions); // Get the fragmentation masses MwtWinDll.MWPeptideClass.udtFragmentationSpectrumDataType[] udtFragSpectrum = null; m_mMwtWin.Peptide.GetFragmentationMasses(ref udtFragSpectrum); var cleanPeptide = m_mMwtWin.Peptide.GetSequence(false, false, false, false, false); if (string.IsNullOrWhiteSpace(cleanPeptide)) { // No valid residues return(new List <KeyValuePair <string, double> >()); } // Obtain the list of ions List <KeyValuePair <string, double> > theoryList = GetTheoryList(cleanPeptide, fragmentationModeETD, modeString1, udtFragSpectrum); return(theoryList); }
private void TestAccessFunctions(string sequence)//public or private { string strNewSeq = sequence; // Set the element mode (average, monoisotopic, or integer) mMwtWin.SetElementMode(MwtWinDll.MWElementAndMassRoutines.emElementModeConstants.emIsotopicMass); MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType udtFragSpectrumOptions = default(MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType); udtFragSpectrumOptions.Initialize(); // Initialize udtFragSpectrumOptions with the defaults udtFragSpectrumOptions = mMwtWin.Peptide.GetFragmentationSpectrumOptions(); // Customize the options udtFragSpectrumOptions.DoubleChargeIonsShow = false; //false udtFragSpectrumOptions.TripleChargeIonsShow = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itAIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].NeutralLossAmmonia = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossAmmonia = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].NeutralLossPhosphate = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossPhosphate = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].NeutralLossWater = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossWater = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itCIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itZIon].ShowIon = false; // Obtain the fragmentation spectrum for a peptide // First define the peptide sequence // Need to pass "false" to parameter blnIs3LetterCode since strNewSeq is in one-letter notation mMwtWin.Peptide.SetSequence(strNewSeq, MwtWinDll.MWPeptideClass.ntgNTerminusGroupConstants.ntgHydrogen, MwtWinDll.MWPeptideClass.ctgCTerminusGroupConstants.ctgHydroxyl, false); // Update the options mMwtWin.Peptide.SetFragmentationSpectrumOptions(ref udtFragSpectrumOptions); // Get the fragmentation masses MwtWinDll.MWPeptideClass.udtFragmentationSpectrumDataType[] udtFragSpectrum = null; mMwtWin.Peptide.GetFragmentationMasses(ref udtFragSpectrum); //store b and y ions in separate lists List <double> bList = new List <double>(); List <double> yList = new List <double>(); for (int i = 0; i < udtFragSpectrum.Length; i++) { if (udtFragSpectrum[i].Symbol != null && udtFragSpectrum[i].Symbol.Contains("y")) { yList.Add(Convert.ToDouble(udtFragSpectrum[i].Mass.ToString("0.0000"))); } else { bList.Add(Convert.ToDouble(udtFragSpectrum[i].Mass.ToString("0.0000"))); } //byPeakList.Add(Convert.ToDouble(udtFragSpectrum[i].Mass.ToString("0.0000"))); } bPeakHolder = bList.ToArray(); yPeakHolder = yList.ToArray(); }
public void TestAccessFunctions() { // Set the element mode (average, monoisotopic, or integer) mMwtWin.SetElementMode(MwtWinDll.MWElementAndMassRoutines.emElementModeConstants.emIsotopicMass); MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType udtFragSpectrumOptions = default(MwtWinDll.MWPeptideClass.udtFragmentationSpectrumOptionsType); udtFragSpectrumOptions.Initialize(); // Initialize udtFragSpectrumOptions with the defaults udtFragSpectrumOptions = mMwtWin.Peptide.GetFragmentationSpectrumOptions(); // Customize the options udtFragSpectrumOptions.DoubleChargeIonsShow = true; udtFragSpectrumOptions.TripleChargeIonsShow = true; udtFragSpectrumOptions.DoubleChargeIonsThreshold = 400; udtFragSpectrumOptions.TripleChargeIonsThreshold = 400; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itAIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itBIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].ShowIon = true; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossAmmonia = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossPhosphate = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itYIon].NeutralLossWater = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itCIon].ShowIon = false; udtFragSpectrumOptions.IonTypeOptions[(int)MwtWinDll.MWPeptideClass.itIonTypeConstants.itZIon].ShowIon = false; udtFragSpectrumOptions.IntensityOptions.BYIonShoulder = 0; // Customize the modification symbols mMwtWin.Peptide.SetModificationSymbol("!", 57.02146, false, "Carbamidomethylation"); mMwtWin.Peptide.SetModificationSymbol("+", 10.0, false, "Heavy Arg"); string strNewSeq = "C!ETQNPVSAR+"; // Obtain the fragmentation spectrum for a peptide // First define the peptide sequence // Need to pass "false" to parameter blnIs3LetterCode since strNewSeq is in one-letter notation mMwtWin.Peptide.SetSequence1LetterSymbol(strNewSeq); // Update the options mMwtWin.Peptide.SetFragmentationSpectrumOptions(udtFragSpectrumOptions); // Get the fragmentation masses MwtWinDll.MWPeptideClass.udtFragmentationSpectrumDataType[] udtFragSpectrum = null; mMwtWin.Peptide.GetFragmentationMasses(ref udtFragSpectrum); // Print the results to the console Console.WriteLine("Fragmentation spectrum for " + mMwtWin.Peptide.GetSequence(false, true, false, false)); Console.WriteLine(); Console.WriteLine("Mass Intensity \tSymbol"); for (int i = 0; i < udtFragSpectrum.Length; i++) { Console.WriteLine(udtFragSpectrum[i].Mass.ToString("0.000") + " " + udtFragSpectrum[i].Intensity.ToString("###0") + " \t" + udtFragSpectrum[i].Symbol); // For debugging purposes, stop after displaying 20 ions if (i >= 30) { Console.WriteLine("..."); break; } } Console.WriteLine(); short intSuccess = 0; string strResults = null; double[,] ConvolutedMSData2D = null; int ConvolutedMSDataCount = 0; // Compute the Isotopic distribution for the peptide // Need to first convert to an empirical formula // To do this, first obtain the peptide sequence in 3-letter notation string strSeq3Letter = mMwtWin.Peptide.GetSequence(true, false, false, true, false); // Now assing to the Compound class mMwtWin.Compound.SetFormula(strSeq3Letter); // Now convert to an empirical formula string s = mMwtWin.Compound.ConvertToEmpirical(); bool blnAddProtonChargeCarrier = true; short intChargeState = 1; Console.WriteLine("Isotopic abundance test with Charge=" + intChargeState); intSuccess = mMwtWin.ComputeIsotopicAbundances(ref s, intChargeState, ref strResults, ref ConvolutedMSData2D, ref ConvolutedMSDataCount); Console.WriteLine(strResults); blnAddProtonChargeCarrier = false; intChargeState = 1; Console.WriteLine("Isotopic abundance test with Charge=" + intChargeState + "; do not add a proton charge carrier"); intSuccess = mMwtWin.ComputeIsotopicAbundances(ref s, intChargeState, ref strResults, ref ConvolutedMSData2D, ref ConvolutedMSDataCount, blnAddProtonChargeCarrier); Console.WriteLine(strResults); }