From 51f155114db6bf1d3d8a0c88424ff9bd4e705581 Mon Sep 17 00:00:00 2001 From: lsmertina Date: Thu, 28 Sep 2023 21:30:53 +1000 Subject: [PATCH 01/19] Create a file for the script --- HW4_Smertina/run_protein_tool.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 HW4_Smertina/run_protein_tool.py diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py new file mode 100644 index 0000000..e69de29 From 2483049851237689f585f4db40462bd20ce6473b Mon Sep 17 00:00:00 2001 From: lsmertina Date: Thu, 28 Sep 2023 21:32:39 +1000 Subject: [PATCH 02/19] Add check_protein_seq function --- HW4_Smertina/run_protein_tool.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index e69de29..ec5ba16 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -0,0 +1,20 @@ +def check_protein_seq(seq: str) -> str: + + """ + Checks whether a sequence is written using 1-letter amino acid code + + Arguments: + -seq (str) input protein sequence + Return: + - str, 'single_letter_prot_seq' otherwise 'Invalid Input' error is raised + + """ + unique_chars = set(seq) + single_letter = set('GALMFWKQESPVICYHRNDTgalmfwkqespvicyhrndt') + + if unique_chars <= single_letter: + seq = 'single_letter_prot_seq' + + else: + raise ValueError("Invalid Input") + return seq From cbfd5427b61c34f00242ca99746d17210fa372f1 Mon Sep 17 00:00:00 2001 From: lsmertina Date: Thu, 28 Sep 2023 21:33:39 +1000 Subject: [PATCH 03/19] Add molecular_weight function --- HW4_Smertina/run_protein_tool.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index ec5ba16..3ca3539 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -18,3 +18,27 @@ def check_protein_seq(seq: str) -> str: else: raise ValueError("Invalid Input") return seq + +def molecular_weight(seq: str) -> int: + + """ + Calculates molecular weight of a protein + + Arguments: + - seq (str) 1-letter coded protein sequence + Return: + - int, molecular weight (g/mol) rounded to integer + + """ + if check_protein_seq(seq) == 'single_letter_prot_seq': + list_input_seq = list(seq) + aa_weight_dict = {'G':75, 'g':75, 'A':89, 'a':89, 'R':174, 'r':174, 'N':132, 'n':132, + 'D':133, 'd':133, 'C':121, 'c':133, 'E':147, 'e':147, 'Q':146, 'q':146, + 'H':155, 'h':155, 'I':131, 'i':131, 'L':131, 'l':131, 'K':146, 'k':146, + 'M':149, 'm':149, 'F':165, 'f':165, 'P':115, 'p':115, 'S':105, 's':105, + 'T':119, 't':119, 'W':204, 'w':204, 'Y':181, 'y':181, 'V':117, 'v':117} + water_mw = 18 + for aa in list_input_seq: + total_mw = sum(aa_weight_dict[a] for a in list_input_seq) + mw_water_removed = (total_mw - (water_mw * (len(list_input_seq)-1))) + return mw_water_removed From 698c370277defb0d581fb50d95bb8cb397622201 Mon Sep 17 00:00:00 2001 From: lsmertina Date: Thu, 28 Sep 2023 21:34:33 +1000 Subject: [PATCH 04/19] Add one_to_three_letter function --- HW4_Smertina/run_protein_tool.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index 3ca3539..545594e 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -42,3 +42,25 @@ def molecular_weight(seq: str) -> int: total_mw = sum(aa_weight_dict[a] for a in list_input_seq) mw_water_removed = (total_mw - (water_mw * (len(list_input_seq)-1))) return mw_water_removed +def one_to_three_letter(seq: str) -> str: + + """ + Converts a 1-letter amino acid code sequence into a 3-letter sequence + + Arguments: + - seq (str) sequence to convert, must be 1-letter coded protein sequence + Return: + - str, a 3-letter coded protein sequence without spaces + + """ + if check_protein_seq(seq) == 'single_letter_prot_seq': + aa_code_dict = {'C':'Cys', 'c':'Cys', 'D':'Asp', 'd':'Asp', 'S':'Ser', 's':'Ser', 'Q':'Gln', 'q':'Gln', + 'K':'Lys', 'k':'Lys', 'I':'Ile', 'i':'Ile', 'P':'Pro', 'p':'Pro', 'T':'Thr', 't':'Thr', + 'F':'Phe', 'f':'Phe', 'N':'Asn', 'n':'Asn', 'G':'Gly', 'g':'Gly', 'H':'His', 'h':'His', + 'L':'Leu', 'l':'Leu', 'R':'Arg', 'r':'Arg', 'W':'Trp', 'w':'Trp', 'A':'Ala', 'a':'Ala', + 'V':'Val', 'v':'Val', 'E':'Glu', 'e':'Glu', 'Y':'Tyr', 'y':'Tyr', 'M':'Met', 'm':'Met'} + + three_letter_aa = '' + for aa in seq: + three_letter_aa += aa_code_dict[aa] + return three_letter_aa From 441736f6a3678fe55715ae5b4464469d3dfe01d1 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Thu, 28 Sep 2023 21:59:23 +1000 Subject: [PATCH 05/19] Update README.md --- README.md | 93 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index f918170..19627d1 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,78 @@ -# HW 4. Functions 2 -> *This is the repo for the fourth homework of the BI Python 2023 course* +# run_protein_tool -### Homework description +```run_protein_tool``` includes a set of commands that perform various operations with protein or peptide sequences of any length. The input sequence(s) must be written +using _1-letter_ amino acid code and can contain any of the following 20 amino acids: +![aacids](https://github.com/sme229/HW4_Functions2/assets/104040609/64d36f81-ad0a-45d8-8d76-591073d7b7e1) -На прошлой неделе вы делали утилиту для работы с последовательностями нуклеиновых кислот (с весьма строгим ТЗ). Пришло время для чего-то более самостоятельного. +The following functions are implemented: -#### Основное задание +1. ```molecular_weight``` This function takes 1-letter coded protein sequence(s) (string) and calculates molecular weight rounded to integer. The function is not case-sensitive. +Usage examples: +``` +run_protein_tool('peptide', molecular_weight) +799 +``` +``` +run_protein_tool('pEpTiDe', molecular_weight) +799 +``` +2. ```one_to_three_letter``` This function takes 1-letter coded protein sequence(s) (string) and returns a 3-letter coded sequence(s) without spaces (string). Usage examples: +``` +run_protein_tool('PEPTIDE', one_to_three_letter) +'ProGluProThrIleAspGlu' +``` +``` +run_protein_tool('p', 'peptide', one_to_three_letter) +'Pro', 'ProGluProThrIleAspGlu' +``` +3. ```amino_acid_frequency``` This function takes 1-letter coded protein sequence(s) (string), calculates frequency for each unique amino acid and creates a dictionary +with amino acids as keys and corresponding frequencies as values. Usage example: +``` +run_protein_tool('MADSEQNQEEAGGGEQREH') +{'M': 5.26, +'A': 10.53, +'D': 5.26, +'S': 5.26, +'E': 26.32, +'Q': 15.79, +'N': 5.26, +'G': 15.79, +'R': 5.26, +'H': 5.26} +``` +4. ```find_motifs``` This function takes two string arguments: 1-letter coded protein sequence(s) and a motif of interest, where motif is any sequence which occurence +will be searched for in the input protein sequence(s). The function returns position(s) of the motif. Usage example: -Напишите утилиту для работы с последовательностями белков. Там должно быть минимум 5 различных операций, должна быть какая-то точка входа через которую пользователь будет всё это дело использовать. На этом, по сути, всё. Всё целиком зависит от вашей фантазии и креативности. Можете опираться на ДЗ №2 и №3. +``` +find_motifs('MADSEQNQEEAGGGEQREH', 'GG') +[12, 13] +``` +# Troubleshooting -Самая главная часть задания - это файл `README.md`. Сделайте краткое введение, напишите описание тула, приведите документацию по использованию со списком аргументов. Добавьте примеры использования. Возможно, вы захотите сделать секцию Troubleshooting. ***Почему это нужно?*** В этот раз проверяющий не будет знать того, как должен работать ваш тул. Это ваш авторский код. Даже самая прекрасная функциональность, не будучи отраженной в README, скорее всего останется незамеченной. README - это ваш способ познакомить пользователя с тулом, показать всё лучше и обосновать, почему именно ваша команда должна получить наивысший балл. +Please make sure that your input sequence(s) is written using the **1-letter** amino acid code as shown in the examples. A sequence containing letters that +do not correspond to one of the 20 amino acids from the table above will result in 'Invalid Input' error. -Есть люди которые, любят писать документации, а есть те - кто не любит. Найдите в вашей команде того, кто любит. И в будущем в своих рабочих проектах всегда держите рядом такого человек (или будьте им). +# Contributors -Примеры некоторых README, которыми можно вдохновляться: +Elena Smertina implemented molecular_weight and one_to_three_letter functions +Natalia Erofeeva implemented amino_acid_frequency and find_motifs functions -- [MetaFX](https://github.com/ctlab/metafx), тул Артёма Иванова. Там еще и [wiki](https://github.com/ctlab/metafx/wiki) крутое. -- [samovar](https://github.com/nvaulin/samovar) -- [MetaGEM](https://github.com/franciscozorrilla/metaGEM) -- [Pharokka](https://github.com/gbouras13/pharokka) -Типовые секции, на которые стоит обратить внимание: Title, Overview, Usage, Options, Examples, Troubleshooting, Contacts. -**Tехническое требование к заданию.** -Это задание будет выполняться в командах по 3 человека. Каждый из членов команды должен внести ***как минимум*** 2 функции. Каждое внесение функции должно сопровождаться коммитом с осмысленным описанием коммита. Ниже приведена последовательность действий для успешного выполнения задания (аналогично ДЗ №2): -1. Посмотрите состав своей команды здесь ([**ССЫЛКА**](https://docs.google.com/spreadsheets/d/1KMBBBu8LqauRpDJb0v1ldPwpvzNn8-KakcHexAcqLsE/edit?usp=sharing)). -2. Тимлид делает форк данного репозитория. **В форке создает ветку `HW4_`, в ветке создает папку `HW4_`, в этой папке вы всё делаете.** -3. Члены команды могут либо делать свои форки, либо работать в репозитории тимлида в качестве колабораторов ("contributors"). В любом случае делаете клоны => пишите код локально => пушите. -4. В конце тимлид делайет pull-request из `HW4_` своего репозитория в `main` этого. -А также: -- Сопроводите программу лучшим `README.md` файлом в вашей жизни (на английском языке). -- В этом ДЗ проблемы с качеством кода (нейминги, пустые строки, анноатции типов, док.стринги, пробелы) могут привести к снижению балла. Воспользуйтесь линтерами чтобы себя обезопасить. IDE по типу PyCharm или VSCode имеют фунцонал по авто-исправлению многих проблем такого рода. -Автотестов на GitHub в этом ДЗ нет, но вы можете прогнать линтеры на качество кода локально (как в ДЗ №3, подробнее читайте [тут](https://plausible-cannon-091.notion.site/Code-auto-checks-02b2ea69c1d545fca07b50ce5933ed5f?pvs=4)). -- Программа должна сохранять регистр символов. -- Программа должна работать только с последовательностями белков. -- Запрещается использование сторонних модулей. -### Форма сдачи + -Прикрепите ссылку на pull-request тимлида в Google Class (можете сделать от лица каждого члена команды, но это не обязательно). -### Pазбалловка -- За каждую из 5 операций - максимум **1.5 балла** -- За README - максимум **2.5 балла** -- Если вы не внесли как минимум 2 функции от себя, вы получаете 0 баллов (на баллы остальных членов команды это не влияет). -- За фото созвона в README можно получить 0.2 доп. балла (но не более 10 баллов суммарно) - -### **Предполагаемый учебный результат** - -Это задание позволит вам проявить креативность и учиться быть не только кодером, но и автором. Также это задание поможет окончательно закрепить материал по функциям который мы прошли. - -Удачи! ✨✨ + From d4019d850cb26ee627b80793d77a3b5eba47b477 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Thu, 28 Sep 2023 22:01:42 +1000 Subject: [PATCH 06/19] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 19627d1..72999e7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # run_protein_tool ```run_protein_tool``` includes a set of commands that perform various operations with protein or peptide sequences of any length. The input sequence(s) must be written -using _1-letter_ amino acid code and can contain any of the following 20 amino acids: -![aacids](https://github.com/sme229/HW4_Functions2/assets/104040609/64d36f81-ad0a-45d8-8d76-591073d7b7e1) +using 1-letter amino acid code and can contain any of the following 20 amino acids: +![aacids](https://github.com/sme229/HW4_Functions2/assets/104040609/825a697f-5562-4829-9771-01e3b519bdee) + The following functions are implemented: From 97c225277fa08f4b0d114a98eaeb6ecb3046704f Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Thu, 28 Sep 2023 22:04:32 +1000 Subject: [PATCH 07/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72999e7..0fe1245 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ do not correspond to one of the 20 amino acids from the table above will result # Contributors -Elena Smertina implemented molecular_weight and one_to_three_letter functions +Elena Smertina implemented molecular_weight and one_to_three_letter functions Natalia Erofeeva implemented amino_acid_frequency and find_motifs functions From 4d0e0dd78d92daa691327ae5e941de51d73fccd5 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Thu, 28 Sep 2023 22:05:01 +1000 Subject: [PATCH 08/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0fe1245..7ac99c6 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ run_protein_tool('PEPTIDE', one_to_three_letter) ``` ``` run_protein_tool('p', 'peptide', one_to_three_letter) -'Pro', 'ProGluProThrIleAspGlu' +['Pro', 'ProGluProThrIleAspGlu'] ``` 3. ```amino_acid_frequency``` This function takes 1-letter coded protein sequence(s) (string), calculates frequency for each unique amino acid and creates a dictionary with amino acids as keys and corresponding frequencies as values. Usage example: From e79ab642877d30b5d8294d0504aaedaf4a93e50c Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Fri, 29 Sep 2023 06:59:05 +1000 Subject: [PATCH 09/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ac99c6..879dce6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ using 1-letter amino acid code and can contain any of the following 20 amino aci The following functions are implemented: -1. ```molecular_weight``` This function takes 1-letter coded protein sequence(s) (string) and calculates molecular weight rounded to integer. The function is not case-sensitive. +1. ```molecular_weight``` This function takes 1-letter coded protein sequence(s) (string) and calculates molecular weight rounded to integer in g/mol. The function is not case-sensitive. Usage examples: ``` run_protein_tool('peptide', molecular_weight) From 6ccedeec009cc25440407f9b1310cfe4ec524c0a Mon Sep 17 00:00:00 2001 From: nerofeeva2001 Date: Fri, 29 Sep 2023 00:09:43 +0300 Subject: [PATCH 10/19] add 2 functions --- HW4_Smertina/run_protein_tool.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index 545594e..01d5914 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -1,3 +1,28 @@ +# Функция для подсчета частоты аминокислот в белке +def amino_acid_frequency(seq): + # Словарь для хранения частоты аминокислот + freq_dict = {} + # Подсчитываем количество каждой аминокислоты в последовательности + for letter in seq: + if letter in freq_dict: + freq_dict[letter] += 1 + else: + freq_dict[letter] = 1 + # Преобразуем количество в проценты + for letter in freq_dict: + freq_dict[letter] = round(freq_dict[letter] / len(seq) * 100, 2) + return freq_dict +# Функция для поиска мотивов в белке +def find_motifs(seq, motif): + # Список для хранения позиций мотивов в последовательности + positions = [] + # Ищем мотив в последовательности с помощью скользящего окна + for i in range(len(seq) - len(motif) + 1): + window = seq[i:i+len(motif)] + if window == motif: + positions.append(i+1) + return positions + def check_protein_seq(seq: str) -> str: """ From f5271728d1b8438c6397b9cdbe8cb0f2c6a27b51 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Fri, 29 Sep 2023 07:31:18 +1000 Subject: [PATCH 11/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 879dce6..e572b9e 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ do not correspond to one of the 20 amino acids from the table above will result # Contributors -Elena Smertina implemented molecular_weight and one_to_three_letter functions +Elena Smertina implemented check_protein_seq, molecular_weight and one_to_three_letter functions Natalia Erofeeva implemented amino_acid_frequency and find_motifs functions From a4e47b46f1924af9f577d3e7a8748ba5d217d8a0 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Fri, 29 Sep 2023 21:44:10 +1000 Subject: [PATCH 12/19] Update README.md --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e572b9e..d55bfe4 100644 --- a/README.md +++ b/README.md @@ -2,35 +2,35 @@ ```run_protein_tool``` includes a set of commands that perform various operations with protein or peptide sequences of any length. The input sequence(s) must be written using 1-letter amino acid code and can contain any of the following 20 amino acids: -![aacids](https://github.com/sme229/HW4_Functions2/assets/104040609/825a697f-5562-4829-9771-01e3b519bdee) +![aacids](https://github.com/sme229/HW4_Functions2/assets/104040609/825a697f-5562-4829-9771-01e3b519bdee) The following functions are implemented: 1. ```molecular_weight``` This function takes 1-letter coded protein sequence(s) (string) and calculates molecular weight rounded to integer in g/mol. The function is not case-sensitive. Usage examples: ``` -run_protein_tool('peptide', molecular_weight) +run_protein_tool('peptide', function='molecular_weight') 799 ``` ``` -run_protein_tool('pEpTiDe', molecular_weight) +run_protein_tool('pEpTiDe', function='molecular_weight') 799 ``` 2. ```one_to_three_letter``` This function takes 1-letter coded protein sequence(s) (string) and returns a 3-letter coded sequence(s) without spaces (string). Usage examples: ``` -run_protein_tool('PEPTIDE', one_to_three_letter) +run_protein_tool('PEPTIDE', function='one_to_three_letter') 'ProGluProThrIleAspGlu' ``` ``` -run_protein_tool('p', 'peptide', one_to_three_letter) +run_protein_tool('p', 'peptide', function='one_to_three_letter') ['Pro', 'ProGluProThrIleAspGlu'] ``` 3. ```amino_acid_frequency``` This function takes 1-letter coded protein sequence(s) (string), calculates frequency for each unique amino acid and creates a dictionary with amino acids as keys and corresponding frequencies as values. Usage example: ``` -run_protein_tool('MADSEQNQEEAGGGEQREH') +run_protein_tool('MADSEQNQEEAGGGEQREH', function='amino_acid_frequency') {'M': 5.26, 'A': 10.53, 'D': 5.26, @@ -46,13 +46,14 @@ run_protein_tool('MADSEQNQEEAGGGEQREH') will be searched for in the input protein sequence(s). The function returns position(s) of the motif. Usage example: ``` -find_motifs('MADSEQNQEEAGGGEQREH', 'GG') +find_motifs('MADSEQNQEEAGGGEQREH', function='find_motifs', motif='GG') [12, 13] ``` # Troubleshooting Please make sure that your input sequence(s) is written using the **1-letter** amino acid code as shown in the examples. A sequence containing letters that -do not correspond to one of the 20 amino acids from the table above will result in 'Invalid Input' error. +do not correspond to one of the 20 amino acids from the table above will result in 'Invalid Input' error. Please note that function ```find_motifs``` also requires the motif +of interest as input after the function name. # Contributors From c5eee6b7179e87ed2d2c557beeb6dc4791bc0494 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Fri, 29 Sep 2023 21:45:45 +1000 Subject: [PATCH 13/19] Update README.md From 2a603f0c9e8ce1be48c795b20e03e43dd499138c Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Fri, 29 Sep 2023 21:51:31 +1000 Subject: [PATCH 14/19] Update run_protein_tool.py Add run_protein_tool function --- HW4_Smertina/run_protein_tool.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index 01d5914..fdfe124 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -89,3 +89,27 @@ def one_to_three_letter(seq: str) -> str: for aa in seq: three_letter_aa += aa_code_dict[aa] return three_letter_aa + +from typing import Optional +def run_protein_tool(*args: str, function: str, motif: Optional[str]=None): + results = [] + for seq in args: + if check_protein_seq(seq) == 'single_letter_prot_seq': + if function == 'check_protein_seq': + for seq in args: + results.append(check_protein_seq(seq)) + elif function == 'molecular_weight': + for seq in args: + results.append(molecular_weight(seq)) + elif function == 'one_to_three_letter': + for seq in args: + results.append(one_to_three_letter(seq)) + elif function == 'amino_acid_frequency': + for seq in args: + results.append(amino_acid_frequency(seq)) + elif function == 'find_motifs': + for seq in args: + results.append(find_motifs(seq, motif)) + if len(results) == 1: + results = results[0] + return results From 10a03ce5c341953b77c2b8700b941d588babff60 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Sat, 30 Sep 2023 08:21:33 +1000 Subject: [PATCH 15/19] Update run_protein_tool.py --- HW4_Smertina/run_protein_tool.py | 38 +++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index fdfe124..4ebcb09 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -1,5 +1,15 @@ -# Функция для подсчета частоты аминокислот в белке -def amino_acid_frequency(seq): +def amino_acid_frequency(seq: str) -> dict: + + """ + Calculates amino acid frequencies + + Arguments: + -seq (str) input protein sequence + Return: + -dictionary with amino acid and its frequency + + """ + # Словарь для хранения частоты аминокислот freq_dict = {} # Подсчитываем количество каждой аминокислоты в последовательности @@ -12,8 +22,19 @@ def amino_acid_frequency(seq): for letter in freq_dict: freq_dict[letter] = round(freq_dict[letter] / len(seq) * 100, 2) return freq_dict + # Функция для поиска мотивов в белке -def find_motifs(seq, motif): +def find_motifs(seq: str, motif: str): + + """ + Finds a motif of interest in a protein sequence + Arguments: + -seq (str) input protein sequence + -motif (str) motif to be found in sequence + Return: + -position(s) of the motif in seq + + """ # Список для хранения позиций мотивов в последовательности positions = [] # Ищем мотив в последовательности с помощью скользящего окна @@ -92,6 +113,17 @@ def one_to_three_letter(seq: str) -> str: from typing import Optional def run_protein_tool(*args: str, function: str, motif: Optional[str]=None): + + """ + This is the main function + Arguments: + -seq(str) protein sequence(s) + -function(str) specify the function + -motif(str), optional argument for find_motifs function + Return: + -result of the specified function + + """ results = [] for seq in args: if check_protein_seq(seq) == 'single_letter_prot_seq': From fcbd0398f5fd1b9aa8584e28c85649d00e12c696 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Sat, 30 Sep 2023 08:23:21 +1000 Subject: [PATCH 16/19] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d55bfe4..cfc1235 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,8 @@ of interest as input after the function name. # Contributors -Elena Smertina implemented check_protein_seq, molecular_weight and one_to_three_letter functions -Natalia Erofeeva implemented amino_acid_frequency and find_motifs functions +Elena Smertina implemented check_protein_seq, molecular_weight, one_to_three_letter and run_protein_tool functions; +Natalia Erofeeva implemented amino_acid_frequency and find_motifs functions. From 5ee430485cbd01588bdae3adb443f5aca94115c5 Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Sat, 30 Sep 2023 20:35:35 +1000 Subject: [PATCH 17/19] Update run_protein_tool.py Update the main function --- HW4_Smertina/run_protein_tool.py | 34 ++++++++++++++------------------ 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index 4ebcb09..d662104 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -126,22 +126,18 @@ def run_protein_tool(*args: str, function: str, motif: Optional[str]=None): """ results = [] for seq in args: - if check_protein_seq(seq) == 'single_letter_prot_seq': - if function == 'check_protein_seq': - for seq in args: - results.append(check_protein_seq(seq)) - elif function == 'molecular_weight': - for seq in args: - results.append(molecular_weight(seq)) - elif function == 'one_to_three_letter': - for seq in args: - results.append(one_to_three_letter(seq)) - elif function == 'amino_acid_frequency': - for seq in args: - results.append(amino_acid_frequency(seq)) - elif function == 'find_motifs': - for seq in args: - results.append(find_motifs(seq, motif)) - if len(results) == 1: - results = results[0] - return results + check_protein_seq(seq) + if function == 'check_protein_seq': + results.append(check_protein_seq(seq)) + elif function == 'molecular_weight': + results.append(molecular_weight(seq)) + elif function == 'one_to_three_letter': + results.append(one_to_three_letter(seq)) + elif function == 'amino_acid_frequency': + results.append(amino_acid_frequency(seq)) + elif function == 'find_motifs': + results.append(find_motifs(seq, motif)) + if len(results) == 1: + results = results[0] + return results + From f3dceb41d428de52e373e6ccbdaca11edcda0efb Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Sat, 30 Sep 2023 20:38:57 +1000 Subject: [PATCH 18/19] Update README.md Add more details about find_motifs function --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cfc1235..eccd891 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,8 @@ run_protein_tool('MADSEQNQEEAGGGEQREH', function='amino_acid_frequency') 'H': 5.26} ``` 4. ```find_motifs``` This function takes two string arguments: 1-letter coded protein sequence(s) and a motif of interest, where motif is any sequence which occurence -will be searched for in the input protein sequence(s). The function returns position(s) of the motif. Usage example: +will be searched for in the input protein sequence(s). The function returns position(s) of the motif. If a motif was not found, the function will return an empty list. +Please note that this function can only search for one motif at a time. Usage example: ``` find_motifs('MADSEQNQEEAGGGEQREH', function='find_motifs', motif='GG') From f9e0655c003ce8b1f405508721d556c879e2ce5d Mon Sep 17 00:00:00 2001 From: Elena Smertina <104040609+sme229@users.noreply.github.com> Date: Sat, 30 Sep 2023 21:53:04 +1000 Subject: [PATCH 19/19] Update run_protein_tool.py Fix the main function --- HW4_Smertina/run_protein_tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HW4_Smertina/run_protein_tool.py b/HW4_Smertina/run_protein_tool.py index d662104..316e834 100644 --- a/HW4_Smertina/run_protein_tool.py +++ b/HW4_Smertina/run_protein_tool.py @@ -139,5 +139,5 @@ def run_protein_tool(*args: str, function: str, motif: Optional[str]=None): results.append(find_motifs(seq, motif)) if len(results) == 1: results = results[0] - return results + return results