public bool Equals(MeasuredIon other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(base.Equals(other) && Equals(other.Fragment, Fragment) && Equals(other.Restrict, Restrict) && other.Terminus.Equals(Terminus) && other.MinFragmentLength.Equals(MinFragmentLength) && Equals(other.SettingsCustomIon, SettingsCustomIon) && Equals(other.Charge, Charge) && other.IsOptional == IsOptional); }
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()); }
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; }
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, 1), new MeasuredIon(hydrogenPeroxide, formula, null, null, 2), new MeasuredIon(hydrogenPeroxide, formula, null, null, 3), MeasuredIonList.NTERM_PROLINE }; SrmDocument docReporterIon = docPeptide.ChangeSettings(docPeptide.Settings.ChangeTransitionFilter(filter => filter.ChangeMeasuredIons(reporterIons))); AssertEx.IsDocumentTransitionCount(docReporterIon, 7); //Check With Monoisotopic double 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].CustomIon, tran.CustomIon); Assert.AreEqual(tran.Charge, i + 1); Assert.AreEqual(BioMassCalc.MONOISOTOPIC.CalculateIonMz(formula, i + 1), tranNode.Mz, BioMassCalc.MassElectron/100); Assert.AreEqual(BioMassCalc.CalculateIonMz(mass, i + 1), 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].CustomIon, tran.CustomIon); Assert.AreEqual(tran.Charge, i + 1); Assert.AreEqual(BioMassCalc.AVERAGE.CalculateIonMz(formula, i + 1), tranNode.Mz, BioMassCalc.MassElectron / 100); Assert.AreEqual(BioMassCalc.CalculateIonMz(mass, i + 1), 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,1, 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).CustomIon, 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 = TransitionGroupTreeNode.GetChoices(nodeGroup, optionalDoc.Settings, optionalDoc.Molecules.ElementAt(0).ExplicitMods, true) .Cast<TransitionDocNode>() .Where(node => Equals(node.Transition.CustomIon, optionalIon.CustomIon)); var unfilteredNodes = TransitionGroupTreeNode.GetChoices(nodeGroup, optionalDoc.Settings, optionalDoc.Molecules.ElementAt(0).ExplicitMods, false) .Cast<TransitionDocNode>() .Where(node => Equals(node.Transition.CustomIon, optionalIon.CustomIon)); Assert.AreEqual(0,filteredNodes.Count()); Assert.AreEqual(1,unfilteredNodes.Count()); }
public bool Equals(MeasuredIon other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return base.Equals(other) && Equals(other.Fragment, Fragment) && Equals(other.Restrict, Restrict) && other.Terminus.Equals(Terminus) && other.MinFragmentLength.Equals(MinFragmentLength) && Equals(other.SettingsCustomIon, SettingsCustomIon) && Equals(other.Charge, Charge) && other.IsOptional == IsOptional; }