| | |
The Ionizer class provides abstractions to ionize analytes. More...
| Header: | #include <Ionizer.hpp> |
| Inherits: | QObject |
| Ionizer(QObject *parent = nullptr) | |
| Ionizer(MsXpS::libXpertMassCore::IsotopicDataCstSPtr isotopic_data_csp, QObject *parent = nullptr) | |
| Ionizer(MsXpS::libXpertMassCore::IsotopicDataCstSPtr isotopic_data_csp, const MsXpS::libXpertMassCore::Formula &formula, int charge, int level, QObject *parent = nullptr) | |
| Ionizer(MsXpS::libXpertMassCore::IsotopicDataCstSPtr isotopic_data_csp, const QString &formula_string, int charge, int level, QObject *parent = nullptr) | |
| Ionizer(const MsXpS::libXpertMassCore::Ionizer &other, QObject *parent = nullptr) | |
| int | charge() const |
| void | clear() |
| int | currentStateCharge() const |
| MsXpS::libXpertMassCore::Enums::IonizationOutcome | deionize(double &mono, double &avg) const |
| void | forceCurrentState(const MsXpS::libXpertMassCore::Formula &formula, int nominal_charge, int level) |
| void | forceCurrentStateLevel(int level) |
| QString | formatXmlIonizeRuleElement(int offset, const QString &indent = Utils::xmlIndentationToken) |
| const MsXpS::libXpertMassCore::Formula & | getCurrentStateFormulaCstRef() const |
| int | getCurrentStateLevel() const |
| int | getCurrentStateNominalCharge() const |
| const MsXpS::libXpertMassCore::Formula & | getFormulaCstRef() const |
| MsXpS::libXpertMassCore::Formula & | getFormulaRef() |
| MsXpS::libXpertMassCore::IsotopicDataCstSPtr | getIsotopicDataCstSPtr() const |
| int | getLevel() const |
| int | getNominalCharge() const |
| void | initialize(const MsXpS::libXpertMassCore::Ionizer &other) |
| MsXpS::libXpertMassCore::Enums::IonizationOutcome | ionize(double &mono, double &avg) const |
| bool | isCurrentStateValid() const |
| bool | isIonized() const |
| bool | isValid() const |
| MsXpS::libXpertMassCore::Ionizer | makeIonizerWithCurrentStateData() |
| MsXpS::libXpertMassCore::Enums::IonizationOutcome | molecularMasses(double &mono, double &avg) const |
| bool | renderXmlIonizeRuleElement(const QDomElement &element) |
| void | setFormula(const MsXpS::libXpertMassCore::Formula &formula) |
| void | setFormula(const QString &formula_string) |
| void | setIsotopicDataCstSPtr(MsXpS::libXpertMassCore::IsotopicDataCstSPtr isotopic_data_csp) |
| void | setLevel(int level) |
| void | setNominalCharge(int nominal_charge) |
| QString | toString(bool with_title = true) const |
| bool | validate(MsXpS::libXpertMassCore::ErrorList *error_list_p) const |
| bool | validateCurrentState(MsXpS::libXpertMassCore::ErrorList *error_list_p) const |
| bool | operator!=(const MsXpS::libXpertMassCore::Ionizer &other) const |
| MsXpS::libXpertMassCore::Ionizer & | operator=(const MsXpS::libXpertMassCore::Ionizer &other) |
| bool | operator==(const MsXpS::libXpertMassCore::Ionizer &other) const |
| MsXpS::libXpertMassCore::Formula | m_currentStateFormula |
| int | m_currentStateLevel |
| int | m_currentStateNominalCharge |
| MsXpS::libXpertMassCore::Formula | m_formula |
| bool | m_isCurrentStateValid |
| bool | m_isValid |
| int | m_level |
| int | m_nominalCharge |
| MsXpS::libXpertMassCore::IsotopicDataCstSPtr | mcsp_isotopicData |
Ionizations are chemical reactions that bring a charge (or more charges) to an analyte. In this Ionizer class, that process is modelled along with the idea that a previously ionized analyte might be re-ionized with a different ionization chemistry (that is, either a different ionization agent, or a different ionization nominal charge or a different ionization level).
To provide the basis for re-ionization, the class provides two ionization rules describing the ionization state (present and future) of the analyte managed by the Ionizer:
The class data members that describe the current ionization state of the analyte managed by the Ionizer have the "currentState" prefix to their name (eg m_currentStateFormula). The class data members that describe the so-called "ionization-to-come" ionization rule have no prefix associated to their name (eg m_formula).
The ionization chemical reaction is described by the member Formula instances Ionizer::m_formula (ionization to come) and Ionizer::m_currentStateFormula (current state of ionization). The electric charge that is brought by this reaction is described by the members Ionizer::m_nominalCharge and Ionizer::m_currentStateNominalCharge. The ionization level is described by the members Ionizer::m_level and Ionizer::m_currentStateLevel. The ionization level is typically set to the number of ionization reactions, that is, for example, it would be set to 10 for a protein to be ionized ten times by protonation, each protonation event bringing a nominal charge of 1.
An Ionizer like the following, if used to ionize a molecule of Mr 1000
would lead to an ion of mass 1001 and of m/z 1001.
In protein chemistry, the ionization reaction is mainly a protonation reaction, which brings a single charge. Thus, the Formula would be "+H" and the charge 1. In MALDI, we would have a single protonation, thus level would be set to 1 by default. In electrospray ionization, more than one ionization reaction occur, and we could have a protein that is 25+, thus having an ionization level of 25, for example.
An Ionizer like the following, if used to ionize a molecule of Mr 1000
would lead to an ion of mass 1004 and of m/z 251 (1004 / 4).
An Ionizer like the following, if used to ionize a molecule of Mr 1000
would lead to an ion of mass 1000 + (24 * 4) and of m/z 137 = (1096 / 8).
Note: The real nature of the ionization is beared by the Formula (with, for example in protein chemistry, "+H" for protonation and, in nucleic acids chemistry, "-H" for deprotonation).
Thus, an Ionizer is valid if it generates a m/z ratio after ionization of the analyte that is different than the previous (M) and if its member Formula validates successfully. This means that the following should be true:
Note: We do not consider compulsory that the Formula brings a mass difference whatsoever, because some ionizations might not involve heavy mass transfers, like electron gain or electron loss. However, the member Formula must validate successfully and that means that it cannot be empty. In that case, use a zero-sum formula like (-H+H) that has no weight.
The Ionizer class should be used with caution because its internal state conditions heavily the reliability of the ionization calculations. The best way to proceed is to construct the ionizer fully at start and then only use the functional features of the class (ionize(), deionize(), molecularMasses()).
[invokable] Ionizer::Ionizer(QObject *parent = nullptr)Constructs an Ionizer initialized as an empty object.
The instantiated Ionizer is invalid.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
Constructs an Ionizer initialized only with the IsotopicData.
The instantiated Ionizer is invalid.
Constructs an Ionizer initialized with isotopic_data_csp, formula, charge, level.
The current state member data are unitialized and the analyte managed by this Ionizer is thus in an un-ionized state. Instead, if ionize() is called, the ionization is performed using the data passed to this constructor.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Note that the validation first checks the ionization-to-come members and then also checks the ionization current state members.
See also validate() and validateCurrentState().
Constructs an Ionizer initialized with isotopic_data_csp, formula_string, charge, level.
The current state member data are unitialized and the analyte managed by this Ionizer is thus in an un-ionized state. Instead, if ionize() is called, the ionization is performed using the data passed to this constructor.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Note that the validation first checks the ionization-to-come members and then also checks the ionization current state members.
See also validate() and validateCurrentState().
Constructs an Ionizer as a copy of other.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
[invokable] int Ionizer::charge() constReturns the total charge.
The total charge is the product (m_nominalCharge * m_level). This charge will be brought to the analyte when ionize() gets called.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
Resets this instance to default values.
[invokable] int Ionizer::currentStateCharge() constReturns the last status total charge.
The total charge is the product (m_currentStateNominalCharge * m_currentStateLevel). This current state charge is the charge that was brought to the analyte when ionize() was called previously. It thus reflects the current charge of the analyte managed by this Ionizer.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
Attempts to deionize the analyte and returns the outcome.
The analyte (of which the masses are passed as modifiable mono and avg arguments) is deionized using m_formula, m_nominalCharge and m_level.
The following logic is applied:
If the deionization process leads to masses different to mono and avg, then it is deemed successful and Enums::IonizationOutcome::DEIONIZED is returned, otherwise Enums::IonizationOutcome::UNCHANGED is returned.
[invokable] void Ionizer::forceCurrentState(const MsXpS::libXpertMassCore::Formula &formula, int nominal_charge, int level)Sets the current state member data.
This is useful when starting from an ionized state (for a Formula, for example) that will require to be ionized later in a different manner. See, for example, in MassXpert3, the MzCalculationDlg::getSrcIonizerData() function.
The three parameters thus describe in full the current ionization status of the analyte managed by this Ionizer:
The m_isCurrentStateValid is set to the result of the validation of the current state of this Ionizer.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
[invokable] void Ionizer::forceCurrentStateLevel(int level)Sets the current state ionization level to level.
This function resets the current state ionization level and is practical to use for setting the analyte managed by this Ionizer to an un-ionized state even if the other members of the current state are valid (the formula and the nominal charged are correctly described).
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
Formats and returns a string suitable to use as an XML element.
Formats a string suitable to be used as an XML element in a polymer chemistry definition file. The typical ionization rule element that is generated in this function looks like this:
The DTD says this: <!ELEMENT ionizerule(formula,charge,level)>
A typical ionization rule element looks like this:
<ionizerule> ~~<formula>+H</formula> ~~<charge>1</charge> ~~<level>1</level> </ionizerule>
offset times the indent string must be used as a lead in the formatting of elements.
See also renderXmlIonizeRuleElement(const QDomElement &element).
Returns a const reference to the current state Formula.
The m_currentStateFormula describes the formula that has been already applied to the analyte as it has already been ionized.
Returns the ionization level.
This ionization level describes the number of times the ionization formula and the nominal charge have been applied when ionize() was called on the managed analyte.
Note: Getter function for property currentStateLevel.
Returns the current state nominal charge.
The m_currentStateNominalCharge member datum describes the charge that was brought by the formula to the analyte when it was ionized (independently from the ionization level).
Note: Getter function for property currentStateNominalCharge.
Returns a const reference to the Formula.
Returns a reference to the Formula.
Returns the IsotopicData.
Returns the ionization level.
This ionization level describes the number of times the ionization formula and the nominal charge need to be applied when ionize() gets called on the managed analyte.
Note: Getter function for property level.
Returns the nominal charge.
Note: Getter function for property nominalCharge.
brief Initializes this Ionizer instance using* other.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Returns the outcome of the ionization process.
The mono and avg masses are the masses of the analyte to be ionized. These masses are passed as non const because they are modified to become m/z values accounting for the ionization process (or to become Mr values accounting for the deionization process).
The ionization is performed by accounting into mono and avg the formula of the ionization rule compounded by the level of ionization that is required. Then, the resulting masses are divided by the charge (that is the product of m_nominalCharge by m_level), thus becoming the m/z value of the ionized analyte.
If this Ionizer instance's m_isIonized member value is true, the function does not do anything and returns Enums::IonizationOutcome::UNCHANGED.
The modification of mono and avg is "atomic", that it, it occurs only if the ionization is successful and leads to values different than those initially passed to the function.
Returns the validity status of the current state of this Ionizer instance: true if the current state is valid, false otherwise.
Note: Getter function for property isCurrentStateValid.
See also validate().
Returns the current ionization status.
The analyte managed by this Ionizer is considered ionized if the current state nominal charge multiplied by the ionization level is not 0.
See also currentStateCharge().
Returns the validity status of this instance: true if this Ionizer is valid, false otherwise.
Note: Getter function for property isValid.
See also validateCurrentState() and validate().
[invokable] MsXpS::libXpertMassCore::Ionizer Ionizer::makeIonizerWithCurrentStateData()Allocates on the stack an Ionizer instance and initializes its ionization-to-come data using the current state data from this Ionizer. The current ionization state of the returned Ionizer instance are reset to nothing, effectively setting the managed analyte to a non-ionized state.
Returns the allocated Ionizer instance.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
Sets the molecular mass of the analyte of which the masses are passed as modifiable parameters in mono and avg.
The analyte is first deionized (on copy data) and if the deionization process was successful, mono and avg are set to the masses of the deionized analyte (that is, Mr molecular masses).
If the analyte is not ionized, returns Enums::IonizationOutcome::UNCHANGED (and nothing is changed). If the analyte was actually ionized, then if it is first successfully deionized, then the analyte is set to deionized and the mono and avg masses are set to the Mr molecular mass.
Renders the ionization rule XML element.
The XML element is parsed and the data extracted from the XML data are set to this Ionizer instance.
The DTD says this: <!ELEMENT ionizerule(formula,charge,level)>
A typical ionization rule element looks like this:
<ionizerule> <formula>+H</formula> <charge>1</charge> <level>1</level> </ionizerule>
The caller is reponsible for checking the validity of the IonizeRule prior use.
Returns true if the parsing is successful, false otherwise.
See also formatXmlIonizeRuleElement(int offset, const QString &indent).
Sets the Formula to formula.
The m_formula describes the reaction to be applied to an analyte when the ionize() function gets called.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Sets the Formula to formula_string.
The m_formula describes the reaction to be applied to an analyte when the ionize() function gets called.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Sets the IsotopicData to isotopic_data_csp.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Sets the ionization level to level.
This ionization level describes the number of times the ionization formula and the nominal charge need to be applied when ionize() gets called on the managed analyte.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Note: Setter function for property level.
Sets the nominal charge to nominal_charge.
The m_nominalCharge describes the charge that is brought to the analyte by the m_formula member when ionize() is called.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Note: Setter function for property nominalCharge.
Returns a string holding a textual representation of the member data.
If with_title is true, the member formulas (m_formula and m_currentStateFormula) are output with their title (if any).
[invokable] bool Ionizer::validate(MsXpS::libXpertMassCore::ErrorList *error_list_p) constValidates this Ionizer, setting any error message to error_list_p.
An Ionizer is valid if the following data for the ionization-to-come:
Further, the current ionization state data are checked and are valid if:
Note that both the current state nominal charge and level may be 0 (which is logical if the analyte being managed by this Ionizer is not currently ionized).
If any of the tests above fail, the Ionizer is considered invalid and the validity status (m_isValid) value is set to false; true otherwise.
Returns true if validation succeeded, false otherwise.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
See also Formula::validate(), validateCurrentState(), and isValid().
[invokable] bool Ionizer::validateCurrentState(MsXpS::libXpertMassCore::ErrorList *error_list_p) constValidates this Ionizer current state, setting any error message to error_list_p.
An Ionizer has a valid current state if:
Note that both the current state nominal charge and level may be 0 (which is logical if the analyte being managed by this Ionizer is not currently ionized).
If any of the tests above fail, the Ionizer is considered as invalid for the current ionization state and the validity status (m_isCurrentStateValid) value is set to false; true otherwise.
Returns true if validation succeeded, false otherwise.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
See also Formula::validate(), validate(), and isValid().
Returns true if this Ionizer is different than other, false otherwise.
Returns the negated result of operator==().
Assigns other to this Ionizer.
After setting the member data, validate() is called and the m_isValid member is set to the result of the validation.
Returns a reference to this ionization rule.
Returns true if this Ionizer is identical to other, false otherwise.
Note: The comparison of the IsotopicData is deep, with a true comparison of all the Isotope instances, not only of the shared pointers.
This variable holds the Formula that was last used to ionize the analyte
This formula is only used when an analyte is being ionized. If this formula and the current state of ionization of the analyte is true, then it is used to first deionize the analyte.
This variable holds the number of times the "ionization-to-come" formula and nominal charge will be applied to the analyte managed by this Ionizer upon next call to ionize().
This variable holds the charge that is currently bore by the analyte when it was last ionized.
This variable holds the Formula that is used to perform the ionization.
For a protonation event, that would be "+H", for example. For a deprotonation event, that would be "-H".
Tells if the current ionization state of the analyte managed by this Ionizer is valid.
See also isValid(), isCurrentStateValid(), validate(), and validateCurrentState().
Tells if this Ionizer is valid, both for the current state and for the ionization-to-come member data.
See also isValid() and validate().
This variable holds the number of times this IonizRule is used to ionize a molecule.
For example, applying this Ionizer to a molecule
would protonate it 4 times, with a charge of 4 and an increment in mass of the mass of 4 times 1 proton. The m_level should be construed as "how many times should the ionization reaction (formula / nominal charge) be performed."
This variable holds the charge that is brought to the molecule when it is ionized by the Ionizer with an ionization level (m_level) of 1. For a protonation, that would be 1.
This variable holds the IsotopicData required to actually account for the ionization formula.
See also m_currentStateFormula and m_formula.