public void AddModification(StaticMod mod, ModType type) { if (mod == null) { return; } ImportPeptideSearch.UserDefinedTypedMods.Add(mod); PeptideSettings newPeptideSettings = SkylineWindow.Document.Settings.PeptideSettings; var newMods = new List <StaticMod>( (type == ModType.structural ? newPeptideSettings.Modifications.StaticModifications : newPeptideSettings.Modifications.HeavyModifications) ) { mod }; newPeptideSettings = (type == ModType.structural) ? newPeptideSettings.ChangeModifications(newPeptideSettings.Modifications.ChangeStaticModifications(newMods)) : newPeptideSettings.ChangeModifications(newPeptideSettings.Modifications.ChangeHeavyModifications(newMods)); SkylineWindow.ChangeSettings(SkylineWindow.Document.Settings.ChangePeptideSettings(newPeptideSettings), true, string.Format(Resources.MatchModificationsControl_AddModification_Add__0__modification__1_, type, mod.Name)); SkylineWindow.Document.Settings.UpdateDefaultModifications(false); FillLists(SkylineWindow.Document); }
public void OkDialog() { var helper = new MessageBoxHelper(this); var charge = 0; if (textCharge.Visible && !helper.ValidateSignedNumberTextBox(textCharge, _minCharge, _maxCharge, out charge)) { return; } var adduct = Adduct.NonProteomicProtonatedFromCharge(charge); if (RetentionTimeWindow.HasValue && !RetentionTime.HasValue) { helper.ShowTextBoxError(textRetentionTimeWindow, Resources .Peptide_ExplicitRetentionTimeWindow_Explicit_retention_time_window_requires_an_explicit_retention_time_value_); return; } if (Adduct.IsEmpty || Adduct.AdductCharge != adduct.AdductCharge) { Adduct = adduct; // Note: order matters here, this settor indirectly updates _formulaBox.MonoMass when formula is empty } if (string.IsNullOrEmpty(_formulaBox.NeutralFormula)) { // Can the text fields be understood as mz? if (!_formulaBox.ValidateAverageText(helper)) { return; } if (!_formulaBox.ValidateMonoText(helper)) { return; } } var monoMass = new TypedMass(_formulaBox.MonoMass ?? 0, MassType.Monoisotopic); var averageMass = new TypedMass(_formulaBox.AverageMass ?? 0, MassType.Average); if (monoMass < CustomMolecule.MIN_MASS || averageMass < CustomMolecule.MIN_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format( Resources .EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_greater_than_or_equal_to__0__, CustomMolecule.MIN_MASS)); return; } if (monoMass > CustomMolecule.MAX_MASS || averageMass > CustomMolecule.MAX_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format( Resources .EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_less_than_or_equal_to__0__, CustomMolecule.MAX_MASS)); return; } if ((_transitionSettings != null) && (!_transitionSettings.IsMeasurablePrecursor( adduct.MzFromNeutralMass(monoMass, MassType.Monoisotopic)) || !_transitionSettings.IsMeasurablePrecursor(adduct.MzFromNeutralMass(averageMass, MassType.Average)))) { _formulaBox.ShowTextBoxErrorFormula(helper, Resources .SkylineWindow_AddMolecule_The_precursor_m_z_for_this_molecule_is_out_of_range_for_your_instrument_settings_); return; } if (_usageMode == UsageMode.precursor) { // Only the adduct should be changing SetResult(_resultCustomMolecule, Adduct); } else if (!string.IsNullOrEmpty(_formulaBox.NeutralFormula)) { try { var name = textName.Text; if (string.IsNullOrEmpty(name)) { name = _formulaBox.NeutralFormula; // Clip off any adduct description } SetResult(new CustomMolecule(_formulaBox.NeutralFormula, name), Adduct); } catch (InvalidDataException x) { _formulaBox.ShowTextBoxErrorFormula(helper, x.Message); return; } } else { SetResult(new CustomMolecule(monoMass, averageMass, textName.Text), Adduct); } // Did user change the list of heavy labels? if (_driverLabelType != null) { PeptideModifications modifications = new PeptideModifications( _peptideSettings.Modifications.StaticModifications, _peptideSettings.Modifications.MaxVariableMods, _peptideSettings.Modifications.MaxNeutralLosses, _driverLabelType.GetHeavyModifications(), // This is the only thing the user may have altered _peptideSettings.Modifications.InternalStandardTypes); var settings = _peptideSettings.ChangeModifications(modifications); // Only update if anything changed if (!Equals(settings, _peptideSettings)) { SrmSettings newSettings = _parent.DocumentUI.Settings.ChangePeptideSettings(settings); if (!_parent.ChangeSettings(newSettings, true)) { return; } _peptideSettings = newSettings.PeptideSettings; } } // See if this combination of charge and label would conflict with any existing transition groups if (_existingIds != null && _existingIds.Any(t => { var transitionGroup = t as TransitionGroup; return(transitionGroup != null && Equals(transitionGroup.LabelType, IsotopeLabelType) && Equals(transitionGroup.PrecursorAdduct.AsFormula(), Adduct .AsFormula()) && // Compare AsFormula so proteomic and non-proteomic protonation are seen as same thing !ReferenceEquals(t, _initialId)); })) { helper.ShowTextBoxError(textName, Resources .EditCustomMoleculeDlg_OkDialog_A_precursor_with_that_adduct_and_label_type_already_exists_, textName.Text); return; } // See if this would conflict with any existing transitions if (_existingIds != null && (_existingIds.Any(t => { var transition = t as Transition; return(transition != null && (Equals(transition.Adduct.AsFormula(), Adduct.AsFormula()) && Equals(transition.CustomIon, ResultCustomMolecule)) && !ReferenceEquals(t, _initialId)); }))) { helper.ShowTextBoxError(textName, Resources.EditCustomMoleculeDlg_OkDialog_A_similar_transition_already_exists_, textName.Text); return; } DialogResult = DialogResult.OK; }
public void OkDialog() { var helper = new MessageBoxHelper(this); var charge = 0; if (textCharge.Visible && !helper.ValidateSignedNumberTextBox(textCharge, _minCharge, _maxCharge, out charge)) { return; } if (RetentionTimeWindow.HasValue && !RetentionTime.HasValue) { helper.ShowTextBoxError(textRetentionTimeWindow, Resources.Peptide_ExplicitRetentionTimeWindow_Explicit_retention_time_window_requires_an_explicit_retention_time_value_); return; } Charge = charge; // Note: order matters here, this settor indirectly updates _formulaBox.MonoMass when formula is empty if (string.IsNullOrEmpty(_formulaBox.Formula)) { // Can the text fields be understood as mz? if (!_formulaBox.ValidateAverageText(helper)) { return; } if (!_formulaBox.ValidateMonoText(helper)) { return; } } var formula = _formulaBox.Formula; var monoMass = _formulaBox.MonoMass ?? 0; var averageMass = _formulaBox.AverageMass ?? 0; if (monoMass < CustomIon.MIN_MASS || averageMass < CustomIon.MIN_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format(Resources.EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_greater_than_or_equal_to__0__, CustomIon.MIN_MASS)); return; } if (monoMass > CustomIon.MAX_MASS || averageMass > CustomIon.MAX_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format(Resources.EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_less_than_or_equal_to__0__, CustomIon.MAX_MASS)); return; } if ((_transitionSettings != null) && (!_transitionSettings.IsMeasurablePrecursor(BioMassCalc.CalculateIonMz(monoMass, charge)) || !_transitionSettings.IsMeasurablePrecursor(BioMassCalc.CalculateIonMz(averageMass, charge)))) { _formulaBox.ShowTextBoxErrorFormula(helper, Resources.SkylineWindow_AddMolecule_The_precursor_m_z_for_this_molecule_is_out_of_range_for_your_instrument_settings_); return; } if (!string.IsNullOrEmpty(_formulaBox.Formula)) { try { ResultCustomIon = new DocNodeCustomIon(formula, textName.Text); } catch (InvalidDataException x) { _formulaBox.ShowTextBoxErrorFormula(helper, x.Message); return; } } else { ResultCustomIon = new DocNodeCustomIon(monoMass, averageMass, textName.Text); } // Did user change the list of heavy labels? if (_driverLabelType != null) { PeptideModifications modifications = new PeptideModifications( _peptideSettings.Modifications.StaticModifications, _peptideSettings.Modifications.MaxVariableMods, _peptideSettings.Modifications.MaxNeutralLosses, _driverLabelType.GetHeavyModifications(), // This is the only thing the user may have altered _peptideSettings.Modifications.InternalStandardTypes); var settings = _peptideSettings.ChangeModifications(modifications); // Only update if anything changed if (!Equals(settings, _peptideSettings)) { SrmSettings newSettings = _parent.DocumentUI.Settings.ChangePeptideSettings(settings); if (!_parent.ChangeSettings(newSettings, true)) { return; } _peptideSettings = newSettings.PeptideSettings; } } // See if this combination of charge and label would conflict with any existing transition groups if (_existingIds != null && _existingIds.Any(t => { var transitionGroup = t as TransitionGroup; return(transitionGroup != null && Equals(transitionGroup.LabelType, IsotopeLabelType) && Equals(transitionGroup.PrecursorCharge, Charge) && !ReferenceEquals(t, _initialId)); })) { helper.ShowTextBoxError(textName, Resources.EditCustomMoleculeDlg_OkDialog_A_precursor_with_that_charge_and_label_type_already_exists_, textName.Text); return; } // See if this would conflict with any existing transitions if (_existingIds != null && (_existingIds.Any(t => { var transition = t as Transition; return(transition != null && ((transition.Charge == Charge) && Equals(transition.CustomIon, ResultCustomIon)) && !ReferenceEquals(t, _initialId)); }))) { helper.ShowTextBoxError(textName, Resources.EditCustomMoleculeDlg_OkDialog_A_similar_transition_already_exists_, textName.Text); return; } DialogResult = DialogResult.OK; }
public void OkDialog() { var helper = new MessageBoxHelper(this); var charge = 0; if (textCharge.Visible && !helper.ValidateSignedNumberTextBox(textCharge, _minCharge, _maxCharge, out charge)) { return; } var adduct = Adduct.NonProteomicProtonatedFromCharge(charge); if (RetentionTimeWindow.HasValue && !RetentionTime.HasValue) { helper.ShowTextBoxError(textRetentionTimeWindow, Resources .Peptide_ExplicitRetentionTimeWindow_Explicit_retention_time_window_requires_an_explicit_retention_time_value_); return; } if (Adduct.IsEmpty || Adduct.AdductCharge != adduct.AdductCharge) { Adduct = adduct; // Note: order matters here, this settor indirectly updates _formulaBox.MonoMass when formula is empty } if (string.IsNullOrEmpty(_formulaBox.NeutralFormula)) { // Can the text fields be understood as mz? if (!_formulaBox.ValidateAverageText(helper)) { return; } if (!_formulaBox.ValidateMonoText(helper)) { return; } } var monoMass = new TypedMass(_formulaBox.MonoMass ?? 0, MassType.Monoisotopic); var averageMass = new TypedMass(_formulaBox.AverageMass ?? 0, MassType.Average); if (monoMass < CustomMolecule.MIN_MASS || averageMass < CustomMolecule.MIN_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format( Resources .EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_greater_than_or_equal_to__0__, CustomMolecule.MIN_MASS)); return; } if (monoMass > CustomMolecule.MAX_MASS || averageMass > CustomMolecule.MAX_MASS) { _formulaBox.ShowTextBoxErrorFormula(helper, string.Format( Resources .EditCustomMoleculeDlg_OkDialog_Custom_molecules_must_have_a_mass_less_than_or_equal_to__0__, CustomMolecule.MAX_MASS)); return; } if ((_transitionSettings != null) && (!_transitionSettings.IsMeasurablePrecursor( adduct.MzFromNeutralMass(monoMass, MassType.Monoisotopic)) || !_transitionSettings.IsMeasurablePrecursor(adduct.MzFromNeutralMass(averageMass, MassType.Average)))) { _formulaBox.ShowTextBoxErrorFormula(helper, Resources .SkylineWindow_AddMolecule_The_precursor_m_z_for_this_molecule_is_out_of_range_for_your_instrument_settings_); return; } // Ion mobility value must have ion mobility units if (textIonMobility.Visible && IonMobility.HasValue) { if (IonMobilityUnits == eIonMobilityUnits.none) { helper.ShowTextBoxError(textIonMobility, Resources.EditCustomMoleculeDlg_OkDialog_Please_specify_the_ion_mobility_units_); comboBoxIonMobilityUnits.Focus(); return; } if (IonMobility.Value == 0 || (IonMobility.Value < 0 && !IonMobilityFilter.AcceptNegativeMobilityValues(IonMobilityUnits))) { helper.ShowTextBoxError(textIonMobility, string.Format(Resources.SmallMoleculeTransitionListReader_ReadPrecursorOrProductColumns_Invalid_ion_mobility_value__0_, IonMobility)); textIonMobility.Focus(); return; } } if (_usageMode == UsageMode.precursor) { // Only the adduct should be changing SetResult(_resultCustomMolecule, Adduct); } else if (!string.IsNullOrEmpty(_formulaBox.NeutralFormula)) { try { var name = textName.Text; if (string.IsNullOrEmpty(name)) { name = _formulaBox.NeutralFormula; // Clip off any adduct description } SetResult(new CustomMolecule(_formulaBox.NeutralFormula, name), Adduct); } catch (InvalidDataException x) { _formulaBox.ShowTextBoxErrorFormula(helper, x.Message); return; } } else { SetResult(new CustomMolecule(monoMass, averageMass, textName.Text), Adduct); } // Did user change the list of heavy labels? if (_driverLabelType != null) { // This is the only thing the user may have altered var newHeavyMods = _driverLabelType.GetHeavyModifications().ToArray(); if (!ArrayUtil.EqualsDeep(newHeavyMods, _peptideSettings.Modifications.HeavyModifications)) { var labelTypes = _peptideSettings.Modifications.InternalStandardTypes.Where(t => newHeavyMods.Any(m => Equals(m.LabelType, t))).ToArray(); if (labelTypes.Length == 0) { labelTypes = new[] { newHeavyMods.First().LabelType } } ; PeptideModifications modifications = new PeptideModifications( _peptideSettings.Modifications.StaticModifications, _peptideSettings.Modifications.MaxVariableMods, _peptideSettings.Modifications.MaxNeutralLosses, newHeavyMods, labelTypes); var settings = _peptideSettings.ChangeModifications(modifications); SrmSettings newSettings = _parent.DocumentUI.Settings.ChangePeptideSettings(settings); if (!_parent.ChangeSettings(newSettings, true)) { // Not expected, since we checked for a change before calling // Otherwise, this is very confusing. The form just refuses to go away // We would prefer to get an unhandled exception and fix this Assume.Fail(); return; } _peptideSettings = newSettings.PeptideSettings; } } // See if this combination of charge and label would conflict with any existing transition groups if (_existingIds != null && _existingIds.Any(t => { var transitionGroup = t as TransitionGroup; return(transitionGroup != null && Equals(transitionGroup.LabelType, IsotopeLabelType) && Equals(transitionGroup.PrecursorAdduct.AsFormula(), Adduct .AsFormula()) && // Compare AsFormula so proteomic and non-proteomic protonation are seen as same thing !ReferenceEquals(t, _initialId)); })) { helper.ShowTextBoxError(textName, Resources .EditCustomMoleculeDlg_OkDialog_A_precursor_with_that_adduct_and_label_type_already_exists_, textName.Text); return; } // See if this would conflict with any existing transitions if (_existingIds != null && (_existingIds.Any(t => { var transition = t as Transition; return(transition != null && (Equals(transition.Adduct.AsFormula(), Adduct.AsFormula()) && Equals(transition.CustomIon, ResultCustomMolecule)) && !ReferenceEquals(t, _initialId)); }))) { helper.ShowTextBoxError(textName, Resources.EditCustomMoleculeDlg_OkDialog_A_similar_transition_already_exists_, textName.Text); return; } DialogResult = DialogResult.OK; }