コード例 #1
0
        public void OkDialog()
        {
            var helper = new MessageBoxHelper(this);

            string name;

            if (!helper.ValidateNameTextBox(textName, out name))
            {
                return;
            }

            if (_existing.Contains(m => !ReferenceEquals(_measuredIon, m) && Equals(name, m.Name)))
            {
                helper.ShowTextBoxError(textName, Resources.EditMeasuredIonDlg_OkDialog_The_special_ion__0__already_exists, name);
                return;
            }

            if (radioFragment.Checked)
            {
                string cleavage;
                if (!ValidateAATextBox(helper, textFragment, false, out cleavage))
                {
                    return;
                }
                string restrict;
                if (!ValidateAATextBox(helper, textRestrict, true, out restrict))
                {
                    return;
                }

                SequenceTerminus direction = (comboDirection.SelectedIndex == 0 ?
                                              SequenceTerminus.C : SequenceTerminus.N);

                int minAas;
                if (!helper.ValidateNumberTextBox(textMinAas, MeasuredIon.MIN_MIN_FRAGMENT_LENGTH,
                                                  MeasuredIon.MAX_MIN_FRAGMENT_LENGTH, out minAas))
                {
                    return;
                }

                _measuredIon = new MeasuredIon(name, cleavage, restrict, direction, minAas);
            }
            else
            {
                var customIon = ValidateCustomIon(name);
                if (customIon == null)
                {
                    return;
                }
                _measuredIon = customIon;
            }

            DialogResult = DialogResult.OK;
        }
コード例 #2
0
        private void TestSettingIonsUI()
        {
            var ions    = new MeasuredIon[0];
            var ionList = new MeasuredIonList();

            ionList.AddRange(ions);
            Settings.Default.MeasuredIonList = ionList;
            RunUI(() => SkylineWindow.ModifyDocument("Change measured ions", document => document.ChangeSettings(
                                                         document.Settings.ChangeTransitionFilter(filter => filter.ChangeMeasuredIons(ions)))));

            var tranSettings        = ShowDialog <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI);
            var editMeasuredIonList =
                ShowDialog <EditListDlg <SettingsListBase <MeasuredIon>, MeasuredIon> >(
                    tranSettings.EditSpecialTransitionsList);
            var editMeasuredIon1 = ShowDialog <EditMeasuredIonDlg>(editMeasuredIonList.AddItem);

            RunUI(() =>
            {
                editMeasuredIon1.SwitchToCustom();
                editMeasuredIon1.TextName = "Water";
                editMeasuredIon1.Formula  = "H2O";
            });
            var errorDlg = ShowDialog <MessageDlg>(() => editMeasuredIon1.Charge = -1); // Negative charge states are valid for small molecule only, not for reporter ions

            AssertEx.AreComparableStrings(String.Format(Resources.MessageBoxHelper_ValidateDecimalTextBox__0__must_be_greater_than_or_equal_to__1__, String.Empty, 1), errorDlg.Message);
            RunUI(() => errorDlg.OkDialog()); // Dismiss the warning
            RunUI(() =>
            {
                editMeasuredIon1.Charge = 1;
            });
            OkDialog(editMeasuredIon1, editMeasuredIon1.OkDialog);
            var editMeasuredIon2 = ShowDialog <EditMeasuredIonDlg>(editMeasuredIonList.AddItem);

            RunUI(() =>
            {
                editMeasuredIon2.SwitchToCustom();
                editMeasuredIon2.TextName = "Carbon";
                editMeasuredIon2.Charge   = 1;
                editMeasuredIon2.Formula  = "CO2";
            });
            OkDialog(editMeasuredIon2, editMeasuredIon2.OkDialog);
            OkDialog(editMeasuredIonList, editMeasuredIonList.OkDialog);
            RunUI(() =>
            {
                tranSettings.SetListAlwaysAdd(0, true);
                tranSettings.SetListAlwaysAdd(0, true);
                tranSettings.SetListAlwaysAdd(1, true);
            });
            OkDialog(tranSettings, tranSettings.OkDialog);
            IdentityPath path;
            var          newDoc = SkylineWindow.Document.ImportFasta(new StringReader(">peptide1\nPEPMCIDEPR"),
                                                                     true, IdentityPath.ROOT, out path);
            TransitionGroupDocNode nodeGroup = newDoc.PeptideTransitionGroups.ElementAt(0);

            var water  = new MeasuredIon("Water", "H2O", null, null, 1);
            var carbon = new MeasuredIon("Carbon", "CO2", null, null, 1, true);

            var filteredWaterNodes = TransitionGroupTreeNode.GetChoices(nodeGroup, newDoc.Settings,
                                                                        newDoc.Peptides.ElementAt(0).ExplicitMods, true)
                                     .Cast <TransitionDocNode>()
                                     .Where(node => Equals(node.Transition.CustomIon, water.CustomIon));

            Assert.AreEqual(1, filteredWaterNodes.Count());

            var filteredCarbonNodes =
                TransitionGroupTreeNode.GetChoices(nodeGroup, newDoc.Settings,
                                                   newDoc.Peptides.ElementAt(0).ExplicitMods, true)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, carbon.CustomIon));

            var unfilteredCarbonNodes =
                TransitionGroupTreeNode.GetChoices(nodeGroup, newDoc.Settings,
                                                   newDoc.Peptides.ElementAt(0).ExplicitMods, false)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, carbon.CustomIon));

            Assert.AreEqual(0, filteredCarbonNodes.Count());
            Assert.AreEqual(1, unfilteredCarbonNodes.Count());
        }
