Class: MS::Lipid::Modification
- Inherits:
-
Object
- Object
- MS::Lipid::Modification
- Defined in:
- lib/ms/lipid/modification.rb
Overview
the convention is all mods are gains unless the name ends in an underscore
Constant Summary collapse
- FORMULAS =
the charge on the mod should be represented by the number of plusses or minuses after the formula (Li+ for a 1 charge Lithium or H2+, 2 protons with a total of 2 charges)
{ :proton => 'H', :ammonium => 'NH3H', :lithium => 'Li', :water => 'H2O', }
- CHARGE =
{ :proton => 1, :ammonium => 1, :lithium => 1, :water => 0, }
- MASSDIFFS =
determined by running formulas through MS::Mass.massdiff
{}
Instance Attribute Summary collapse
-
#charge ⇒ Object
the charge.
-
#formula ⇒ Object
as a molecular formula.
-
#massdiff ⇒ Object
negative indicates a loss.
-
#name ⇒ Object
as a symbol.
Class Method Summary collapse
-
.formula_and_charge(string) ⇒ Object
given a string with a formula and charge, returns the formula portion and the charges (as a signed integer).
-
.massdiff(formula, charge, gain = true) ⇒ Object
calculates the mass diff.
Instance Method Summary collapse
- #charged_formula ⇒ Object
- #gain? ⇒ Boolean
-
#initialize(name, opts = {}) ⇒ Modification
constructor
if no mass or formula is given then it searches command mods for the name A number of opts are expected if they are not found in the FORMULAS, CHARGE, or MASSDIFFS hashes:.
- #inspect ⇒ Object
- #loss? ⇒ Boolean
Constructor Details
#initialize(name, opts = {}) ⇒ Modification
if no mass or formula is given then it searches command mods for the name A number of opts are expected if they are not found in the FORMULAS, CHARGE, or MASSDIFFS hashes:
attributes:
:formula = the chemical formula, lipidmaps style ("C2H4BrO")
:massdiff = +/-Float
:charge = +/- Integer
instruction:
:loss = true flips the mass diff sign during initialization
necessary to get negative massdiff on named molecule
(unnecessary if you input massdiff manually)
82 83 84 85 86 87 88 89 90 |
# File 'lib/ms/lipid/modification.rb', line 82 def initialize(name, opts={}) @name = name @formula = opts[:formula] || FORMULAS[name] @massdiff = opts[:massdiff] || MASSDIFFS[name] @charge = opts[:charge] || CHARGE[name] # necessary if you are using a named molecule and you want its loss # rather than gain (i.e., you want a negative massdiff) @massdiff = -@massdiff if opts[:loss] end |
Instance Attribute Details
#charge ⇒ Object
the charge
66 67 68 |
# File 'lib/ms/lipid/modification.rb', line 66 def charge @charge end |
#formula ⇒ Object
as a molecular formula
62 63 64 |
# File 'lib/ms/lipid/modification.rb', line 62 def formula @formula end |
#massdiff ⇒ Object
negative indicates a loss
64 65 66 |
# File 'lib/ms/lipid/modification.rb', line 64 def massdiff @massdiff end |
#name ⇒ Object
as a symbol
60 61 62 |
# File 'lib/ms/lipid/modification.rb', line 60 def name @name end |
Class Method Details
.formula_and_charge(string) ⇒ Object
given a string with a formula and charge, returns the formula portion and the charges (as a signed integer)
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/ms/lipid/modification.rb', line 13 def self.formula_and_charge(string) md = string.match(/([^+]*)(\+*)$/) charges_string = md[2] if charges_string.nil? 0 else charges_string.count(charges_string[0]) int = -int if charges_string[0] == '-' end [md[1], int] end |
.massdiff(formula, charge, gain = true) ⇒ Object
calculates the mass diff. For every positive charge the mass of an electron is subtracted; for every negative charge the mass of an electron is added. If gain is false, then the mass diff will be negative.
29 30 31 32 33 34 35 |
# File 'lib/ms/lipid/modification.rb', line 29 def self.massdiff(formula, charge, gain=true) MS::Mass.formula_to_exact_mass(formula) massdiff = MS::Mass.formula_to_exact_mass(formula) massdiff -= (charge * MS::Mass::ELECTRON) # + charge subtracts, - charge adds massdiff = -massdiff unless gain massdiff end |
Instance Method Details
#charged_formula ⇒ Object
92 93 94 |
# File 'lib/ms/lipid/modification.rb', line 92 def charged_formula @formula + @charge.abs.times.map { (@charge > 0) ? '+' : '-' }.join end |
#gain? ⇒ Boolean
96 97 98 |
# File 'lib/ms/lipid/modification.rb', line 96 def gain? massdiff > 0 end |
#inspect ⇒ Object
104 105 106 |
# File 'lib/ms/lipid/modification.rb', line 104 def inspect "<Mod: #{charged_formula}>" end |
#loss? ⇒ Boolean
100 101 102 |
# File 'lib/ms/lipid/modification.rb', line 100 def loss? !gain? end |