private static TransitionGroupDocNode PickTransitionGroup(SrmDocument doc, PeptideTreeNode nodePepTree, int resultsIndex) { // Determine which transition group to use var nodeTranGroups = nodePepTree.DocNode.TransitionGroups.ToArray(); if (!nodeTranGroups.Any()) { return(null); } if (nodeTranGroups.Length == 1) { return(nodeTranGroups.First()); } var standards = doc.Settings.PeptideSettings.Modifications.InternalStandardTypes; var standardList = nodeTranGroups.Where(tranGroup => standards.Contains(tranGroup.TransitionGroup.LabelType)).ToArray(); if (standardList.Length == 1) { return(standardList.First()); } if (standardList.Length > 1) { nodeTranGroups = standardList; } // Still not sure, pick the one with the most peak area TransitionGroupDocNode best = null; float mzMatchTolerance = (float)doc.Settings.TransitionSettings.Instrument.MzMatchTolerance; float highestAreaSum = 0; foreach (var tranGroup in nodeTranGroups) { ChromatogramSet chromSet = doc.Settings.MeasuredResults.Chromatograms[resultsIndex]; ChromatogramGroupInfo[] chromGroupInfos; if (!doc.Settings.MeasuredResults.TryLoadChromatogram(chromSet, nodePepTree.DocNode, tranGroup, mzMatchTolerance, false, out chromGroupInfos)) { continue; } float areaSum = chromGroupInfos.Where(info => info != null && info.TransitionPointSets != null) .Sum(chromGroupInfo => chromGroupInfo.TransitionPointSets.Sum(chromInfo => chromInfo.Peaks.Sum(peak => peak.Area))); if (areaSum > highestAreaSum) { best = tranGroup; highestAreaSum = areaSum; } } return(best); }
public void TestNeutralLossTextSequences() { var document = (SrmDocument) new XmlSerializer(typeof(SrmDocument)).Deserialize( new StringReader(NEUTRAL_LOSS_DOCUMENT)); var peptideDocNode = document.Molecules.First(); var modFontHolder = new ModFontHolder(new Control()); var textSequences = PeptideTreeNode.CreateTextSequences(peptideDocNode, document.Settings, "MGFGGTLEIK", null, modFontHolder); VerifyTextSequences(textSequences, Tuple.Create("M", FontStyle.Bold | FontStyle.Underline, Color.Black), Tuple.Create("GFGGTLEIK", FontStyle.Regular, Color.Black) ); }
private void AdjustModifications(string peptideSeq, bool removeCTerminalMod, char aa13C, double expectedPrecursorMz) { FindNode(peptideSeq); var editPepModsDlg = ShowDialog <EditPepModsDlg>(SkylineWindow.ModifyPeptide); string sequence = string.Empty; bool modsContainLabel13C = false; RunUI(() => { PeptideTreeNode selNode = ((PeptideTreeNode)SkylineWindow.SequenceTree.SelectedNode); sequence = selNode.DocNode.Peptide.Sequence; if (removeCTerminalMod) { editPepModsDlg.SelectModification(IsotopeLabelType.heavy, sequence.Length - 1, string.Empty); } // Only access Settings.Default on the UI thread modsContainLabel13C = Settings.Default.HeavyModList.Contains(mod => Equals(mod.Name, "Label:13C")); }); if (modsContainLabel13C) // Not L10N { RunUI(() => editPepModsDlg.SelectModification(IsotopeLabelType.heavy, sequence.IndexOf(aa13C), "Label:13C")); // Not L10N } else { var editStaticModDlg = ShowDialog <EditStaticModDlg>(() => editPepModsDlg.AddNewModification(sequence.IndexOf(aa13C), IsotopeLabelType.heavy)); RunUI(() => editStaticModDlg.Modification = new StaticMod("Label:13C", null, null, LabelAtoms.C13)); // Not L10N PauseForScreenShot <EditStaticModDlg.IsotopeModView>("Edit Isotope Modification form", 21); OkDialog(editStaticModDlg, editStaticModDlg.OkDialog); // Make sure the right combo has the focus for the screen shot RunUI(() => editPepModsDlg.SelectModification(IsotopeLabelType.heavy, sequence.IndexOf(aa13C), "Label:13C")); // Not L10N PauseForScreenShot <EditPepModsDlg>("Edit Modifications form", 21); } var doc = SkylineWindow.Document; RunUI(editPepModsDlg.OkDialog); WaitForDocumentChange(doc); RunUI(() => { PeptideTreeNode selNode = ((PeptideTreeNode)SkylineWindow.SequenceTree.SelectedNode); DocNode[] choices = selNode.GetChoices(true).ToArray(); Assert.IsTrue(choices.Contains(node => ((TransitionGroupDocNode)node).PrecursorMz.Value.ToString(LocalizationHelper.CurrentCulture) .Contains(expectedPrecursorMz.ToString(LocalizationHelper.CurrentCulture)))); selNode.Pick(choices, false, false); }); }
public void TestStaticAndHeavyTextSequences() { var document = (SrmDocument) new XmlSerializer(typeof(SrmDocument)).Deserialize( new StringReader(STATIC_AND_HEAVY_MODIFICATIONS_DOCUMENT)); var modFontHolder = new ModFontHolder(new Control()); var oxidizedPeptide = document.Molecules.First(); VerifyTextSequences(PeptideTreeNode.CreateTextSequences(oxidizedPeptide, document.Settings, "MPEPTIDE", null, modFontHolder), Tuple.Create("M", FontStyle.Bold | FontStyle.Underline, Color.Blue), Tuple.Create("PEPTIDE", FontStyle.Bold, Color.Blue) ); var peptide = document.Molecules.Skip(1).First(); VerifyTextSequences(PeptideTreeNode.CreateTextSequences(peptide, document.Settings, "MPEPTIDE", null, modFontHolder), Tuple.Create("MPEPTIDE", FontStyle.Bold, Color.Blue)); }
private bool TryGetSelectedPeptide(out PeptideGroupDocNode peptideGroup, out PeptideDocNode peptide) { peptide = null; peptideGroup = null; SequenceTree sequenceTree = _skylineWindow.SequenceTree; if (null != sequenceTree) { PeptideTreeNode peptideTreeNode = sequenceTree.GetNodeOfType<PeptideTreeNode>(); if (null != peptideTreeNode) { peptide = peptideTreeNode.DocNode; } PeptideGroupTreeNode peptideGroupTreeNode = sequenceTree.GetNodeOfType<PeptideGroupTreeNode>(); if (null != peptideGroupTreeNode) { peptideGroup = peptideGroupTreeNode.DocNode; } } return peptide != null; }
// ReSharper disable SuggestBaseTypeForParameter private static TransitionGroupDocNode[] GetLibraryInfoChargeGroups(PeptideTreeNode nodeTree) // ReSharper restore SuggestBaseTypeForParameter { // Return the first group of each charge stat that has library info. var listGroups = new List <TransitionGroupDocNode>(); foreach (TransitionGroupDocNode nodeGroup in nodeTree.ChildDocNodes) { if (!nodeGroup.HasLibInfo) { continue; } var precursorCharge = nodeGroup.TransitionGroup.PrecursorAdduct; if (!listGroups.Contains(g => g.TransitionGroup.PrecursorAdduct == precursorCharge)) { listGroups.Add(nodeGroup); } } return(listGroups.ToArray()); }
public static SrmDocument ApplyPeak(SrmDocument doc, PeptideTreeNode nodePepTree, ref TransitionGroupDocNode nodeTranGroup, int resultsIndex, ChromFileInfoId resultsFile, bool subsequent, ReplicateValue groupBy, object groupByValue, ILongWaitBroker longWaitBroker) { nodeTranGroup = nodeTranGroup ?? PickTransitionGroup(doc, nodePepTree, resultsIndex); GetReferenceData(doc, nodePepTree.DocNode, nodeTranGroup, resultsIndex, resultsFile, out var referenceTarget, out var referenceMatchData, out var runTime); var annotationCalculator = new AnnotationCalculator(doc); var chromatograms = doc.Settings.MeasuredResults.Chromatograms; for (var i = 0; i < chromatograms.Count; i++) { var chromSet = chromatograms[i]; if (groupBy != null) { if (!Equals(groupByValue, groupBy.GetValue(annotationCalculator, chromSet))) { continue; } } for (var j = 0; j < chromSet.MSDataFileInfos.Count; j++) { var fileInfo = chromSet.MSDataFileInfos[j]; if ((i == resultsIndex && (resultsFile == null || ReferenceEquals(resultsFile, fileInfo.FileId))) || (subsequent && runTime != null && fileInfo.RunStartTime < runTime)) { continue; } var bestMatch = GetPeakMatch(doc, chromSet, fileInfo, nodeTranGroup, referenceTarget, referenceMatchData); if (bestMatch != null) { doc = bestMatch.ChangePeak(doc, nodePepTree, nodeTranGroup, chromSet.Name, fileInfo.FilePath); } } longWaitBroker.SetProgressCheckCancel(i + 1, chromatograms.Count); } return(doc); }
public UniquePeptideSettings(UniquePeptidesDlg dlg) { ProteinPeptideSelections = new Dictionary <int, ProteinPeptideSelection>(); for (var i = 0; i < dlg.dataGridView1.Rows.Count; ++i) { var row = dlg.dataGridView1.Rows[i]; var rowTag = (Tuple <IdentityPath, PeptideDocNode>)row.Tag; if (!(bool)row.Cells[dlg.PeptideIncludedColumn.Name].Value) { var id = rowTag.Item1.GetIdentity(0); if (!ProteinPeptideSelections.ContainsKey(id.GlobalIndex)) { var node = (PeptideGroupDocNode)dlg.SrmDocument.FindNode(id); ProteinPeptideSelections.Add(id.GlobalIndex, new ProteinPeptideSelection(node.ProteinMetadata.Name, new List <string>())); } var item = ProteinPeptideSelections[id.GlobalIndex]; item.Peptides.Add(PeptideTreeNode.GetLabel(rowTag.Item2, string.Empty)); ++_excludedCount; } } }
public static SrmDocument ApplyPeak(SrmDocument doc, PeptideTreeNode nodePepTree, ref TransitionGroupDocNode nodeTranGroup, int resultsIndex, int?resultsFile, bool subsequent, ILongWaitBroker longWaitBroker) { nodeTranGroup = nodeTranGroup ?? PickTransitionGroup(doc, nodePepTree, resultsIndex); PeakMatchData referenceTarget; PeakMatchData[] referenceMatchData; DateTime? runTime; GetReferenceData(doc, nodePepTree.DocNode, nodeTranGroup, resultsIndex, resultsFile, out referenceTarget, out referenceMatchData, out runTime); var chromatograms = doc.Settings.MeasuredResults.Chromatograms; for (int i = 0; i < chromatograms.Count; i++) { var chromSet = chromatograms[i]; for (int j = 0; j < chromSet.MSDataFileInfos.Count; j++) { var fileInfo = chromSet.MSDataFileInfos[j]; if ((i == resultsIndex && (!resultsFile.HasValue || resultsFile.Value == j)) || (subsequent && runTime != null && fileInfo.RunStartTime < runTime)) { continue; } var bestMatch = GetPeakMatch(doc, chromSet, fileInfo, nodeTranGroup, referenceTarget, referenceMatchData); if (bestMatch != null) { doc = bestMatch.ChangePeak(doc, nodePepTree, nodeTranGroup, chromSet.Name, fileInfo.FilePath); } } longWaitBroker.SetProgressCheckCancel(i + 1, chromatograms.Count); } return(doc); }
private void DoStudy7Test() { // Preparing a Document to Accept the Study 7 Transition List, p. 15 RunUI(() => SkylineWindow.NewDocument()); var peptideSettingsUI1 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI); var mod13Cr = new StaticMod("Label:13C(6) (C-term R)", "R", ModTerminus.C, false, null, LabelAtoms.C13, RelativeRT.Matching, null, null, null); AddHeavyMod(mod13Cr, peptideSettingsUI1, "Edit Isotope Modification form", 17); RunUI(() => { peptideSettingsUI1.PickedHeavyMods = new[] { "Label:13C(6) (C-term R)", HEAVY_K }; peptideSettingsUI1.PickedLibraries = new[] { "" }; peptideSettingsUI1.SelectedBackgroundProteome = Resources.SettingsList_ELEMENT_NONE_None; peptideSettingsUI1.OkDialog(); }); // Pasting a Transition List into the Document, p. 18. string clipboardSaveText = string.Empty; RunUI(() => { var filePath = GetTestPath(@"Study 7\Study7 transition list.xls"); SetExcelFileClipboardText(filePath, "Simple", 6, false); clipboardSaveText = ClipboardEx.GetText(); }); { var messageDlg = ShowDialog <ImportTransitionListErrorDlg>(SkylineWindow.Paste); PauseForScreenShot <ImportTransitionListErrorDlg>("Error message form (expected)", 18); OkDialog(messageDlg, messageDlg.CancelDialog); // Restore the clipboard text after pausing ClipboardEx.SetText(clipboardSaveText); } RunDlg <TransitionSettingsUI>(() => SkylineWindow.ShowTransitionSettingsUI(TransitionSettingsUI.TABS.Instrument), transitionSettingsUI => { transitionSettingsUI.InstrumentMaxMz = 1800; transitionSettingsUI.OkDialog(); }); RunUI(() => { SkylineWindow.Paste(); SkylineWindow.CollapsePeptides(); }); PauseForScreenShot("Targets tree (selected from main window)", 19); // Adjusting Modifications Manually, p. 19. AdjustModifications("AGLCQTFVYGGCR", true, 'V', 747.348); PauseForScreenShot("Target tree clipped from main window", 22); AdjustModifications("IVGGWECEK", true, 'V', 541.763); AdjustModifications("YEVQGEVFTKPQLWP", false, 'L', 913.974); RunUI(() => SkylineWindow.SaveDocument(GetTestPath(@"Study 7\Study7.sky"))); // Importing Data from a Multiple Sample WIFF file, p. 23. var importResultsDlg1 = ShowDialog <ImportResultsDlg>(SkylineWindow.ImportResults); var openDataSourceDialog1 = ShowDialog <OpenDataSourceDialog>(() => importResultsDlg1.NamedPathSets = importResultsDlg1.GetDataSourcePathsFile(null)); RunUI(() => { openDataSourceDialog1.CurrentDirectory = new MsDataFilePath(GetTestPath("Study 7")); openDataSourceDialog1.SelectAllFileType(IsFullData ? ".wiff" : ExtensionTestContext.ExtAbWiff); // Force true wiff for FullData }); if (UseRawFilesOrFullData) { var importResultsSamplesDlg = ShowDialog <ImportResultsSamplesDlg>(openDataSourceDialog1.Open); PauseForScreenShot <ImportResultsSamplesDlg>("Choose Samples form", 23); RunUI(() => { if (IsFullData) { importResultsSamplesDlg.CheckAll(true); importResultsSamplesDlg.ExcludeSample(0); // Blank importResultsSamplesDlg.ExcludeSample(25); // QC importResultsSamplesDlg.ExcludeSample(26); importResultsSamplesDlg.ExcludeSample(27); importResultsSamplesDlg.ExcludeSample(28); importResultsSamplesDlg.ExcludeSample(45); // A2 importResultsSamplesDlg.ExcludeSample(46); importResultsSamplesDlg.ExcludeSample(47); importResultsSamplesDlg.ExcludeSample(48); importResultsSamplesDlg.ExcludeSample(49); // gradientwash importResultsSamplesDlg.ExcludeSample(50); importResultsSamplesDlg.ExcludeSample(51); importResultsSamplesDlg.ExcludeSample(52); importResultsSamplesDlg.ExcludeSample(53); // A3 importResultsSamplesDlg.ExcludeSample(54); importResultsSamplesDlg.ExcludeSample(55); importResultsSamplesDlg.ExcludeSample(56); } else { importResultsSamplesDlg.CheckAll(false); importResultsSamplesDlg.IncludeSample(1); importResultsSamplesDlg.IncludeSample(2); importResultsSamplesDlg.IncludeSample(11); importResultsSamplesDlg.IncludeSample(12); } }); OkDialog(importResultsSamplesDlg, importResultsSamplesDlg.OkDialog); } else { RunUI(openDataSourceDialog1.Open); } { var importResultsNameDlg = ShowDialog <ImportResultsNameDlg>(importResultsDlg1.OkDialog); PauseForScreenShot <ImportDocResultsDlg>("Import Results Common prefix form", 24); OkDialog(importResultsNameDlg, importResultsNameDlg.YesDialog); } WaitForCondition(() => SkylineWindow.Document.Settings.HasResults && SkylineWindow.Document.Settings.MeasuredResults.IsLoaded); RestoreViewOnScreen(25); // Inspecting and Adjusting Peak Integration, p. 24. RunUI(() => { SkylineWindow.ShowPeakAreaReplicateComparison(); SkylineWindow.ShowGraphRetentionTime(true); }); if (!IsPauseForScreenShots && !IsFullData) { TestApplyToAll(); } PauseForScreenShot <GraphSummary.RTGraphView>("Main window with peaks and retention times showing", 25); CheckReportCompatibility.CheckAll(SkylineWindow.Document); RunUI(SkylineWindow.EditDelete); FindNode("IVGGWECEK"); // Not L10N TransitionGroupTreeNode selNodeGroup = null; RunUI(() => { selNodeGroup = (TransitionGroupTreeNode)SkylineWindow.SequenceTree.SelectedNode.Nodes[1]; Assert.AreEqual(selNodeGroup.StateImageIndex, (int)SequenceTree.StateImageId.peak_blank); }); RunDlg <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI, transitionSettingsUI => { transitionSettingsUI.MZMatchTolerance = 0.065; transitionSettingsUI.OkDialog(); }); RunUI(() => { Assert.AreEqual((int)SequenceTree.StateImageId.peak, selNodeGroup.StateImageIndex); SkylineWindow.ToggleIntegrateAll(); }); RunUI(() => { foreach (PeptideDocNode nodePep in SkylineWindow.Document.Molecules) { string sequence = nodePep.Peptide.Sequence; int imageIndex = PeptideTreeNode.GetPeakImageIndex(nodePep, SkylineWindow.SequenceTree); if ((sequence != null) && (sequence.StartsWith("YLA") || sequence.StartsWith("YEV"))) // Not L10N { Assert.AreEqual((int)SequenceTree.StateImageId.keep, imageIndex, string.Format("Expected keep icon for the peptide {0}, found {1}", sequence, imageIndex)); } else if (sequence != null) { Assert.AreEqual((int)SequenceTree.StateImageId.peak, imageIndex, string.Format("Expected peak icon for the peptide {0}, found {1}", sequence, imageIndex)); } else // Custom Ion { Assert.AreEqual((int)SequenceTree.StateImageId.peak_blank, imageIndex, string.Format("Expected peak_blank icon for the custom ion {0}, found {1}", nodePep.ModifiedTarget, imageIndex)); } } }); PauseForScreenShot("Main window", 27); // Data Inspection with Peak Areas View, p. 27. FindNode("SSDLVALSGGHTFGK"); // Not L10N RunUI(NormalizeGraphToHeavy); RestoreViewOnScreen(28); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 28); FindNode((564.7746).ToString(LocalizationHelper.CurrentCulture) + "++"); // ESDTSYVSLK - Not L10N PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 29); RunUI(SkylineWindow.ExpandPeptides); string hgflprLight = (363.7059).ToString(LocalizationHelper.CurrentCulture) + "++"; // HGFLPR - Not L10N FindNode(hgflprLight); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 30); RunUI(() => SkylineWindow.NormalizeAreaGraphTo(AreaNormalizeToView.area_percent_view)); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph normalized metafile", 31); RunUI(() => SkylineWindow.ShowGraphPeakArea(false)); RunUI(() => SkylineWindow.ActivateReplicate("E_03")); PauseForScreenShot <GraphChromatogram>("Chromatogram graph metafile with interference", 31); RunUI(() => SkylineWindow.ShowGraphPeakArea(true)); RunUI(() => { SkylineWindow.ShowPeakAreaPeptideGraph(); SkylineWindow.ShowTotalTransitions(); SkylineWindow.ShowCVValues(true); SkylineWindow.ShowPeptideOrder(SummaryPeptideOrder.document); }); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas Peptide Comparison graph metafile", 32); // Annotating replicates with concentration values var chooseAnnotationsDlg = ShowDialog <DocumentSettingsDlg>(SkylineWindow.ShowDocumentSettingsDialog); var editListDlg = ShowDialog <EditListDlg <SettingsListBase <AnnotationDef>, AnnotationDef> >(chooseAnnotationsDlg.EditAnnotationList); RunUI(editListDlg.ResetList); var defineAnnotationDlg = ShowDialog <DefineAnnotationDlg>(editListDlg.AddItem); RunUI(() => { defineAnnotationDlg.AnnotationName = "Concentration"; defineAnnotationDlg.AnnotationType = AnnotationDef.AnnotationType.number; defineAnnotationDlg.AnnotationTargets = AnnotationDef.AnnotationTargetSet.Singleton(AnnotationDef.AnnotationTarget.replicate); }); PauseForScreenShot <DefineAnnotationDlg>("Define Annotation form", 33); OkDialog(defineAnnotationDlg, defineAnnotationDlg.OkDialog); OkDialog(editListDlg, () => editListDlg.DialogResult = DialogResult.OK); RunUI(() => chooseAnnotationsDlg.AnnotationsCheckedListBox.SetItemChecked(0, true)); PauseForScreenShot <DocumentSettingsDlg>("Annotation Settings form", 34); OkDialog(chooseAnnotationsDlg, chooseAnnotationsDlg.OkDialog); RunUI(() => SkylineWindow.ShowResultsGrid(true)); RunUI(() => { SkylineWindow.SelectedPath = SkylineWindow.DocumentUI.GetPathTo((int)SrmDocument.Level.MoleculeGroups, 0); }); WaitForGraphs(); WaitForConditionUI(() => FindOpenForm <LiveResultsGrid>().IsComplete); RunUI(() => { Settings.Default.ResultsGridSynchSelection = false; var resultsGrid = FindOpenForm <LiveResultsGrid>().DataGridView; var colConcentration = // ReSharper disable LocalizableElement resultsGrid.Columns.Cast <DataGridViewColumn>().First(col => "Concentration" == col.HeaderText); // Not L10N // ReSharper restore LocalizableElement if (IsFullData) { float[] concentrations = { 0f, 60, 175, 513, 1500, 2760, 4980, 9060, 16500, 30000 }; for (int i = 0; i < concentrations.Length; i++) { for (int j = i * 4; j < (i + 1) * 4; j++) { SetCellValue(resultsGrid, j, colConcentration.Index, concentrations[i]); } } } else { SetCellValue(resultsGrid, 0, colConcentration.Index, 0f); SetCellValue(resultsGrid, 1, colConcentration.Index, 0f); SetCellValue(resultsGrid, 2, colConcentration.Index, 175f); SetCellValue(resultsGrid, 3, colConcentration.Index, 175f); } }); WaitForGraphs(); PauseForScreenShot <LiveResultsGrid>("Results grid with annotations (scrolled to the end)", 35); FindNode("SSDLVALSGGHTFGK"); // Not L10N RunUI(() => { SkylineWindow.ShowPeakAreaReplicateComparison(); SkylineWindow.GroupByReplicateAnnotation("Concentration"); NormalizeGraphToHeavy(); }); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph with CVs metafile", 36); RunUI(() => SkylineWindow.ShowCVValues(false)); RunUI(() => SkylineWindow.SaveDocument()); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph grouped by concentration metafile", 36); PauseForAuditLog(); // Further Exploration, p. 33. RunUI(() => { SkylineWindow.OpenFile(GetTestPath(@"Study 7\Study II\Study 7ii (site 52).sky")); // Not L10N SkylineWindow.ShowPeakAreaPeptideGraph(); SkylineWindow.ShowCVValues(true); }); WaitForCondition(() => SkylineWindow.Document.Settings.MeasuredResults.IsLoaded); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas peptide comparison graph metafile", 37); FindNode("LSEPAELTDAVK"); RunUI(SkylineWindow.ShowRTReplicateGraph); PauseForScreenShot <GraphSummary.RTGraphView>("Retention Times replicate graph metafile", 38); FindNode("INDISHTQSVSAK"); RunUI(SkylineWindow.ShowPeakAreaReplicateComparison); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas normalized to heave graph metafile", 38); RunUI(() => SkylineWindow.NormalizeAreaGraphTo(AreaNormalizeToView.none)); WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas no normalization graph metafile", 39); FindNode(hgflprLight); RunUI(() => { SkylineWindow.ShowAllTransitions(); NormalizeGraphToHeavy(); }); WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("Area Ratio to Heavy graph showing interference metafile", 40); RunUI(() => SkylineWindow.ShowGraphPeakArea(false)); RunUI(() => SkylineWindow.ActivateReplicate("E_ 03")); WaitForGraphs(); PauseForScreenShot <GraphChromatogram>("Chromatogram graph metafile showing slight interference", 40); }
public ToolStripMenuItem MakeExcludeStandardMenuItem(int replicateIndex) { var document = DocumentUiContainer.DocumentUI; if (!document.Settings.HasResults) { return(null); } ChromatogramSet chromatogramSet = null; if (replicateIndex >= 0 && replicateIndex < document.Settings.MeasuredResults.Chromatograms.Count) { chromatogramSet = document.Settings.MeasuredResults.Chromatograms[replicateIndex]; } if (chromatogramSet == null) { return(null); } if (!chromatogramSet.SampleType.AllowExclude) { return(null); } PeptideDocNode peptideDocNode; PeptideGroupDocNode peptideGroupDocNode; if (!TryGetSelectedPeptide(out peptideGroupDocNode, out peptideDocNode)) { return(null); } bool isExcluded = peptideDocNode.IsExcludeFromCalibration(replicateIndex); var menuItemText = isExcluded ? QuantificationStrings.CalibrationForm_MakeExcludeStandardMenuItem_Include_Standard : QuantificationStrings.CalibrationForm_MakeExcludeStandardMenuItem_Exclude_Standard; var peptideIdPath = new IdentityPath(peptideGroupDocNode.Id, peptideDocNode.Id); var menuItem = new ToolStripMenuItem(menuItemText, null, (sender, args) => { _skylineWindow.ModifyDocument(menuItemText, doc => SetExcludeStandard(doc, peptideIdPath, replicateIndex, !isExcluded), docPair => { var msgType = isExcluded ? MessageType.set_included_standard : MessageType.set_excluded_standard; return(AuditLogEntry.CreateSingleMessageEntry(new MessageInfo(msgType, docPair.NewDocumentType, PeptideTreeNode.GetLabel(peptideDocNode, string.Empty), chromatogramSet.Name))); }); }); return(menuItem); }
private void MainTest() { // Clean-up before running the test RunUI(() => SkylineWindow.ModifyDocument("Set default settings", doc => doc.ChangeSettings(SrmSettingsList.GetDefault()))); // Check using libkey with small molecules var adduct = Adduct.FromStringAssumeProtonated("M+3Na"); var z = adduct.AdductCharge; const string caffeineFormula = "C8H10N4O2"; const string caffeineInChiKey = "RYYVLZVUVIJVGH-UHFFFAOYSA-N"; const string caffeineHMDB = "HMDB01847"; const string caffeineInChi = "InChI=1S/C8H10N4O2/c1-10-4-9-6-5(10)7(13)12(3)8(14)11(6)2/h4H,1-3H3"; const string caffeineCAS = "58-08-2"; const string caffeineSMILES = "Cn1cnc2n(C)c(=O)n(C)c(=O)c12"; const string caffeineKEGG = "C07481"; var mId = new MoleculeAccessionNumbers(string.Join("\t", MoleculeAccessionNumbers.TagHMDB + ":" + caffeineHMDB, MoleculeAccessionNumbers.TagInChI + ":" + caffeineInChi, MoleculeAccessionNumbers.TagCAS + ":" + caffeineCAS, MoleculeAccessionNumbers.TagInChiKey + ":" + caffeineInChiKey, MoleculeAccessionNumbers.TagSMILES + ":" + caffeineSMILES, MoleculeAccessionNumbers.TagKEGG + ":" + caffeineKEGG)); Assert.AreEqual(caffeineInChiKey, mId.GetInChiKey()); Assert.AreEqual(caffeineCAS, mId.GetCAS()); Assert.AreEqual(caffeineSMILES, mId.GetSMILES()); Assert.AreEqual(caffeineKEGG, mId.GetKEGG()); var moleculeName = "caffeine"; var smallMolAttributes = SmallMoleculeLibraryAttributes.Create(moleculeName, caffeineFormula, caffeineInChiKey, string.Join("\t", MoleculeAccessionNumbers.TagHMDB + ":" + caffeineHMDB, MoleculeAccessionNumbers.TagInChI + ":" + caffeineInChi, MoleculeAccessionNumbers.TagCAS + ":" + caffeineCAS, MoleculeAccessionNumbers.TagSMILES + ":" + caffeineSMILES, MoleculeAccessionNumbers.TagKEGG + ":" + caffeineKEGG)); LibKey key; for (var loop = 0; loop++ < 2;) { key = new LibKey(smallMolAttributes, adduct); Assert.IsFalse(key.IsPrecursorKey); Assert.IsFalse(key.IsProteomicKey); Assert.IsTrue(key.IsSmallMoleculeKey); Assert.IsFalse(key.IsModified); Assert.AreEqual(0, key.ModificationCount); Assert.AreEqual(z, key.Charge); Assert.AreEqual(adduct, key.Adduct); Assert.AreEqual(caffeineInChiKey, key.Target.ToString()); var viewLibPepInfo = new ViewLibraryPepInfo(key); Assert.AreEqual(key, viewLibPepInfo.Key); var smallMolInfo = viewLibPepInfo.GetSmallMoleculeLibraryAttributes(); Assert.AreEqual(moleculeName, smallMolInfo.MoleculeName); Assert.AreEqual(caffeineInChiKey, smallMolInfo.InChiKey); Assert.AreEqual(caffeineFormula, smallMolInfo.ChemicalFormula); Assert.IsTrue(smallMolInfo.OtherKeys.Contains(caffeineCAS)); Assert.IsTrue(smallMolInfo.OtherKeys.Contains(caffeineInChi)); Assert.IsTrue(smallMolInfo.OtherKeys.Contains(caffeineHMDB)); Assert.IsTrue(smallMolInfo.OtherKeys.Contains(caffeineSMILES)); Assert.IsTrue(smallMolInfo.OtherKeys.Contains(caffeineKEGG)); adduct = Adduct.FromString("M+3Si", Adduct.ADDUCT_TYPE.non_proteomic, z = -17); // Not realistic, but let's see if it's handled consistently } // Check general libkey operation var seq = "YTQSNSVC[+57.0]YAK"; key = new LibKey(seq, Adduct.DOUBLY_PROTONATED); Assert.IsFalse(key.IsPrecursorKey); Assert.IsTrue(key.IsProteomicKey); Assert.IsFalse(key.IsSmallMoleculeKey); Assert.IsTrue(key.IsModified); Assert.AreEqual(2, key.Charge); Assert.AreEqual(1, key.ModificationCount); Assert.AreEqual(Adduct.DOUBLY_PROTONATED, key.Adduct); Assert.AreEqual(seq, key.Target.ToString()); // Test error conditions BuildLibraryError("missing_charge.pep.XML", TestFilesDir.FullPath); BuildLibraryError("non_int_charge.pep.XML", null); BuildLibraryError("zero_charge.pep.XML", null); BuildLibraryError("truncated.pep.XML", null); BuildLibraryError("no_such_file.pep.XML", null, "Failed to open"); BuildLibraryError("missing_mzxml.pep.XML", null, "Could not find spectrum file"); // Check for proper handling of labeled addducts in small molecule files // (formerly this would throw on a null object, fixed with the use of ExplicitMods.EMPTY) BuildLibraryValid("heavy_adduct.ssl", true, false, false, 1); // Make sure explorer handles this adduct type var viewLibUI = ShowDialog <ViewLibraryDlg>(SkylineWindow.ViewSpectralLibraries); RunUI(() => AssertEx.IsTrue(viewLibUI.GraphItem.IonLabels.Any())); RunUI(viewLibUI.CancelDialog); // Barbara added code to ProteoWizard to rebuild a missing or invalid mzXML index // BuildLibraryError("bad_mzxml.pep.XML", "<index> not found"); BuildLibraryValid(TestFilesDir.GetTestPath("library_errors"), new[] { "bad_mzxml.pep.XML" }, false, false, false, 1); string libraryBaseName = _libraryName; // Test mascot parser _libraryName = libraryBaseName + "mascot"; string libraryMascot = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("mascot"), new[] { "F027319.dat" }, true, false, false, 121, 4); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryMascot))); // Test successful builds _libraryName = libraryBaseName + "a"; string libraryA = _libraryName + BiblioSpecLiteSpec.EXT; string libraryARedundant = _libraryName + BiblioSpecLiteSpec.EXT_REDUNDANT; BuildLibraryValid("CPTAC_Set4_725_091509.pep.XML", true, false, false, 1); BuildLibraryValid("CPTAC_Set4_610_080509.pep.XML", true, false, true, 2); _libraryName = libraryBaseName + "b"; string libraryB = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid("CPTAC_Set4_624_072409.pep.XML", false, false, false, 6); _libraryName = libraryBaseName + "c"; string libraryC = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.FullPath, new[] { libraryA, libraryB }, false, false, false, 8); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryA))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryARedundant))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryB))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryC))); // Test peptide filter const string filterList = "ACARPIISVYSEK\n" + // TODO: Having the modified sequence as the first line causes an error with European number formats "ADRDESSPYAAM[+{0:F01}]IAAQDVAQR\n" + "ADAIQAGASQFETSAAK"; PastePeptideList(string.Format(filterList, 16.0), true, 0, 3, true); _libraryName = libraryBaseName + "filter"; string libraryFilter = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("maxquant"), new[] { "test.msms.txt" }, false, true, false, 2); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryFilter))); RunUI(SkylineWindow.Undo); RunUI(SkylineWindow.Undo); // Test AddPathsDlg (file not found) EnsurePeptideSettings(); var buildLibraryDlg = ShowDialog <BuildLibraryDlg>(PeptideSettingsUI.ShowBuildLibraryDlg); string[] invalidPaths = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.xml"), Path.Combine(TestFilesDir.GetTestPath("library_valid"), "CPTAC_Set4_624_072409.pep.XML") }; TestAddPaths(buildLibraryDlg, invalidPaths, true); // Test AddPathsDlg (file invalid type) string[] invalidTypes = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.txt"), Path.Combine(TestFilesDir.GetTestPath("maxquant"), "mqpar.xml") }; TestAddPaths(buildLibraryDlg, invalidTypes, true); // Test AddPathsDlg (valid files) string[] goodPaths = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.txt"), Path.Combine(TestFilesDir.GetTestPath("library_valid"), "CPTAC_Set4_624_072409.pep.XML") }; TestAddPaths(buildLibraryDlg, goodPaths, false); OkDialog(buildLibraryDlg, buildLibraryDlg.CancelDialog); const string heavyRPeptide = "TPAQFDADELR"; const string oxidizedMPeptide = "LVGNMHGDETVSR"; const string peptideList = heavyRPeptide + "\n" + oxidizedMPeptide + "\n" + "ALSIGFETCR\n" + "GNMHGDETVSR\n" + "VGNMHGDETVSR"; PastePeptideList(peptideList, true, 0, 1); // Set modifications on peptides to verify they connect with library spectra. const LabelAtoms labelAtoms = LabelAtoms.C13 | LabelAtoms.N15; const string heavyR = "Heavy R"; Settings.Default.HeavyModList.Add(new StaticMod(heavyR, "R", ModTerminus.C, null, labelAtoms, null, null)); const string oMeth = "Oxidized Methionine"; Settings.Default.StaticModList.Add(new StaticMod(oMeth, "M", null, "O")); var sequenceTree = SkylineWindow.SequenceTree; var docCurrent = SkylineWindow.Document; // Select the heavyR peptide PeptideTreeNode nodePepTree = null; IdentityPath pathPep = docCurrent.GetPathTo((int)SrmDocument.Level.Molecules, 0); RunUI(() => { sequenceTree.SelectedPath = pathPep; nodePepTree = sequenceTree.SelectedNode as PeptideTreeNode; }); Assert.IsNotNull(nodePepTree); Assert.AreEqual(heavyRPeptide, nodePepTree.DocNode.Peptide.Sequence); // Set the Heavy R modification explicitly var editPepModsDlg = ShowDialog <EditPepModsDlg>(SkylineWindow.ModifyPeptide); RunUI(() => { editPepModsDlg.SetModification(heavyRPeptide.Length - 1, IsotopeLabelType.heavy, heavyR); editPepModsDlg.OkDialog(); }); WaitForCondition(() => (SkylineWindow.Document.Molecules.First().TransitionGroupCount == 2)); // The peptide should now match the spectrum in the library, and have // both heavy and light precursors, with ranked transitions PeptideDocNode nodePep = null; RunUI(() => nodePep = nodePepTree.DocNode); Assert.IsNotNull(nodePep); Debug.Assert(nodePep != null); Assert.AreEqual(2, nodePep.Children.Count, "Missing precursor for heavy R peptide."); docCurrent = SkylineWindow.Document; foreach (TransitionGroupDocNode nodeGroup in nodePep.Children) { AssertLibInfo(docCurrent, nodeGroup); } // Which means all transition groups should now have spectrum info foreach (var nodeGroup in docCurrent.PeptideTransitionGroups) { AssertLibInfo(docCurrent, nodeGroup); } // New document var docNew = new SrmDocument(SrmSettingsList.GetDefault()); var docNewCopy = docNew; RunUI(() => SkylineWindow.SwitchDocument(docNewCopy, null)); const string idpList3 = "FHYKTDQGIK\n" + "WCAIGHQER\n" + "WCTISTHEANK"; int idpCount3 = idpList3.Split('\n').Length; const string idpList = "ADVTLGGGAK\n" + "AGFAGDDAPR\n" + "ALEFAKK\n" + "CCTESLVNR\n" + "DSYVGDEAQSK\n" + "YICDNQDTISSK\n" + // charge 3 peptides all have 2 also idpList3; int idpCount = idpList.Split('\n').Length; _libraryName = libraryBaseName + "_idp"; string libraryIdp = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("idp_xml"), new[] { "orbi-small-eg.idpXML" }, false, false, false, idpCount + idpCount3); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryIdp))); // Add peptides expected to have charge 2 spectra in the library PastePeptideList(idpList, true, 0, 0); // Undo the paste RunUI(SkylineWindow.Undo); // Try filtering for only charge 3 spectra var transitionSettingsUI = ShowDialog <TransitionSettingsUI>( SkylineWindow.ShowTransitionSettingsUI); RunUI(() => { transitionSettingsUI.PrecursorCharges = "3"; transitionSettingsUI.OkDialog(); }); PastePeptideList(idpList, false, idpCount - idpCount3 + 1 /* missing cleavage*/, 0); // New document var docNewCopy2 = docNew; RunUI(() => SkylineWindow.SwitchDocument(docNewCopy2, null)); _libraryName = libraryBaseName + "_cpas1"; string libraryCpas1 = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("cpas"), null, false, false, false, 3); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryCpas1))); // These are very poor searches, so repeat with no filter Settings.Default.LibraryResultCutOff = 0; _libraryName = libraryBaseName + "_cpas2"; BuildLibraryValid(TestFilesDir.GetTestPath("cpas"), null, false, false, false, 100, 100); // And, since the spectra are really poor, allow lots of // possibilities for fragment ions. var transitionSettingsCpas = ShowDialog <TransitionSettingsUI>( SkylineWindow.ShowTransitionSettingsUI); RunUI(() => { transitionSettingsCpas.PrecursorCharges = transitionSettingsCpas.ProductCharges = "1,2,3"; transitionSettingsCpas.FragmentTypes = "y,b"; transitionSettingsCpas.InstrumentMaxMz = 2000; transitionSettingsCpas.OkDialog(); }); EnsurePeptideSettings(); RunUI(() => { // Turn off carbamidomethyl cys, since not in these searches PeptideSettingsUI.PickedStaticMods = new string[0]; PeptideSettingsUI.OkDialog(); }); // Get the set of peptides to paste from the library, since there // are a lot. var setPeptides = new HashSet <Target>(); var library = SkylineWindow.Document.Settings.PeptideSettings.Libraries.Libraries[0]; foreach (var libKey in library.Keys) { if (!libKey.IsModified) { setPeptides.Add(libKey.Target); } } string cpasPeptides = string.Join("\n", setPeptides.Select(p => p.ToString()).ToArray()); var pasteFilteredPeptideDlg = ShowDialog <PasteFilteredPeptidesDlg>( () => SkylineWindow.Paste(cpasPeptides)); RunUI(pasteFilteredPeptideDlg.NoDialog); Assert.IsTrue(WaitForCondition(() => SkylineWindow.Document.PeptideCount == setPeptides.Count), string.Format("Expecting {0} peptides, found {1}.", setPeptides.Count, SkylineWindow.Document.PeptideCount)); Assert.AreEqual(setPeptides.Count, SkylineWindow.Document.PeptideTransitionGroupCount, "Expecting precursors for peptides matched to library spectrum."); // New document docNew = new SrmDocument(SrmSettingsList.GetDefault()); RunUI(() => SkylineWindow.SwitchDocument(docNew, null)); // Tests for adding iRTs to spectral library after building // 1. ask to recalibrate iRTs // 2. ask to add iRTs // 3. if added iRTs, ask to add RT predictor // no recalibrate, add iRTs, no add predictor _libraryName = libraryBaseName + "_irt1"; // library_test_irt1 BuildLibraryIrt(true, false, false); RunUI(() => Assert.IsTrue(PeptideSettingsUI.Prediction.RetentionTime == null)); // no recalibrate, add iRTs, add predictor _libraryName = libraryBaseName + "_irt2"; // library_test_irt2 BuildLibraryIrt(true, false, true); RunUI(() => Assert.IsTrue(PeptideSettingsUI.Prediction.RetentionTime.Name.Equals(_libraryName))); var editIrtDlg2 = ShowDialog <EditIrtCalcDlg>(PeptideSettingsUI.EditCalculator); RunUI(() => Assert.IsTrue(ReferenceEquals(editIrtDlg2.IrtStandards, IrtStandard.BIOGNOSYS_10))); OkDialog(editIrtDlg2, editIrtDlg2.CancelDialog); // recalibrate, add iRTs, no add predictor _libraryName = libraryBaseName + "_irt3"; // library_test_irt3 BuildLibraryIrt(true, true, false); RunUI(() => Assert.IsTrue(PeptideSettingsUI.Prediction.RetentionTime.Name.Equals(libraryBaseName + "_irt2"))); // recalibrate, add iRTs, add predictor _libraryName = libraryBaseName + "_irt4"; // library_test_irt4 BuildLibraryIrt(true, true, true); RunUI(() => Assert.IsTrue(PeptideSettingsUI.Prediction.RetentionTime.Name.Equals(_libraryName))); var editIrtDlg4 = ShowDialog <EditIrtCalcDlg>(PeptideSettingsUI.EditCalculator); RunUI(() => Assert.IsTrue(ReferenceEquals(editIrtDlg4.IrtStandards, IrtStandard.EMPTY))); OkDialog(editIrtDlg4, editIrtDlg4.CancelDialog); OkDialog(PeptideSettingsUI, PeptideSettingsUI.CancelDialog); }
protected override void DoTest() { // Clean-up before running the test RunUI(() => SkylineWindow.ModifyDocument("Set default settings", doc => doc.ChangeSettings(SrmSettingsList.GetDefault()))); // Test error conditions BuildLibraryError("missing_charge.pep.XML", TestFilesDir.FullPath, "uw.edu"); BuildLibraryError("non_int_charge.pep.XML"); BuildLibraryError("zero_charge.pep.XML"); BuildLibraryError("truncated.pep.XML"); BuildLibraryError("no_such_file.pep.XML", "Failed to open"); BuildLibraryError("missing_mzxml.pep.XML", "Could not find spectrum file"); // Barbara added code to ProteoWizard to rebuild a missing or invalid mzXML index // BuildLibraryError("bad_mzxml.pep.XML", "<index> not found"); BuildLibraryValid(TestFilesDir.GetTestPath("library_errors"), new[] { "bad_mzxml.pep.XML" }, false, false, false, 1); string libraryBaseName = _libraryName; // Test mascot parser _libraryName = libraryBaseName + "mascot"; string libraryMascot = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("mascot"), new[] { "F027319.dat" }, true, false, false, 121, 4); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryMascot))); // Test successful builds _libraryName = libraryBaseName + "a"; string libraryA = _libraryName + BiblioSpecLiteSpec.EXT; string libraryARedundant = _libraryName + BiblioSpecLiteSpec.EXT_REDUNDANT; BuildLibraryValid("CPTAC_Set4_725_091509.pep.XML", true, false, false, 1); BuildLibraryValid("CPTAC_Set4_610_080509.pep.XML", true, false, true, 2); _libraryName = libraryBaseName + "b"; string libraryB = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid("CPTAC_Set4_624_072409.pep.XML", false, false, false, 6); _libraryName = libraryBaseName + "c"; string libraryC = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.FullPath, new[] { libraryA, libraryB }, false, false, false, 8); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryA))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryARedundant))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryB))); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryC))); // Test peptide filter const string filterList = "ACARPIISVYSEK\n" + // TODO: Having the modified sequence as the first line causes an error with European number formats "ADRDESSPYAAM[+{0:F01}]IAAQDVAQR\n" + "ADAIQAGASQFETSAAK"; PastePeptideList(string.Format(filterList, 16.0), true, 0, 3, true); _libraryName = libraryBaseName + "filter"; string libraryFilter = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("maxquant"), new[] { "test.msms.txt" }, false, true, false, 2); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryFilter))); RunUI(SkylineWindow.Undo); RunUI(SkylineWindow.Undo); // Test AddPathsDlg (file not found) EnsurePeptideSettings(); var buildLibraryDlg = ShowDialog <BuildLibraryDlg>(PeptideSettingsUI.ShowBuildLibraryDlg); string[] invalidPaths = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.xml"), Path.Combine(TestFilesDir.GetTestPath("library_valid"), "CPTAC_Set4_624_072409.pep.XML") }; TestAddPaths(buildLibraryDlg, invalidPaths, true); // Test AddPathsDlg (file invalid type) string[] invalidTypes = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.txt"), Path.Combine(TestFilesDir.GetTestPath("maxquant"), "mqpar.xml") }; TestAddPaths(buildLibraryDlg, invalidTypes, true); // Test AddPathsDlg (valid files) string[] goodPaths = { Path.Combine(TestFilesDir.GetTestPath("maxquant"), "test.msms.txt"), Path.Combine(TestFilesDir.GetTestPath("library_valid"), "CPTAC_Set4_624_072409.pep.XML") }; TestAddPaths(buildLibraryDlg, goodPaths, false); OkDialog(buildLibraryDlg, buildLibraryDlg.CancelDialog); const string heavyRPeptide = "TPAQFDADELR"; const string oxidizedMPeptide = "LVGNMHGDETVSR"; const string peptideList = heavyRPeptide + "\n" + oxidizedMPeptide + "\n" + "ALSIGFETCR\n" + "GNMHGDETVSR\n" + "VGNMHGDETVSR"; PastePeptideList(peptideList, true, 0, 1); // Set modifications on peptides to verify they connect with library spectra. const LabelAtoms labelAtoms = LabelAtoms.C13 | LabelAtoms.N15; const string heavyR = "Heavy R"; Settings.Default.HeavyModList.Add(new StaticMod(heavyR, "R", ModTerminus.C, null, labelAtoms, null, null)); const string oMeth = "Oxidized Methionine"; Settings.Default.StaticModList.Add(new StaticMod(oMeth, "M", null, "O")); var sequenceTree = SkylineWindow.SequenceTree; var docCurrent = SkylineWindow.Document; // Select the heavyR peptide PeptideTreeNode nodePepTree = null; IdentityPath pathPep = docCurrent.GetPathTo((int)SrmDocument.Level.Molecules, 0); RunUI(() => { sequenceTree.SelectedPath = pathPep; nodePepTree = sequenceTree.SelectedNode as PeptideTreeNode; }); Assert.IsNotNull(nodePepTree); Assert.AreEqual(heavyRPeptide, nodePepTree.DocNode.Peptide.Sequence); // Set the Heavy R modification explicitly var editPepModsDlg = ShowDialog <EditPepModsDlg>(SkylineWindow.ModifyPeptide); RunUI(() => { editPepModsDlg.SetModification(heavyRPeptide.Length - 1, IsotopeLabelType.heavy, heavyR); editPepModsDlg.OkDialog(); }); WaitForCondition(() => (SkylineWindow.Document.Molecules.First().TransitionGroupCount == 2)); // The peptide should now match the spectrum in the library, and have // both heavy and light precursors, with ranked transitions PeptideDocNode nodePep = null; RunUI(() => nodePep = nodePepTree.DocNode); Assert.IsNotNull(nodePep); Debug.Assert(nodePep != null); Assert.AreEqual(2, nodePep.Children.Count, "Missing precursor for heavy R peptide."); docCurrent = SkylineWindow.Document; foreach (TransitionGroupDocNode nodeGroup in nodePep.Children) { AssertLibInfo(docCurrent, nodeGroup); } // Which means all transition groups should now have spectrum info foreach (var nodeGroup in docCurrent.PeptideTransitionGroups) { AssertLibInfo(docCurrent, nodeGroup); } // New document var docNew = new SrmDocument(SrmSettingsList.GetDefault()); RunUI(() => SkylineWindow.SwitchDocument(docNew, null)); const string idpList3 = "FHYKTDQGIK\n" + "WCAIGHQER\n" + "WCTISTHEANK"; int idpCount3 = idpList3.Split('\n').Length; const string idpList = "ADVTLGGGAK\n" + "AGFAGDDAPR\n" + "ALEFAKK\n" + "CCTESLVNR\n" + "DSYVGDEAQSK\n" + "YICDNQDTISSK\n" + // charge 3 peptides all have 2 also idpList3; int idpCount = idpList.Split('\n').Length; _libraryName = libraryBaseName + "_idp"; string libraryIdp = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("idp_xml"), new[] { "orbi-small-eg.idpXML" }, false, false, false, idpCount + idpCount3); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryIdp))); // Add peptides expected to have charge 2 spectra in the library PastePeptideList(idpList, true, 0, 0); // Undo the paste RunUI(SkylineWindow.Undo); // Try filtering for only charge 3 spectra var transitionSettingsUI = ShowDialog <TransitionSettingsUI>( SkylineWindow.ShowTransitionSettingsUI); RunUI(() => { transitionSettingsUI.PrecursorCharges = "3"; transitionSettingsUI.OkDialog(); }); PastePeptideList(idpList, false, idpCount - idpCount3 + 1 /* missing cleavage*/, 0); // New document RunUI(() => SkylineWindow.SwitchDocument(docNew, null)); _libraryName = libraryBaseName + "_cpas1"; string libraryCpas1 = _libraryName + BiblioSpecLiteSpec.EXT; BuildLibraryValid(TestFilesDir.GetTestPath("cpas"), null, false, false, false, 3); Assert.IsTrue(File.Exists(TestFilesDir.GetTestPath(libraryCpas1))); // These are very poor searches, so repeat with no filter Settings.Default.LibraryResultCutOff = 0; _libraryName = libraryBaseName + "_cpas2"; BuildLibraryValid(TestFilesDir.GetTestPath("cpas"), null, false, false, false, 100, 100); // And, since the spectra are really poor, allow lots of // possibilities for fragment ions. var transitionSettingsCpas = ShowDialog <TransitionSettingsUI>( SkylineWindow.ShowTransitionSettingsUI); RunUI(() => { transitionSettingsCpas.PrecursorCharges = transitionSettingsCpas.ProductCharges = "1,2,3"; transitionSettingsCpas.FragmentTypes = "y,b"; transitionSettingsCpas.InstrumentMaxMz = 2000; transitionSettingsCpas.OkDialog(); }); EnsurePeptideSettings(); RunUI(() => { // Turn off carbamidomethyl cys, since not in these searches PeptideSettingsUI.PickedStaticMods = new string[0]; PeptideSettingsUI.OkDialog(); }); // Get the set of peptides to paste from the library, since there // are a lot. HashSet <string> setPeptides = new HashSet <string>(); var library = SkylineWindow.Document.Settings.PeptideSettings.Libraries.Libraries[0]; foreach (var libKey in library.Keys) { if (!libKey.IsModified) { setPeptides.Add(libKey.Sequence); } } string cpasPeptides = string.Join("\n", setPeptides.ToArray()); var pasteFilteredPeptideDlg = ShowDialog <PasteFilteredPeptidesDlg>( () => SkylineWindow.Paste(cpasPeptides)); RunUI(pasteFilteredPeptideDlg.NoDialog); Assert.IsTrue(WaitForCondition(() => SkylineWindow.Document.PeptideCount == setPeptides.Count), string.Format("Expecting {0} peptides, found {1}.", setPeptides.Count, SkylineWindow.Document.PeptideCount)); Assert.AreEqual(setPeptides.Count, SkylineWindow.Document.PeptideTransitionGroupCount, "Expecting precursors for peptides matched to library spectrum."); }
private void DoStudy7Test() { // Preparing a Document to Accept the Study 7 Transition List, p. 18 RunUI(() => SkylineWindow.NewDocument()); var peptideSettingsUI1 = ShowDialog <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI); if (IsCoverShotMode) { var modHeavyK = new StaticMod(HEAVY_K, "K", ModTerminus.C, false, null, LabelAtoms.C13 | LabelAtoms.N15, // Not L10N RelativeRT.Matching, null, null, null); AddHeavyMod(modHeavyK, peptideSettingsUI1, "Edit Isotope Modification form", 6); } var mod13Cr = new StaticMod("Label:13C(6) (C-term R)", "R", ModTerminus.C, false, null, LabelAtoms.C13, RelativeRT.Matching, null, null, null); AddHeavyMod(mod13Cr, peptideSettingsUI1, "Edit Isotope Modification form", 18); RunUI(() => { peptideSettingsUI1.PickedHeavyMods = new[] { "Label:13C(6) (C-term R)", HEAVY_K }; peptideSettingsUI1.PickedLibraries = new string[0]; peptideSettingsUI1.SelectedBackgroundProteome = Resources.SettingsList_ELEMENT_NONE_None; peptideSettingsUI1.OkDialog(); }); // Pasting a Transition List into the Document, p. 19. string clipboardSaveText = string.Empty; RunUI(() => { var filePath = GetTestPath(@"Study 7\Study7 transition list.xls"); SetExcelFileClipboardText(filePath, "Simple", 6, false); clipboardSaveText = ClipboardEx.GetText(); }); // We expect this to fail due to instrument settings rather than format issues eg "The product m/z 1519.78 is out of range for the instrument settings, in the peptide sequence YEVQGEVFTKPQLWP. Check the Instrument tab in the Transition Settings." { var transitionSelectdgl = ShowDialog <ImportTransitionListColumnSelectDlg>(SkylineWindow.Paste); var messageDlg = ShowDialog <ImportTransitionListErrorDlg>(transitionSelectdgl.AcceptButton.PerformClick); AssertEx.AreComparableStrings(TextUtil.SpaceSeparate(Resources.MassListRowReader_CalcTransitionExplanations_The_product_m_z__0__is_out_of_range_for_the_instrument_settings__in_the_peptide_sequence__1_, Resources.MassListRowReader_CalcPrecursorExplanations_Check_the_Instrument_tab_in_the_Transition_Settings), messageDlg.ErrorList[0].ErrorMessage, 2); RunUI(() => messageDlg.Size = new Size(838, 192)); PauseForScreenShot <ImportTransitionListErrorDlg>("Error message form (expected)", 19); OkDialog(messageDlg, messageDlg.CancelButton.PerformClick); // Acknowledge the error but decline to proceed with import RunUI(() => transitionSelectdgl.DialogResult = DialogResult.Cancel); // Cancel the import // Restore the clipboard text after pausing ClipboardEx.SetText(clipboardSaveText); } RunDlg <TransitionSettingsUI>(() => SkylineWindow.ShowTransitionSettingsUI(TransitionSettingsUI.TABS.Instrument), transitionSettingsUI => { transitionSettingsUI.InstrumentMaxMz = 1800; transitionSettingsUI.OkDialog(); }); PasteTransitionListSkipColumnSelect(); RunUI(SkylineWindow.CollapsePeptides); PauseForScreenShot("Targets tree (selected from main window)", 20); // Adjusting Modifications Manually, p. 19. AdjustModifications("AGLCQTFVYGGCR", true, 'V', 747.348); PauseForScreenShot("Target tree clipped from main window", 22); AdjustModifications("IVGGWECEK", true, 'V', 541.763); AdjustModifications("YEVQGEVFTKPQLWP", false, 'L', 913.974); RunUI(() => SkylineWindow.SaveDocument(GetTestPath(@"Study 7\Study7.sky"))); // Importing Data from a Multiple Sample WIFF file, p. 23. var importResultsDlg1 = ShowDialog <ImportResultsDlg>(SkylineWindow.ImportResults); var openDataSourceDialog1 = ShowDialog <OpenDataSourceDialog>(() => importResultsDlg1.NamedPathSets = importResultsDlg1.GetDataSourcePathsFile(null)); RunUI(() => { openDataSourceDialog1.CurrentDirectory = new MsDataFilePath(GetTestPath("Study 7")); openDataSourceDialog1.SelectAllFileType(UseRawFilesOrFullData ? ".wiff" : ".mzML"); // Force true wiff for FullData }); if (UseRawFilesOrFullData) { var importResultsSamplesDlg = ShowDialog <ImportResultsSamplesDlg>(openDataSourceDialog1.Open); PauseForScreenShot <ImportResultsSamplesDlg>("Choose Samples form", 24); RunUI(() => { if (IsFullData) { importResultsSamplesDlg.CheckAll(true); importResultsSamplesDlg.ExcludeSample(0); // Blank importResultsSamplesDlg.ExcludeSample(25); // QC importResultsSamplesDlg.ExcludeSample(26); importResultsSamplesDlg.ExcludeSample(27); importResultsSamplesDlg.ExcludeSample(28); importResultsSamplesDlg.ExcludeSample(45); // A2 importResultsSamplesDlg.ExcludeSample(46); importResultsSamplesDlg.ExcludeSample(47); importResultsSamplesDlg.ExcludeSample(48); importResultsSamplesDlg.ExcludeSample(49); // gradientwash importResultsSamplesDlg.ExcludeSample(50); importResultsSamplesDlg.ExcludeSample(51); importResultsSamplesDlg.ExcludeSample(52); importResultsSamplesDlg.ExcludeSample(53); // A3 importResultsSamplesDlg.ExcludeSample(54); importResultsSamplesDlg.ExcludeSample(55); importResultsSamplesDlg.ExcludeSample(56); } else { importResultsSamplesDlg.CheckAll(false); importResultsSamplesDlg.IncludeSample(1); importResultsSamplesDlg.IncludeSample(2); importResultsSamplesDlg.IncludeSample(11); importResultsSamplesDlg.IncludeSample(12); } }); OkDialog(importResultsSamplesDlg, importResultsSamplesDlg.OkDialog); } else { RunUI(openDataSourceDialog1.Open); } { var importResultsNameDlg = ShowDialog <ImportResultsNameDlg>(importResultsDlg1.OkDialog); PauseForScreenShot <ImportResultsNameDlg>("Import Results Common prefix form", 25); OkDialog(importResultsNameDlg, importResultsNameDlg.YesDialog); } WaitForCondition(() => SkylineWindow.Document.Settings.HasResults && SkylineWindow.Document.Settings.MeasuredResults.IsLoaded); RestoreViewOnScreen(26); // Inspecting and Adjusting Peak Integration, p. 24. RunUI(() => { SkylineWindow.ShowPeakAreaReplicateComparison(); SkylineWindow.ShowGraphRetentionTime(true); SkylineWindow.Size = new Size(1029, 659); }); if (!IsPauseForScreenShots && !IsFullData) { TestApplyToAll(); } PauseForScreenShot <GraphSummary.RTGraphView>("Main window with peaks and retention times showing", 26); CheckReportCompatibility.CheckAll(SkylineWindow.Document); RunUI(SkylineWindow.EditDelete); FindNode("IVGGWECEK"); // Not L10N TransitionGroupTreeNode selNodeGroup = null; RunUI(() => { selNodeGroup = (TransitionGroupTreeNode)SkylineWindow.SequenceTree.SelectedNode.Nodes[1]; Assert.AreEqual(selNodeGroup.StateImageIndex, (int)SequenceTree.StateImageId.peak_blank); }); RunDlg <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI, transitionSettingsUI => { transitionSettingsUI.MZMatchTolerance = 0.065; transitionSettingsUI.OkDialog(); }); RunUI(() => { Assert.AreEqual((int)SequenceTree.StateImageId.peak, selNodeGroup.StateImageIndex); SkylineWindow.ToggleIntegrateAll(); }); RunUI(() => { foreach (PeptideDocNode nodePep in SkylineWindow.Document.Molecules) { string sequence = nodePep.Peptide.Sequence; int imageIndex = PeptideTreeNode.GetPeakImageIndex(nodePep, SkylineWindow.SequenceTree); if ((sequence != null) && (sequence.StartsWith("YLA") || sequence.StartsWith("YEV"))) // Not L10N { Assert.AreEqual((int)SequenceTree.StateImageId.keep, imageIndex, string.Format("Expected keep icon for the peptide {0}, found {1}", sequence, imageIndex)); } else if (sequence != null) { Assert.AreEqual((int)SequenceTree.StateImageId.peak, imageIndex, string.Format("Expected peak icon for the peptide {0}, found {1}", sequence, imageIndex)); } else // Custom Ion { Assert.AreEqual((int)SequenceTree.StateImageId.peak_blank, imageIndex, string.Format("Expected peak_blank icon for the custom ion {0}, found {1}", nodePep.ModifiedTarget, imageIndex)); } } }); PauseForScreenShot("Main window", 27); // Data Inspection with Peak Areas View, p. 29. RestoreViewOnScreen(28); FindNode("SSDLVALSGGHTFGK"); // Not L10N RunUI(NormalizeGraphToHeavy); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 29); FindNode((564.7746).ToString(LocalizationHelper.CurrentCulture) + "++"); // ESDTSYVSLK - Not L10N PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 30); RunUI(SkylineWindow.ExpandPeptides); string hgflprLight = (363.7059).ToString(LocalizationHelper.CurrentCulture) + "++"; // HGFLPR - Not L10N FindNode(hgflprLight); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph metafile", 31); RunUI(() => SkylineWindow.NormalizeAreaGraphTo(NormalizeOption.TOTAL)); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph normalized metafile", 32); RunUI(() => { SkylineWindow.ShowGraphPeakArea(false); SkylineWindow.ActivateReplicate("E_03"); SkylineWindow.Size = new Size(757, 655); }); PauseForScreenShot <GraphChromatogram>("Chromatogram graph metafile with interference", 32); RunUI(() => SkylineWindow.ShowGraphPeakArea(true)); RunUI(() => { SkylineWindow.ShowPeakAreaPeptideGraph(); SkylineWindow.ShowTotalTransitions(); SkylineWindow.ShowCVValues(true); SkylineWindow.ShowPeptideOrder(SummaryPeptideOrder.document); }); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas Peptide Comparison graph metafile", 33); float[] concentrations = { 0f, 60, 175, 513, 1500, 2760, 4980, 9060, 16500, 30000 }; var documentGrid = ShowDialog <DocumentGridForm>(() => SkylineWindow.ShowDocumentGrid(true)); var pathConcentration = PropertyPath.Parse("AnalyteConcentration"); var pathSampleType = PropertyPath.Parse("SampleType"); RunUI(() => documentGrid.ChooseView(Resources.SkylineViewContext_GetDocumentGridRowSources_Replicates)); WaitForConditionUI(() => documentGrid.RowCount == (IsFullData ? concentrations.Length * 4 : 4) && documentGrid.FindColumn(pathConcentration) != null && documentGrid.FindColumn(pathSampleType) != null); // Let it initialize RunUI(() => { // Parent is a DocPane and Parent.Parent is the floating window documentGrid.Parent.Parent.Size = new Size(585, 325); var documentGridView = documentGrid.DataGridView; var colConcentration = documentGrid.FindColumn(pathConcentration); var colStandardType = documentGrid.FindColumn(pathSampleType); if (IsFullData) { for (int i = 0; i < concentrations.Length; i++) { for (int j = i * 4; j < (i + 1) * 4; j++) { double?concentration = concentrations[i]; SetCellValue(documentGridView, j, colConcentration.Index, concentration); SetCellValue(documentGridView, j, colStandardType.Index, concentration == 0 ? SampleType.BLANK : SampleType.STANDARD); } } } else { SetCellValue(documentGridView, 0, colConcentration.Index, 0.0); SetCellValue(documentGridView, 0, colStandardType.Index, SampleType.BLANK); SetCellValue(documentGridView, 1, colConcentration.Index, 0.0); SetCellValue(documentGridView, 1, colStandardType.Index, SampleType.BLANK); SetCellValue(documentGridView, 2, colConcentration.Index, 175.0); SetCellValue(documentGridView, 2, colStandardType.Index, SampleType.STANDARD); SetCellValue(documentGridView, 3, colConcentration.Index, 175.0); SetCellValue(documentGridView, 3, colStandardType.Index, SampleType.STANDARD); } }); WaitForGraphs(); PauseForScreenShot <DocumentGridForm>("Document grid filled (scrolled to the end)", 35); RunUI(() => documentGrid.Close()); FindNode("SSDLVALSGGHTFGK"); // Not L10N RunUI(() => { SkylineWindow.ShowPeakAreaReplicateComparison(); var settings = SkylineWindow.DocumentUI.Settings; var valConcentration = ReplicateValue.GetAllReplicateValues(settings).Skip(1).First(); SkylineWindow.GroupByReplicateValue(valConcentration); NormalizeGraphToHeavy(); }); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph with CVs metafile", 36); RunUI(() => SkylineWindow.ShowCVValues(false)); RunUI(() => SkylineWindow.SaveDocument()); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas graph grouped by concentration metafile", 37); PauseForAuditLog(); // Further Exploration, p. 33. RunUI(() => { SkylineWindow.OpenFile(GetTestPath(@"Study 7\Study II\Study 7ii (site 52).sky")); // Not L10N SkylineWindow.ShowPeakAreaPeptideGraph(); SkylineWindow.ShowCVValues(true); }); WaitForCondition(() => SkylineWindow.Document.Settings.MeasuredResults.IsLoaded); RestoreViewOnScreen(38); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas peptide comparison graph metafile", 38); FindNode("LSEPAELTDAVK"); RunUI(() => { SkylineWindow.ShowGraphPeakArea(false); SkylineWindow.Width = 920; SkylineWindow.ShowRTReplicateGraph(); }); PauseForScreenShot <GraphSummary.RTGraphView>("Retention Times replicate graph metafile", 38); FindNode("INDISHTQSVSAK"); RunUI(SkylineWindow.ShowPeakAreaReplicateComparison); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas normalized to heave graph metafile", 39); if (IsCoverShotMode) { RunUI(() => { Settings.Default.ChromatogramFontSize = 14; Settings.Default.AreaFontSize = 14; SkylineWindow.ChangeTextSize(TreeViewMS.LRG_TEXT_FACTOR); SkylineWindow.AutoZoomBestPeak(); }); RestoreCoverViewOnScreen(); RunUI(() => SkylineWindow.SequenceTree.SelectedNode = SkylineWindow.SelectedNode.Parent); WaitForGraphs(); RunUI(() => SkylineWindow.SequenceTree.SelectedNode = SkylineWindow.SelectedNode.Nodes[0]); RunUI(SkylineWindow.FocusDocument); TakeCoverShot(); return; } RunUI(() => SkylineWindow.NormalizeAreaGraphTo(NormalizeOption.NONE)); WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("Peak Areas no normalization graph metafile", 40); FindNode(hgflprLight); RunUI(() => { SkylineWindow.ShowAllTransitions(); NormalizeGraphToHeavy(); }); WaitForGraphs(); PauseForScreenShot <GraphSummary.AreaGraphView>("Area Ratio to Heavy graph showing interference metafile", 41); RunUI(() => SkylineWindow.ShowGraphPeakArea(false)); RunUI(() => SkylineWindow.ActivateReplicate("E_ 03")); WaitForGraphs(); PauseForScreenShot <GraphChromatogram>("Chromatogram graph metafile showing slight interference", 41); }
private void DisplayCalibrationCurve() { CalibrationCurveOptions options = Settings.Default.CalibrationCurveOptions; zedGraphControl.GraphPane.YAxis.Type = zedGraphControl.GraphPane.XAxis.Type = options.LogPlot ? AxisType.Log : AxisType.Linear; zedGraphControl.GraphPane.Legend.IsVisible = options.ShowLegend; _scatterPlots = null; CalibrationCurve = null; SrmDocument document = DocumentUiContainer.DocumentUI; if (!document.Settings.HasResults) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_No_results_available; return; } PeptideDocNode peptide = null; PeptideGroupDocNode peptideGroup = null; SequenceTree sequenceTree = _skylineWindow.SequenceTree; if (null != sequenceTree) { PeptideTreeNode peptideTreeNode = sequenceTree.GetNodeOfType <PeptideTreeNode>(); if (null != peptideTreeNode) { peptide = peptideTreeNode.DocNode; } PeptideGroupTreeNode peptideGroupTreeNode = sequenceTree.GetNodeOfType <PeptideGroupTreeNode>(); if (null != peptideGroupTreeNode) { peptideGroup = peptideGroupTreeNode.DocNode; } } if (null == peptide) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings .CalibrationForm_DisplayCalibrationCurve_Select_a_peptide_to_see_its_calibration_curve; return; } PeptideQuantifier peptideQuantifier = PeptideQuantifier.GetPeptideQuantifier(document.Settings, peptideGroup, peptide); CalibrationCurveFitter curveFitter = new CalibrationCurveFitter(peptideQuantifier, document.Settings); if (peptideQuantifier.QuantificationSettings.RegressionFit == RegressionFit.NONE) { if (string.IsNullOrEmpty( peptideQuantifier.QuantificationSettings.NormalizationMethod.IsotopeLabelTypeName)) { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_Use_the_Quantification_tab_on_the_Peptide_Settings_dialog_to_control_the_conversion_of_peak_areas_to_concentrations_; } else { if (!peptide.InternalStandardConcentration.HasValue) { zedGraphControl.GraphPane.Title.Text = string.Format(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_convert_peak_area_ratios_to_concentrations__specify_the_internal_standard_concentration_for__0__, peptide); } else { zedGraphControl.GraphPane.Title.Text = null; } } } else { if (curveFitter.GetStandardConcentrations().Any()) { zedGraphControl.GraphPane.Title.Text = null; } else { zedGraphControl.GraphPane.Title.Text = QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_To_fit_a_calibration_curve__set_the_Sample_Type_of_some_replicates_to_Standard__and_specify_their_concentration_; } } zedGraphControl.GraphPane.XAxis.Title.Text = curveFitter.GetXAxisTitle(); zedGraphControl.GraphPane.YAxis.Title.Text = curveFitter.GetYAxisTitle(); CalibrationCurve = curveFitter.GetCalibrationCurve(); double minX = double.MaxValue, maxX = double.MinValue; _scatterPlots = new CurveList(); foreach (var sampleType in SampleType.ListSampleTypes()) { if (!Options.DisplaySampleType(sampleType)) { continue; } PointPairList pointPairList = new PointPairList(); for (int iReplicate = 0; iReplicate < document.Settings.MeasuredResults.Chromatograms.Count; iReplicate++) { ChromatogramSet chromatogramSet = document.Settings.MeasuredResults.Chromatograms[iReplicate]; if (!Equals(sampleType, chromatogramSet.SampleType)) { continue; } double?y = curveFitter.GetYValue(iReplicate); double?x = curveFitter.GetSpecifiedXValue(iReplicate) ?? curveFitter.GetCalculatedXValue(CalibrationCurve, iReplicate); if (y.HasValue && x.HasValue) { PointPair point = new PointPair(x.Value, y.Value) { Tag = iReplicate }; pointPairList.Add(point); if (!Options.LogPlot || x.Value > 0) { minX = Math.Min(minX, x.Value); } maxX = Math.Max(maxX, x.Value); } } if (pointPairList.Any()) { var lineItem = zedGraphControl.GraphPane.AddCurve(sampleType.ToString(), pointPairList, sampleType.Color, sampleType.SymbolType); lineItem.Line.IsVisible = false; lineItem.Symbol.Fill = new Fill(sampleType.Color); _scatterPlots.Add(lineItem); } } List <string> labelLines = new List <String>(); RegressionFit regressionFit = document.Settings.PeptideSettings.Quantification.RegressionFit; if (regressionFit != RegressionFit.NONE) { if (minX <= maxX) { int interpolatedLinePointCount = 100; if (!options.LogPlot) { if (regressionFit == RegressionFit.LINEAR_THROUGH_ZERO) { minX = Math.Min(0, minX); } if (regressionFit != RegressionFit.QUADRATIC) { interpolatedLinePointCount = 2; } } LineItem interpolatedLine = CreateInterpolatedLine(CalibrationCurve, minX, maxX, interpolatedLinePointCount, Options.LogPlot); if (null != interpolatedLine) { zedGraphControl.GraphPane.CurveList.Add(interpolatedLine); } } labelLines.Add(CalibrationCurve.ToString()); if (CalibrationCurve.RSquared.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_ + CalibrationCurve.RSquared.Value.ToString("0.####")); // Not L10N } if (!Equals(curveFitter.QuantificationSettings.RegressionWeighting, RegressionWeighting.NONE)) { labelLines.Add(string.Format("{0}: {1}", // Not L10N QuantificationStrings.Weighting, curveFitter.QuantificationSettings.RegressionWeighting)); } } if (options.ShowSelection) { double?ySelected = curveFitter.GetYValue(_skylineWindow.SelectedResultsIndex); double?xSelected = curveFitter.GetCalculatedXValue(CalibrationCurve, _skylineWindow.SelectedResultsIndex); if (xSelected.HasValue && ySelected.HasValue) { ArrowObj arrow = new ArrowObj(xSelected.Value, ySelected.Value, xSelected.Value, ySelected.Value) { Line = { Color = GraphSummary.ColorSelected } }; zedGraphControl.GraphPane.GraphObjList.Insert(0, arrow); } var quantificationResult = curveFitter.GetQuantificationResult(_skylineWindow.SelectedResultsIndex); if (quantificationResult.CalculatedConcentration.HasValue) { labelLines.Add(string.Format("{0} = {1}", // Not L10N QuantificationStrings.Calculated_Concentration, quantificationResult)); } else if (!quantificationResult.NormalizedArea.HasValue) { labelLines.Add(QuantificationStrings.CalibrationForm_DisplayCalibrationCurve_The_selected_replicate_has_missing_or_truncated_transitions); } } if (labelLines.Any()) { TextObj text = new TextObj(TextUtil.LineSeparate(labelLines), .01, 0, CoordType.ChartFraction, AlignH.Left, AlignV.Top) { IsClippedToChartRect = true, ZOrder = ZOrder.E_BehindCurves, FontSpec = GraphSummary.CreateFontSpec(Color.Black), }; zedGraphControl.GraphPane.GraphObjList.Add(text); } }
protected override void DoTest() { RunUI(() => { SkylineWindow.OpenFile(TestFilesDir.GetTestPath("SimpleRatiosTest.sky")); SkylineWindow.ExpandPrecursors(); }); Assert.IsFalse(SkylineWindow.Document.Settings.PeptideSettings.Quantification.SimpleRatios); Assert.AreEqual(new NormalizationMethod.RatioToLabel(IsotopeLabelType.heavy), SkylineWindow.Document.Settings.PeptideSettings.Quantification.NormalizationMethod); PeptideTreeNode peptideTreeNode = (PeptideTreeNode)SkylineWindow.SequenceTree.Nodes[0].Nodes[0]; TransitionGroupTreeNode lightTreeNode = (TransitionGroupTreeNode)peptideTreeNode.Nodes[0]; TransitionGroupTreeNode heavyTreeNode = (TransitionGroupTreeNode)peptideTreeNode.Nodes[1]; var lightTransitionAreas = lightTreeNode.DocNode.Transitions.Select(tran => tran.Results[0][0].Area).ToList(); Assert.AreEqual(4, lightTransitionAreas.Count); var heavyTransitionAreas = heavyTreeNode.DocNode.Transitions.Select(tran => tran.Results[0][0].Area).ToList(); Assert.AreEqual(2, heavyTransitionAreas.Count); // Verify that only the first two transition areas in both precursors contribute to the displayed ratio var expectedRatio = lightTransitionAreas.Take(2).Sum() / heavyTransitionAreas.Sum(); StringAssert.Contains(lightTreeNode.Text, GetTransitionGroupRatioText(expectedRatio)); RunUI(() => { SkylineWindow.ShowResultsGrid(true); SkylineWindow.SelectedPath = peptideTreeNode.Path; }); var resultsGridForm = FindOpenForm <LiveResultsGrid>(); WaitForConditionUI(() => resultsGridForm.IsComplete); RunDlg <ViewEditor>(resultsGridForm.DataboundGridControl.NavBar.CustomizeView, viewEditor => { viewEditor.ChooseColumnsTab.AddColumn(propertyPathNormalizedArea); viewEditor.ViewName = "PeptideResultsWithNormalizedArea"; viewEditor.OkDialog(); }); VerifyExpectedRatio(resultsGridForm, expectedRatio); RunDlg <PeptideSettingsUI>(SkylineWindow.ShowPeptideSettingsUI, peptideSettingsUi => { peptideSettingsUi.SimpleRatios = true; peptideSettingsUi.OkDialog(); }); Assert.IsTrue(SkylineWindow.Document.Settings.PeptideSettings.Quantification.SimpleRatios); // When SimpleRatios is true, verify that all transitions contribute to the ratio expectedRatio = lightTransitionAreas.Sum() / heavyTransitionAreas.Sum(); StringAssert.Contains(lightTreeNode.Text, GetTransitionGroupRatioText(expectedRatio)); VerifyExpectedRatio(resultsGridForm, expectedRatio); // Verify that deleting a transition from the light precursor does not affect the heavy precursor Assert.AreEqual(4, lightTreeNode.DocNode.TransitionCount); Assert.AreEqual(2, heavyTreeNode.DocNode.TransitionCount); RunUI(() => { SkylineWindow.SequenceTree.SelectedPaths = new[] { SkylineWindow.Document.GetPathTo((int)SrmDocument.Level.Transitions, 0) }; SkylineWindow.EditDelete(); }); Assert.AreEqual(3, lightTreeNode.DocNode.TransitionCount); Assert.AreEqual(2, heavyTreeNode.DocNode.TransitionCount); expectedRatio = lightTransitionAreas.Skip(1).Sum() / heavyTransitionAreas.Sum(); StringAssert.Contains(lightTreeNode.Text, GetTransitionGroupRatioText(expectedRatio)); RunUI(() => SkylineWindow.SelectedPath = peptideTreeNode.Path); VerifyExpectedRatio(resultsGridForm, expectedRatio); }