// ReSharper restore AccessToModifiedClosure protected bool ExportAndMaybeTryToCancel(ExportLiveReportDlg exportLiveReportDlg, string filename, bool tryToCancel) { Assert.AreSame(exportLiveReportDlg, FindOpenForm <ExportLiveReportDlg>()); bool triedToCancel = RunAndMaybeTryCancel(() => exportLiveReportDlg.OkDialog(filename, SEPARATOR_TO_USE), tryToCancel); if (!triedToCancel) { return(true); } var remainingForm = FindOpenForm <ExportLiveReportDlg>(); if (remainingForm != null) { Assert.AreSame(exportLiveReportDlg, remainingForm); return(remainingForm.DialogResult != DialogResult.None); } return(true); }
private void LowResTest() { string documentFile = GetTestPath(@"Low Res\BSA_Protea_label_free_meth3.sky"); WaitForCondition(() => File.Exists(documentFile)); RunUI(() => SkylineWindow.OpenFile(documentFile)); bool AsSmallMolecules = AsSmallMoleculesTestMode != RefinementSettings.ConvertToSmallMoleculesMode.none; const int expectedMoleculeCount = 9; int expectedTransitionGroupCount = 10; int expectedTransitionCount = 78; var document = SkylineWindow.Document; if (AsSmallMolecules) { ConvertDocumentToSmallMolecules(AsSmallMoleculesTestMode); document = SkylineWindow.Document; Assert.AreEqual(document.PeptideTransitionGroupCount, 0); Assert.AreEqual(document.MoleculeTransitionGroupCount, expectedTransitionGroupCount); Assert.AreEqual(document.PeptideTransitionCount, 0); Assert.AreEqual(document.MoleculeTransitionCount, expectedTransitionCount); } AssertEx.IsDocumentState(document, null, 3, expectedMoleculeCount, expectedTransitionGroupCount, expectedTransitionCount); // p. 3 Select first peptide RunUI(() => SkylineWindow.SelectedPath = document.GetPathTo((int)SrmDocument.Level.Molecules, 0)); PauseForScreenShot("Main window", 3); // p. 4 Configure Document for Thermo raw files { var transitionSettingsUI = ShowDialog <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI); RunUI(() => transitionSettingsUI.SelectedTab = TransitionSettingsUI.TABS.FullScan); PauseForScreenShot <TransitionSettingsUI.FullScanTab>("Peptide Settings - Full-Scan tab blank", 5); RunUI(() => { transitionSettingsUI.PrecursorIsotopesCurrent = FullScanPrecursorIsotopes.Count; transitionSettingsUI.PrecursorMassAnalyzer = FullScanMassAnalyzerType.qit; transitionSettingsUI.AcquisitionMethod = FullScanAcquisitionMethod.Targeted; }); PauseForScreenShot <TransitionSettingsUI.FullScanTab>("Peptide Settings - Full-Scan tab low res", 6); RunUI(() => { transitionSettingsUI.SetRetentionTimeFilter(RetentionTimeFilterType.ms2_ids, 2); // p.6 - library ion match tolerance same as extraction window transitionSettingsUI.SelectedTab = TransitionSettingsUI.TABS.Library; transitionSettingsUI.IonMatchTolerance = 0.7; }); PauseForScreenShot <TransitionSettingsUI.LibraryTab>("Transition Settings - Library tab match tolerance same as MS/MS resolution", 8); RunUI(() => { // p.6 transitionSettingsUI.SelectedTab = TransitionSettingsUI.TABS.Filter; transitionSettingsUI.FragmentTypes += ", p"; }); PauseForScreenShot <TransitionSettingsUI.FilterTab>("Transition Settings - Filter tab", 9); OkDialog(transitionSettingsUI, transitionSettingsUI.OkDialog); var docFullScan = WaitForDocumentChange(document); var tranSettingsFullScan = docFullScan.Settings.TransitionSettings; Assert.AreEqual(FullScanPrecursorIsotopes.Count, tranSettingsFullScan.FullScan.PrecursorIsotopes); Assert.AreEqual(FullScanMassAnalyzerType.qit, tranSettingsFullScan.FullScan.PrecursorMassAnalyzer); Assert.AreEqual(FullScanAcquisitionMethod.Targeted, tranSettingsFullScan.FullScan.AcquisitionMethod); Assert.IsTrue(ArrayUtil.EqualsDeep(new[] { IonType.y, IonType.b, IonType.precursor }, tranSettingsFullScan.Filter.IonTypes)); } RunUI(() => SkylineWindow.ExpandPrecursors()); // Check all the precursors on picklists bool pausedForScreenShot = false; foreach (PeptideGroupTreeNode node in SkylineWindow.SequenceTree.GetSequenceNodes()) { foreach (TreeNode child in node.Nodes) { foreach (SrmTreeNodeParent grandChild in child.Nodes) { // Because of RunUI must copy to local variable first. SrmTreeNodeParent child1 = grandChild; RunUI(() => SkylineWindow.SequenceTree.SelectedNode = child1); var picklist = ShowDialog <PopupPickList>(() => SkylineWindow.SequenceTree.ShowPickList(false)); RunUI(() => { picklist.SetItemChecked(0, true); Assert.IsTrue(picklist.GetItemLabel(0).Contains(IonType.precursor.GetLocalizedString())); Assert.IsTrue(picklist.GetItemChecked(0)); }); if (!pausedForScreenShot) { PauseForScreenShot <PopupPickList>("Transitions popup pick-list", 10); pausedForScreenShot = true; } OkDialog(picklist, picklist.OnOk); } } } WaitForDocumentLoaded(); if (!AsSmallMolecules) // No libraries for small molecules, yet { foreach (var nodeGroup in SkylineWindow.Document.MoleculeTransitionGroups) { Assert.IsFalse(nodeGroup.HasLibInfo && nodeGroup.Transitions.All(nodeTran => !nodeTran.HasLibInfo)); } } // All transition groups should now have a precursor transition foreach (var nodeGroup in SkylineWindow.Document.MoleculeTransitionGroups) { Assert.AreEqual(IonType.precursor, nodeGroup.Transitions.First().Transition.IonType); } // p.8 ExportMethodDlg exportMethodDlg = ShowDialog <ExportMethodDlg>(() => SkylineWindow.ShowExportMethodDialog(ExportFileType.Method)); RunUI(() => { exportMethodDlg.SetInstrument("Thermo LTQ"); Assert.AreEqual("Thermo LTQ", exportMethodDlg.InstrumentType); exportMethodDlg.SetMethodType(ExportMethodType.Standard); exportMethodDlg.SetTemplateFile(GetTestPath(@"Low Res\TargetedMSMS_template.meth")); }); PauseForScreenShot <ExportMethodDlg.MethodView>("Export Method form", 11); // p. 10 Ok the error box. { var messageDlg = ShowDialog <MessageDlg>(() => exportMethodDlg.OkDialog(GetTestPath(@"Low Res\TargetedMSMS_BSA_Protea.meth"))); PauseForScreenShot <MessageDlg>("Error message (expected)", 12); OkDialog(messageDlg, messageDlg.OkDialog); } // Making a report by hand p.11 ExportLiveReportDlg exportReportDlg = ShowDialog <ExportLiveReportDlg>(() => SkylineWindow.ShowExportReportDialog()); var editReportListDlg = ShowDialog <ManageViewsForm>(exportReportDlg.EditList); var viewEditor = ShowDialog <ViewEditor>(editReportListDlg.AddView); RunUI(() => { Assert.IsTrue(viewEditor.ChooseColumnsTab.TrySelect(PropertyPath.Parse("Proteins!*.Name"))); viewEditor.ChooseColumnsTab.AddSelectedColumn(); Assert.AreEqual(1, viewEditor.ChooseColumnsTab.ColumnCount); var columnsToAdd = new[] { PropertyPath.Parse("Proteins!*.Peptides!*.Precursors!*.ModifiedSequence"), PropertyPath.Parse("Proteins!*.Peptides!*.Precursors!*.Charge"), PropertyPath.Parse("Proteins!*.Peptides!*.Precursors!*.Mz"), }; foreach (var id in columnsToAdd) { Assert.IsTrue(viewEditor.ChooseColumnsTab.TrySelect(id), "Unable to select {0}", id); viewEditor.ChooseColumnsTab.AddSelectedColumn(); } Assert.AreEqual(4, viewEditor.ChooseColumnsTab.ColumnCount); }); PauseForScreenShot <ViewEditor>("Edit Report form", 13); { var previewReportDlg = ShowDialog <DocumentGridForm>(viewEditor.ShowPreview); var expectedRows = 10 + (TestSmallMolecules ? 1 : 0); WaitForConditionUI(() => previewReportDlg.IsComplete && previewReportDlg.RowCount == expectedRows); RunUI(() => { Assert.AreEqual(4, previewReportDlg.ColumnCount); var precursors = SkylineWindow.Document.MoleculeTransitionGroups.ToArray(); const int precursorIndex = 3; for (int i = 0; i < expectedRows; i++) { Assert.AreEqual(precursors[i].PrecursorMz, double.Parse(previewReportDlg.DataGridView.Rows[i].Cells[precursorIndex].Value.ToString()), 0.000001); } var precursorMzCol = previewReportDlg.DataGridView.Columns[precursorIndex]; Assert.IsNotNull(precursorMzCol); previewReportDlg.DataGridView.Sort(precursorMzCol, ListSortDirection.Ascending); }); PauseForScreenShot <DocumentGridForm>("Preview New Report window", 14); OkDialog(previewReportDlg, previewReportDlg.Close); } // Press the Esc key until all forms have been dismissed. RunUI(() => { viewEditor.Close(); editReportListDlg.Close(); exportReportDlg.CancelClick(); }); WaitForClosedForm(viewEditor); WaitForClosedForm(editReportListDlg); WaitForClosedForm(exportReportDlg); //p. 12 Import Full-Scan Data // Launch import peptide search wizard var importPeptideSearchDlg = ShowDialog <ImportPeptideSearchDlg>(SkylineWindow.ShowImportPeptideSearchDlg); RunUI(() => importPeptideSearchDlg.BuildPepSearchLibControl.WorkflowType = ImportPeptideSearchDlg.Workflow.prm); PauseForScreenShot <ImportPeptideSearchDlg.SpectraPage>("Import Peptide Search Build Spectral Library blank page", 15); const int prefixLen = 35; const string lowResDir = "Low Res"; const string searchDir = "search"; const string lowRes20Base = "klc_20100329v_Protea_Peptide_Curve_20fmol_uL_tech1"; string lowRes20File = GetTestPath(Path.Combine(lowResDir, lowRes20Base + ExtThermoRaw)); string lowRes20FileRaw = Path.ChangeExtension(lowRes20File, ExtThermoRaw); string lowRes20Search = GetTestPath(Path.Combine(lowResDir, Path.Combine(searchDir, lowRes20Base + BiblioSpecLiteBuilder.EXT_PERCOLATOR))); string shortLowRes20FileName = (Path.GetFileNameWithoutExtension(lowRes20File) ?? "").Substring(prefixLen); const string lowRes80Base = "klc_20100329v_Protea_Peptide_Curve_80fmol_uL_tech1"; string lowRes80File = GetTestPath(Path.Combine(lowResDir, lowRes80Base + ExtThermoRaw)); string lowRes80Search = GetTestPath(Path.Combine(lowResDir, Path.Combine(searchDir, lowRes80Base + BiblioSpecLiteBuilder.EXT_PERCOLATOR))); string shortLowRes80FileName = (Path.GetFileNameWithoutExtension(lowRes80File) ?? "").Substring(prefixLen); string[] searchFiles = { lowRes20Search, lowRes80Search }; var doc = SkylineWindow.Document; RunUI(() => { Assert.IsTrue(importPeptideSearchDlg.CurrentPage == ImportPeptideSearchDlg.Pages.spectra_page); importPeptideSearchDlg.BuildPepSearchLibControl.AddSearchFiles(searchFiles); importPeptideSearchDlg.BuildPepSearchLibControl.CutOffScore = 0.99; importPeptideSearchDlg.BuildPepSearchLibControl.FilterForDocumentPeptides = true; }); PauseForScreenShot <ImportPeptideSearchDlg.SpectraPage>("Import Peptide Search Build Spectral Library with files page", 16); RunDlg <MessageDlg>(importPeptideSearchDlg.ClickNextButtonNoCheck, dlg => dlg.OkDialog()); doc = WaitForDocumentChangeLoaded(doc); // Verify document library was built string docLibPath = BiblioSpecLiteSpec.GetLibraryFileName(documentFile); string redundantDocLibPath = BiblioSpecLiteSpec.GetRedundantName(docLibPath); Assert.IsTrue(File.Exists(docLibPath) && File.Exists(redundantDocLibPath)); var librarySettings = SkylineWindow.Document.Settings.PeptideSettings.Libraries; Assert.IsTrue(librarySettings.HasDocumentLibrary); PauseForScreenShot <ImportPeptideSearchDlg.ChromatogramsPage>("Import Peptide Search Extract Chromatograms page", 17); // We're on the "Extract Chromatograms" page of the wizard. // All the test results files are in the same directory as the // document file, so all the files should be found, and we should // just be able to move to the next page. TryWaitForConditionUI(() => importPeptideSearchDlg.CurrentPage == ImportPeptideSearchDlg.Pages.chromatograms_page); var correctPage = false; ImportPeptideSearchDlg.Pages currentPage = 0; RunUI(() => correctPage = ImportPeptideSearchDlg.Pages.chromatograms_page == (currentPage = importPeptideSearchDlg.CurrentPage)); if (!correctPage) { WaitForConditionUI(1, // Immediate timeout - just want the richer error message that WaitForConditionUI provides () => importPeptideSearchDlg.CurrentPage == ImportPeptideSearchDlg.Pages.chromatograms_page, string.Format("Expected to be on chromatograms_page, on {0} instead", currentPage)); } var importResultsNameDlg = ShowDialog <ImportResultsNameDlg>(() => importPeptideSearchDlg.ClickNextButton()); OkDialog(importResultsNameDlg, importResultsNameDlg.YesDialog); // Modifications are already set up, so that page should get skipped. // We're on the "Configure Transition Settings" page of the wizard. // We've already set up these settings, so just click next. WaitForConditionUI(() => importPeptideSearchDlg.IsNextButtonEnabled); RunUI(() => { Assert.IsTrue(importPeptideSearchDlg.CurrentPage == ImportPeptideSearchDlg.Pages.transition_settings_page); Assert.IsTrue(importPeptideSearchDlg.ClickNextButton()); }); // We're on the "Configure Full-Scan Settings" page of the wizard. // We've already set up these settings, so just click next. WaitForConditionUI(() => importPeptideSearchDlg.IsNextButtonEnabled); RunUI(() => { Assert.IsTrue(importPeptideSearchDlg.CurrentPage == ImportPeptideSearchDlg.Pages.full_scan_settings_page); Assert.IsTrue(importPeptideSearchDlg.ClickNextButton()); }); doc = WaitForDocumentChange(doc); // Add FASTA also skipped because filter for document peptides was chosen. WaitForClosedForm(importPeptideSearchDlg); PauseForScreenShot <AllChromatogramsGraph>("Loading chromatograms window", 18); WaitForDocumentChangeLoaded(doc, 15 * 60 * 1000); // 15 minutes WaitForClosedAllChromatogramsGraph(); expectedTransitionGroupCount = 10; // Expect this many with results expectedTransitionCount = 87; // Expect this many with results AssertResult.IsDocumentResultsState(SkylineWindow.Document, shortLowRes20FileName, expectedMoleculeCount, expectedTransitionGroupCount, 0, expectedTransitionCount, 0); AssertResult.IsDocumentResultsState(SkylineWindow.Document, shortLowRes80FileName, expectedMoleculeCount, expectedTransitionGroupCount, 0, expectedTransitionCount, 0); RunUI(() => { Assert.IsTrue(SkylineWindow.IsGraphSpectrumVisible); SkylineWindow.ArrangeGraphsTiled(); SkylineWindow.CollapsePrecursors(); SkylineWindow.Width = 1070; }); // Select the first precursor. if (AsSmallMoleculesTestMode != RefinementSettings.ConvertToSmallMoleculesMode.masses_only) { FindNode(AsSmallMolecules ? "LVNELTEFAK" : "K.LVNELTEFAK.T [65, 74]"); } else { FindNode(document.MoleculeTransitionGroups.First().CustomIon.DisplayName); } // Ensure Graphs look like p17. (checked) WaitForGraphs(); RestoreViewOnScreen(18); PauseForScreenShot("Main window with data imported", 19); const double minDotp = 0.9; foreach (var nodeGroup in SkylineWindow.Document.PeptideTransitionGroups) { double dotp = nodeGroup.Results[0][0].LibraryDotProduct ?? 0; Assert.IsTrue(Math.Round(dotp, 2) >= minDotp, string.Format("Library dot-product {0} found below {1}", dotp, minDotp)); } RunUI(() => SkylineWindow.AutoZoomBestPeak()); // Ensure Graphs look like p18. (checked) WaitForGraphs(); PauseForScreenShot("Chromatogram graphs clipped from main window with zoomed peaks", 20); RestoreViewOnScreen(21); RunUI(() => SkylineWindow.GraphSpectrum.SelectSpectrum(new SpectrumIdentifier(lowRes20FileRaw, 77.7722))); PauseForScreenShot <GraphSpectrum>("Library Match view clipped from main window with noisy spectrum", 21); RunUI(() => { SkylineWindow.ShowGraphSpectrum(false); Assert.IsFalse(SkylineWindow.IsGraphSpectrumVisible); SkylineWindow.ShowPeptideIDTimes(false); }); RunUI(() => { var chromGraphs = SkylineWindow.GraphChromatograms.ToArray(); Assert.AreEqual(2, chromGraphs.Length); Assert.AreEqual(46.8, chromGraphs[0].GraphItems.First().BestPeakTime, 0.05); Assert.AreEqual(46.8, chromGraphs[1].GraphItems.First().BestPeakTime, 0.05); SkylineWindow.ShowPeakAreaReplicateComparison(); SkylineWindow.ShowProductTransitions(); }); WaitForCondition(() => !SkylineWindow.GraphPeakArea.IsHidden); if (!AsSmallMolecules) // No libraries (yet?) { WaitForDotProducts(); } RunUI(() => { // Graph p.15 Assert.AreEqual(AsSmallMolecules ? 2 : 3, SkylineWindow.GraphPeakArea.Categories.Count()); Assert.AreEqual(6, SkylineWindow.GraphPeakArea.CurveCount); }); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas Replicate Comparison graph metafile", 22); if (!AsSmallMolecules) // No libraries (yet?) { VerifyDotProducts(0.99, 0.98); } // Check graph p15. (checked) RunUI(() => { SkylineWindow.ShowAllTransitions(); SkylineWindow.ShowSplitChromatogramGraph(true); }); // p. 16 screenshot of full 5-point dilution curve // Select precursor if (AsSmallMoleculesTestMode != RefinementSettings.ConvertToSmallMoleculesMode.masses_only) { FindNode(AsSmallMolecules ? "DRVYIHPF" : "R.DRVYIHPF.- [34, 41]"); // May be localized " (missed 1)" } else { FindNode(Resources.CustomIon_DisplayName_Ion + " [1047"); } WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas Replicate Comparison graph metafile with split graphs", 24); RunUI(() => { SkylineWindow.Size = new Size(990, 620); SkylineWindow.ShowGraphPeakArea(false); }); PauseForScreenShot("Chromatogram graphs clipped from main window with split graphs", 25); // PeakAreaGraph Normalize to total p.20. RunUI(() => { SkylineWindow.ShowGraphPeakArea(true); SkylineWindow.ShowProductTransitions(); SkylineWindow.NormalizeAreaGraphTo(AreaNormalizeToView.area_percent_view); }); // Ensure graph looks like p20. if (AsSmallMoleculesTestMode != RefinementSettings.ConvertToSmallMoleculesMode.masses_only) { FindNode(AsSmallMolecules ? "KNLQSLDPSH" : "R.IKNLQSLDPSH.- [80, 90]"); FindNode(AsSmallMolecules ? "KNLQSLDPSH" : "R.IKNLQSLDPSH.- [80, 90]"); // Phosphorylated } else { FindNode(Resources.CustomIon_DisplayName_Ion + " [1333"); } WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("figure 1a - Area Replicate graph metafile for IKNLQSLDPSH", 26); RunUI(() => { Assert.AreEqual(AsSmallMolecules ? 2 : 3, SkylineWindow.GraphPeakArea.Categories.Count()); Assert.AreEqual(9, SkylineWindow.GraphPeakArea.CurveCount); }); if (AsSmallMoleculesTestMode != RefinementSettings.ConvertToSmallMoleculesMode.masses_only) { FindNode(AsSmallMolecules ? "HLVDEPQNLIK" : "K.HLVDEPQNLIK.Q [401, 411]"); } else { FindNode(Resources.CustomIon_DisplayName_Ion + " [1306"); } WaitForGraphs(); PauseForScreenShot("figure 1b - Area replicate graph metafile for HLVDEPQNLIK", 26); RunUI(() => { Assert.AreEqual(AsSmallMolecules ? 2 : 3, SkylineWindow.GraphPeakArea.Categories.Count()); Assert.AreEqual(7, SkylineWindow.GraphPeakArea.CurveCount); }); RunUI(() => SkylineWindow.ShowGraphPeakArea(false)); WaitForCondition(() => SkylineWindow.GraphPeakArea.IsHidden); RunUI(() => SkylineWindow.SaveDocument()); }