Mercurial > repos > bitlab > plidflow
comparison PLIDflow/scripts/pdbqtcorrector.R @ 6:795e11fac81b draft default tip
Included new tools for standardization
| author | bitlab |
|---|---|
| date | Wed, 22 Apr 2020 06:12:00 -0400 |
| parents | 6fcfa4756040 |
| children |
comparison
equal
deleted
inserted
replaced
| 5:97f12f7cc852 | 6:795e11fac81b |
|---|---|
| 1 #pdbqtcorrector.R corrests the out PDBQT file from AutoDockTools prepare receptor | |
| 2 | |
| 3 #!/usr/bin/env Rscript | |
| 4 args = commandArgs(trailingOnly=TRUE) | |
| 5 | |
| 6 if(length(args) < 1){ | |
| 7 stop("USE: Rscript pdbqtcorrector.R <receptor_name> <receptor_pdbqt_modified>") | |
| 8 } | |
| 9 | |
| 10 #Argument definition | |
| 11 receptor_name <- args[1] | |
| 12 | |
| 13 #Scan file | |
| 14 original_file <- scan(args[1], what = character(), quiet = TRUE, na.strings = "NULLAJSKAJSFL") | |
| 15 | |
| 16 #Calculate first root word and "TER" | |
| 17 for(e in 1:length(original_file)){ | |
| 18 if(original_file[e] == "ATOM" || original_file[e] == "HETATM" || original_file[e] == "TER"){ | |
| 19 k <- e | |
| 20 break | |
| 21 } | |
| 22 } | |
| 23 | |
| 24 #Calculate the row number for table which conteins aligned x,y,z coordenates | |
| 25 counter <- 0 | |
| 26 for(c in e:length(original_file)){ | |
| 27 if(original_file[c] == "ATOM" || original_file[c] == "HETATM" || original_file[c] == "TER"){ | |
| 28 counter <- counter + 1 | |
| 29 } | |
| 30 } | |
| 31 | |
| 32 #Table to be fills in named tabla_ordenados | |
| 33 tabla_ordenados <- matrix(1, nrow = (counter), ncol = 13) | |
| 34 | |
| 35 #Calculate TER times and make a vector | |
| 36 ele_ter_vector <- 1 | |
| 37 ter_vector <- c() | |
| 38 k_position <- c() | |
| 39 for(o in 1:(length(original_file))){ | |
| 40 if(original_file[o] =="TER"){ | |
| 41 k_position <- c(k_position, o) | |
| 42 for(g in o:(o+4)){ | |
| 43 ter_vector <- c(ter_vector,original_file[g] ) | |
| 44 } | |
| 45 | |
| 46 } | |
| 47 } | |
| 48 | |
| 49 #Fill in the tabla_ordenados with values scaned until counter-1 since last row (ter) has diferent length and this could give you back an error | |
| 50 for(i in 1:(counter-1)){ | |
| 51 for(j in 1:13){ | |
| 52 tabla_ordenados[i,j] <- original_file[k] | |
| 53 if(tabla_ordenados[i,13]=="ATOM" || tabla_ordenados[i,13]== "HETATM"|| tabla_ordenados[i,13]=="TER"){ | |
| 54 corte <- c() | |
| 55 for(v in 4:12){ | |
| 56 corte <- c(corte,tabla_ordenados[i,v]) | |
| 57 } | |
| 58 coo_corte <- 1 | |
| 59 tabla_ordenados[i,4] <- "" | |
| 60 for(m in 5:13){ | |
| 61 tabla_ordenados[i,m] <- corte[coo_corte] | |
| 62 coo_corte <- coo_corte + 1 | |
| 63 } | |
| 64 k <- k-1 | |
| 65 } | |
| 66 k <- k + 1 | |
| 67 } | |
| 68 if(tabla_ordenados[i,1]=="TER"){ | |
| 69 k <- k - 8 | |
| 70 } | |
| 71 } | |
| 72 | |
| 73 | |
| 74 #Fill in TER row until last one | |
| 75 star_ter <- 2 | |
| 76 mmm <- 1 | |
| 77 for(ii in 1:counter){ | |
| 78 if(tabla_ordenados[ii,1]=="TER"){ | |
| 79 k <- k_position[mmm] + 4 | |
| 80 mmm <- mmm + 1 | |
| 81 y <- 2 | |
| 82 for(l in star_ter:(star_ter+3)){ | |
| 83 if(y%%3==0 && y!=6){ | |
| 84 tabla_ordenados[ii,y] <- "" | |
| 85 y <- y + 1 | |
| 86 tabla_ordenados[ii,y] <- ter_vector[l] | |
| 87 } | |
| 88 tabla_ordenados[ii,y] <- ter_vector[l] | |
| 89 y <- y +1 | |
| 90 } | |
| 91 star_ter <- star_ter + 5 | |
| 92 for(b in 7:13){ | |
| 93 tabla_ordenados[ii,b] <- "" | |
| 94 } | |
| 95 } | |
| 96 } | |
| 97 | |
| 98 #Fill in last row with TER row values | |
| 99 last_ter <- length(ter_vector)-4 | |
| 100 for(jj in 1:6){ | |
| 101 tabla_ordenados[counter,jj] <- ter_vector[last_ter] | |
| 102 if(jj%%3==0 && jj !=6){ | |
| 103 tabla_ordenados[counter, jj] <- "" | |
| 104 last_ter <- last_ter - 1 | |
| 105 } | |
| 106 last_ter <- last_ter + 1 | |
| 107 } | |
| 108 for(jj in 7:13){ | |
| 109 tabla_ordenados[counter, jj] <- "" | |
| 110 } | |
| 111 | |
| 112 #View(tabla_ordenados) | |
| 113 | |
| 114 #Write oredered table in a PDBQT file | |
| 115 for(xi in 1:nrow(tabla_ordenados)){ | |
| 116 cabecera <- tabla_ordenados[xi,1] | |
| 117 for(xj in 2:13){ | |
| 118 cabecera <- paste(cabecera, tabla_ordenados[xi,xj], sep = " ") | |
| 119 } | |
| 120 write(cabecera, file = args[2], append = TRUE) | |
| 121 } | |
| 122 | |
| 123 | |
| 124 | |
| 125 | |
| 126 | |
| 127 | |
| 128 |