コード例 #3
0
ファイル: TransitionDocNode.cs プロジェクト: rfellers/pwiz
        public static TransitionDocNode FromTransitionProto(AnnotationScrubber scrubber, SrmSettings settings,
                                                            TransitionGroup group, ExplicitMods mods, IsotopeDistInfo isotopeDist, ExplicitTransitionValues pre422ExplicitTransitionValues,
                                                            SkylineDocumentProto.Types.Transition transitionProto)
        {
            var         stringPool  = scrubber.StringPool;
            IonType     ionType     = DataValues.FromIonType(transitionProto.FragmentType);
            MeasuredIon measuredIon = null;

            if (transitionProto.MeasuredIonName != null)
            {
                measuredIon = settings.TransitionSettings.Filter.MeasuredIons.SingleOrDefault(
                    i => i.Name.Equals(transitionProto.MeasuredIonName.Value));
                if (measuredIon == null)
                {
                    throw new InvalidDataException(string.Format(Resources.TransitionInfo_ReadXmlAttributes_The_reporter_ion__0__was_not_found_in_the_transition_filter_settings_, transitionProto.MeasuredIonName));
                }
                ionType = IonType.custom;
            }
            bool           isCustom    = Transition.IsCustom(ionType, group);
            bool           isPrecursor = Transition.IsPrecursor(ionType);
            CustomMolecule customIon   = null;

            if (isCustom)
            {
                if (measuredIon != null)
                {
                    customIon = measuredIon.SettingsCustomIon;
                }
                else if (isPrecursor)
                {
                    customIon = group.CustomMolecule;
                }
                else
                {
                    var formula      = DataValues.FromOptional(transitionProto.Formula);
                    var moleculeID   = MoleculeAccessionNumbers.FromString(DataValues.FromOptional(transitionProto.MoleculeId)); // Tab separated list of InChiKey, CAS etc
                    var monoMassH    = DataValues.FromOptional(transitionProto.MonoMassH);
                    var averageMassH = DataValues.FromOptional(transitionProto.AverageMassH);
                    var monoMass     = DataValues.FromOptional(transitionProto.MonoMass) ?? monoMassH;
                    var averageMass  = DataValues.FromOptional(transitionProto.AverageMass) ?? averageMassH;
                    customIon = new CustomMolecule(formula,
                                                   new TypedMass(monoMass.Value, monoMassH.HasValue ? MassType.MonoisotopicMassH : MassType.Monoisotopic),
                                                   new TypedMass(averageMass.Value, averageMassH.HasValue ? MassType.AverageMassH : MassType.Average),
                                                   DataValues.FromOptional(transitionProto.CustomIonName), moleculeID);
                }
            }
            Transition transition;
            var        adductString = DataValues.FromOptional(transitionProto.Adduct);
            var        adduct       = string.IsNullOrEmpty(adductString)
                ? Adduct.FromChargeProtonated(transitionProto.Charge)
                : Adduct.FromStringAssumeChargeOnly(adductString);

            if (isCustom)
            {
                transition = new Transition(group, isPrecursor ? group.PrecursorAdduct :adduct, transitionProto.MassIndex, customIon, ionType);
            }
            else if (isPrecursor)
            {
                transition = new Transition(group, ionType, group.Peptide.Length - 1, transitionProto.MassIndex,
                                            group.PrecursorAdduct, DataValues.FromOptional(transitionProto.DecoyMassShift));
            }
            else
            {
                int offset = Transition.OrdinalToOffset(ionType, transitionProto.FragmentOrdinal,
                                                        group.Peptide.Length);
                transition = new Transition(group, ionType, offset, transitionProto.MassIndex, adduct, DataValues.FromOptional(transitionProto.DecoyMassShift));
            }
            var losses          = TransitionLosses.FromLossProtos(settings, transitionProto.Losses);
            var mass            = settings.GetFragmentMass(group, mods, transition, isotopeDist);
            var isotopeDistInfo = GetIsotopeDistInfo(transition, losses, isotopeDist);

            if (group.DecoyMassShift.HasValue && transitionProto.DecoyMassShift == null)
            {
                throw new InvalidDataException(Resources.SrmDocument_ReadTransitionXml_All_transitions_of_decoy_precursors_must_have_a_decoy_mass_shift);
            }

            TransitionLibInfo libInfo = null;

            if (transitionProto.LibInfo != null)
            {
                libInfo = new TransitionLibInfo(transitionProto.LibInfo.Rank, transitionProto.LibInfo.Intensity);
            }
            var annotations = scrubber.ScrubAnnotations(Annotations.FromProtoAnnotations(transitionProto.Annotations), AnnotationDef.AnnotationTarget.transition);
            var results     = TransitionChromInfo.FromProtoTransitionResults(scrubber, settings, transitionProto.Results);
            var explicitTransitionValues = pre422ExplicitTransitionValues ?? ExplicitTransitionValues.Create(
                DataValues.FromOptional(transitionProto.ExplicitCollisionEnergy),
                DataValues.FromOptional(transitionProto.ExplicitIonMobilityHighEnergyOffset),
                DataValues.FromOptional(transitionProto.ExplicitSLens),
                DataValues.FromOptional(transitionProto.ExplicitConeVoltage),
                DataValues.FromOptional(transitionProto.ExplicitDeclusteringPotential));

            return(new TransitionDocNode(transition, annotations, losses, mass, new TransitionQuantInfo(isotopeDistInfo, libInfo, !transitionProto.NotQuantitative), explicitTransitionValues, results));
        }
