compara-deep-learning/prepare_synteny_matrix.py

114 lines
3.6 KiB
Python
Raw Normal View History

2021-04-08 08:41:16 -07:00
import numpy as np
2019-07-24 03:27:54 -07:00
import json
import os
import sys
import pickle
from select_data import read_db_homology
from threads import Procerssrunner
from read_get_gene_seq import read_gene_sequences
2021-04-08 08:41:16 -07:00
from access_data_rest import update_rest, update_rest_protein
2019-08-12 05:31:37 -07:00
from Bio import SeqIO
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Alphabet import IUPAC
2021-04-08 08:41:16 -07:00
def write_fasta(sequences, name):
with open(name+".fa", "w") as file:
2019-08-12 05:31:37 -07:00
for seq in sequences:
2021-04-08 08:41:16 -07:00
if sequences[seq] == "":
2019-08-12 05:31:37 -07:00
continue
2021-04-08 08:41:16 -07:00
record = SeqRecord(Seq(sequences[seq], IUPAC.protein), id=seq)
SeqIO.write(record, file, "fasta")
2019-07-24 03:27:54 -07:00
2021-04-08 08:41:16 -07:00
def read_data_synteny(nop, name):
smg = []
sml = []
indexes = []
2019-07-24 03:27:54 -07:00
for i in range(nop):
try:
2021-04-08 08:41:16 -07:00
with open("temp_"+name+"/thread_"+str(i+1) +
"_smg.temp", "rb") as file:
smg = smg+pickle.load(file)
with open("temp_"+name+"/thread_"+str(i+1) +
"_sml.temp", "rb") as file:
sml = sml+pickle.load(file)
with open("temp_"+name+"/thread_"+str(i+1) +
"_indexes.temp", "rb") as file:
indexes = indexes+pickle.load(file)
2019-07-24 03:27:54 -07:00
except Exception as e:
2021-04-08 08:41:16 -07:00
print("Problem with thread", i+1, "detected for", name, e)
2019-07-24 03:27:54 -07:00
continue
print(len(indexes))
2021-04-08 08:41:16 -07:00
return smg, sml, indexes
2019-07-24 03:27:54 -07:00
def load_neighbor_genes():
2021-04-08 08:41:16 -07:00
with open("processed/neighbor_genes.json", "r") as file:
lsy = dict(json.load(file))
2019-07-24 03:27:54 -07:00
print(len(lsy))
print("Neighbor Genes Loaded")
return lsy
2021-04-08 08:41:16 -07:00
2019-07-24 03:27:54 -07:00
def read_data_homology(dirname):
2021-04-08 08:41:16 -07:00
lf = os.listdir(dirname)
if len(lf) == 0:
2019-07-24 03:27:54 -07:00
print("No Files in the Directory!!!!!!!")
sys.exit(1)
2021-04-08 08:41:16 -07:00
a_h = []
d_h = []
2019-07-24 03:27:54 -07:00
for x in lf:
2021-04-08 08:41:16 -07:00
df, n = read_db_homology(dirname, x)
n = n.split()[0]
2019-07-24 03:27:54 -07:00
try:
2021-04-08 08:41:16 -07:00
indexes = np.load("processed/"+n+"_selected_indexes.npy")
except Exception:
print("Incomplete data for:", n)
df = df.loc[indexes]
2019-07-24 03:27:54 -07:00
a_h.append(df)
d_h.append(n)
2021-04-08 08:41:16 -07:00
return a_h, d_h
2019-07-24 03:27:54 -07:00
def main():
2021-04-08 08:41:16 -07:00
arg = sys.argv
nop = int(arg[-1])
n = 3
a_h, d_h = read_data_homology("data_homology")
2019-07-24 03:27:54 -07:00
print("Data Read")
2021-04-08 08:41:16 -07:00
lsy = load_neighbor_genes()
gene_sequences = read_gene_sequences(
a_h, lsy, "geneseq", "gene_seq_positive")
gene_sequences = update_rest(gene_sequences, "gene_seq_positive")
2019-07-24 03:27:54 -07:00
print("Gene Sequences Loaded.")
if not os.path.isdir("processed/synteny_matrices"):
os.mkdir("processed/synteny_matrices")
2021-04-08 08:41:16 -07:00
ndir = "processed/synteny_matrices/"
nf1 = "synteny_matrices_global"
nf2 = "synteny_matrices_local"
nf3 = "indexes"
2019-07-24 03:27:54 -07:00
for i in range(len(a_h)):
2021-04-08 08:41:16 -07:00
df = a_h[i]
part = len(df)//nop
pr = Procerssrunner()
pr.start_processes(nop, df, gene_sequences, lsy, part, n, d_h[i])
smg, sml, indexes = read_data_synteny(nop, d_h[i])
2019-07-24 03:27:54 -07:00
print(len(indexes))
2021-04-08 08:41:16 -07:00
np.save(ndir+str(d_h[i])+"_"+nf1, smg)
np.save(ndir+str(d_h[i])+"_"+nf2, sml)
np.save(ndir+str(d_h[i])+"_"+nf3, indexes)
a_h[i] = df.loc[indexes]
print("Synteny Matrices Created Successfully :)")
protein_sequences = read_gene_sequences(
a_h, lsy, "pro_seq", "pro_seq_positive")
protein_sequences = update_rest_protein(
protein_sequences, "pro_seq_positive")
write_fasta(protein_sequences, "protein_seq_positive")
2019-08-11 22:56:13 -07:00
print("Protein Sequences Loaded.")
2021-04-08 08:41:16 -07:00
if __name__ == "__main__":
2019-07-24 03:27:54 -07:00
main()