From 3bd9f31a41767a6aea2c031f4f9e8cb79729b9b1 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Mon, 25 Sep 2023 22:09:56 +0300 Subject: [PATCH 01/34] Create README.md --- HW4_Petrikov/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 HW4_Petrikov/README.md diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/HW4_Petrikov/README.md @@ -0,0 +1 @@ + From 26571570b6da9221d8a15706a78ece6e7c5bdddb Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Mon, 25 Sep 2023 22:13:53 +0300 Subject: [PATCH 02/34] Create Protein_suite.py --- HW4_Petrikov/Protein_suite.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 HW4_Petrikov/Protein_suite.py diff --git a/HW4_Petrikov/Protein_suite.py b/HW4_Petrikov/Protein_suite.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/HW4_Petrikov/Protein_suite.py @@ -0,0 +1 @@ + From 065e4ce16b3b29285634ed70fc864e991cabe2a0 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Tue, 26 Sep 2023 12:57:49 +0300 Subject: [PATCH 03/34] Update README.md --- HW4_Petrikov/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md index 8b13789..0fcbac9 100644 --- a/HW4_Petrikov/README.md +++ b/HW4_Petrikov/README.md @@ -1 +1,3 @@ +# ProtSeqO +## Tool for protein sequtnces operation From 6d644d271c9931bd6bca377151127355e603e257 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Tue, 26 Sep 2023 13:02:24 +0300 Subject: [PATCH 04/34] Update README.md --- HW4_Petrikov/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md index 0fcbac9..6e60808 100644 --- a/HW4_Petrikov/README.md +++ b/HW4_Petrikov/README.md @@ -1,3 +1,3 @@ # ProtSeqO -## Tool for protein sequtnces operation +## Tool for protein sequences operation From 5ca47ee5885b866d6db18fba3e439cb1155efd0e Mon Sep 17 00:00:00 2001 From: Yury Popov Date: Tue, 26 Sep 2023 15:32:29 +0400 Subject: [PATCH 05/34] Add func: length, longest seq, 1to3 letters --- HW4_Petrikov/Protein_suite.py | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/HW4_Petrikov/Protein_suite.py b/HW4_Petrikov/Protein_suite.py index 8b13789..2e59710 100644 --- a/HW4_Petrikov/Protein_suite.py +++ b/HW4_Petrikov/Protein_suite.py @@ -1 +1,52 @@ +AMINOACIDS_NAMES = { + 'A': 'Ala', + 'R': 'Arg', + 'N': 'Asn', + 'D': 'Asp', + 'V': 'Val', + 'H': 'His', + 'G': 'Gly', + 'Q': 'Gln', + 'E': 'Glu', + 'I': 'Ile', + 'L': 'Leu', + 'K': 'Lys', + 'M': 'Met', + 'P': 'Pro', + 'S': 'Ser', + 'Y': 'Tyr', + 'T': 'Thr', + 'W': 'Trp', + 'F': 'Phe', + 'C': 'Cys' +} + +def transform_to_three_letter(sequence: str) -> str: + ''' + Transform 1-letter aminoacid symbols in + sequence to 3-letter symbols separated by + hyphens. + ''' + new_protein = '' + for aminoacid in sequence: + new_protein += AMINOACIDS_NAMES[aminoacid] + '-' + return new_protein[:-1] + + +def sequence_length(sequence: str) -> int: + ''' + Function counts number of aminoacids in + inputed sequence + ''' + return len(sequence) + + +def longest_sequence(sequences: list) -> str: + ''' + Function returns longest protein sequence, + if there is only one sequence, function + returns it. + ''' + sequences.sort(key=len, reverse=True) + return sequences[0] From b1c18585969c5b62c25c0f6496aa9a9e4087bc81 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Tue, 26 Sep 2023 23:35:16 +0300 Subject: [PATCH 06/34] Add calc_gravy function --- HW4_Petrikov/Protein_suite.py | 40 ++++++++++++++++------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/HW4_Petrikov/Protein_suite.py b/HW4_Petrikov/Protein_suite.py index 2e59710..3254d54 100644 --- a/HW4_Petrikov/Protein_suite.py +++ b/HW4_Petrikov/Protein_suite.py @@ -1,25 +1,21 @@ -AMINOACIDS_NAMES = { - 'A': 'Ala', - 'R': 'Arg', - 'N': 'Asn', - 'D': 'Asp', - 'V': 'Val', - 'H': 'His', - 'G': 'Gly', - 'Q': 'Gln', - 'E': 'Glu', - 'I': 'Ile', - 'L': 'Leu', - 'K': 'Lys', - 'M': 'Met', - 'P': 'Pro', - 'S': 'Ser', - 'Y': 'Tyr', - 'T': 'Thr', - 'W': 'Trp', - 'F': 'Phe', - 'C': 'Cys' -} +AMINOACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', + 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', + 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} + +GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, + 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, + 'H': -3.2, 'I': 4.5} + + +def calc_gravy(amino_ac_seq: str) -> float: + """ + Calculate GRAVY (grand average of hydropathy) value + for entered amino acids sequence + """ + gravy_aa_sum = 0 + for amino_ac in amino_ac_seq: + gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] + return round(gravy_aa_sum / len(amino_ac_seq), 3) def transform_to_three_letter(sequence: str) -> str: From e0da3fa28e4908b53dbb5bd3766e6ea8357ab8aa Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Wed, 27 Sep 2023 00:41:21 +0300 Subject: [PATCH 07/34] Rename script --- HW4_Petrikov/ProSeqO.py | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 HW4_Petrikov/ProSeqO.py diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py new file mode 100644 index 0000000..3254d54 --- /dev/null +++ b/HW4_Petrikov/ProSeqO.py @@ -0,0 +1,48 @@ +AMINOACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', + 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', + 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} + +GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, + 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, + 'H': -3.2, 'I': 4.5} + + +def calc_gravy(amino_ac_seq: str) -> float: + """ + Calculate GRAVY (grand average of hydropathy) value + for entered amino acids sequence + """ + gravy_aa_sum = 0 + for amino_ac in amino_ac_seq: + gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] + return round(gravy_aa_sum / len(amino_ac_seq), 3) + + +def transform_to_three_letter(sequence: str) -> str: + ''' + Transform 1-letter aminoacid symbols in + sequence to 3-letter symbols separated by + hyphens. + ''' + new_protein = '' + for aminoacid in sequence: + new_protein += AMINOACIDS_NAMES[aminoacid] + '-' + return new_protein[:-1] + + +def sequence_length(sequence: str) -> int: + ''' + Function counts number of aminoacids in + inputed sequence + ''' + return len(sequence) + + +def longest_sequence(sequences: list) -> str: + ''' + Function returns longest protein sequence, + if there is only one sequence, function + returns it. + ''' + sequences.sort(key=len, reverse=True) + return sequences[0] From 1786d8a96994ba3fb1314678a090ca4398a263ee Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Wed, 27 Sep 2023 00:55:24 +0300 Subject: [PATCH 08/34] Add calc_total_charge function --- HW4_Petrikov/ProSeqO.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py index 3254d54..a2642a7 100644 --- a/HW4_Petrikov/ProSeqO.py +++ b/HW4_Petrikov/ProSeqO.py @@ -3,7 +3,7 @@ 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, - 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, + 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5} @@ -18,12 +18,30 @@ def calc_gravy(amino_ac_seq: str) -> float: return round(gravy_aa_sum / len(amino_ac_seq), 3) +def calc_total_charge(charged_amino_ac_list: list, pH_value: float) -> float: + """ + Calculates approximate total charge of given protein + based on the number of key charged amino acids + """ + N_terminal_charge = 1 / (1 + 10 ** (pH_value - 8.2)) + C_terminal_charge = -1 / (1 + 10 ** (3.65 - pH_value)) + Cys_charge = -charged_amino_ac_list[0] / (1 + 10 ** (8.18 - pH_value)) + Asp_charge = -charged_amino_ac_list[1] / (1 + 10 ** (3.9 - pH_value)) + Glu_charge = -charged_amino_ac_list[2] / (1 + 10 ** (4.07 - pH_value)) + Tyr_charge = -charged_amino_ac_list[3] / (1 + 10 ** (10.46 - pH_value)) + His_charge = charged_amino_ac_list[4] / (1 + 10 ** (pH_value - 6.04)) + Lys_charge = charged_amino_ac_list[5] / (1 + 10 ** (pH_value - 10.54)) + Arg_charge = charged_amino_ac_list[6] / (1 + 10 ** (pH_value - 12.48)) + total_charge = N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + His_charge + Lys_charge + Arg_charge + return total_charge + + def transform_to_three_letter(sequence: str) -> str: - ''' + """ Transform 1-letter aminoacid symbols in sequence to 3-letter symbols separated by hyphens. - ''' + """ new_protein = '' for aminoacid in sequence: new_protein += AMINOACIDS_NAMES[aminoacid] + '-' @@ -31,18 +49,18 @@ def transform_to_three_letter(sequence: str) -> str: def sequence_length(sequence: str) -> int: - ''' + """ Function counts number of aminoacids in inputed sequence - ''' + """ return len(sequence) def longest_sequence(sequences: list) -> str: - ''' + """ Function returns longest protein sequence, if there is only one sequence, function returns it. - ''' + """ sequences.sort(key=len, reverse=True) return sequences[0] From 78ce0269bc75c1b37554d4b43cae85465176146e Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Wed, 27 Sep 2023 00:57:55 +0300 Subject: [PATCH 09/34] Add calc_iso_point function --- HW4_Petrikov/ProSeqO.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py index a2642a7..4cf01fa 100644 --- a/HW4_Petrikov/ProSeqO.py +++ b/HW4_Petrikov/ProSeqO.py @@ -32,10 +32,27 @@ def calc_total_charge(charged_amino_ac_list: list, pH_value: float) -> float: His_charge = charged_amino_ac_list[4] / (1 + 10 ** (pH_value - 6.04)) Lys_charge = charged_amino_ac_list[5] / (1 + 10 ** (pH_value - 10.54)) Arg_charge = charged_amino_ac_list[6] / (1 + 10 ** (pH_value - 12.48)) - total_charge = N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + His_charge + Lys_charge + Arg_charge + total_charge = (N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + + His_charge + Lys_charge + Arg_charge) return total_charge +def calc_iso_point(amino_ac_seq): + """ + Calculates approximate isoelectric point of given protein + """ + charged_amino_ac_numbers = [] + for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): + charged_amino_ac_numbers.append(amino_ac_seq.count(amino_ac)) + print(charged_amino_ac_numbers ) + total_charge_tmp = 1 + pH_iso_point = -0.1 + while total_charge_tmp > 0: + pH_iso_point += 0.1 + total_charge_tmp = calc_total_charge(charged_amino_ac_numbers, pH_iso_point) + return round(pH_iso_point, 1) + + def transform_to_three_letter(sequence: str) -> str: """ Transform 1-letter aminoacid symbols in From f92e9e05a8183716b78357d2b7244f0a6011126d Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Wed, 27 Sep 2023 01:17:35 +0300 Subject: [PATCH 10/34] Edit docstrings --- HW4_Petrikov/ProSeqO.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py index 4cf01fa..3fadffd 100644 --- a/HW4_Petrikov/ProSeqO.py +++ b/HW4_Petrikov/ProSeqO.py @@ -1,4 +1,4 @@ -AMINOACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', +AMINO_ACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} @@ -10,7 +10,7 @@ def calc_gravy(amino_ac_seq: str) -> float: """ Calculate GRAVY (grand average of hydropathy) value - for entered amino acids sequence + of given amino acids sequence """ gravy_aa_sum = 0 for amino_ac in amino_ac_seq: @@ -18,20 +18,21 @@ def calc_gravy(amino_ac_seq: str) -> float: return round(gravy_aa_sum / len(amino_ac_seq), 3) -def calc_total_charge(charged_amino_ac_list: list, pH_value: float) -> float: +def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> float: """ - Calculates approximate total charge of given protein - based on the number of key charged amino acids + Calculate the approximate total charge of some amino acid sequence + for given pH value + based only on a list of the number of key charged amino acids. """ N_terminal_charge = 1 / (1 + 10 ** (pH_value - 8.2)) C_terminal_charge = -1 / (1 + 10 ** (3.65 - pH_value)) - Cys_charge = -charged_amino_ac_list[0] / (1 + 10 ** (8.18 - pH_value)) - Asp_charge = -charged_amino_ac_list[1] / (1 + 10 ** (3.9 - pH_value)) - Glu_charge = -charged_amino_ac_list[2] / (1 + 10 ** (4.07 - pH_value)) - Tyr_charge = -charged_amino_ac_list[3] / (1 + 10 ** (10.46 - pH_value)) - His_charge = charged_amino_ac_list[4] / (1 + 10 ** (pH_value - 6.04)) - Lys_charge = charged_amino_ac_list[5] / (1 + 10 ** (pH_value - 10.54)) - Arg_charge = charged_amino_ac_list[6] / (1 + 10 ** (pH_value - 12.48)) + Cys_charge = -charged_amino_ac_numbers_list[0] / (1 + 10 ** (8.18 - pH_value)) + Asp_charge = -charged_amino_ac_numbers_list[1] / (1 + 10 ** (3.9 - pH_value)) + Glu_charge = -charged_amino_ac_numbers_list[2] / (1 + 10 ** (4.07 - pH_value)) + Tyr_charge = -charged_amino_ac_numbers_list[3] / (1 + 10 ** (10.46 - pH_value)) + His_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (pH_value - 6.04)) + Lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (pH_value - 10.54)) + Arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (pH_value - 12.48)) total_charge = (N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + His_charge + Lys_charge + Arg_charge) return total_charge @@ -39,12 +40,12 @@ def calc_total_charge(charged_amino_ac_list: list, pH_value: float) -> float: def calc_iso_point(amino_ac_seq): """ - Calculates approximate isoelectric point of given protein + Calculate approximate isoelectric point of given amino acids sequence """ charged_amino_ac_numbers = [] for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): charged_amino_ac_numbers.append(amino_ac_seq.count(amino_ac)) - print(charged_amino_ac_numbers ) + print(charged_amino_ac_numbers) total_charge_tmp = 1 pH_iso_point = -0.1 while total_charge_tmp > 0: @@ -61,14 +62,14 @@ def transform_to_three_letter(sequence: str) -> str: """ new_protein = '' for aminoacid in sequence: - new_protein += AMINOACIDS_NAMES[aminoacid] + '-' + new_protein += AMINO_ACIDS_NAMES[aminoacid] + '-' return new_protein[:-1] def sequence_length(sequence: str) -> int: """ Function counts number of aminoacids in - inputed sequence + given sequence """ return len(sequence) @@ -79,5 +80,5 @@ def longest_sequence(sequences: list) -> str: if there is only one sequence, function returns it. """ - sequences.sort(key=len, reverse=True) + sequences.sort(key = len, reverse = True) return sequences[0] From c52a25c7e68f6874ee647981658536d1dbdc9765 Mon Sep 17 00:00:00 2001 From: Rovshan Date: Thu, 28 Sep 2023 15:35:15 +0300 Subject: [PATCH 11/34] Add funcs: protein mass, the hightest and lightest protein --- HW4_Petrikov/ProSeqO.py | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py index 3fadffd..be7332e 100644 --- a/HW4_Petrikov/ProSeqO.py +++ b/HW4_Petrikov/ProSeqO.py @@ -82,3 +82,50 @@ def longest_sequence(sequences: list) -> str: """ sequences.sort(key = len, reverse = True) return sequences[0] + +def calc_protein_mass(sequence: str) -> int: + """ + Calculate protein molecular weight using the average + molecular weight of amino acid - 110 Da + """ + return len(sequence) * 110 + +def heaviest_protein_str(sequence: list) -> str: + """ + Return the sequence of the heaviest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return max(protein_mass, key=(lambda k:protein_mass[k])) + +def heaviest_protein_num(sequence: list) -> int: + """ + Filter and return the value of the heaviest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return max(protein_mass.values()) + +def lightest_protein_str(sequence: list) -> str: + """ + Return the sequence of the lightest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return min(protein_mass, key=(lambda k:protein_mass[k])) + +def lightest_protein_num(sequence: list) -> int: + """ + Filter and return the value of the lightest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return min(protein_mass.values()) From a3ebaa91729ac72a5f266120732032965e827870 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Thu, 28 Sep 2023 19:39:08 +0300 Subject: [PATCH 12/34] Rename script --- HW4_Petrikov/ProtSeqO.py | 131 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 HW4_Petrikov/ProtSeqO.py diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py new file mode 100644 index 0000000..be7332e --- /dev/null +++ b/HW4_Petrikov/ProtSeqO.py @@ -0,0 +1,131 @@ +AMINO_ACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', + 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', + 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} + +GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, + 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, + 'H': -3.2, 'I': 4.5} + + +def calc_gravy(amino_ac_seq: str) -> float: + """ + Calculate GRAVY (grand average of hydropathy) value + of given amino acids sequence + """ + gravy_aa_sum = 0 + for amino_ac in amino_ac_seq: + gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] + return round(gravy_aa_sum / len(amino_ac_seq), 3) + + +def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> float: + """ + Calculate the approximate total charge of some amino acid sequence + for given pH value + based only on a list of the number of key charged amino acids. + """ + N_terminal_charge = 1 / (1 + 10 ** (pH_value - 8.2)) + C_terminal_charge = -1 / (1 + 10 ** (3.65 - pH_value)) + Cys_charge = -charged_amino_ac_numbers_list[0] / (1 + 10 ** (8.18 - pH_value)) + Asp_charge = -charged_amino_ac_numbers_list[1] / (1 + 10 ** (3.9 - pH_value)) + Glu_charge = -charged_amino_ac_numbers_list[2] / (1 + 10 ** (4.07 - pH_value)) + Tyr_charge = -charged_amino_ac_numbers_list[3] / (1 + 10 ** (10.46 - pH_value)) + His_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (pH_value - 6.04)) + Lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (pH_value - 10.54)) + Arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (pH_value - 12.48)) + total_charge = (N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + + His_charge + Lys_charge + Arg_charge) + return total_charge + + +def calc_iso_point(amino_ac_seq): + """ + Calculate approximate isoelectric point of given amino acids sequence + """ + charged_amino_ac_numbers = [] + for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): + charged_amino_ac_numbers.append(amino_ac_seq.count(amino_ac)) + print(charged_amino_ac_numbers) + total_charge_tmp = 1 + pH_iso_point = -0.1 + while total_charge_tmp > 0: + pH_iso_point += 0.1 + total_charge_tmp = calc_total_charge(charged_amino_ac_numbers, pH_iso_point) + return round(pH_iso_point, 1) + + +def transform_to_three_letter(sequence: str) -> str: + """ + Transform 1-letter aminoacid symbols in + sequence to 3-letter symbols separated by + hyphens. + """ + new_protein = '' + for aminoacid in sequence: + new_protein += AMINO_ACIDS_NAMES[aminoacid] + '-' + return new_protein[:-1] + + +def sequence_length(sequence: str) -> int: + """ + Function counts number of aminoacids in + given sequence + """ + return len(sequence) + + +def longest_sequence(sequences: list) -> str: + """ + Function returns longest protein sequence, + if there is only one sequence, function + returns it. + """ + sequences.sort(key = len, reverse = True) + return sequences[0] + +def calc_protein_mass(sequence: str) -> int: + """ + Calculate protein molecular weight using the average + molecular weight of amino acid - 110 Da + """ + return len(sequence) * 110 + +def heaviest_protein_str(sequence: list) -> str: + """ + Return the sequence of the heaviest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return max(protein_mass, key=(lambda k:protein_mass[k])) + +def heaviest_protein_num(sequence: list) -> int: + """ + Filter and return the value of the heaviest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return max(protein_mass.values()) + +def lightest_protein_str(sequence: list) -> str: + """ + Return the sequence of the lightest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return min(protein_mass, key=(lambda k:protein_mass[k])) + +def lightest_protein_num(sequence: list) -> int: + """ + Filter and return the value of the lightest protein from list + """ + protein_mass = {} + list_of_protein = sequence + for i in list_of_protein: + protein_mass[i] = calc_protein_mass(i) + return min(protein_mass.values()) From 91856219df382471254bb302258039f0366a192e Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 01:43:43 +0300 Subject: [PATCH 13/34] Code Style minor eds --- HW4_Petrikov/ProtSeqO.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index be7332e..c0c6e45 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -80,16 +80,18 @@ def longest_sequence(sequences: list) -> str: if there is only one sequence, function returns it. """ - sequences.sort(key = len, reverse = True) + sequences.sort(key=len, reverse=True) return sequences[0] -def calc_protein_mass(sequence: str) -> int: + +def calc_protein_mass(sequence: str) -> int: """ Calculate protein molecular weight using the average molecular weight of amino acid - 110 Da """ return len(sequence) * 110 + def heaviest_protein_str(sequence: list) -> str: """ Return the sequence of the heaviest protein from list @@ -98,7 +100,8 @@ def heaviest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return max(protein_mass, key=(lambda k:protein_mass[k])) + return max(protein_mass, key=(lambda k: protein_mass[k])) + def heaviest_protein_num(sequence: list) -> int: """ @@ -110,6 +113,7 @@ def heaviest_protein_num(sequence: list) -> int: protein_mass[i] = calc_protein_mass(i) return max(protein_mass.values()) + def lightest_protein_str(sequence: list) -> str: """ Return the sequence of the lightest protein from list @@ -118,7 +122,8 @@ def lightest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return min(protein_mass, key=(lambda k:protein_mass[k])) + return min(protein_mass, key=(lambda k: protein_mass[k])) + def lightest_protein_num(sequence: list) -> int: """ From d9b28e47aa4f3e9271d98764ae11dd6de82beed8 Mon Sep 17 00:00:00 2001 From: Rovshan Date: Fri, 29 Sep 2023 12:45:43 +0300 Subject: [PATCH 14/34] Combine heaviest and lightest functions --- .DS_Store | Bin 0 -> 6148 bytes HW4_Petrikov/ProSeqO.py | 28 +++++----------------------- 2 files changed, 5 insertions(+), 23 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..eb6ee92e6da3ceb652cb9dd77c6e6161dff2d937 GIT binary patch literal 6148 zcmeHKK~LK-6n-vcBx93$U=o)}k#=RQ1GWk6l66Ib!=#CzaTus;NVG+SxN1{+s4C^W z{g_?(CH$T3d$yS6XFOU!L)j!4%{f8Hi z20h0+i+g!CD4Wf5Rhz5NKU(k>yhZOY`k_Zr*)4~IR=59^YkOMf@kQK?zhvpC(^&eb zi?W*)Y2OgCBt^=>epV!U)Y8Ku85nM4J3Qa>JB{V>_{~~#C0JX3H(3eBn;dVfznx5c z@7ar2?{_=L`AMOFni-J7x;6IH;RXCcaHB4#QNPG_@f|tLe@s2B`IKJL5otQXlTmp^ zyWhyWtesE0v;{@m^a;2MPBP6<&#y306%z$S0a4(V6mWZ=w|GnA$uOdTDDZF;;Qb+h zGlmW;i)QOUVXgqcI+~3k=3hnT1P()ol|}Txl%)bKRkH~@wYD~o7>$&Y}MK?+geP8IkIuXJ|t literal 0 HcmV?d00001 diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py index be7332e..a389047 100644 --- a/HW4_Petrikov/ProSeqO.py +++ b/HW4_Petrikov/ProSeqO.py @@ -90,7 +90,8 @@ def calc_protein_mass(sequence: str) -> int: """ return len(sequence) * 110 -def heaviest_protein_str(sequence: list) -> str: + +def heaviest_protein(sequence: list): """ Return the sequence of the heaviest protein from list """ @@ -98,19 +99,10 @@ def heaviest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return max(protein_mass, key=(lambda k:protein_mass[k])) + return f'{max(protein_mass, key=(lambda k:protein_mass[k]))} - {max(protein_mass.values())}' -def heaviest_protein_num(sequence: list) -> int: - """ - Filter and return the value of the heaviest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return max(protein_mass.values()) -def lightest_protein_str(sequence: list) -> str: +def lightest_protein(sequence: list): """ Return the sequence of the lightest protein from list """ @@ -118,14 +110,4 @@ def lightest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return min(protein_mass, key=(lambda k:protein_mass[k])) - -def lightest_protein_num(sequence: list) -> int: - """ - Filter and return the value of the lightest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return min(protein_mass.values()) + return f'{min(protein_mass, key=(lambda k:protein_mass[k]))} - {min(protein_mass.values())}' From b42cffb7f8d3903bbdef0b7b4ef2c2a679bccbca Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 20:27:23 +0300 Subject: [PATCH 15/34] Copied heaviest and lightest funcs to ProtSeqO --- HW4_Petrikov/ProtSeqO.py | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index c0c6e45..d57d909 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -92,7 +92,7 @@ def calc_protein_mass(sequence: str) -> int: return len(sequence) * 110 -def heaviest_protein_str(sequence: list) -> str: +def heaviest_protein(sequence: list): """ Return the sequence of the heaviest protein from list """ @@ -100,21 +100,10 @@ def heaviest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return max(protein_mass, key=(lambda k: protein_mass[k])) + return f'{max(protein_mass.values())} - {max(protein_mass, key=(lambda k:protein_mass[k]))}' -def heaviest_protein_num(sequence: list) -> int: - """ - Filter and return the value of the heaviest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return max(protein_mass.values()) - - -def lightest_protein_str(sequence: list) -> str: +def lightest_protein(sequence: list): """ Return the sequence of the lightest protein from list """ @@ -122,15 +111,4 @@ def lightest_protein_str(sequence: list) -> str: list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return min(protein_mass, key=(lambda k: protein_mass[k])) - - -def lightest_protein_num(sequence: list) -> int: - """ - Filter and return the value of the lightest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return min(protein_mass.values()) + return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k:protein_mass[k]))}' From e9b1c3503e8f53aae532981121cc9f1ce2df95c6 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 20:37:47 +0300 Subject: [PATCH 16/34] Add FUNC_DICT_FOR_LIST_RETURN = {'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, 'lengths': sequence_length, 'weights': calc_protein_mass} FUNC_DICT_FOR_PAIR_RETURN = {'heavy': heaviest_protein, 'light': lightest_protei --- HW4_Petrikov/ProtSeqO.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index d57d909..ce45a48 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -1,11 +1,13 @@ AMINO_ACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', - 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', - 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} + 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', + 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, 'H': -3.2, 'I': 4.5} +VALID_SYMBOLS = set(AMINO_ACIDS_NAMES) + def calc_gravy(amino_ac_seq: str) -> float: """ @@ -38,13 +40,13 @@ def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> f return total_charge -def calc_iso_point(amino_ac_seq): +def calc_iso_point(seq): """ Calculate approximate isoelectric point of given amino acids sequence """ charged_amino_ac_numbers = [] for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): - charged_amino_ac_numbers.append(amino_ac_seq.count(amino_ac)) + charged_amino_ac_numbers.append(seq.count(amino_ac)) print(charged_amino_ac_numbers) total_charge_tmp = 1 pH_iso_point = -0.1 @@ -54,16 +56,16 @@ def calc_iso_point(amino_ac_seq): return round(pH_iso_point, 1) -def transform_to_three_letter(sequence: str) -> str: +def transform_to_three_letter(seq: str) -> str: """ Transform 1-letter aminoacid symbols in sequence to 3-letter symbols separated by hyphens. """ - new_protein = '' - for aminoacid in sequence: - new_protein += AMINO_ACIDS_NAMES[aminoacid] + '-' - return new_protein[:-1] + new_name = '' + for amino_acid in seq: + new_name += AMINO_ACIDS_NAMES[amino_acid] + '-' + return new_name[:-1] def sequence_length(sequence: str) -> int: @@ -100,7 +102,7 @@ def heaviest_protein(sequence: list): list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return f'{max(protein_mass.values())} - {max(protein_mass, key=(lambda k:protein_mass[k]))}' + return f'{max(protein_mass.values())} - {max(protein_mass, key=(lambda k: protein_mass[k]))}' def lightest_protein(sequence: list): @@ -111,4 +113,14 @@ def lightest_protein(sequence: list): list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k:protein_mass[k]))}' + return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k: protein_mass[k]))}' + + +def check_sequences(sequences: list): + """ + Raise ValueError if at least one sequence + contains non valid symbols + """ + for seq in sequences: + if not (set(seq.upper()).issubset(VALID_SYMBOLS)): + raise ValueError("Enter valid protein sequence") From 5e52e876be989ab124e24e9ee218d426e8301bd9 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 20:39:56 +0300 Subject: [PATCH 17/34] Add check_sequences func --- HW4_Petrikov/ProtSeqO.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index ce45a48..dc39db3 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -116,11 +116,11 @@ def lightest_protein(sequence: list): return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k: protein_mass[k]))}' -def check_sequences(sequences: list): +def check_sequences(seqs: list): """ Raise ValueError if at least one sequence contains non valid symbols """ - for seq in sequences: + for seq in seqs: if not (set(seq.upper()).issubset(VALID_SYMBOLS)): raise ValueError("Enter valid protein sequence") From df0ba32eaa6dc27817af56261a40108ea14737fe Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 20:43:20 +0300 Subject: [PATCH 18/34] Add process_seqs func --- HW4_Petrikov/ProtSeqO.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index dc39db3..252cdca 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -56,7 +56,7 @@ def calc_iso_point(seq): return round(pH_iso_point, 1) -def transform_to_three_letter(seq: str) -> str: +def transform_to_three_letters(seq: str) -> str: """ Transform 1-letter aminoacid symbols in sequence to 3-letter symbols separated by @@ -124,3 +124,26 @@ def check_sequences(seqs: list): for seq in seqs: if not (set(seq.upper()).issubset(VALID_SYMBOLS)): raise ValueError("Enter valid protein sequence") + + +FUNC_DICT_FOR_LIST_RETURN = {'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, 'lengths': sequence_length, 'weights': calc_protein_mass} + +FUNC_DICT_FOR_PAIR_RETURN = {'heavy': heaviest_protein,'light': lightest_protein} + + +def process_seqs(option, seqs): + if isinstance(seqs, str): + seq_tmp = seqs + seqs = [] + seqs.append(seq_tmp) + check_sequences(seqs) + if option in FUNC_DICT_FOR_LIST_RETURN.keys(): + results = [] + for seq in seqs: + result_tmp = FUNC_DICT_FOR_LIST_RETURN[option](seq) + results.append(result_tmp) + return results + elif option in FUNC_DICT_FOR_PAIR_RETURN.keys(): + return FUNC_DICT_FOR_PAIR_RETURN[option](seqs) + else: + raise ValueError("Enter valid operation") From 6396992a8f3a6c1f9959b3cf0a76aee53bd85dd7 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 21:15:27 +0300 Subject: [PATCH 19/34] Code Style minor eds --- HW4_Petrikov/ProtSeqO.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 252cdca..9272994 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -9,15 +9,15 @@ VALID_SYMBOLS = set(AMINO_ACIDS_NAMES) -def calc_gravy(amino_ac_seq: str) -> float: +def calc_gravy(seq: str) -> float: """ Calculate GRAVY (grand average of hydropathy) value of given amino acids sequence """ gravy_aa_sum = 0 - for amino_ac in amino_ac_seq: + for amino_ac in seq: gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] - return round(gravy_aa_sum / len(amino_ac_seq), 3) + return round(gravy_aa_sum / len(seq), 3) def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> float: @@ -40,7 +40,7 @@ def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> f return total_charge -def calc_iso_point(seq): +def calc_iso_point(seq: str): """ Calculate approximate isoelectric point of given amino acids sequence """ @@ -68,49 +68,49 @@ def transform_to_three_letters(seq: str) -> str: return new_name[:-1] -def sequence_length(sequence: str) -> int: +def sequence_length(seq: str) -> int: """ Function counts number of aminoacids in given sequence """ - return len(sequence) + return len(seq) -def longest_sequence(sequences: list) -> str: +def longest_seq(seqs: list) -> str: """ Function returns longest protein sequence, if there is only one sequence, function returns it. """ - sequences.sort(key=len, reverse=True) - return sequences[0] + seqs.sort(key=len, reverse=True) + return seqs[0] -def calc_protein_mass(sequence: str) -> int: +def calc_protein_mass(seq: str) -> int: """ Calculate protein molecular weight using the average molecular weight of amino acid - 110 Da """ - return len(sequence) * 110 + return len(seq) * 110 -def heaviest_protein(sequence: list): +def find_heaviest_protein(seqs: list): """ Return the sequence of the heaviest protein from list """ protein_mass = {} - list_of_protein = sequence + list_of_protein = seqs for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) return f'{max(protein_mass.values())} - {max(protein_mass, key=(lambda k: protein_mass[k]))}' -def lightest_protein(sequence: list): +def find_lightest_protein(seqs: list): """ Return the sequence of the lightest protein from list """ protein_mass = {} - list_of_protein = sequence + list_of_protein = seqs for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k: protein_mass[k]))}' @@ -126,16 +126,16 @@ def check_sequences(seqs: list): raise ValueError("Enter valid protein sequence") -FUNC_DICT_FOR_LIST_RETURN = {'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, 'lengths': sequence_length, 'weights': calc_protein_mass} +FUNC_DICT_FOR_LIST_RETURN = {'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, + 'lengths': sequence_length, 'weights': calc_protein_mass} -FUNC_DICT_FOR_PAIR_RETURN = {'heavy': heaviest_protein,'light': lightest_protein} +FUNC_DICT_FOR_PAIR_RETURN = {'heavy': find_heaviest_protein, 'light': find_lightest_protein} def process_seqs(option, seqs): if isinstance(seqs, str): seq_tmp = seqs - seqs = [] - seqs.append(seq_tmp) + seqs = [seq_tmp] check_sequences(seqs) if option in FUNC_DICT_FOR_LIST_RETURN.keys(): results = [] From a49dbe78860d63754d61b95970db3a8c1a312ab2 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Fri, 29 Sep 2023 21:21:43 +0300 Subject: [PATCH 20/34] Correct calc_iso_point --- HW4_Petrikov/ProtSeqO.py | 1 - 1 file changed, 1 deletion(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 9272994..b3e0f4a 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -47,7 +47,6 @@ def calc_iso_point(seq: str): charged_amino_ac_numbers = [] for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): charged_amino_ac_numbers.append(seq.count(amino_ac)) - print(charged_amino_ac_numbers) total_charge_tmp = 1 pH_iso_point = -0.1 while total_charge_tmp > 0: From 52d72b548a2d6b201c9d810899b25cdf1cf79f37 Mon Sep 17 00:00:00 2001 From: Yury Popov Date: Sat, 30 Sep 2023 16:18:39 +0400 Subject: [PATCH 21/34] formatted script --- HW4_Petrikov/ProtSeqO.py | 80 ++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index b3e0f4a..2f9ecd8 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -1,10 +1,44 @@ -AMINO_ACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', - 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', - 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} - -GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, - 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, - 'H': -3.2, 'I': 4.5} +AMINO_ACIDS_NAMES = {'A': 'Ala', + 'R': 'Arg', + 'N': 'Asn', + 'D': 'Asp', + 'V': 'Val', + 'H': 'His', + 'G': 'Gly', + 'Q': 'Gln', + 'E': 'Glu', + 'I': 'Ile', + 'L': 'Leu', + 'K': 'Lys', + 'M': 'Met', + 'P': 'Pro', + 'S': 'Ser', + 'Y': 'Tyr', + 'T': 'Thr', + 'W': 'Trp', + 'F': 'Phe', + 'C': 'Cys'} + +GRAVY_AA_VALUES = {'L': 3.8, + 'K': -3.9, + 'M': 1.9, + 'F': 2.8, + 'P': -1.6, + 'S': -0.8, + 'T': -0.7, + 'W': -0.9, + 'Y': -1.3, + 'V': 4.2, + 'A': 1.8, + 'R': -4.5, + 'N': -3.5, + 'D': -3.5, + 'C': 2.5, + 'Q': -3.5, + 'E': -3.5, + 'G': -0.4, + 'H': -3.2, + 'I': 4.5} VALID_SYMBOLS = set(AMINO_ACIDS_NAMES) @@ -20,7 +54,8 @@ def calc_gravy(seq: str) -> float: return round(gravy_aa_sum / len(seq), 3) -def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> float: +def calc_total_charge(charged_amino_ac_numbers_list: list, + pH_value: float) -> float: """ Calculate the approximate total charge of some amino acid sequence for given pH value @@ -35,8 +70,15 @@ def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> f His_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (pH_value - 6.04)) Lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (pH_value - 10.54)) Arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (pH_value - 12.48)) - total_charge = (N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + - His_charge + Lys_charge + Arg_charge) + total_charge = (N_terminal_charge + + C_terminal_charge + + Cys_charge + + Asp_charge + + Glu_charge + + Tyr_charge + + His_charge + + Lys_charge + + Arg_charge) return total_charge @@ -51,7 +93,9 @@ def calc_iso_point(seq: str): pH_iso_point = -0.1 while total_charge_tmp > 0: pH_iso_point += 0.1 - total_charge_tmp = calc_total_charge(charged_amino_ac_numbers, pH_iso_point) + total_charge_tmp = calc_total_charge( + charged_amino_ac_numbers, + pH_iso_point) return round(pH_iso_point, 1) @@ -87,7 +131,7 @@ def longest_seq(seqs: list) -> str: def calc_protein_mass(seq: str) -> int: """ - Calculate protein molecular weight using the average + Calculate protein molecular weight using the average molecular weight of amino acid - 110 Da """ return len(seq) * 110 @@ -125,10 +169,16 @@ def check_sequences(seqs: list): raise ValueError("Enter valid protein sequence") -FUNC_DICT_FOR_LIST_RETURN = {'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, - 'lengths': sequence_length, 'weights': calc_protein_mass} +FUNC_DICT_FOR_LIST_RETURN = { + 'gravy': calc_gravy, + 'iso': calc_iso_point, + 'rename': transform_to_three_letters, + 'lengths': sequence_length, + 'weights': calc_protein_mass} -FUNC_DICT_FOR_PAIR_RETURN = {'heavy': find_heaviest_protein, 'light': find_lightest_protein} +FUNC_DICT_FOR_PAIR_RETURN = { + 'heavy': find_heaviest_protein, + 'light': find_lightest_protein} def process_seqs(option, seqs): From 7508ab33be169123cbdec6a6bfb5bf976a9866b9 Mon Sep 17 00:00:00 2001 From: Yury Popov Date: Sat, 30 Sep 2023 18:16:04 +0400 Subject: [PATCH 22/34] Add readme --- HW4_Petrikov/README.md | 43 ++++++++++++++++++++++++++++++++++++ HW4_Petrikov/images/pic.jpg | Bin 0 -> 188981 bytes 2 files changed, 43 insertions(+) create mode 100644 HW4_Petrikov/images/pic.jpg diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md index 6e60808..0fd808b 100644 --- a/HW4_Petrikov/README.md +++ b/HW4_Petrikov/README.md @@ -1,3 +1,46 @@ # ProtSeqO ## Tool for protein sequences operation +This tool can help you find some characteristics of protein sequence such as: +* find length of sequence; +* rewrite 1-letter sequence to 3-letter sequence; +* calculate isoelectric point; +* calculate the approximate total charge of sequence for given pH value; +* etc. + +## How use ProtSeqO +Execute script (you should be on directory with script): +```bash +python3 +>>> from ProtSeqO import process_seqs +>>>print(process_seqs(_command__, __sequence or list of sequences__)) +``` + +You can input to main function one as string or some as list of strings protein sequences. __Pay attention__ that your sequence(s) should contain only 1-letter symbols of aminoacids. + +## ProtSeqO accepts next options +* 'gravy' - this option calculate GRAVY (grand average of hydropathy) value of given amino acids sequence. +* 'iso' - calculate approximate isoelectric point of given amino acids sequence. +* 'rename' - transform 1-letter aminoacid symbols in sequence to 3-letter symbols separated by hyphens. +* 'lengths' - counts number of aminoacids in given sequence(s). +* 'weights' - calculate protein molecular weight using the average molecular weight of amino acid - 110 Da. +* 'heavy' - return the sequence(s) of the heaviest protein from list +* 'light' - return the sequence(s) of the lightest protein from list + +## ProtSeqO using examples +```python +python3 +>>> from ProtSeqO import process_seqs +>>> print(process_seqs('iso', ['ACGTWWA', 'ILATTWP'])) +### [5.8, 6.0] +``` + +## In case of problem - contact with us in GitHub +___Developers___: +* Petrikov Kirill +* Muradova Gulgaz +* Yury Popov + +![Developers](/images/pic.jpg "We are here") + + diff --git a/HW4_Petrikov/images/pic.jpg b/HW4_Petrikov/images/pic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b597cf25ace1b0cab2e07b2bef3a05b30ccc237f GIT binary patch literal 188981 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

