From d38cfed6cf5815a0a54804f9233739f09e9b137d Mon Sep 17 00:00:00 2001 From: Aqil Date: Tue, 28 Jul 2020 16:06:55 +0700 Subject: [PATCH] done --- .vscode/settings.json | 44 +++++++ NormalScore.txt | 5 + PAM250.txt | 21 +++ Sequence.txt | 0 Wunsch.cpp | 218 +++++++++++++++++++++++++++++++ data/nucleotide/MT019529.1.fasta | 2 +- data/nucleotide/MT044258.1.fasta | 2 +- data/protein/AGP04929.1.fasta | 2 +- data/protein/AYN64561.1.fasta | 2 +- tes.py | 121 +++++++++++++++++ w.exe | Bin 0 -> 150091 bytes 11 files changed, 413 insertions(+), 4 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 NormalScore.txt create mode 100644 PAM250.txt create mode 100644 Sequence.txt create mode 100644 Wunsch.cpp create mode 100644 tes.py create mode 100644 w.exe diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d98ff95 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,44 @@ +{ + "files.associations": { + "ostream": "cpp", + "cctype": "cpp", + "cmath": "cpp", + "concepts": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "map": "cpp", + "memory": "cpp", + "new": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "xfacet": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocinfo": "cpp", + "xlocnum": "cpp", + "xmemory": "cpp", + "xstddef": "cpp", + "xstring": "cpp", + "xtr1common": "cpp", + "xtree": "cpp", + "xutility": "cpp" + } +} \ No newline at end of file diff --git a/NormalScore.txt b/NormalScore.txt new file mode 100644 index 0000000..771bc82 --- /dev/null +++ b/NormalScore.txt @@ -0,0 +1,5 @@ +# A C G T +T -1 -1 -1 1 +G -1 -1 1 +C -1 1 +A 1 diff --git a/PAM250.txt b/PAM250.txt new file mode 100644 index 0000000..9340309 --- /dev/null +++ b/PAM250.txt @@ -0,0 +1,21 @@ +# A R N D C Q E G H I L K M F P S T W Y V +V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -5 -2 4 +Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 +W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 +T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -2 0 1 3 +S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 3 +P 1 0 -1 -1 -3 0 -1 -1 0 -2 -3 -1 -2 -5 6 +F -4 -4 -4 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 +M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 +K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 +L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 +I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 +H -1 2 2 1 -3 3 1 -2 6 +G 1 -3 0 1 -3 -1 0 5 +E 0 -1 1 3 -5 2 4 +Q 0 1 1 2 -5 4 +C -2 -4 -4 -5 4 +D 0 -1 2 4 +N 0 0 2 +R 2 6 +A 2 \ No newline at end of file diff --git a/Sequence.txt b/Sequence.txt new file mode 100644 index 0000000..e69de29 diff --git a/Wunsch.cpp b/Wunsch.cpp new file mode 100644 index 0000000..810df8d --- /dev/null +++ b/Wunsch.cpp @@ -0,0 +1,218 @@ +// CPP program to implement sequence alignment +// problem. +// #include +#include +#include +#include +#include +using namespace std; + +// int match = 1; +// int gap = -1; +std::map> scoring; +char chars[20]; + + + + + +void loadscorematrix(string name){ + ifstream inp(name); + string line; + if (inp.is_open()){ + getline(inp,line); + // cout << line; + // cout << line.find(' ') << endl; + line.erase(0,line.find(' ')+1); + // cout << "Hey"; + int i = 0; + while (line.size() > 0){ + char c = line[0]; + chars[i] = c; + // cout << c << endl; + if (line.size() > 2){ + // cout << line << endl; + line.erase(0,line.find(' ')+1); + } + else{ + // cout << line.find(' ') << endl; + line.erase(0,line.size()+1); + } + i++; + } + i = 0; + int j; + while (getline(inp,line)){ + line.erase(0,2); + j = 0; + while(line.size() > 2){ + // cout << chars[20-i-1] << " " << chars[j] << endl; + int score = stoi(line.substr(0,line.find(' ')+1)); + scoring[chars[20-i-1]][chars[j]] = score; + scoring[chars[j]][chars[20-i-1]] = score; + // cout << score << endl; + j++; + line.erase(0,line.find(' ')+1); + } + // cout << chars[20-i-1] << "HERE" << endl; + scoring[chars[20-i-1]][chars[j]] = stoi(line); + // cout << stoi(line) << endl; + i++; + } + }else{ + cout << "File not found" << endl; + } +} + +void writeToFile(string str, string name){ + string res = "result/" + name + ".txt"; + + +} + + + +void needleman(string seq1, string seq2,string name, string name2, int gap){ + int x,y; + x = seq1.size(); + y = seq2.size(); + // printf("halo"); + // cout << x << " " << y ; + // int **matrix = new int[x+1][y+1]; + // int matrix[x+1][y+1]; + cout << x << " " << y; + int **matrix = new int*[x+1]; + for (int i = 0; i <= x; i++){ + matrix[i] = new int[y+1]; + // cout << i << endl; + } + for (int i=0; i<=x;i++){ + for (int j = 0; j<=y;j++){ + matrix[i][j] = 0; + // cout << "Tes"; + } + } + + for (int i=0; i <= x; i++){ + matrix[i][0] = i * gap; + } + for (int i=0; i <= y; i++){ + matrix[0][i] = i * gap; + } + + for (int i=1; i<= x; i++){ + for (int j =1 ; j <= y; j++){ + // if (seq1[i-1] == seq2[j-1]){ + // matrix[i][j] = scoring[seq1[i-1]][seq2[j-1]] + matrix[i-1][j-1]; + // } + // else{ + // cout << "Tes" << endl; + int top, left, diag, little; + top = matrix[i-1][j] + gap; + left = matrix[i][j-1] + gap; + diag = matrix[i-1][j-1] + scoring[seq1[i-1]][seq2[j-1]]; + if (top < left){ + if (left < diag){ + little = diag; + } + else{ + little = left; + } + }else{ + if (top < diag){ + little = diag; + } + else{ + little = top; + } + } + matrix[i][j] = little; + // } + } + } + + string xend = "",yend = ""; + int i = x; + int j = y; + + while ( i != 0 || j != 0){ + if (i == 0 && j != 0){ + xend = "_" + xend; + yend = seq2[j-1] + yend; + j--; + }else if (j == 0 && i != 0){ + yend = "_" + yend; + xend = seq1[i-1] + xend; + i--; + } + else if (j != 0 && i != 0){ + if (matrix[i-1][j] + gap == matrix[i][j]){ + xend = seq1[i-1] + xend; + yend = "_" + yend; + i--; + } + else if (matrix[i][j-1] + gap == matrix[i][j]){ + xend = "_" + xend; + yend = seq2[j-1] + yend; + j--; + } + else{ + xend = seq1[i-1] + xend; + yend = seq2[j-1] + yend; + i--; + j--; + } + } + } + cout << "Best Score : " << matrix[x][y] << endl; + cout << xend << endl; + cout << yend << endl; + // for (int i =0; i <= x; i++){ + // for (int j = 0 ; j <= y ; j ++){ + // cout << matrix[i][j] << " "; + // } + // cout << endl; + // } + +} + +void withNamaFile(string nama1, string nama2, int gap){ + string str1="",str2=""; + ifstream inp(nama1); + string line; + if (inp.is_open()){ + getline(inp,line); + cout << "First sequence : " << line << endl; + while (getline(inp,line)){ + str1 = str1+line; + } + } + else{ + cout << "File 1 not found" << endl; + } + ifstream inp2(nama2); + if (inp2.is_open()){ + getline(inp2,line); + cout << "Second sequence : " << line << endl; + while(getline(inp2,line)){ + // cout << line; + str2 = str2 + line; + } + } + // cout << str1 << endl; + // cout << str2 << endl; + return needleman(str1,str2,nama1,nama2,gap); +} + + + +int main(int argc, char* argv[]){ + if (argc < 2) + cout << "Maaf kurang argumen, berikan file yang ingin dialign, lalu scoring matrix diakhir, lalu nilai jika terjadi gap" << endl; + else{ + loadscorematrix(argv[argc-2]); + int gap = stoi(argv[argc-1]); + // needleman(argv[1],argv[2],-1); + withNamaFile(argv[1],argv[2],-1); + } +} \ No newline at end of file diff --git a/data/nucleotide/MT019529.1.fasta b/data/nucleotide/MT019529.1.fasta index 5a5f5b8..f605ed4 100644 --- a/data/nucleotide/MT019529.1.fasta +++ b/data/nucleotide/MT019529.1.fasta @@ -426,4 +426,4 @@ GTGCAGAATGAATTCTCGTAACTACATAGCACAAGTAGATGTAGTTAACTTTAATCTCACATAGCAATCT TTAATCAGTGTGTAACATTAGGGAGGACTTGAAAGAGCCACCACATTTTCACCGAGGCCACGCGGAGTAC GATCGAGTGTACAGTGAACAATGCTAGGGAGAGCTGCCTATATGGAAGAGCCCTAATGTGTAAAATTAAT TTTAGTAGTGCTATCCCCATGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAA -AAAAAAAAA +AAAAAAAAA \ No newline at end of file diff --git a/data/nucleotide/MT044258.1.fasta b/data/nucleotide/MT044258.1.fasta index 53bfd35..67fd615 100644 --- a/data/nucleotide/MT044258.1.fasta +++ b/data/nucleotide/MT044258.1.fasta @@ -425,4 +425,4 @@ ATATAAACGTTTTCGCTTTTCCGTTTACGATATATAGTCTACTCTTGTGCAGAATGAATTCTCGTAACTA CATAGCACAAGTAGATGTAGTTAACTTTAATCTCACATAGCAATCTTTAATCAGTGTGTAACATTAGGGA GGACTTGAAAGAGCCACCACATTTTCACCGAGGCCACGCGGAGTACGATCGAGTGTACAGTGAACAATGC TAGGGAGAGCTGCCTATATGGAAGAGCCCTAATGTGTAAAATTAATTTTAGTAGTGCTATCCCCATGTGA -TTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAA +TTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAA \ No newline at end of file diff --git a/data/protein/AGP04929.1.fasta b/data/protein/AGP04929.1.fasta index 9d94e62..c5e0786 100644 --- a/data/protein/AGP04929.1.fasta +++ b/data/protein/AGP04929.1.fasta @@ -18,4 +18,4 @@ ILARLDTVEQEAQIDRLINGRLTSLNAFVAQQLVRTEAAARSAQLAQDKVNECVKSQSKRNGFCGTGTHI VSFAINAPNGLYFFHVGYQPTSHVNATAAYGLCNTENPQKCIAPIDGYFVLNQTTSTVADSDQQWYYTGS SFFHPEPITEANSKYVSMDVKFENLTNRLPPPLLSNSTDLDFKEELEEFFKNVSSQGPNFQEISKINTTL LNLNTELMVLSEVVKQLNESYIDLKELGNYTFYQKWPWYIWLGFIAGLVALALCVFFILCCTGCGTSCLG -KLKCNRCCDSYDEYEVEKIHIH +KLKCNRCCDSYDEYEVEKIHIH \ No newline at end of file diff --git a/data/protein/AYN64561.1.fasta b/data/protein/AYN64561.1.fasta index 4a6f3ed..a3a87b9 100644 --- a/data/protein/AYN64561.1.fasta +++ b/data/protein/AYN64561.1.fasta @@ -18,4 +18,4 @@ FGAISSSLQEILSRLDNLEAQVQIDRLINGRLTALNAYVSQQLSDITLIKAGASRAIEKVNECVKSQSPR INFCGNGNHILSLVQNAPYGLLFIHFSYKPTSFKTVLVSPGLCLSGDRGIAPKQGYFIKQNDSWMFTGSS YYYPEPISDKNVVFMNSCSVNFTKAPFIYLNNSIPNLSDFEAEFSLWFKNHTSIAPNLTFNSHINATFLD LYYEMNVIQESIKSLNSSFINLKEIGTYEMYVKWPWYIWLLIVILFIIFLMILFFICCCTGCGSACFSKC -HNCCDEYGGHNDFVIKASHDD +HNCCDEYGGHNDFVIKASHDD \ No newline at end of file diff --git a/tes.py b/tes.py new file mode 100644 index 0000000..8141159 --- /dev/null +++ b/tes.py @@ -0,0 +1,121 @@ +SEQUENCE_1 = 'AGGGCT' #Sequence 1 (Side Sequence) +SEQUENCE_2 = 'AGGCAT' #Sequence 2 (Top Sequence) +MATRIX_ROW_N = len(SEQUENCE_1)+1 #Initiation Matrix Size (Rows) +MATRIX_COLUMN_N = len(SEQUENCE_2)+1 #Initiation Matrix Size (Columns) +MATCH_SCORE = 5 #Match Score +MISMATCH_SCORE = -3 #Mismatch Score +GAP_SCORE = -5 #Gap Points +GAP_CHARACTER = '-'#Character to Represent Gaps in Final Alignemnts +ALN_PATHWAYS = [] #Initiating List of Discovered aln Pathways +MATRIX = [[[[None] for i in range(2)] for i in range(MATRIX_COLUMN_N)] for i in range(MATRIX_ROW_N)] # Initiating Score Matrix + +def print_aln_details(aln): # Function to print steps of particular aln + print('\n>>>>>>>>>>>>>>>> Aln #:'+str(aln[4])+' <<<<<<<<<<<<<<<<\n\n------------------Steps------------------\n') + for elem in aln[3]: + print('Step: '+str(elem[0])+' -> Score = ' + str(elem[1]) + ' -> Dir: ' + ('\u2190' if elem[2]==1 else ('\u2196' if elem[2]==2 else ('\u2191' if elem[2]==3 else 'Error')))) + print('\n-------------Final aln-------------\n') + print(aln[1]+'\n'+aln[0]) + return + +def print_all(ALIGNMENTS): #Function to print everything + print('Total Alignments: ' + str(len(ALIGNMENTS))) + print('Overall Score: '+str(ALIGNMENTS[0][3][0][1])+'\n') + for elem in ALIGNMENTS: + print_aln_details(elem) + return +def print_alns_only(ALIGNMENTS): #Function to print only ALIGNMENTS + print('Total Alignments: ' + str(len(ALIGNMENTS))) + print('Overall Score: '+str(ALIGNMENTS[0][3][0][1])+'\n') + for elem in ALIGNMENTS: + print(elem[0]+'\n'+elem[1]+'\n') + return +def find_each_path(c_i,c_j,path=''): #Nested function to discover new aln pathways + global ALN_PATHWAYS + i = c_i + j = c_j + if i == 0 and j==0: + ALN_PATHWAYS.append(path) + return 2 + dir_t = len(MATRIX[i][j][1]) + while dir_t<=1: + n_dir = MATRIX[i][j][1][0] if (i != 0 and j != 0) else (1 if i == 0 else (3 if j==0 else 0)) + path = path + str(n_dir) + if n_dir == 1: + j=j-1 + elif n_dir == 2: + i=i-1 + j=j-1 + elif n_dir == 3: + i=i-1 + dir_t = len(MATRIX[i][j][1]) + if i == 0 and j==0: + ALN_PATHWAYS.append(path) + return 3 + if dir_t>1: + for dir_c in range(dir_t): + n_dir = MATRIX[i][j][1][dir_c] if (i != 0 and j != 0) else (1 if i == 0 else (3 if j==0 else 0)) + tmp_path = path + str(n_dir) + if n_dir == 1: + n_i = i + n_j=j-1 + elif n_dir == 2: + n_i=i-1 + n_j=j-1 + elif n_dir == 3: + n_i=i-1 + n_j = j + find_each_path(n_i,n_j,tmp_path) + return len(ALN_PATHWAYS) + +#Main Code +#Matrix Evaulation [start] +for i in range(MATRIX_ROW_N): + MATRIX[i][0] = [GAP_SCORE*i,[]] +for j in range(MATRIX_COLUMN_N): + MATRIX[0][j] = [GAP_SCORE*j,[]] +for i in range(1,MATRIX_ROW_N): + for j in range(1,MATRIX_COLUMN_N): + score = MATCH_SCORE if (SEQUENCE_1[i-1] == SEQUENCE_2[j-1]) else MISMATCH_SCORE + h_val = MATRIX[i][j-1][0] + GAP_SCORE + d_val = MATRIX[i-1][j-1][0] + score + v_val = MATRIX[i-1][j][0] + GAP_SCORE + o_val = [h_val, d_val, v_val] + MATRIX[i][j] = [max(o_val), [i+1 for i,v in enumerate(o_val) if v==max(o_val)]] # h = 1, d = 2, v = 3 +#Matrix Evaulation [end] +OVERALL_SCORE = MATRIX[i][j][0] +score = OVERALL_SCORE +l_i = i +l_j = j +ALIGNMENTS = [] +tot_aln = find_each_path(i,j) +aln_count = 0 +#Compiling alignments based on discovered matrix pathways +for elem in ALN_PATHWAYS: + i = l_i-1 + j = l_j-1 + side_aln = '' + top_aln = '' + step = 0 + aln_info = [] + for n_dir_c in range(len(elem)): + n_dir = elem[n_dir_c] + score = MATRIX[i+1][j+1][0] + step = step + 1 + aln_info.append([step,score,n_dir]) + if n_dir == '2': + side_aln = side_aln + SEQUENCE_1[i] + top_aln = top_aln + SEQUENCE_2[j] + i=i-1 + j=j-1 + elif n_dir == '1': + side_aln = side_aln + GAP_CHARACTER + top_aln = top_aln + SEQUENCE_2[j] + j=j-1 + elif n_dir == '3': + side_aln = side_aln + SEQUENCE_1[i] + top_aln = top_aln + GAP_CHARACTER + i=i-1 + aln_count = aln_count + 1 + ALIGNMENTS.append([top_aln[::-1],side_aln[::-1],elem,aln_info,aln_count]) + +print_alns_only(ALIGNMENTS) \ No newline at end of file diff --git a/w.exe b/w.exe new file mode 100644 index 0000000000000000000000000000000000000000..e48b096e5663ca56353510b04eaa01413306ca88 GIT binary patch literal 150091 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 literal 0 HcmV?d00001