From fe0f9c49e0d5eb8c53c00af83fcaa71e6a7cf7f6 Mon Sep 17 00:00:00 2001 From: Jung-Choi-01 Date: Tue, 20 Oct 2026 16:29:40 -0400 Subject: [PATCH] update uv absorbance weights --- backend/tests/test_protein.py | 2 +- backend/utility/protein.py | 42 ++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/backend/tests/test_protein.py b/backend/tests/test_protein.py index a042d87b..d47e1519 100644 --- a/backend/tests/test_protein.py +++ b/backend/tests/test_protein.py @@ -195,7 +195,7 @@ def test_prosite_short_to_regex(self): def test_calculate_absorbance(self): file = "backend/tests/data/singleProtein.fasta" first_seq = next(iter(Protein.parse_protein(file).values()))[1] - expected = 740 + expected = 25000 actual = Protein.calculate_absorbance(first_seq) self.assertEqual(actual, expected) diff --git a/backend/utility/protein.py b/backend/utility/protein.py index 487d27c2..2a5adaf0 100644 --- a/backend/utility/protein.py +++ b/backend/utility/protein.py @@ -8,26 +8,26 @@ class Protein(): AMINO_ACIDS = { - 'A': {'mass': 71.07, 'pKa': 0, 'absorbance': 1}, - 'R': {'mass': 156.18, 'pKa': 12.48, 'absorbance': 1}, - 'N': {'mass': 114.08, 'pKa': 0, 'absorbance': 1}, - 'D': {'mass': 115.08, 'pKa': 3.65, 'absorbance': 1}, - 'C': {'mass': 103.14, 'pKa': 8.18, 'absorbance': 1}, - 'E': {'mass': 129.11, 'pKa': 4.25, 'absorbance': 1}, - 'Q': {'mass': 128.13, 'pKa': 0, 'absorbance': 1}, - 'G': {'mass': 57.05, 'pKa': 0, 'absorbance': 1}, - 'H': {'mass': 137.14, 'pKa': 6.00, 'absorbance': 1}, - 'I': {'mass': 113.16, 'pKa': 0, 'absorbance': 1}, - 'L': {'mass': 113.16, 'pKa': 0, 'absorbance': 1}, - 'K': {'mass': 128.17, 'pKa': 10.53, 'absorbance': 1}, - 'M': {'mass': 131.19, 'pKa': 0, 'absorbance': 1}, - 'F': {'mass': 147.17, 'pKa': 0, 'absorbance': 3}, - 'P': {'mass': 97.11, 'pKa': 0, 'absorbance': 1}, - 'S': {'mass': 87.07, 'pKa': 0, 'absorbance': 1}, - 'T': {'mass': 101.10, 'pKa': 0, 'absorbance': 1}, - 'W': {'mass': 186.21, 'pKa': 0, 'absorbance': 10}, - 'Y': {'mass': 163.17, 'pKa': 10.07, 'absorbance': 4}, - 'V': {'mass': 99.13, 'pKa': 0, 'absorbance': 1} + 'A': {'mass': 71.07, 'pKa': 0, 'absorbance': 0}, + 'R': {'mass': 156.18, 'pKa': 12.48, 'absorbance': 0}, + 'N': {'mass': 114.08, 'pKa': 0, 'absorbance': 0}, + 'D': {'mass': 115.08, 'pKa': 3.65, 'absorbance': 0}, + 'C': {'mass': 103.14, 'pKa': 8.18, 'absorbance': 125}, + 'E': {'mass': 129.11, 'pKa': 4.25, 'absorbance': 0}, + 'Q': {'mass': 128.13, 'pKa': 0, 'absorbance': 0}, + 'G': {'mass': 57.05, 'pKa': 0, 'absorbance': 0}, + 'H': {'mass': 137.14, 'pKa': 6.00, 'absorbance': 0}, + 'I': {'mass': 113.16, 'pKa': 0, 'absorbance': 0}, + 'L': {'mass': 113.16, 'pKa': 0, 'absorbance': 0}, + 'K': {'mass': 128.17, 'pKa': 10.53, 'absorbance': 0}, + 'M': {'mass': 131.19, 'pKa': 0, 'absorbance': 0}, + 'F': {'mass': 147.17, 'pKa': 0, 'absorbance': 0}, + 'P': {'mass': 97.11, 'pKa': 0, 'absorbance': 0}, + 'S': {'mass': 87.07, 'pKa': 0, 'absorbance': 0}, + 'T': {'mass': 101.10, 'pKa': 0, 'absorbance': 0}, + 'W': {'mass': 186.21, 'pKa': 0, 'absorbance': 5500}, + 'Y': {'mass': 163.17, 'pKa': 10.07, 'absorbance': 1490}, + 'V': {'mass': 99.13, 'pKa': 0, 'absorbance': 0} } # Utilizes Biopython SeqIO library to parse through a fasta file given by the user and collect @@ -75,6 +75,8 @@ def get_amino_acid_count(file): def calculate_absorbance(sequence: str) -> int: ''' Simulate the "UV Absorbance" of a protein as the sum of its amino acids' absorbances + Methodology/estimates taken from https://web.expasy.org/protparam/protparam-doc.html, + except we don't divide by molecular weight since we'd like to scale absorbance with molecular weight ''' return sum(Protein.AMINO_ACIDS[amino_acid]['absorbance'] for amino_acid in sequence)