private MeasuredIon ValidateCustomIon(string name) { var helper = new MessageBoxHelper(this); string formula = _formulaBox.Formula.ToString(LocalizationHelper.CurrentCulture); var charge = ValidateCharge(); if (!charge.HasValue) { return(null); } double monoMass; double avgMass; if (!string.IsNullOrEmpty(formula)) { // Mass is specified by chemical formula try { monoMass = SequenceMassCalc.ParseModMass(BioMassCalc.MONOISOTOPIC, formula); avgMass = SequenceMassCalc.ParseModMass(BioMassCalc.AVERAGE, formula); } catch (ArgumentException x) { helper.ShowTextBoxError(_formulaBox, x.Message); return(null); } } else if (_formulaBox.MonoMass != null || _formulaBox.AverageMass != null) { // Mass is specified by combination of mz and charge formula = null; if (!_formulaBox.ValidateMonoText(helper)) { return(null); } if (!_formulaBox.ValidateAverageText(helper)) { return(null); } _formulaBox.Charge = charge; // This provokes calculation of mass from displayed mz values monoMass = _formulaBox.MonoMass.Value; avgMass = _formulaBox.AverageMass.Value; } else { // User hasn't fully specified either way _formulaBox.ShowTextBoxErrorFormula(helper, Resources.EditMeasuredIonDlg_OkDialog_Please_specify_a_formula_or_constant_masses); return(null); } if (MeasuredIon.MIN_REPORTER_MASS > monoMass || MeasuredIon.MIN_REPORTER_MASS > avgMass) { _formulaBox.ShowTextBoxErrorMonoMass(helper, string.Format(Resources.EditMeasuredIonDlg_OkDialog_Reporter_ion_masses_must_be_less_than_or_equal_to__0__, MeasuredIon.MAX_REPORTER_MASS)); return(null); } if (monoMass > MeasuredIon.MAX_REPORTER_MASS || avgMass > MeasuredIon.MAX_REPORTER_MASS) { _formulaBox.ShowTextBoxErrorAverageMass(helper, string.Format(Resources.EditMeasuredIonDlg_OkDialog_Reporter_ion_masses_must_be_less_than_or_equal_to__0__, MeasuredIon.MAX_REPORTER_MASS)); return(null); } return(new MeasuredIon(name, formula, monoMass, avgMass, charge.Value)); }
private MeasuredIon ValidateCustomIon(string name) { var helper = new MessageBoxHelper(this); string formula = (_formulaBox.NeutralFormula ?? string.Empty).ToString(LocalizationHelper.CurrentCulture); var charge = ValidateCharge(); if (!charge.HasValue) { return(null); } double monoMass; double avgMass; if (!string.IsNullOrEmpty(formula)) { // Mass is specified by chemical formula try { monoMass = SequenceMassCalc.FormulaMass(BioMassCalc.MONOISOTOPIC, formula, SequenceMassCalc.MassPrecision); avgMass = SequenceMassCalc.FormulaMass(BioMassCalc.AVERAGE, formula, SequenceMassCalc.MassPrecision); } catch (ArgumentException x) { helper.ShowTextBoxError(_formulaBox, x.Message); return(null); } } else if (_formulaBox.MonoMass != null || _formulaBox.AverageMass != null) { // Mass is specified by combination of mz and charge formula = null; if (!_formulaBox.ValidateMonoText(helper)) { return(null); } if (!_formulaBox.ValidateAverageText(helper)) { return(null); } // CONSIDER(bspratt): should we switch to using adducts instead of baking ions into formula? _formulaBox.Adduct = Adduct.FromChargeNoMass(charge.Value); // This provokes calculation of mass from displayed mz values monoMass = _formulaBox.MonoMass.Value; avgMass = _formulaBox.AverageMass.Value; } else { // User hasn't fully specified either way _formulaBox.ShowTextBoxErrorFormula(helper, Resources.EditMeasuredIonDlg_OkDialog_Please_specify_a_formula_or_constant_masses); return(null); } if (MeasuredIon.MIN_REPORTER_MASS > monoMass || MeasuredIon.MIN_REPORTER_MASS > avgMass) { _formulaBox.ShowTextBoxErrorMonoMass(helper, string.Format(Resources.EditMeasuredIonDlg_OkDialog_Reporter_ion_masses_must_be_less_than_or_equal_to__0__, MeasuredIon.MAX_REPORTER_MASS)); return(null); } if (monoMass > MeasuredIon.MAX_REPORTER_MASS || avgMass > MeasuredIon.MAX_REPORTER_MASS) { _formulaBox.ShowTextBoxErrorAverageMass(helper, string.Format(Resources.EditMeasuredIonDlg_OkDialog_Reporter_ion_masses_must_be_less_than_or_equal_to__0__, MeasuredIon.MAX_REPORTER_MASS)); return(null); } return(new MeasuredIon(name, formula, monoMass, avgMass, Adduct.FromChargeNoMass(charge.Value))); // Charge-only adduct: user is assumed to have placed ion elements in formula }