Skip to content
Snippets Groups Projects
Commit a2204270 authored by Clara Moreno's avatar Clara Moreno
Browse files

debut BUSCO

Creation Fasta opérationnelle (car Busco fonctionne sur FASTA)
Creation d'un fichier Busco qui reste vide 
difficulté a installé BUSCO avec Conda dans le terminal (marche une fois sur deux) donc j'ai pas pu tester mon code Busco 
parent 442ca23c
No related branches found
No related tags found
No related merge requests found
from typing import Any
import os
import gffutils
import pandas as pd
import matplotlib.pyplot as plt
......@@ -47,7 +47,7 @@ def fusions_stat(count, avg):
return combined_df
#LIEN
#LIEN : marche pas il faut completer
def liens(feature):
base_urls = {
"gene": "https://www.ncbi.nlm.nih.gov/gene/",
......@@ -90,7 +90,63 @@ def extraire_attributs(db):
attributs.update(feature.attributes.keys())
return sorted(attributs)
def gff_a_html(gff_file, output_html, output_plot="feature_distribution.png"):
# FASTA :
def creefasta(gff_file, fasta_output):
"""
:param gff_file: le fichier gff
:param fasta_output: fasta
:return: un fichier avec notre sequence fasta
"""
in_fasta_section = False
with open(gff_file, "r") as infile, open(fasta_output, "w") as outfile:
for line in infile:
if line.startswith("##FASTA"):
in_fasta_section = True
continue # Skip the ##FASTA line itself
if in_fasta_section:
outfile.write(line)
# BUSCO :
def run_busco(fasta_file, output_dir, busco_db="bacteria_odb10"):
"""
Exécute BUSCO sur un fichier FASTA et génère les résultats dans un dossier.
:param fasta_file: chemin vers le fichier FASTA du génome
:param output_dir: dossier où les résultats BUSCO seront enregistrés
:param busco_db: BDD BUSCO à utiliser
"""
# Créer le répertoire de sortie si nécessaire
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# Commande BUSCO
busco_command = [ "busco", "-i", fasta_file, "-l", busco_db, "-o", output_dir, "-m", "genome"]
# Exécuter la commande BUSCO
subprocess.run(busco_command, check=True)
print(f"BUSCO completed successfully, results saved in {output_dir}")
#chemin vers le fichier de résumé BUSCO
return os.path.join(output_dir, "short_summary_busco.txt")
def parse_busco(busco_file): #prend les stats BUSCO
"""
PAS TEST
:param busco_file: le dossier busco
:return: stat busco
"""
busco_stats = {}
with open(busco_file) as f:
for line in f:
if line.startswith("C"): # Lignes contenant les résultats
columns = line.split()
category = columns[0]
count = columns[1]
busco_stats[category] = count
return busco_stats
def gff_a_html(gff_file, output_html, chemindoss, output_plot="feature_distribution.png", busco_file=None):
"""
Analyse un fichier GFF et génère un tableau HTML avec les informations des gènes extraites
:param gff_file: chemin de ou est enregistré le fichier GFF
......@@ -126,6 +182,43 @@ def gff_a_html(gff_file, output_html, output_plot="feature_distribution.png"):
graphe(avg, output_plot)
#CREATION FASTA
fasta_file = f"{chemindoss}fastadugff.txt"
creefasta(gff_file, fasta_file)
# BUSCO
if busco_file: #on a fichier busco
busco_stats = parse_busco(busco_file)
busco_df = pd.DataFrame(busco_stats.items(), columns=["Category", "Count"])
busco_html = busco_df.to_html(index=False)
elif fasta_file: # Si le fichier BUSCO n'est pas fourni, on exécute BUSCO sur le fichier FASTA
output_busco = "busco_results"
run_busco(fasta_file, output_busco)
busco_file = f"{chemindoss}{output_busco}"
if busco_file:
busco_stats = parse_busco(busco_file)
busco_df = pd.DataFrame(busco_stats.items(), columns=["Category", "Count"])
busco_html = busco_df.to_html(index=False)
else: # Si pas busco et pas fasta
outputfasta = "fasta_results"
creefasta(gff_file, outputfasta)
fasta_file = f"{chemindoss}{outputfasta}.txt"
output_busco = "busco_results"
run_busco(fasta_file, output_busco)
busco_file = f"{chemindoss}{output_busco}" #a completer
if busco_file:
busco_stats = parse_busco(busco_file) #prend les fichier dans le dossier, mais comme actuellement pas de fichier dans doss j'ai pas les chemins
busco_df = pd.DataFrame(busco_stats.items(), columns=["Category", "Count"])
busco_html = busco_df.to_html(index=False)
html_template = f"""
<!DOCTYPE html>
<html lang="en">
......@@ -178,6 +271,9 @@ def gff_a_html(gff_file, output_html, output_plot="feature_distribution.png"):
<h1>Distribution celon les longueurs</h1>
<img src="{output_plot}" alt="Feature Distribution">
<h1>BUSCO Results</h1>
{busco_html}
</body>
</html>
"""
......@@ -203,9 +299,10 @@ if __name__ == "__main__":
#gff_file = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/wormbase_gff2_alt.txt"
gff_file = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/PROKKA_REF_ONTillumina.gff"
output_html = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/output.html"
debut = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/"
#chemin des fichiers :
#gff_file =
#output_html =
print(gff_a_html(gff_file,output_html))
\ No newline at end of file
print(gff_a_html(gff_file, output_html, debut))
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment