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)); }