Wq1;@$jkjyT4c+J03^(jO9Whh;}xnONE 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 Date: Sat, 30 Sep 2023 18:10:52 +0300 Subject: [PATCH 23/34] Change heaviest and lightest func& Add func for the same mass --- HW4_Petrikov/ProtSeqO.py | 41 ++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 2f9ecd8..0762d4c 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -137,26 +137,55 @@ def calc_protein_mass(seq: str) -> int: return len(seq) * 110 -def find_heaviest_protein(seqs: list): +def heaviest_protein(sequence: list): """ Return the sequence of the heaviest protein from list """ protein_mass = {} - list_of_protein = seqs + list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return f'{max(protein_mass.values())} - {max(protein_mass, key=(lambda k: protein_mass[k]))}' + return count_uniq_max_mass(protein_mass) +def count_uniq_max_mass(protein_mass): + """ + Count amount of proteins with the same maximum mass and return them + """ + max_weight = max(protein_mass.values()) + count_protein = 0 + proteins = [] + for i in protein_mass: + if protein_mass[i] == max_weight: + count_protein += 1 + if count_protein >=1: + proteins.append(i) + + return f'{proteins} - {max_weight}' -def find_lightest_protein(seqs: list): +def lightest_protein(sequence: list): """ Return the sequence of the lightest protein from list """ protein_mass = {} - list_of_protein = seqs + list_of_protein = sequence for i in list_of_protein: protein_mass[i] = calc_protein_mass(i) - return f'{min(protein_mass.values())} - {min(protein_mass, key=(lambda k: protein_mass[k]))}' + return count_uniq_min_mass(protein_mass) + +def count_uniq_min_mass(protein_mass): + """ + Count amount of proteins with the same minimum mass and return them + """ + min_weight = min(protein_mass.values()) + count_protein = 0 + proteins = [] + for i in protein_mass: + if protein_mass[i] == min_weight: + count_protein += 1 + if count_protein >=1: + proteins.append(i) + return f'{proteins} - {min_weight}' + def check_sequences(seqs: list): From 1e7eb301081a5c6e1bb4135886a52244ba0b6209 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Sat, 30 Sep 2023 20:47:45 +0300 Subject: [PATCH 24/34] Edit Code Style --- HW4_Petrikov/ProtSeqO.py | 50 +++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 0762d4c..1a53f45 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -55,30 +55,30 @@ def calc_gravy(seq: str) -> float: def calc_total_charge(charged_amino_ac_numbers_list: list, - pH_value: float) -> float: + ph_value: float) -> float: """ Calculate the approximate total charge of some amino acid sequence for given pH value based only on a list of the number of key charged amino acids. """ - N_terminal_charge = 1 / (1 + 10 ** (pH_value - 8.2)) - C_terminal_charge = -1 / (1 + 10 ** (3.65 - pH_value)) - Cys_charge = -charged_amino_ac_numbers_list[0] / (1 + 10 ** (8.18 - pH_value)) - Asp_charge = -charged_amino_ac_numbers_list[1] / (1 + 10 ** (3.9 - pH_value)) - Glu_charge = -charged_amino_ac_numbers_list[2] / (1 + 10 ** (4.07 - pH_value)) - Tyr_charge = -charged_amino_ac_numbers_list[3] / (1 + 10 ** (10.46 - pH_value)) - His_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (pH_value - 6.04)) - Lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (pH_value - 10.54)) - Arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (pH_value - 12.48)) - total_charge = (N_terminal_charge + - C_terminal_charge + - Cys_charge + - Asp_charge + - Glu_charge + - Tyr_charge + - His_charge + - Lys_charge + - Arg_charge) + n_terminal_charge = 1 / (1 + 10 ** (ph_value - 8.2)) + c_terminal_charge = -1 / (1 + 10 ** (3.65 - ph_value)) + cys_charge = -charged_amino_ac_numbers_list[0] / (1 + 10 ** (8.18 - ph_value)) + asp_charge = -charged_amino_ac_numbers_list[1] / (1 + 10 ** (3.9 - ph_value)) + glu_charge = -charged_amino_ac_numbers_list[2] / (1 + 10 ** (4.07 - ph_value)) + tyr_charge = -charged_amino_ac_numbers_list[3] / (1 + 10 ** (10.46 - ph_value)) + his_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (ph_value - 6.04)) + lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (ph_value - 10.54)) + arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (ph_value - 12.48)) + total_charge = (n_terminal_charge + + c_terminal_charge + + cys_charge + + asp_charge + + glu_charge + + tyr_charge + + his_charge + + lys_charge + + arg_charge) return total_charge @@ -90,13 +90,13 @@ def calc_iso_point(seq: str): for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): charged_amino_ac_numbers.append(seq.count(amino_ac)) total_charge_tmp = 1 - pH_iso_point = -0.1 + ph_iso_point = -0.1 while total_charge_tmp > 0: - pH_iso_point += 0.1 + ph_iso_point += 0.1 total_charge_tmp = calc_total_charge( charged_amino_ac_numbers, - pH_iso_point) - return round(pH_iso_point, 1) + ph_iso_point) + return round(ph_iso_point, 1) def transform_to_three_letters(seq: str) -> str: @@ -147,6 +147,7 @@ def heaviest_protein(sequence: list): protein_mass[i] = calc_protein_mass(i) return count_uniq_max_mass(protein_mass) + def count_uniq_max_mass(protein_mass): """ Count amount of proteins with the same maximum mass and return them @@ -162,6 +163,7 @@ def count_uniq_max_mass(protein_mass): return f'{proteins} - {max_weight}' + def lightest_protein(sequence: list): """ Return the sequence of the lightest protein from list @@ -172,6 +174,7 @@ def lightest_protein(sequence: list): protein_mass[i] = calc_protein_mass(i) return count_uniq_min_mass(protein_mass) + def count_uniq_min_mass(protein_mass): """ Count amount of proteins with the same minimum mass and return them @@ -187,7 +190,6 @@ def count_uniq_min_mass(protein_mass): return f'{proteins} - {min_weight}' - def check_sequences(seqs: list): """ Raise ValueError if at least one sequence From f1d37320b111412090ebdab20abf7ac885122718 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Sat, 30 Sep 2023 21:17:00 +0300 Subject: [PATCH 25/34] Remove longest_seq func --- HW4_Petrikov/ProtSeqO.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 1a53f45..3f203e8 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -119,16 +119,6 @@ def sequence_length(seq: str) -> int: return len(seq) -def longest_seq(seqs: list) -> str: - """ - Function returns longest protein sequence, - if there is only one sequence, function - returns it. - """ - seqs.sort(key=len, reverse=True) - return seqs[0] - - def calc_protein_mass(seq: str) -> int: """ Calculate protein molecular weight using the average From 5bcb364dafb24fa6510eb12eb948b2da06131d3a Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Sat, 30 Sep 2023 21:41:58 +0300 Subject: [PATCH 26/34] Edit Code Style --- HW4_Petrikov/ProtSeqO.py | 50 ++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 3f203e8..3e1e6aa 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -127,7 +127,7 @@ def calc_protein_mass(seq: str) -> int: return len(seq) * 110 -def heaviest_protein(sequence: list): +def find_heaviest_proteins(sequence: list): """ Return the sequence of the heaviest protein from list """ @@ -144,17 +144,17 @@ def count_uniq_max_mass(protein_mass): """ max_weight = max(protein_mass.values()) count_protein = 0 - proteins = [] + proteins = [] for i in protein_mass: if protein_mass[i] == max_weight: count_protein += 1 - if count_protein >=1: + if count_protein >= 1: proteins.append(i) - + return f'{proteins} - {max_weight}' -def lightest_protein(sequence: list): +def find_lightest_proteins(sequence: list): """ Return the sequence of the lightest protein from list """ @@ -171,11 +171,11 @@ def count_uniq_min_mass(protein_mass): """ min_weight = min(protein_mass.values()) count_protein = 0 - proteins = [] + proteins = [] for i in protein_mass: if protein_mass[i] == min_weight: count_protein += 1 - if count_protein >=1: + if count_protein >= 1: proteins.append(i) return f'{proteins} - {min_weight}' @@ -190,30 +190,46 @@ def check_sequences(seqs: list): raise ValueError("Enter valid protein sequence") -FUNC_DICT_FOR_LIST_RETURN = { +# Didn't place at the beginning because the functions are defined above +FUNC_STR_INPUT = { 'gravy': calc_gravy, 'iso': calc_iso_point, 'rename': transform_to_three_letters, 'lengths': sequence_length, - 'weights': calc_protein_mass} + 'molw': calc_protein_mass} -FUNC_DICT_FOR_PAIR_RETURN = { - 'heavy': find_heaviest_protein, - 'light': find_lightest_protein} +FUNC_LIST_INPUT = { + 'heavy': find_heaviest_proteins, + 'light': find_lightest_proteins} -def process_seqs(option, seqs): +def process_seqs(option: str, seqs: list): + """ + Perform some simple operations on amino acids sequences. + """ if isinstance(seqs, str): seq_tmp = seqs seqs = [seq_tmp] check_sequences(seqs) - if option in FUNC_DICT_FOR_LIST_RETURN.keys(): + if option in FUNC_STR_INPUT.keys(): results = [] for seq in seqs: - result_tmp = FUNC_DICT_FOR_LIST_RETURN[option](seq) + result_tmp = FUNC_STR_INPUT[option](seq) results.append(result_tmp) return results - elif option in FUNC_DICT_FOR_PAIR_RETURN.keys(): - return FUNC_DICT_FOR_PAIR_RETURN[option](seqs) + elif option in FUNC_LIST_INPUT.keys(): + return FUNC_LIST_INPUT[option](seqs) else: raise ValueError("Enter valid operation") + + +# test_var = "LKMFPSTWYVARNDCQEGHI" +test_var = ["LLLFPSTWYVARNDCQEGHI", "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] + +print(process_seqs("gravy", test_var)) +print(process_seqs("iso", test_var)) +print(process_seqs("rename", test_var)) +print(process_seqs("lengths", test_var)) +print(process_seqs("molw", test_var)) +print(process_seqs("heavy", test_var)) +print(process_seqs("light", test_var)) From d27cf98a3fd1714391407081a23b932ede39c94a Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Sat, 30 Sep 2023 21:52:52 +0300 Subject: [PATCH 27/34] Edit check_sequences func --- HW4_Petrikov/ProtSeqO.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 3e1e6aa..f353560 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -185,8 +185,10 @@ def check_sequences(seqs: list): Raise ValueError if at least one sequence contains non valid symbols """ + if not (isinstance(seqs, list)): + raise ValueError("Enter valid protein sequence") for seq in seqs: - if not (set(seq.upper()).issubset(VALID_SYMBOLS)): + if (not (isinstance(seq, str))) or (not (set(seq.upper()).issubset(VALID_SYMBOLS))): raise ValueError("Enter valid protein sequence") @@ -223,8 +225,10 @@ def process_seqs(option: str, seqs: list): raise ValueError("Enter valid operation") -# test_var = "LKMFPSTWYVARNDCQEGHI" test_var = ["LLLFPSTWYVARNDCQEGHI", "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] +# test_var = "LKMFPSTWYVARNDCQEGHI" +# test_var = 777 +# test_var = [777, "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] print(process_seqs("gravy", test_var)) print(process_seqs("iso", test_var)) @@ -233,3 +237,5 @@ def process_seqs(option: str, seqs: list): print(process_seqs("molw", test_var)) print(process_seqs("heavy", test_var)) print(process_seqs("light", test_var)) + +# print(process_seqs("what", test_var)) From b8c1c155016df508777541eb81fb2cbb321c3766 Mon Sep 17 00:00:00 2001 From: PKbioscience Date: Sat, 30 Sep 2023 23:43:14 +0300 Subject: [PATCH 28/34] Edit case sensitivity issue in process_seqs --- HW4_Petrikov/ProtSeqO.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index f353560..30e5a1a 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -216,7 +216,7 @@ def process_seqs(option: str, seqs: list): if option in FUNC_STR_INPUT.keys(): results = [] for seq in seqs: - result_tmp = FUNC_STR_INPUT[option](seq) + result_tmp = FUNC_STR_INPUT[option](seq.upper()) results.append(result_tmp) return results elif option in FUNC_LIST_INPUT.keys(): @@ -229,6 +229,7 @@ def process_seqs(option: str, seqs: list): # test_var = "LKMFPSTWYVARNDCQEGHI" # test_var = 777 # test_var = [777, "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] +# test_var = ["LKMFPSTWYVARNDCQEGHI"] print(process_seqs("gravy", test_var)) print(process_seqs("iso", test_var)) From 1f337dd8373501f8da9317fbfbba34878cb70077 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:46:39 +0300 Subject: [PATCH 29/34] Update README.md --- HW4_Petrikov/README.md | 43 +++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md index 0fd808b..9726488 100644 --- a/HW4_Petrikov/README.md +++ b/HW4_Petrikov/README.md @@ -1,31 +1,34 @@ # ProtSeqO -## Tool for protein sequences operation -This tool can help you find some characteristics of protein sequence such as: -* find length of sequence; -* rewrite 1-letter sequence to 3-letter sequence; -* calculate isoelectric point; -* calculate the approximate total charge of sequence for given pH value; -* etc. +## Tool for PROtein SEQuences Operation + +*This is the repo for the fourth homework of the BI Python 2023 course* + +This tool can perform some simple operations on amino acid sequences: +* help you calculate protein lengths, molecular weights, isoelectric points and GRAVY values +* find and show you heaviest and lightest proteins +* rewrite 1-letter sequence to 3-letter sequence ## How use ProtSeqO Execute script (you should be on directory with script): ```bash python3 >>> from ProtSeqO import process_seqs ->>>print(process_seqs(_command__, __sequence or list of sequences__)) +>>>print(process_seqs(__command__, __sequence or list of sequences__)) ``` -You can input to main function one as string or some as list of strings protein sequences. __Pay attention__ that your sequence(s) should contain only 1-letter symbols of aminoacids. +You can input to `process_seqs()` sequence as string or list with any strings of sequences. __Pay attention__ that your sequence(s) should contain 1-letter symbols (case does not matters) of 20 common amino acids ('U' for selenocysteine and 'O' for pyrrolysine doesn't allowed). + +Command must be a string with one of followed options. -## ProtSeqO accepts next options -* 'gravy' - this option calculate GRAVY (grand average of hydropathy) value of given amino acids sequence. -* 'iso' - calculate approximate isoelectric point of given amino acids sequence. -* 'rename' - transform 1-letter aminoacid symbols in sequence to 3-letter symbols separated by hyphens. -* 'lengths' - counts number of aminoacids in given sequence(s). -* 'weights' - calculate protein molecular weight using the average molecular weight of amino acid - 110 Da. -* 'heavy' - return the sequence(s) of the heaviest protein from list -* 'light' - return the sequence(s) of the lightest protein from list +## ProtSeqO options +* 'lengths' - return list with numbers of AA in each sequence(s) +* 'molw' - return list of protein molecular weight (use the average molecular weight of AA, 110 Da) +* 'iso' - return list of approximate isoelectric point of given amino acids sequence +* 'gravy' - return list of GRAVY (grand average of hydropathy) values +* 'rename' - return list of sequences in 3-letter AA code (AA separated by hyphens) +* 'heavy' - return the sequence(s) with maximum molecular weight and weigth value +* 'light' - return the sequence(s) with minimum molecular weight and weigth value ## ProtSeqO using examples ```python @@ -33,6 +36,12 @@ python3 >>> from ProtSeqO import process_seqs >>> print(process_seqs('iso', ['ACGTWWA', 'ILATTWP'])) ### [5.8, 6.0] +>>> print(process_seqs('gravy', 'ilattwp')) +### [0.886] +>>> print(process_seqs('rename', ['ACGTwwa'])) +### ['Ala-Cys-Gly-Thr-Trp-Trp-Ala'] +>>> print(process_seqs('heavy', ['ILATTWP'], ['ACGTwwa'])) +### ['ILATTWP', 'ACGTwwa'] - 770 ``` ## In case of problem - contact with us in GitHub From 47885a51e3611c17c8da2e9a275f3863184b3358 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:48:15 +0300 Subject: [PATCH 30/34] Delete HW4_Petrikov/Protein_suite.py --- HW4_Petrikov/Protein_suite.py | 48 ----------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 HW4_Petrikov/Protein_suite.py diff --git a/HW4_Petrikov/Protein_suite.py b/HW4_Petrikov/Protein_suite.py deleted file mode 100644 index 3254d54..0000000 --- a/HW4_Petrikov/Protein_suite.py +++ /dev/null @@ -1,48 +0,0 @@ -AMINOACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', - 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', - 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} - -GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, - 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, - 'H': -3.2, 'I': 4.5} - - -def calc_gravy(amino_ac_seq: str) -> float: - """ - Calculate GRAVY (grand average of hydropathy) value - for entered amino acids sequence - """ - gravy_aa_sum = 0 - for amino_ac in amino_ac_seq: - gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] - return round(gravy_aa_sum / len(amino_ac_seq), 3) - - -def transform_to_three_letter(sequence: str) -> str: - ''' - Transform 1-letter aminoacid symbols in - sequence to 3-letter symbols separated by - hyphens. - ''' - new_protein = '' - for aminoacid in sequence: - new_protein += AMINOACIDS_NAMES[aminoacid] + '-' - return new_protein[:-1] - - -def sequence_length(sequence: str) -> int: - ''' - Function counts number of aminoacids in - inputed sequence - ''' - return len(sequence) - - -def longest_sequence(sequences: list) -> str: - ''' - Function returns longest protein sequence, - if there is only one sequence, function - returns it. - ''' - sequences.sort(key=len, reverse=True) - return sequences[0] From bb3afeeebf63343f4420e36c77883849bc62768f Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:48:33 +0300 Subject: [PATCH 31/34] Delete HW4_Petrikov/ProSeqO.py --- HW4_Petrikov/ProSeqO.py | 113 ---------------------------------------- 1 file changed, 113 deletions(-) delete mode 100644 HW4_Petrikov/ProSeqO.py diff --git a/HW4_Petrikov/ProSeqO.py b/HW4_Petrikov/ProSeqO.py deleted file mode 100644 index a389047..0000000 --- a/HW4_Petrikov/ProSeqO.py +++ /dev/null @@ -1,113 +0,0 @@ -AMINO_ACIDS_NAMES = {'A': 'Ala', 'R': 'Arg', 'N': 'Asn', 'D': 'Asp', 'V': 'Val', 'H': 'His', 'G': 'Gly', 'Q': 'Gln', - 'E': 'Glu', 'I': 'Ile', 'L': 'Leu', 'K': 'Lys', 'M': 'Met', 'P': 'Pro', 'S': 'Ser', 'Y': 'Tyr', - 'T': 'Thr', 'W': 'Trp', 'F': 'Phe', 'C': 'Cys'} - -GRAVY_AA_VALUES = {'L': 3.8, 'K': -3.9, 'M': 1.9, 'F': 2.8, 'P': -1.6, 'S': -0.8, 'T': -0.7, 'W': -0.9, 'Y': -1.3, - 'V': 4.2, 'A': 1.8, 'R': -4.5, 'N': -3.5, 'D': -3.5, 'C': 2.5, 'Q': -3.5, 'E': -3.5, 'G': -0.4, - 'H': -3.2, 'I': 4.5} - - -def calc_gravy(amino_ac_seq: str) -> float: - """ - Calculate GRAVY (grand average of hydropathy) value - of given amino acids sequence - """ - gravy_aa_sum = 0 - for amino_ac in amino_ac_seq: - gravy_aa_sum += GRAVY_AA_VALUES[amino_ac] - return round(gravy_aa_sum / len(amino_ac_seq), 3) - - -def calc_total_charge(charged_amino_ac_numbers_list: list, pH_value: float) -> float: - """ - Calculate the approximate total charge of some amino acid sequence - for given pH value - based only on a list of the number of key charged amino acids. - """ - N_terminal_charge = 1 / (1 + 10 ** (pH_value - 8.2)) - C_terminal_charge = -1 / (1 + 10 ** (3.65 - pH_value)) - Cys_charge = -charged_amino_ac_numbers_list[0] / (1 + 10 ** (8.18 - pH_value)) - Asp_charge = -charged_amino_ac_numbers_list[1] / (1 + 10 ** (3.9 - pH_value)) - Glu_charge = -charged_amino_ac_numbers_list[2] / (1 + 10 ** (4.07 - pH_value)) - Tyr_charge = -charged_amino_ac_numbers_list[3] / (1 + 10 ** (10.46 - pH_value)) - His_charge = charged_amino_ac_numbers_list[4] / (1 + 10 ** (pH_value - 6.04)) - Lys_charge = charged_amino_ac_numbers_list[5] / (1 + 10 ** (pH_value - 10.54)) - Arg_charge = charged_amino_ac_numbers_list[6] / (1 + 10 ** (pH_value - 12.48)) - total_charge = (N_terminal_charge + C_terminal_charge + Cys_charge + Asp_charge + Glu_charge + Tyr_charge + - His_charge + Lys_charge + Arg_charge) - return total_charge - - -def calc_iso_point(amino_ac_seq): - """ - Calculate approximate isoelectric point of given amino acids sequence - """ - charged_amino_ac_numbers = [] - for amino_ac in ("C", "D", "E", "Y", "H", "K", "R"): - charged_amino_ac_numbers.append(amino_ac_seq.count(amino_ac)) - print(charged_amino_ac_numbers) - total_charge_tmp = 1 - pH_iso_point = -0.1 - while total_charge_tmp > 0: - pH_iso_point += 0.1 - total_charge_tmp = calc_total_charge(charged_amino_ac_numbers, pH_iso_point) - return round(pH_iso_point, 1) - - -def transform_to_three_letter(sequence: str) -> str: - """ - Transform 1-letter aminoacid symbols in - sequence to 3-letter symbols separated by - hyphens. - """ - new_protein = '' - for aminoacid in sequence: - new_protein += AMINO_ACIDS_NAMES[aminoacid] + '-' - return new_protein[:-1] - - -def sequence_length(sequence: str) -> int: - """ - Function counts number of aminoacids in - given sequence - """ - return len(sequence) - - -def longest_sequence(sequences: list) -> str: - """ - Function returns longest protein sequence, - if there is only one sequence, function - returns it. - """ - sequences.sort(key = len, reverse = True) - return sequences[0] - -def calc_protein_mass(sequence: str) -> int: - """ - Calculate protein molecular weight using the average - molecular weight of amino acid - 110 Da - """ - return len(sequence) * 110 - - -def heaviest_protein(sequence: list): - """ - Return the sequence of the heaviest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return f'{max(protein_mass, key=(lambda k:protein_mass[k]))} - {max(protein_mass.values())}' - - -def lightest_protein(sequence: list): - """ - Return the sequence of the lightest protein from list - """ - protein_mass = {} - list_of_protein = sequence - for i in list_of_protein: - protein_mass[i] = calc_protein_mass(i) - return f'{min(protein_mass, key=(lambda k:protein_mass[k]))} - {min(protein_mass.values())}' From a278f9b4d3e6d93c5193bbc5a62720f3d8bd251c Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:49:12 +0300 Subject: [PATCH 32/34] Delete .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index eb6ee92e6da3ceb652cb9dd77c6e6161dff2d937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKK~LK-6n-vcBx93$U=o)}k#=RQ1GWk6l66Ib!=#CzaTus;NVG+SxN1{+s4C^W z{g_?(CH$T3d$yS6XFOU!L)j!4%{f8Hi z20h0+i+g!CD4Wf5Rhz5NKU(k>yhZOY`k_Zr*)4~IR=59^YkOMf@kQK?zhvpC(^&eb zi?W*)Y2OgCBt^=>epV!U)Y8Ku85nM4J3Qa>JB{V>_{~~#C0JX3H(3eBn;dVfznx5c z@7ar2?{_=L`AMOFni-J7x;6IH;RXCcaHB4#QNPG_@f|tLe@s2B`IKJL5otQXlTmp^ zyWhyWtesE0v;{@m^a;2MPBP6<&#y306%z$S0a4(V6mWZ=w|GnA$uOdTDDZF;;Qb+h zGlmW;i)QOUVXgqcI+~3k=3hnT1P()ol|}Txl%)bKRkH~@wYD~o7>$&Y}MK?+geP8IkIuXJ|t From 76b32f84748756e5bb7ab1522f35aa425a365742 Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:56:09 +0300 Subject: [PATCH 33/34] Update README.md --- HW4_Petrikov/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HW4_Petrikov/README.md b/HW4_Petrikov/README.md index 9726488..ab67c3b 100644 --- a/HW4_Petrikov/README.md +++ b/HW4_Petrikov/README.md @@ -50,6 +50,6 @@ ___Developers___: * Muradova Gulgaz * Yury Popov -![Developers](/images/pic.jpg "We are here") +![Developers](https://github.com/KirPetrikov/HW4_Functions2/blob/HW4_Petrikov/HW4_Petrikov/images/pic.jpg "We are here") From 5891ff1f375384a9b66699683c539864e038f08c Mon Sep 17 00:00:00 2001 From: Kirill Petrikov <114873274+KirPetrikov@users.noreply.github.com> Date: Sat, 30 Sep 2023 23:57:18 +0300 Subject: [PATCH 34/34] Update ProtSeqO.py - remove test lines --- HW4_Petrikov/ProtSeqO.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/HW4_Petrikov/ProtSeqO.py b/HW4_Petrikov/ProtSeqO.py index 30e5a1a..2f3c80d 100644 --- a/HW4_Petrikov/ProtSeqO.py +++ b/HW4_Petrikov/ProtSeqO.py @@ -223,20 +223,3 @@ def process_seqs(option: str, seqs: list): return FUNC_LIST_INPUT[option](seqs) else: raise ValueError("Enter valid operation") - - -test_var = ["LLLFPSTWYVARNDCQEGHI", "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] -# test_var = "LKMFPSTWYVARNDCQEGHI" -# test_var = 777 -# test_var = [777, "LKMFPSTWYVARNDCQEGHI", "AWIGIAWMFST", "CCCCCDEYHKRRRRR", "EEEEIAWMFST"] -# test_var = ["LKMFPSTWYVARNDCQEGHI"] - -print(process_seqs("gravy", test_var)) -print(process_seqs("iso", test_var)) -print(process_seqs("rename", test_var)) -print(process_seqs("lengths", test_var)) -print(process_seqs("molw", test_var)) -print(process_seqs("heavy", test_var)) -print(process_seqs("light", test_var)) - -# print(process_seqs("what", test_var))