public void TestGetAllIsotopePeaks() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); const string specFilePath = @"H:\Research\GlycoTopDown\raw\User_sample_test_02252015.raw"; if (!File.Exists(specFilePath)) { Assert.Ignore(@"Skipping test {0} since file not found: {1}", methodName, specFilePath); } //const int scanNum = 17338; const double relativeIntensity = 0.1; var run = PbfLcMsRun.GetLcMsRun(specFilePath); var spec = run.GetSpectrum(17338); var comp = Composition.Parse("C(610) H(945) N(172) O(189) S(3)"); var ion = new Ion(comp + BaseIonType.B.OffsetComposition, 9); // b127(9+) Console.WriteLine("Composition: " + comp + " " + comp.Mass); Console.WriteLine("b127(9+): " + ion.GetMonoIsotopicMz()); Console.WriteLine("b127(9+) 0th isotope: " + ion.GetIsotopeMz(0)); Console.WriteLine("b127(9+) 6th isotope: " + ion.GetIsotopeMz(6)); var peaks = spec.GetAllIsotopePeaks(ion, new Tolerance(10), relativeIntensity); var isotopes = ion.GetIsotopes(relativeIntensity).ToArray(); for (var i = 0; i < isotopes.Length; i++) { if (peaks[i] == null) continue; var isotopeIndex = isotopes[i].Index; Console.WriteLine("{0}\t{1}\t{2}\t{3}", isotopeIndex, peaks[isotopeIndex].Mz, ion.GetIsotopeMz(isotopeIndex), GetPeakPpmError(peaks[isotopeIndex], ion.GetIsotopeMz(isotopeIndex))); } }
public void OutputStatistics(ProductSpectrum spectrum, Sequence sequence) { var baseIonTypes = spectrum.ActivationMethod != ActivationMethod.ETD ? BaseIonTypesCid : BaseIonTypesEtd; var cleavages = sequence.GetInternalCleavages().ToArray(); var tolerance = new Tolerance(10); var maxIntensity = spectrum.Peaks.Max(p => p.Intensity); foreach (var c in cleavages) { foreach (var baseIonType in baseIonTypes) { var fragmentComposition = baseIonType.IsPrefix ? c.PrefixComposition + baseIonType.OffsetComposition : c.SuffixComposition + baseIonType.OffsetComposition; for (int charge = MinCharge; charge <= MaxCharge; charge++) { var ion = new Ion(fragmentComposition, charge); var observedPeaks = spectrum.GetAllIsotopePeaks(ion, tolerance, RelativeIsotopeIntensityThreshold); if (observedPeaks == null) continue; var mostAbundantIsotopeIndex = ion.Composition.GetMostAbundantIsotopeZeroBasedIndex(); // representative peak intensity var ionPeakIntensity = observedPeaks[mostAbundantIsotopeIndex].Intensity; // calc. correlation var isotopomerEnvelope = ion.Composition.GetIsotopomerEnvelopeRelativeIntensities(); var observedIntensities = new double[observedPeaks.Length]; for (var i = 0; i < observedPeaks.Length; i++) { var observedPeak = observedPeaks[i]; observedIntensities[i] = observedPeak != null ? (float)observedPeak.Intensity : 0.0; } var corrCoeff = FitScoreCalculator.GetPearsonCorrelation(isotopomerEnvelope, observedIntensities); // mz error var mostAbundantIsotopeMz = ion.GetIsotopeMz(mostAbundantIsotopeIndex); var errorPpm = ((observedPeaks[mostAbundantIsotopeIndex].Mz - mostAbundantIsotopeMz)/ mostAbundantIsotopeMz)*1e6; } } } }
public void TestFitScoreCalculationCid() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); if (!File.Exists(TestLcMsRun.TestTopDownRawFilePathCid)) { Assert.Ignore(@"Skipping test " + methodName + @" since file not found: " + TestLcMsRun.TestTopDownRawFilePathCid); } var run = InMemoryLcMsRun.GetLcMsRunScanRange(TestLcMsRun.TestTopDownRawFilePathCid, 5743, 5743); var spec = run.GetSpectrum(5743); Assert.True(spec != null); const string protein = "MRIILLGAPGAGKGTQAQFIMEKYGIPQISTGDMLRAAVKSGSELGKQAKDIMDAGKLVTDELVIALVKERIAQEDCRNGFLLDGFPRTIPQADAMKEAGIVVDYVLEFDVPDELIVDRIVGRRVHAASGRVYHVKFNPPKVEGKDDVTGEDLTTRKDDQEETVRKRLVEYHQMTAPLIGYYQKEAEAGNTKYAKVDGTQAVADVRAALEKILG"; var protComp = new AminoAcidSet().GetComposition(protein) + Composition.H2O; Assert.True(protComp != null); Assert.True(protComp.C == 1035); Assert.True(protComp.H == 1683); Assert.True(protComp.N == 289); Assert.True(protComp.O == 318); Assert.True(protComp.P == 0); Assert.True(protComp.S == 7); Assert.True(Math.Abs(protComp.Mass - 23473.245267145) < 0.0000001); Assert.True(protComp.NominalMass == 23461); var ion = new Ion(protComp, 20); // ion.Composition.ComputeApproximateIsotopomerEnvelop(); var isotopomerEnvelop = ion.Composition.GetIsotopomerEnvelopeRelativeIntensities(); Console.WriteLine(@"MonoMz: {0}, MonoMass: {1}", ion.GetMonoIsotopicMz(), ion.Composition.Mass); var matchedPeaks = spec.GetAllIsotopePeaks(ion, new Tolerance(15), 0.1); for (var i = 0; i < matchedPeaks.Length; i++) { Console.WriteLine(@"{0} {1} {2} {3}", i, ion.GetIsotopeMz(i), isotopomerEnvelop[i], matchedPeaks[i] == null ? 0 : matchedPeaks[i].Intensity); } var fitScore = spec.GetFitScore(ion, new Tolerance(15), 0.1); var cosine = spec.GetConsineScore(ion, new Tolerance(15), 0.1); var corr = spec.GetCorrScore(ion, new Tolerance(15), 0.1); Console.WriteLine(@"FitScore: {0}", fitScore); Console.WriteLine(@"Cosine: {0}", cosine); Console.WriteLine(@"Corr: {0}", corr); Assert.True(Math.Abs(fitScore - 0.181194589537041) < 0.0001); Assert.True(Math.Abs(cosine - 0.917609346566222) < 0.0001); Assert.True(Math.Abs(corr - 0.808326778009839) < 0.0001); }
public void TestTopDownScoring() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); TopDownScorer.MaxCharge = 25; TopDownScorer.MinCharge = 8; const string specFilePath = @"C:\workspace\TopDown\E_coli_iscU_60_mock.raw"; const string protAnnotation = "A.AHAHLTHQYPAANAQVTAAPQAITLNFSEGVETGFSGAKITGPKNENIKTLPAKRNEQDQKQLIVPLADSLKPGTYTVDWHVVSVDGHKTKGHYTFSVK."; var dehydro = new SearchModification(Modification.PyroGluQ, 'C', SequenceLocation.Everywhere, false); var cysteinylC = new SearchModification(Modification.Cysteinyl, 'C', SequenceLocation.Everywhere, false); var glutathioneC = new SearchModification(Modification.Glutathione, 'C', SequenceLocation.Everywhere, false); var searchModifications = new List<SearchModification> { //pyroGluQ, dehydro, cysteinylC, glutathioneC, //oxM }; //var aaSet = new AminoAcidSet(Modification.Carbamidomethylation); var aaSet = new AminoAcidSet(searchModifications, 0); var precursorTolerance = new Tolerance(10); //Console.WriteLine(aaSet.GetAminoAcid('C').GetComposition()); // Create a sequence graph //var protSeq = protAnnotation.Substring(2, protAnnotation.Length - 4); var seqGraph = SequenceGraph.CreateGraph(aaSet, protAnnotation); // TopDownScorer.MaxCharge = 60; // TopDownScorer.MinCharge = 3; var run = InMemoryLcMsRun.GetLcMsRun(specFilePath); foreach (var protComposition in seqGraph.GetSequenceCompositions()) { var mostAbundantIsotopeIndex = protComposition.GetMostAbundantIsotopeZeroBasedIndex(); Console.WriteLine("Composition\t{0}", protComposition); Console.WriteLine("MostAbundantIsotopeIndex\t{0}", mostAbundantIsotopeIndex); Console.WriteLine(new Ion(protComposition + Composition.H2O, 11).GetIsotopeMz(mostAbundantIsotopeIndex)); Console.WriteLine(); //for (var charge = TopDownScorer.MinCharge; charge <= TopDownScorer.MaxCharge; charge++) //{ var scorer = new TopDownScorer(protComposition, run, precursorTolerance, null); var score = scorer.GetScore(); Console.WriteLine(score); //var precursorIon = new Ion(protComposition + Composition.H2O, charge); //var xic = run.GetExtractedIonChromatogram(precursorIon.GetIsotopeMz(mostAbundantIsotopeIndex), precursorTolerance); //Console.WriteLine(xic[0].ScanNum + " " + xic[1].ScanNum); //Console.WriteLine("ScanNum\t{0}", string.Join("\t", xic.Select(p => p.ScanNum.ToString()))); //Console.WriteLine("precursorCharge " + charge + "\t" + string.Join("\t", xic.Select(p => p.Intensity.ToString()))); // } Console.WriteLine("\nCharge\tm/z"); for (var charge = 9; charge <= 18; charge++) { var precursorIon = new Ion(protComposition + Composition.H2O, charge); Console.WriteLine("{0}\t{1}", charge, precursorIon.GetIsotopeMz(mostAbundantIsotopeIndex)); } } // sw.Stop(); // Console.WriteLine(@"Elapsed Time: {0:f4} sec", sw.Elapsed.TotalSeconds); }
private double[][][] GetXicArray() { var scanNumberIndex = new Dictionary<int, int>(); var i = 0; foreach (var scanNumber in _run.GetScanNumbers(1)) { // Console.WriteLine(scanNumber + " " + i); scanNumberIndex[scanNumber] = i++; } var xicArray = new double[MaxCharge - MinCharge + 1][][]; // Console.WriteLine("***"); for (var charge = MinCharge; charge <= MaxCharge; charge++) { var xicArrayForThisCharge = new double[_isotopeEnvelope.Length][]; for (var j = 0; j < xicArrayForThisCharge.Length; j++) xicArrayForThisCharge[j] = new double[scanNumberIndex.Count]; var precursorIon = new Ion(_proteinCompositionPlusWater, charge); // Console.Write("precursorCharge " + charge); for (var k = 0; k < xicArrayForThisCharge.Length; k++) { var mz = precursorIon.GetIsotopeMz(k + _minIsotopeIndex); var xic = _run.GetPrecursorExtractedIonChromatogram(mz, _tolerance); //Console.WriteLine("Mz" + mz); foreach (var xicPeak in xic) { // Console.WriteLine(xicPeak.MostAbundantIsotopeMz); xicArrayForThisCharge[k][scanNumberIndex[xicPeak.ScanNum]] = xicPeak.Intensity; // if (k == _maxIntensityIsotopeIndex-_minIsotopeIndex) // Console.WriteLine(charge + "\t" + xicPeak.MostAbundantIsotopeMz + "\t" + xicPeak.Intensity + "\t" + scanNumberIndex[xicPeak.MostAbundantIsotopeMz]); //if(k == 0 && charge == 13) Console.WriteLine(xicPeak.MostAbundantIsotopeMz + " " + xicPeak.Intensity); } // Console.WriteLine(); } // System.Environment.Exit(1); // xicArray[charge - MinCharge] = xicArrayForThisCharge; } return xicArray; }
private bool FindIon(Ion ion, Tolerance tolerance, double relativeIntensityThreshold, out int baseIsotopePeakIndex, out int nIsotopes, out int nMatchedIsotopes) { //matchedPeakIndex = new List<int>(); var baseIsotopeIndex = ion.Composition.GetMostAbundantIsotopeZeroBasedIndex(); var isotopomerEnvelope = ion.Composition.GetIsotopomerEnvelopeRelativeIntensities(); var baseIsotopMz = ion.GetIsotopeMz(baseIsotopeIndex); baseIsotopePeakIndex = _ms2Spec.FindPeakIndex(baseIsotopMz, tolerance); nIsotopes = isotopomerEnvelope.Select(x => x >= relativeIntensityThreshold).Count(); nMatchedIsotopes = 0; if (baseIsotopePeakIndex < 0) return false; //if (baseIsotopePeakIndex < 0) baseIsotopePeakIndex = ~baseIsotopePeakIndex; nMatchedIsotopes++; // go down var peakIndex = baseIsotopePeakIndex; //matchedPeakIndex.Add(peakIndex); for (var isotopeIndex = baseIsotopeIndex - 1; isotopeIndex >= 0; isotopeIndex--) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex - 1; i >= 0; i--) { var peakMz = _ms2Spec.Peaks[i].Mz; if (peakMz < minMz) { //peakIndex = i; //break; return false; } if (peakMz <= maxMz) // find match, move to prev isotope { peakIndex = i; //matchedPeakIndex.Add(peakIndex); nMatchedIsotopes++; break; } } } // go up peakIndex = baseIsotopePeakIndex; for (var isotopeIndex = baseIsotopeIndex + 1; isotopeIndex < isotopomerEnvelope.Length; isotopeIndex++) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex + 1; i < _ms2Spec.Peaks.Length; i++) { var peakMz = _ms2Spec.Peaks[i].Mz; if (peakMz > maxMz) { //peakIndex = i; //break; return false; } if (peakMz >= minMz) // find match, move to prev isotope { peakIndex = i; //matchedPeakIndex.Add(peakIndex); nMatchedIsotopes++; break; } } } return true; }
public void AnalyizeFusionDdaData() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); // Parameters //const double relativeIntensityThreshold = 0.7; const double precursorTolerancePpm = 20; const string specFilePath = @"D:\Research\Data\UW\Fusion\WT_D_DDA_130412065618.raw"; var run = InMemoryLcMsRun.GetLcMsRun(specFilePath); const double fdrThreshold = 0.01; var tolerance = new Tolerance(precursorTolerancePpm); var aaSet = new AminoAcidSet(Modification.Carbamidomethylation); const string resultFilePath = @"D:\Research\Data\UW\Fusion\WT_D_DDA_130412065618_10ppm_TI2_SGD_Decoy.tsv"; Console.WriteLine("IsDecoy\tPeptide\tScanNum\tCharge\tSpecEValue\tQValue\tPrecursorMz" + "\tTheo0\tTheo1\tTheo2\tTheo3" + "\tObs0\tCorr0\tObs1\tCorr1\tObs2\tCorr2\tObs3\tCorr3\tObs-1\tCorr-1\tObs0.5\tCorr0.5"); foreach (var line in File.ReadLines(resultFilePath)) { if (line.StartsWith("#")) continue; var token = line.Split('\t'); if (token.Length != 16) continue; var qValue = Convert.ToDouble(token[14]); if (qValue > fdrThreshold) continue; var peptide = token[8].Replace("C+57.021", "C"); var scanNum = Convert.ToInt32(token[2]); var charge = Convert.ToInt32(token[7]); var specEValue = Convert.ToDouble(token[12]); var protein = token[9]; var isDecoy = protein.StartsWith("XXX_"); var precursorIon = new Ion(aaSet.GetComposition(peptide) + Composition.H2O, charge); var baseXic = run.GetPrecursorExtractedIonChromatogram(precursorIon.GetMostAbundantIsotopeMz(), tolerance, scanNum); var baseIntensity = baseXic.GetSumIntensities(); Console.Write("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", (isDecoy ? 1 : 0), peptide, scanNum, charge, specEValue, qValue, precursorIon.GetMonoIsotopicMz()); var isotopeIndices = new double[] {0, 1, 2, 3, -1, 0.5}; var theoIsotopes = precursorIon.GetIsotopes(0.01); var numIsotopes = 0; foreach (var theoIsotope in theoIsotopes) { Console.Write("\t"+theoIsotope.Ratio); if (++numIsotopes == 4) break; } foreach (var isotopeIndex in isotopeIndices) { var isotopeMz = precursorIon.GetIsotopeMz(isotopeIndex); var xic = run.GetPrecursorExtractedIonChromatogram(isotopeMz, tolerance, scanNum); var relativeIntensity = xic.GetSumIntensities() / baseIntensity; var correlation = xic.GetCorrelation(baseXic); Console.Write("\t{0}\t{1}", relativeIntensity, correlation); } Console.WriteLine(); } }
/// <summary> /// Checks whether this spectrum contains all isotope peaks whose relative intensity is equal or larter than the threshold /// </summary> /// <param name="ion">ion</param> /// <param name="tolerance">tolerance</param> /// <param name="relativeIntensityThreshold">relative intensity threshold of the theoretical isotope profile</param> /// <returns>true if spectrum contains all ions; false otherwise.</returns> public bool ContainsIon(Ion ion, Tolerance tolerance, double relativeIntensityThreshold) { var baseIsotopeIndex = ion.Composition.GetMostAbundantIsotopeZeroBasedIndex(); var isotopomerEnvelope = ion.Composition.GetIsotopomerEnvelopeRelativeIntensities(); var baseIsotopMz = ion.GetIsotopeMz(baseIsotopeIndex); var baseIsotopePeakIndex = FindPeakIndex(baseIsotopMz, tolerance); if (baseIsotopePeakIndex < 0) return false; // go down var peakIndex = baseIsotopePeakIndex; for (var isotopeIndex = baseIsotopeIndex - 1; isotopeIndex >= 0; isotopeIndex--) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex - 1; i >= 0; i--) { var peakMz = Peaks[i].Mz; if (peakMz < minMz) return false; if (peakMz <= maxMz) // find match, move to prev isotope { peakIndex = i; break; } } } // go up peakIndex = baseIsotopePeakIndex; for (var isotopeIndex = baseIsotopeIndex + 1; isotopeIndex < isotopomerEnvelope.Length; isotopeIndex++) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex + 1; i < Peaks.Length; i++) { var peakMz = Peaks[i].Mz; if (peakMz > maxMz) return false; if (peakMz >= minMz) // find match, move to prev isotope { peakIndex = i; break; } } } return true; }
public void TestXicGen() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); const string specFilePath = @"D:\Research\Data\UW\Fusion\WT_D_DDA_130412065618.raw"; var run = InMemoryLcMsRun.GetLcMsRun(specFilePath); // Test var tolerance = new Tolerance(30); const string peptide = "AIANGQVDGFPTQEECR"; const int targetScanNum = 37633; const int charge = 2; //const string peptide = "IVDTNGAGDAFAGGFMAGLTK"; //const int targetScanNum = 67513; //const int charge = 3; var aaSet = new AminoAcidSet(Modification.Carbamidomethylation); var precursorIon = new Ion(aaSet.GetComposition(peptide) + Composition.H2O, charge); Console.WriteLine("Theoretical isotopomer profile:"); foreach(var p in precursorIon.GetIsotopes(0.1)) Console.WriteLine("{0}\t{1}", precursorIon.GetIsotopeMz(p.Index), p.Ratio); var xicArr = new Dictionary<int, Xic>(); var basePeakIndex = precursorIon.Composition.GetMostAbundantIsotopeZeroBasedIndex(); for (var i = -1; i < 3; i++) { xicArr[i] = run.GetPrecursorExtractedIonChromatogram(precursorIon.GetIsotopeMz(i), tolerance, targetScanNum); } for (var i = -1; i < 3; i++) { Console.WriteLine("\nIndex: {0}", i); Console.WriteLine("m/z: {0}", precursorIon.GetIsotopeMz(i)); Console.WriteLine("#XicPeaks: {0}", xicArr[i].Count); Console.WriteLine("Intensity: {0}", xicArr[i].GetSumIntensities()/xicArr[basePeakIndex].GetSumIntensities()); Console.WriteLine("Correlation: {0}", xicArr[i].GetCorrelation(xicArr[basePeakIndex])); } }
public void TestIsotopemerProfileByKyowon() // is faster and more accurate than IsotopicDistributionCalculator { var methodName = MethodBase.GetCurrentMethod().Name; ShowStarting(methodName); //C78H120N22O28S3 C150H120N220O28S30 //var additionalElements = new[] // { // new Tuple<Atom, short>(Atom.Get("P"), 1), // new Tuple<Atom, short>(Atom.Get("13C"), 3), // new Tuple<Atom, short>(Atom.Get("15N"), 1), // }; //var composition = new Composition(149, 244, 44, 57, 0, additionalElements); // var composition = new Composition(83, 136, 22, 24, 1); //var composition = new Composition(210, 323, 54, 61, 0); var composition = new Composition(419, 699, 119, 129, 1); const int charge = 14; var ion = new Ion(composition + Composition.H2O, charge); var ff = composition.GetIsotopomerEnvelopeRelativeIntensities(); var isotopeIndex = -1; foreach (var ii in ff) { ++isotopeIndex; Console.WriteLine("{0}: {1}\t{2}", isotopeIndex, ion.GetIsotopeMz(isotopeIndex), ii); } }
public void TestIsoProfile() { var methodName = MethodBase.GetCurrentMethod().Name; ShowStarting(methodName); var composition = Composition.Parse("C(82) H(149) N(23) O(24) S(3)"); const int charge = 3; var ion = new Ion(composition, charge); foreach (var isotope in ion.GetIsotopes(0.1)) { Console.WriteLine("{0}\t{1}\t{2}", isotope.Index, ion.GetIsotopeMz(isotope.Index), isotope.Ratio); } Console.WriteLine(composition.Mass); }
public void TestPeptide() { var methodName = MethodBase.GetCurrentMethod().Name; ShowStarting(methodName); //const string sequence = "MSGRGKGGKGLGKGGAKRHRKVLRDNIQGITKPAIRRLARRGGVKRISGLIYEETRGVLKVFLENVIRDAVTYTEHAKRKTVTAMDVVYALKRQGRTLYGFGG"; // Histone H4 const string sequence = "IRDAVTYTEHAKRKTVTAMDVVYALKRQGRTLYGFGG"; // Histone H4 //const string sequence = "MRIILLGAPGAGKGTQAQFIMEKYGIPQISTGDMLRAAVKSGSELGKQAKDIMDAGKLVTDELVIALVKERIAQEDCRNGFLLDGFPRTIPQADAMKEAGIVVDYVLEFDVPDELIVDRIVGRRVHAASGRVYHVKFNPPKVEGKDDVTGEDLTTRKDDQEETVRKRLVEYHQMTAPLIGYYQKEAEAGNTKYAKVDGTQAVADVRAALEKILG"; //const string sequence = "MNKTQLIDVIAEKAELSKTQAKAALESTLAAITESLKEGDAVQLVGFGTFKVNHRAERTGRNPQTGKEIKIAAANVPAFVSGKALKDAVK"; //const string sequence = // "METTKPSFQDVLEFVRLFRRKNKLQREIQDVEKKIRDNQKRVLLLDNLSDYIKPGMSVEAIQGIIASMKGDYEDRVDDYIIKNAELSKERRDISKKLKAMGEMKNGEAK"; var aaSet = new AminoAcidSet(); var composition = aaSet.GetComposition(sequence) + Composition.H2O; Console.WriteLine(composition); Console.WriteLine(composition.Mass); Console.WriteLine(composition.NominalMass); // 2nd isotope Console.WriteLine(composition.GetIsotopeMass(0)); Console.WriteLine(composition.GetIsotopeMass(1)); Console.WriteLine(composition.GetIsotopeMass(2)); //Assert.AreEqual(composition.ToPlainString(), "C34H51N7O14"); Console.WriteLine("Isotopomer Envelope:"); foreach (var e in composition.GetIsotopomerEnvelopeRelativeIntensities()) Console.WriteLine(e); Console.WriteLine(); Console.WriteLine("Isotope ions:"); var ion = new Ion(composition + Composition.H2O, 13); foreach (var p in ion.GetIsotopes(0.1)) Console.WriteLine("{0}\t{1}", ion.GetIsotopeMz(p.Index), p.Ratio); Console.WriteLine(); }
public void TestIsoProfile() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); const string sequence = "MWYMISAQDVENSLEKRLAARPAHLARLQELADEGRLLVAGPHPAIDSENPGDAGFSGSLVVADFDSLATAQAWADADPYFAAGVYQSVVVKPFKRVLP"; var aaSet = new AminoAcidSet(); var comp = aaSet.GetComposition(sequence) + Composition.H2O; var ion = new Ion(comp, 9); foreach (var i in ion.GetIsotopes(0.1)) { Console.WriteLine(ion.GetIsotopeMz(i.Index)+"\t"+i.Ratio); } }
public void TestGeneratingXicsOfAllCharges() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); if (!File.Exists(TestRawFilePath)) { Assert.Ignore(@"Skipping test " + methodName + @" since file not found: " + TestRawFilePath); } var run = PbfLcMsRun.GetLcMsRun(TestRawFilePath, 0.0, 0.0); var comparer = new MzComparerWithBinning(27); const string protSequence = "AIPQSVEGQSIPSLAPMLERTTPAVVSVAVSGTHVSKQRVPDVFRYFFGPNAPQEQVQERPFRGLGSGVIIDADKGYIVTNNHVIDGADDIQVGLHDGREVKAKLIGTDSESDIALLQIEAKNLVAIKTSDSDELRVGDFAVAIGNPFGLGQTVTSGIVSALGRSGLGIEMLENFIQTDAAINSGNSGGALVNLKGELIGINTAIVAPNGGNVGIGFAIPANMVKNLIAQIAEHGEVRRGVLGIAGRDLDSQLAQGFGLDTQHGGFVNEVSAGSAAEKAGIKAGDIIVSVDGRAIKSFQELRAKVATMGAGAKVELGLIRDGDKKTVNVTLGEANQTTEKAAGAVHPMLQGASLENASKGVEITDVAQGSPAAMSGLQKGDLIVGINRTAVKDLKSLKELLKDQEGAVALKIVRGKSMLYLVLR"; //const string annotation = "_." + protSequence + "._"; var seqGraph = SequenceGraph.CreateGraph(new AminoAcidSet(), AminoAcid.ProteinNTerm, protSequence, AminoAcid.ProteinCTerm); if (seqGraph == null) return; seqGraph.SetSink(0); var neutral = seqGraph.GetSinkSequenceCompositionWithH2O() - Composition.Hydrogen; var proteinMass = neutral.Mass; var isoEnv = Averagine.GetIsotopomerEnvelope(proteinMass); const bool SHOW_ALL_SCANS = false; var targetColIndex = 0; #pragma warning disable 0162 if (SHOW_ALL_SCANS) Console.WriteLine("Charge\t" + string.Join("\t", run.GetScanNumbers(1))); else { // Just display data for scan 161 Console.WriteLine("Charge\t161"); foreach (var scanNumber in run.GetScanNumbers(1)) { if (scanNumber == 161) break; targetColIndex++; } } #pragma warning restore 0162 const int minCharge = 2; const int maxCharge = 60; for (var charge = minCharge; charge <= maxCharge; charge++) { var ion = new Ion(neutral, charge); var mostAbundantIsotopeMz = ion.GetIsotopeMz(isoEnv.MostAbundantIsotopeIndex); //var secondMostAbundantIsotopeMz = ion.GetIsotopeMz(isoEnv.MostAbundantIsotopeIndex + 1); var binNum = comparer.GetBinNumber(mostAbundantIsotopeMz); var mzStart = comparer.GetMzStart(binNum); var mzEnd = comparer.GetMzEnd(binNum); var xic = run.GetFullPrecursorIonExtractedIonChromatogram(mzStart, mzEnd); Console.Write(charge+"\t"); #pragma warning disable 0162 if (SHOW_ALL_SCANS) Console.WriteLine(string.Join("\t", xic.Select(p => p.Intensity))); else Console.WriteLine(xic[targetColIndex].Intensity); #pragma warning restore 0162 } }
public void GetIsoProfile() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); const string protSequence = "AIPQSVEGQSIPSLAPMLERTTPAVVSVAVSGTHVSKQRVPDVFRYFFGPNAPQEQVQERPFRGLGSGVIIDADKGYIVTNNHVIDGADDIQVGLHDGREVKAKLIGTDSESDIALLQIEAKNLVAIKTSDSDELRVGDFAVAIGNPFGLGQTVTSGIVSALGRSGLGIEMLENFIQTDAAINSGNSGGALVNLKGELIGINTAIVAPNGGNVGIGFAIPANMVKNLIAQIAEHGEVRRGVLGIAGRDLDSQLAQGFGLDTQHGGFVNEVSAGSAAEKAGIKAGDIIVSVDGRAIKSFQELRAKVATMGAGAKVELGLIRDGDKKTVNVTLGEANQTTEKAAGAVHPMLQGASLENASKGVEITDVAQGSPAAMSGLQKGDLIVGINRTAVKDLKSLKELLKDQEGAVALKIVRGKSMLYLVLR"; //const string annotation = "_." + protSequence + "._"; var seqGraph = SequenceGraph.CreateGraph(new AminoAcidSet(), AminoAcid.ProteinNTerm, protSequence, AminoAcid.ProteinCTerm); if (seqGraph == null) return; seqGraph.SetSink(0); var neutral = seqGraph.GetSinkSequenceCompositionWithH2O() - Composition.Hydrogen; //Console.WriteLine(neutral); for (var charge = 22; charge <= 60; charge++) { var ion = new Ion(neutral, charge); Console.WriteLine("{0}\t{1}", charge, ion.GetMostAbundantIsotopeMz()); } var ion27 = new Ion(neutral, 29); var isotopes = ion27.GetIsotopes(0.1); foreach (var isotope in isotopes) { Console.WriteLine("{0}\t{1}", ion27.GetIsotopeMz(isotope.Index), isotope.Ratio); } }
public Peak[] GetAllIsotopePeaks(Spectrum spec, Ion ion, Tolerance tolerance, double relativeIntensityThreshold, out int[] peakIndexList) { var mostAbundantIsotopeIndex = ion.Composition.GetMostAbundantIsotopeZeroBasedIndex(); var isotopomerEnvelope = ion.Composition.GetIsotopomerEnvelopeRelativeIntensities(); peakIndexList = new int[isotopomerEnvelope.Length]; var mostAbundantIsotopeMz = ion.GetIsotopeMz(mostAbundantIsotopeIndex); var mostAbundantIsotopeMatchedPeakIndex = spec.FindPeakIndex(mostAbundantIsotopeMz, tolerance); if (mostAbundantIsotopeMatchedPeakIndex < 0) return null; var observedPeaks = new Peak[isotopomerEnvelope.Length]; observedPeaks[mostAbundantIsotopeIndex] = spec.Peaks[mostAbundantIsotopeMatchedPeakIndex]; peakIndexList[mostAbundantIsotopeIndex] = mostAbundantIsotopeMatchedPeakIndex; // go down var peakIndex = mostAbundantIsotopeMatchedPeakIndex - 1; for (var isotopeIndex = mostAbundantIsotopeIndex - 1; isotopeIndex >= 0; isotopeIndex--) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex; i >= 0; i--) { var peakMz = spec.Peaks[i].Mz; if (peakMz < minMz) { peakIndex = i; break; } if (peakMz <= maxMz) // find match, move to prev isotope { var peak = spec.Peaks[i]; if (observedPeaks[isotopeIndex] == null || peak.Intensity > observedPeaks[isotopeIndex].Intensity) { observedPeaks[isotopeIndex] = peak; peakIndexList[isotopeIndex] = i; } } } } // go up peakIndex = mostAbundantIsotopeMatchedPeakIndex + 1; for (var isotopeIndex = mostAbundantIsotopeIndex + 1; isotopeIndex < isotopomerEnvelope.Length; isotopeIndex++) { if (isotopomerEnvelope[isotopeIndex] < relativeIntensityThreshold) break; var isotopeMz = ion.GetIsotopeMz(isotopeIndex); var tolTh = tolerance.GetToleranceAsTh(isotopeMz); var minMz = isotopeMz - tolTh; var maxMz = isotopeMz + tolTh; for (var i = peakIndex; i < spec.Peaks.Length; i++) { var peakMz = spec.Peaks[i].Mz; if (peakMz > maxMz) { peakIndex = i; break; } if (peakMz >= minMz) // find match, move to prev isotope { var peak = spec.Peaks[i]; if (observedPeaks[isotopeIndex] == null || peak.Intensity > observedPeaks[isotopeIndex].Intensity) { observedPeaks[isotopeIndex] = peak; peakIndexList[isotopeIndex] = i; } } } } return observedPeaks; }
public void TestFusionDdaData() { var methodName = MethodBase.GetCurrentMethod().Name; TestUtils.ShowStarting(methodName); // Parameters const double relativeIntensityThreshold = 0.7; const double precursorTolerancePpm = 20; //const double isotopeRatioTolerance = 2; //const double correlationThreshold = 0.3; const double fdrThreshold = 0.01; const string specFilePath = @"D:\Research\Data\UW\Fusion\WT_D_DDA_130412065618.raw"; var run = InMemoryLcMsRun.GetLcMsRun(specFilePath); var sw = new System.Diagnostics.Stopwatch(); sw.Start(); var tolerance = new Tolerance(precursorTolerancePpm); var aaSet = new AminoAcidSet(Modification.Carbamidomethylation); const string resultFilePath = @"D:\Research\Data\UW\Fusion\oldResult\WT_D_DDA_130412065618_10ppm_TI2_SGD_Decoy.tsv"; var numTargets = 0; var numValidTargets = 0; var numDecoys = 0; var numValidDecoys = 0; foreach(var line in File.ReadLines(resultFilePath)) { if (line.StartsWith("#")) continue; var token = line.Split('\t'); if (token.Length != 16) continue; var qValue = Convert.ToDouble(token[14]); if (qValue > fdrThreshold) continue; var peptide = token[8].Replace("C+57.021", "C"); var scanNum = Convert.ToInt32(token[2]); var charge = Convert.ToInt32(token[7]); var protein = token[9]; var isDecoy = protein.StartsWith("XXX_"); if (isDecoy) numDecoys++; else numTargets++; var precursorIon = new Ion(aaSet.GetComposition(peptide) + Composition.H2O, charge); var basePeakIndex = precursorIon.Composition.GetMostAbundantIsotopeZeroBasedIndex(); var baseXic = run.GetPrecursorExtractedIonChromatogram(precursorIon.GetMostAbundantIsotopeMz(), tolerance, scanNum); var baseIntensity = baseXic.GetSumIntensities(); var isValid = true; foreach (var isotope in precursorIon.GetIsotopes(relativeIntensityThreshold)) { if (isotope.Index == basePeakIndex) continue; var isotopeMz = precursorIon.GetIsotopeMz(isotope.Index); var xic = run.GetPrecursorExtractedIonChromatogram(isotopeMz, tolerance, scanNum); if (xic.Count == 0) { isValid = false; break; } //if (xic.Count > 0) //{ // var isotopeRatio = xic.GetSumIntensities() / baseIntensity / isotope.Item2; // var correlation = xic.GetCorrelation(baseXic); // if (isotopeRatio > 0.8 && isotopeRatio < 1.2 // && correlation > 0.8) // { // isValid = true; // } //} // Check if isotope ratio is within tolerance //if (isotopeRatio > isotopeRatioTolerance || isotopeRatio < 1 / isotopeRatioTolerance) //{ // isValid = false; // //Console.WriteLine("Off ratio\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", isDecoy, peptide, scanNum, charge, precursorIon.GetMonoIsotopicMz(), isotopeMz, isotopeRatio); // break; //} // Check if correlation is high //if (correlation < correlationThreshold) //{ // isValid = false; // //Console.WriteLine("Low correlation\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", isDecoy, peptide, scanNum, charge, precursorIon.GetMonoIsotopicMz(), isotopeMz, correlation); // break; //} } if (isValid && !isDecoy) numValidTargets++; else if (isValid) numValidDecoys++; //Console.WriteLine("{0}\t{1}\t{2}", peptide, scanNum, charge); } Console.WriteLine("#Targets: {0}", numTargets); Console.WriteLine("#ValidTargets: {0}\t{1}", numValidTargets, numValidTargets/(double)numTargets); Console.WriteLine("#Decoys: {0}", numDecoys); Console.WriteLine("#ValidDecoys: {0}\t{1}", numValidDecoys, numValidDecoys / (double)numDecoys); sw.Stop(); Console.WriteLine(@"TimeForPrecursorValidation {0:f4} sec", sw.Elapsed.TotalSeconds); }
public void GetIntensity(string peptideSequence, double ppmTolerance) { Composition composition; if (peptideSequence.Equals("Tetraoctylammonium")) { composition = new Composition(32, 67, 1, 0, 0); } else if (peptideSequence.Equals("Tetraoctylammonium Bromide")) { composition = new Composition(64, 135, 2, 0, 0) + Composition.ParseFromPlainString("Br"); } else { composition = PeptideUtil.GetCompositionOfPeptide(peptideSequence); } string empiricalFormula = composition.ToPlainString(); for (int chargeState = 1; chargeState <= 5; chargeState++) { // Calculate Target m/z var targetIon = new Ion(composition, chargeState); double targetMz = targetIon.GetMonoIsotopicMz(); double minMzForSpectrum = targetMz - (3.0 / chargeState); double maxMzForSpectrum = targetMz + (10.0 / chargeState); Console.WriteLine(peptideSequence + " - +" + chargeState + " - " + targetMz); // Generate Theoretical Isotopic Profile IsotopicProfile theoreticalIsotopicProfile = _theoreticalFeatureGenerator.GenerateTheorProfile(empiricalFormula, chargeState); List<Peak> theoreticalIsotopicProfilePeakList = theoreticalIsotopicProfile.Peaklist.Cast<Peak>().ToList(); // Find XIC Features IEnumerable<FeatureBlob> featureBlobs = FindFeatures(targetMz, ppmTolerance, 1, 1); // Check each XIC Peak found foreach (var featureBlob in featureBlobs) { FeatureBlobStatistics statistics = featureBlob.CalculateStatistics(); int unsaturatedIsotope = 0; FeatureBlob isotopeFeature = null; int scanLcMin = statistics.ScanLcMin; int scanLcMax = statistics.ScanLcMax; int scanImsMin = statistics.ScanImsMin; int scanImsMax = statistics.ScanImsMax; double intensity = statistics.SumIntensities; // Find an unsaturated peak in the isotopic profile for (int i = 1; i < 10; i++) { if (!statistics.IsSaturated) break; // Target isotope m/z double isotopeTargetMz = targetIon.GetIsotopeMz(i); // Find XIC Features IEnumerable<FeatureBlob> newFeatureBlobs = FindFeatures(isotopeTargetMz, ppmTolerance, 1, 1); // If no feature, then get out if (!newFeatureBlobs.Any()) { statistics = null; break; } bool foundFeature = false; foreach (var newFeatureBlob in newFeatureBlobs.OrderByDescending(x => x.PointList.Count)) { var newStatistics = newFeatureBlob.CalculateStatistics(); if (newStatistics.ScanImsRep <= scanImsMax && newStatistics.ScanImsRep >= scanImsMin && newStatistics.ScanLcRep <= scanLcMax && newStatistics.ScanLcRep >= scanLcMin) { isotopeFeature = newFeatureBlob; foundFeature = true; break; } } if (!foundFeature) { statistics = null; break; } statistics = isotopeFeature.CalculateStatistics(); unsaturatedIsotope = i; } int scanImsRep = statistics.ScanImsRep; // Get ViperCompatibleMass Spectrum Data XYData massSpectrum = GetMassSpectrum(1, scanImsMin, scanImsMax, scanImsRep, minMzForSpectrum, maxMzForSpectrum); //List<Peak> massSpectrumPeakList = _peakDetector.FindPeaks(massSpectrum); //WriteXYDataToFile(massSpectrum, targetMz); // Find Isotopic Profile List<Peak> massSpectrumPeaks; IsotopicProfile observedIsotopicProfile = _msFeatureFinder.IterativelyFindMSFeature(massSpectrum, theoreticalIsotopicProfile, out massSpectrumPeaks); double unsaturatedIntensity = observedIsotopicProfile != null ? observedIsotopicProfile.GetSummedIntensity() : 0; // Correct for Saturation if needed if (unsaturatedIsotope > 0) { IsotopicProfileUtil.AdjustSaturatedIsotopicProfile(observedIsotopicProfile, theoreticalIsotopicProfile, unsaturatedIsotope); } if (observedIsotopicProfile != null && observedIsotopicProfile.MonoIsotopicMass > 1) { Console.WriteLine("ScanIMS = " + scanImsMin + "-" + scanImsMax + "\tImsRep = " + scanImsRep + "\tUncorrectedIntensity = " + unsaturatedIntensity + "\tIntensity = " + observedIsotopicProfile.GetSummedIntensity()); } } } }