Beispiel #1
0
        public void LibraryTransitionTest()
        {
            LibraryManager        libraryManager;
            TestDocumentContainer docContainer;
            int         startRev;
            SrmDocument docLoaded = CreateNISTLibraryDocument(out libraryManager, out docContainer, out startRev);

            // Test tolerance range
            SrmSettings settings = docLoaded.Settings.ChangeTransitionLibraries(l =>
                                                                                l.ChangeIonMatchTolerance(TransitionLibraries.MIN_MATCH_TOLERANCE));
            SrmDocument docLowTol = docLoaded.ChangeSettings(settings);

            // Use the original low tolerance for transition testing, since
            // the new low tolerance is for high accuracy data.
            docLowTol = docLowTol.ChangeSettings(settings.ChangeTransitionLibraries(l =>
                                                                                    l.ChangeIonMatchTolerance(0.1)));
            settings = docLowTol.Settings.ChangeTransitionLibraries(l =>
                                                                    l.ChangeIonMatchTolerance(TransitionLibraries.MAX_MATCH_TOLERANCE));
            SrmDocument docHighTol = docLoaded.ChangeSettings(settings);

            Assert.AreEqual(docLowTol.PeptideTransitionCount, docHighTol.PeptideTransitionCount);

            var transLow  = docLowTol.PeptideTransitions.ToArray();
            var transHigh = docHighTol.PeptideTransitions.ToArray();
            int diffCount = 0;

            for (int i = 0; i < transLow.Length; i++)
            {
                if (!Equals(transLow[i], transHigh[i]))
                {
                    diffCount++;
                }
            }
            Assert.AreEqual(2, diffCount);

            Assert.IsTrue(ArrayUtil.ReferencesEqual(docLoaded.PeptideTransitionGroups.ToArray(), docHighTol.PeptideTransitionGroups.ToArray()));
            Assert.IsTrue(HasMaxTransitionRank(docHighTol, 3));

            SrmSettings setThrow = settings;

            AssertEx.ThrowsException <InvalidDataException>(() =>
                                                            setThrow.ChangeTransitionLibraries(l => l.ChangeIonMatchTolerance(TransitionLibraries.MAX_MATCH_TOLERANCE * 2)));
            AssertEx.ThrowsException <InvalidDataException>(() =>
                                                            setThrow.ChangeTransitionLibraries(l => l.ChangeIonMatchTolerance(TransitionLibraries.MIN_MATCH_TOLERANCE / 2)));

            // Picked transition count
            settings = docLoaded.Settings.ChangeTransitionLibraries(l => l.ChangeIonCount(5));
            SrmDocument docHighIons = docLoaded.ChangeSettings(settings);

            AssertEx.IsDocumentState(docHighIons, ++startRev, 2, 4, 20);
            Assert.IsTrue(HasMaxTransitionRank(docHighIons, 5));
            Assert.IsFalse(HasMinTransitionOrdinal(docHighIons, 4));

            settings = settings.ChangeTransitionLibraries(l => l.ChangePick(TransitionLibraryPick.none));
            SrmDocument docFilteredIons = docHighIons.ChangeSettings(settings);

            AssertEx.IsDocumentState(docFilteredIons, ++startRev, 2, 4, 15); // Proline ions
            Assert.IsFalse(HasMaxTransitionRank(docFilteredIons, 5));

            settings = settings.ChangeTransitionFilter(f => f.ChangeFragmentRangeFirstName("ion 4")
                                                       .ChangeFragmentRangeLastName("last ion").ChangeMeasuredIons(new MeasuredIon[0]));
            settings = settings.ChangeTransitionLibraries(l => l.ChangePick(TransitionLibraryPick.filter));
            SrmDocument docRankedFiltered = docFilteredIons.ChangeSettings(settings);

            AssertEx.IsDocumentState(docRankedFiltered, ++startRev, 2, 4, 20);
            Assert.IsTrue(HasMaxTransitionRank(docRankedFiltered, 5));
            Assert.IsTrue(HasMinTransitionOrdinal(docRankedFiltered, 4));
            AssertEx.Serializable(docRankedFiltered, (doc1, doc2) => ValidateLibraryDocs(doc1, doc2, libraryManager));
        }