コード例 #4
0
        public void ReporterIonTest()
        {
            // Test the code that updates old-style formulas
            Assert.AreEqual("C5C'H13N2", BioMassCalc.AddH("C5C'H12N2"));
            Assert.AreEqual("CO2H", BioMassCalc.AddH("CO2"));

            var          docOriginal = new SrmDocument(SrmSettingsList.GetDefault().ChangeTransitionInstrument(instrument => instrument.ChangeMinMz(10))); // H2O2 is not very heavy!
            IdentityPath path;
            SrmDocument  docPeptide = docOriginal.ImportFasta(new StringReader(">peptide1\nPEPMCIDEPR"),
                                                              true, IdentityPath.ROOT, out path);

            // One of the prolines should have caused an extra transition
            Assert.AreEqual(4, docPeptide.PeptideTransitionCount);
            Assert.IsTrue(docPeptide.PeptideTransitions.Contains(nodeTran => nodeTran.Transition.Ordinal == 8));

            const string formula          = "H2O2"; // This was H2O, but that falls below mz=10 at z > 1
            const string hydrogenPeroxide = "Hydrogen Perxoide";
            var          reporterIons     = new[] { new MeasuredIon(hydrogenPeroxide, formula, null, null, Adduct.SINGLY_PROTONATED), new MeasuredIon(hydrogenPeroxide, formula, null, null, Adduct.DOUBLY_PROTONATED), new MeasuredIon(hydrogenPeroxide, formula, null, null, Adduct.TRIPLY_PROTONATED), MeasuredIonList.NTERM_PROLINE };
            SrmDocument  docReporterIon   = docPeptide.ChangeSettings(docPeptide.Settings.ChangeTransitionFilter(filter =>
                                                                                                                 filter.ChangeMeasuredIons(reporterIons)));

            AssertEx.IsDocumentTransitionCount(docReporterIon, 7);

            //Check With Monoisotopic
            var mass = BioMassCalc.MONOISOTOPIC.CalculateMassFromFormula(formula);

            for (int i = 0; i < 3; i++)
            {
                TransitionDocNode tranNode = docReporterIon.MoleculeTransitions.ElementAt(i);
                Transition        tran     = tranNode.Transition;
                Assert.AreEqual(reporterIons[i].SettingsCustomIon, tran.CustomIon);
                Assert.AreEqual(tran.Charge, i + 1);
                Assert.AreEqual(BioMassCalc.CalculateIonMz(mass, tran.Adduct), tranNode.Mz, BioMassCalc.MassElectron / 100);
            }

            //Check with Average
            TransitionPrediction predSettings =
                docReporterIon.Settings.TransitionSettings.Prediction.ChangeFragmentMassType(MassType.Average);
            TransitionSettings tranSettings    = docReporterIon.Settings.TransitionSettings.ChangePrediction(predSettings);
            SrmSettings        srmSettings     = docReporterIon.Settings.ChangeTransitionSettings(tranSettings);
            SrmDocument        averageDocument = docReporterIon.ChangeSettings(srmSettings);

            mass = BioMassCalc.AVERAGE.CalculateMassFromFormula(formula);
            for (int i = 0; i < 3; i++)
            {
                TransitionDocNode tranNode = averageDocument.MoleculeTransitions.ElementAt(i);
                Transition        tran     = tranNode.Transition;
                Assert.AreEqual(reporterIons[i].SettingsCustomIon, tran.CustomIon);
                Assert.AreEqual(tran.Charge, i + 1);
                Assert.AreEqual(BioMassCalc.CalculateIonMz(mass, tran.Adduct), tranNode.Mz, BioMassCalc.MassElectron / 100);
            }

            //Make sure the rest of the transitions aren't reporter ions
            for (int i = 3; i < 7; i++)
            {
                Transition tran = docReporterIon.MoleculeTransitions.ElementAt(i).Transition;
                Assert.AreNotEqual(tran.CustomIon, reporterIons);
            }
            var         optionalIon = new MeasuredIon(hydrogenPeroxide, formula, null, null, Adduct.SINGLY_PROTONATED, true);
            SrmDocument optionalDoc = docPeptide.ChangeSettings(docPeptide.Settings.ChangeTransitionFilter(filter =>
                                                                                                           filter.ChangeMeasuredIons(new[] { optionalIon })));

            Assert.AreEqual(3, optionalDoc.PeptideTransitionCount);
            optionalDoc = optionalDoc.ChangeSettings(optionalDoc.Settings.ChangeTransitionFilter(filter =>
                                                                                                 filter.ChangeMeasuredIons(new[] { optionalIon.ChangeIsOptional(false) })));
            AssertEx.IsDocumentTransitionCount(optionalDoc, 4);
            Assert.AreEqual(optionalIon.ChangeIsOptional(false).SettingsCustomIon,
                            optionalDoc.MoleculeTransitions.ElementAt(0).Transition.CustomIon);
            optionalDoc =
                optionalDoc.ChangeSettings(
                    optionalDoc.Settings.ChangeTransitionFilter(
                        filter => filter.ChangeMeasuredIons(new[] { optionalIon.ChangeIsOptional(true) })));


            TransitionGroupDocNode nodeGroup = optionalDoc.MoleculeTransitionGroups.ElementAt(0);
            var filteredNodes =
                nodeGroup.GetPrecursorChoices(optionalDoc.Settings,
                                              optionalDoc.Molecules.ElementAt(0).ExplicitMods, true)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, optionalIon.SettingsCustomIon));

            var unfilteredNodes =
                nodeGroup.GetPrecursorChoices(optionalDoc.Settings,
                                              optionalDoc.Molecules.ElementAt(0).ExplicitMods, false)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, optionalIon.SettingsCustomIon));

            Assert.AreEqual(0, filteredNodes.Count());
            Assert.AreEqual(1, unfilteredNodes.Count());
        }
