s<-c("CLRHMKMTGYYIAEVDKIPFYNNLAGVAWTIGGRKFWQRQYLTKGSFAKETYGYFGIFGKSTPFLLWYKWPMGGILPHPYNPRRHAFKDGIYMFHNAPDFIHGTKPKVFFRQVSRDMARQIMLSHEDLHMWLMIMQNYVVCITFAEKDWEFSGTCWMKTMFWYLHFHCIRWKNDYTIGWNQLLRFFDPEINMCVDMLCYSCIQLIPANFYAASMTGKISKGAQFTSCGEDCYCDKFIHMKIFWGYDPQGDLGMYGVNANEKHGLYLCMPLALVYCQHQRFIGMVSGPMDAPCKYLADKDLQKYIYDISVKEMSVYLLCLGHIKDSGILYGNRLLKKERVAGTMCTMQFDIFDMSYADCHNNDKTRNRGLSTLKRSWKQYVYIEFGTVPRWVQHATWDLYTNRFFAIMDEFEFLKLRAEKHWFVDRMWPCMLNIMWSMQMCCVIQFRRCIEMMQCYAFGFEIVWATMRFKRNQAAMWHMYRRYIPCMDYWDCNGANAAEFCDERESLFKREMLFARAPSCDIEPPTLAQWMFRAVMMLKIFFWQDIHYACTPDHDEYLWINKSWRMTSDVCFVHWDFWNTGCIYAAPCENKTVPWAKYLYASASYNWEDSCMCWLQWLYTRFRNFENEDLPETPACAKAMNYNWALTQVVYYCKILKRQNTMLGAEVCKTLYTDADPHGLNDLQMQAHCDKWSFNSIAEDRCCPNHLFAQHYDCCQVSRGIFREYSEHWGFCKHGEKCLRLTQLTTCQPTTAGRGTEKVLTQSWWVCNNFWELCALSACHLMQYPYECYTKRRHWAEAISLCGQYKSMTQYWLRYNLNVQQQLPAWGKWAAIEIVEFNMCPWHHKFCVFPPRWYWNHKKWYVFIERWWHSNNLP")
s<-strsplit(s, "")[[1]]
t<-c("CLRLMKMTGYYIAEVPFYNNDRWLHCASQAWTIGGRKFWERQDHNEMRCDETGIFGKSTPFLLWMSGLDMFGWCEKPKTIHVFKDGIYMFHNAGTKKFCHWIKQTAAWWEHFRQVSRDMARQNMHYFFNALTLSWTCCITFAFLEKMWEFSGMCWMKTFWYLHFHCIGTFNINQWLRFFDPETNMHVDMLCWAASSIALIPARFTCCMAASMTGNLQEISGGAEFTSMGAAIKFADCYCDKFWGYDPQGKMGCMSHWLCMYGVNSNEMPLALVYCRVHNHQRKFISHHDYEPFAPCKIQLPDKNHFQSIQLQYCRNRQIKKYIYDISVKEMSGYLAAFRDNMCLGHIKMSEMHVQYMLCILYLNRLLKKERVEGGMCTMQQEDIFDMSNHHIYKTRMKNKKRSWKQYVYIEFYTVVQRPTRRWVQHATWDLYENRFFAIMLEEFCWFLFLKLRAEKHWFQDRMWWDWRCMLNICVIQLRLCIEMMQCEIVWTELFTTMRFHMYRRYIPYWDGYTNGANADEPESLFKREMLFACAPSCDTEPKYIEIKAQVSESSQFRAVMMGHMNIYAYLKIFSWTFLRRIHYDFKLCTLSINKSWRMTSDVCFWNTGCIYAAPHLEHHFADLVFWYLYAFASYNWEDSCMCWLGWFENIPYWWDLPMNYAFKYYCKILKSQNTMLGGNFSDEVCKTLIQKYYVAADPHGLNDIQLAEDTALCGAHCDKWSFNLIHLFVQHYDCCQVSRGIFRPLQNLLYRLYSEHTGLCKWGEKCLRLTQLTTCQEVHAAIYTTAGRAMMCFEKMLTQSWWVCNNPWELCALSACHLMQDTRKNYECYTKRRHWAQEYKSMWQYNLNVQDQLPAIKMGKDEDVLPEIVPFNMRPWHFENACNKYMKFCVFPPRWYWNCKKKLIERWWHSNNQP")
t<-strsplit(t, "")[[1]]
#Blosum62 matrix:
read_csv = read.csv('/Users/ozlemtuna/Downloads/blosum62.csv')
colnames(read_csv) = c("A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X")
str(read_csv)
## 'data.frame': 23 obs. of 23 variables:
## $ A: int 4 -1 -2 -2 0 -1 -1 0 -2 -1 ...
## $ R: int -1 5 0 -2 -3 1 0 -2 0 -3 ...
## $ N: int -2 0 6 1 -3 0 0 0 1 -3 ...
## $ D: int -2 -2 1 6 -3 0 2 -1 -1 -3 ...
## $ C: int 0 -3 -3 -3 9 -3 -4 -3 -3 -1 ...
## $ Q: int -1 1 0 0 -3 5 2 -2 0 -3 ...
## $ E: int -1 0 0 2 -4 2 5 -2 0 -3 ...
## $ G: int 0 -2 0 -1 -3 -2 -2 6 -2 -4 ...
## $ H: int -2 0 1 -1 -3 0 0 -2 8 -3 ...
## $ I: int -1 -3 -3 -3 -1 -3 -3 -4 -3 4 ...
## $ L: int -1 -2 -3 -4 -1 -2 -3 -4 -3 2 ...
## $ K: int -1 2 0 -1 -3 1 1 -2 -1 -3 ...
## $ M: int -1 -1 -2 -3 -1 0 -2 -3 -2 1 ...
## $ F: int -2 -3 -3 -3 -2 -3 -3 -3 -1 0 ...
## $ P: int -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 ...
## $ S: int 1 -1 1 0 -1 0 0 0 -1 -2 ...
## $ T: int 0 -1 0 -1 -1 -1 -1 -2 -2 -1 ...
## $ W: int -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 ...
## $ Y: int -2 -2 -2 -3 -2 -1 -2 -3 2 -1 ...
## $ V: int 0 -3 -3 -3 -1 -2 -2 -3 -3 3 ...
## $ B: int -2 -1 3 4 -3 0 1 -1 0 -3 ...
## $ Z: int -1 0 0 1 -3 3 4 -2 0 -3 ...
## $ X: int 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 ...
mat<-as.matrix(read_csv)
# Define the BLOSUM62 scoring matrixmat <- BLOSUM62
mat
## A R N D C Q E G H I L K M F P S T W Y V B Z X
## A 4 -1 -2 -2 0 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -3 -2 0 -2 -1 0
## R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1
## N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1
## D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1
## C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2
## Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1
## E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1
## G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1
## H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1
## I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1
## L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1
## K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1
## M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1
## F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1
## P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2
## S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0
## T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0
## W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2
## Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1
## V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1
## B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1
## Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1
## X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1
# Define the linear gap penalty
gap_penalty <- -5
n <- length(s)
m <- length(t)
score <- matrix(0, n+1, m+1)
max_score <- score[n+1, m+1]
#Puan matrisini sıfırlarla başlaması
#İlk satırı ve sütunu boşluk cezalarıyla doldurulması
score[1,] <- seq(0, by=gap_penalty, length.out=m+1)
score[,1] <- seq(0, by=gap_penalty, length.out=n+1)
#Yineleme ilişkisini kullanarak matrisin geri kalanını doldurulması
for (i in 2:(n+1)) {
for (j in 2:(m+1)) {
match_score <- mat[s[i-1], t[j-1]]
score[i,j] <- max(
score[i-1,j-1] + match_score,
score[i-1,j] + gap_penalty,
score[i,j-1] + gap_penalty
)
}
}
max_score <- score[n+1, m+1]
alignment<-function(s,t) {
n <- length(s)
m <- length(t)
#hizalamalar boşluk cezalarıyla başlayıp bitebilir bunu hesaba katmak için satır ve sütunlarda 1 boşluk daha olacak şekilde matris oluşturulur
score <- matrix(0, n+1, m+1)
# İlk satırı ve sütunu boşluk cezalarıyla doldurun
score[1,] <- seq(0, by=gap_penalty, length.out=m+1)
score[,1] <- seq(0, by=gap_penalty, length.out=n+1)
#Yineleme ilişkisini kullanarak matrisin geri kalanını doldurun
for (i in 2:(n+1)) { #başlangıçlar boşluk penaltıları olduğundan
for (j in 2:(m+1)) {
match_score <- mat[s[i-1], t[j-1]]
score[i,j] <- max( #en yüksek puana sahip "olası puanı" seçer
#olası tüm sonuçları hesaplanması
score[i-1,j-1] + match_score,
#eşleşme veya uyumsuzluk burada gösterilir
#matrisi olasılıklara göre doldurulması ve puan matrisine yazılacak maksimum değeri alınması
score[i-1,j] + gap_penalty,
score[i,j-1] + gap_penalty
)
}
}
#Matrisin sağ alt öğesi: en yüksek hizalama puanı
max_score <- score[n+1, m+1]
#return((max_score))
return(print(paste("The highest alignment score is", max_score)))
}
print(max_score)
## [1] 1953
alignment(s,t)
## [1] "The highest alignment score is 1953"