Module: PeptideMw
- Defined in:
- lib/peptide_mw.rb
Constant Summary collapse
- AMINO_ACID_MASSES =
{ 'A' => 71.03711, 'R' => 156.10111, 'N' => 114.04293, 'D' => 115.02694, 'C' => 103.00919, 'E' => 129.04259, 'Q' => 128.05858, 'G' => 57.02146, 'H' => 137.05891, 'I' => 113.08406, 'L' => 113.08406, 'K' => 128.09496, 'M' => 131.04049, 'F' => 147.06841, 'P' => 97.05276, 'S' => 87.03203, 'T' => 101.04768, 'W' => 186.07931, 'Y' => 163.06333, 'V' => 99.06841 }.freeze
- WATER_MASS =
18.01056- AMINO_ACID_FORMULA =
{ 'A' => { C: 3, H: 5, N: 1, O: 1, S: 0 }, 'R' => { C: 6, H: 12, N: 4, O: 1, S: 0 }, 'N' => { C: 4, H: 6, N: 2, O: 2, S: 0 }, 'D' => { C: 4, H: 5, N: 1, O: 3, S: 0 }, 'C' => { C: 3, H: 5, N: 1, O: 1, S: 1 }, 'E' => { C: 5, H: 7, N: 1, O: 3, S: 0 }, 'Q' => { C: 5, H: 8, N: 2, O: 2, S: 0 }, 'G' => { C: 2, H: 3, N: 1, O: 1, S: 0 }, 'H' => { C: 6, H: 7, N: 3, O: 1, S: 0 }, 'I' => { C: 6, H: 11, N: 1, O: 1, S: 0 }, 'L' => { C: 6, H: 11, N: 1, O: 1, S: 0 }, 'K' => { C: 6, H: 12, N: 2, O: 1, S: 0 }, 'M' => { C: 5, H: 9, N: 1, O: 1, S: 1 }, 'F' => { C: 9, H: 9, N: 1, O: 1, S: 0 }, 'P' => { C: 5, H: 7, N: 1, O: 1, S: 0 }, 'S' => { C: 3, H: 5, N: 1, O: 2, S: 0 }, 'T' => { C: 4, H: 7, N: 1, O: 2, S: 0 }, 'W' => { C: 11, H: 10, N: 2, O: 1, S: 0 }, 'Y' => { C: 9, H: 9, N: 1, O: 2, S: 0 }, 'V' => { C: 5, H: 9, N: 1, O: 1, S: 0 } }.freeze
- SUBSCRIPTS =
'₀₁₂₃₄₅₆₇₈₉'
Class Method Summary collapse
-
.calculate_molecular_formula(sequence) ⇒ String
Calculate molecular formula with Unicode subscripts.
-
.calculate_molecular_weight(sequence) ⇒ Float
Calculate monoisotopic molecular weight of a peptide sequence.
Class Method Details
.calculate_molecular_formula(sequence) ⇒ String
Calculate molecular formula with Unicode subscripts.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/peptide_mw.rb', line 61 def calculate_molecular_formula(sequence) raise ArgumentError, 'Sequence cannot be nil or empty' if sequence.nil? || sequence.strip.empty? seq = sequence.upcase seq.each_char do |aa| raise ArgumentError, "Invalid amino acid: '#{aa}'" unless AMINO_ACID_FORMULA.key?(aa) end counts = { C: 0, H: 0, N: 0, O: 0, S: 0 } seq.each_char do |aa| formula = AMINO_ACID_FORMULA[aa] counts.each_key { |element| counts[element] += formula[element] } end # Add water (H2O) counts[:H] += 2 counts[:O] += 1 "C#{to_subscript(counts[:C])}H#{to_subscript(counts[:H])}N#{to_subscript(counts[:N])}" \ "O#{to_subscript(counts[:O])}S#{to_subscript(counts[:S])}" end |
.calculate_molecular_weight(sequence) ⇒ Float
Calculate monoisotopic molecular weight of a peptide sequence.
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/peptide_mw.rb', line 45 def calculate_molecular_weight(sequence) raise ArgumentError, 'Sequence cannot be nil or empty' if sequence.nil? || sequence.strip.empty? seq = sequence.upcase seq.each_char do |aa| raise ArgumentError, "Invalid amino acid: '#{aa}'" unless AMINO_ACID_MASSES.key?(aa) end seq.chars.sum { |aa| AMINO_ACID_MASSES[aa] } + WATER_MASS end |