コード例 #5
0
ファイル: ReporterIonTest.cs プロジェクト: zrolfs/pwiz
        private void TestSettingIonsUI()
        {
            var ions    = new MeasuredIon[0];
            var ionList = new MeasuredIonList();

            ionList.AddRange(ions);
            Settings.Default.MeasuredIonList = ionList;
            RunUI(() => SkylineWindow.ModifyDocument("Change measured ions", document => document.ChangeSettings(
                                                         document.Settings.ChangeTransitionFilter(filter => filter.ChangeMeasuredIons(ions)))));

            var tranSettings        = ShowDialog <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI);
            var editMeasuredIonList =
                ShowDialog <EditListDlg <SettingsListBase <MeasuredIon>, MeasuredIon> >(
                    tranSettings.EditSpecialTransitionsList);
            var editMeasuredIon1 = ShowDialog <EditMeasuredIonDlg>(editMeasuredIonList.AddItem);

            RunUI(() =>
            {
                editMeasuredIon1.SwitchToCustom();
                editMeasuredIon1.TextName = "Water";
                editMeasuredIon1.Formula  = "H2O";
            });
            var errorDlg = ShowDialog <MessageDlg>(() => editMeasuredIon1.Charge = -1); // Negative charge states are valid for small molecule only, not for reporter ions

            AssertEx.AreComparableStrings(String.Format(Resources.MessageBoxHelper_ValidateDecimalTextBox__0__must_be_greater_than_or_equal_to__1__, String.Empty, 1), errorDlg.Message);
            RunUI(() => errorDlg.OkDialog()); // Dismiss the warning
            RunUI(() =>
            {
                editMeasuredIon1.Charge = 1;
            });
            OkDialog(editMeasuredIon1, editMeasuredIon1.OkDialog);
            var editMeasuredIon2 = ShowDialog <EditMeasuredIonDlg>(editMeasuredIonList.AddItem);

            RunUI(() =>
            {
                editMeasuredIon2.SwitchToCustom();
                editMeasuredIon2.TextName = "Carbon";
                editMeasuredIon2.Charge   = 1;
                editMeasuredIon2.Formula  = "CO2";
            });
            OkDialog(editMeasuredIon2, editMeasuredIon2.OkDialog);
            OkDialog(editMeasuredIonList, editMeasuredIonList.OkDialog);
            RunUI(() =>
            {
                tranSettings.SetListAlwaysAdd(0, true);  // optional water
                tranSettings.SetListAlwaysAdd(0, true);  // default water
                tranSettings.SetListAlwaysAdd(1, true);  // optional carbon
            });
            OkDialog(tranSettings, tranSettings.OkDialog);
            const string fasta = ">peptide1\nPEPMCIDEPR";

            RunUI(() => SkylineWindow.ImportFasta(new StringReader(fasta), 2, true, string.Empty,
                                                  new SkylineWindow.ImportFastaInfo(false, fasta)));
            var newDoc = SkylineWindow.Document;

            var water  = new MeasuredIon("Water", "H2O", null, null, Adduct.M_PLUS); // Charge-only adduct, ionizing elements assumed to be part of formula
            var carbon = new MeasuredIon("Carbon", "CO2", null, null, Adduct.M_PLUS, true);

            var nodeTranFirst = newDoc.MoleculeTransitions.ElementAt(0);

            Assert.IsTrue(nodeTranFirst.Transition.IsCustom());
            Assert.AreEqual(water.SettingsCustomIon, nodeTranFirst.Transition.CustomIon);

            // Sort-of unit test forray away from actually using the UI
            var nodeGroup = newDoc.PeptideTransitionGroups.ElementAt(0);

            var filteredWaterNodes = nodeGroup.GetPrecursorChoices(newDoc.Settings,
                                                                   newDoc.Peptides.ElementAt(0).ExplicitMods, true)
                                     .Cast <TransitionDocNode>()
                                     .Where(node => Equals(node.Transition.CustomIon, water.SettingsCustomIon));

            Assert.AreEqual(1, filteredWaterNodes.Count());

            var filteredCarbonNodes =
                nodeGroup.GetPrecursorChoices(newDoc.Settings,
                                              newDoc.Peptides.ElementAt(0).ExplicitMods, true)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, carbon.SettingsCustomIon));

            var unfilteredCarbonNodes =
                nodeGroup.GetPrecursorChoices(newDoc.Settings,
                                              newDoc.Peptides.ElementAt(0).ExplicitMods, false)
                .Cast <TransitionDocNode>()
                .Where(node => Equals(node.Transition.CustomIon, carbon.SettingsCustomIon));

            Assert.AreEqual(0, filteredCarbonNodes.Count());
            Assert.AreEqual(1, unfilteredCarbonNodes.Count());

            // Back to the UI: make sure removing the custom ion from settings
            // removes it from the document, which was once an issue that lead
            // to a document that could not be roundtripped
            RunUI(() => SkylineWindow.SelectedPath = newDoc.GetPathTo((int)SrmDocument.Level.TransitionGroups, 0));
            // Add carbon ion
            RunDlg <PopupPickList>(SkylineWindow.ShowPickChildrenInTest, dlg =>
            {
                dlg.ApplyFilter(false);
                dlg.ToggleItem(2);  // precursor, water, carbon
                dlg.OnOk();
            });
            var docWithCarbon  = WaitForDocumentChange(newDoc);
            var nodeTranCarbon = docWithCarbon.MoleculeTransitions.ElementAt(1);

            Assert.IsTrue(nodeTranCarbon.Transition.IsCustom());
            Assert.AreEqual(carbon.SettingsCustomIon, nodeTranCarbon.Transition.CustomIon);

            RunDlg <TransitionSettingsUI>(SkylineWindow.ShowTransitionSettingsUI, tranSettings2 =>
            {
                tranSettings2.SetListAlwaysAdd(0, false);  // remove water
                tranSettings2.OkDialog();
            });
            var docWithoutWater = WaitForDocumentChange(docWithCarbon);

            Assert.AreEqual(0, docWithoutWater.PeptideTransitions.Count(t => Equals(water.SettingsCustomIon, t.Transition.CustomIon)));
            Assert.AreEqual(1, docWithoutWater.PeptideTransitions.Count(t => Equals(carbon.SettingsCustomIon, t.Transition.CustomIon)));
            AssertEx.RoundTrip(docWithoutWater);

            RunDlg <PopupPickList>(SkylineWindow.ShowPickChildrenInTest, dlg =>
            {
                dlg.AutoManageChildren = true;
                dlg.OnOk();
            });
            var docWithoutCustom = WaitForDocumentChange(docWithoutWater);

            Assert.AreEqual(0, docWithoutCustom.PeptideTransitions.Count(t => t.Transition.IsCustom()));
            AssertEx.RoundTrip(docWithoutCustom);
        }