ansar-y0usif commited on
Commit
7a50d04
·
verified ·
1 Parent(s): cd8fa20

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -0
app.py CHANGED
@@ -785,6 +785,60 @@ def run_pipeline(dna_input, similarity_score=95.0, build_ml_tree=False):
785
  return error_msg, "", "", "", "", None, None, None, None, error_msg, error_msg
786
 
787
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
788
  # --- Gradio Interface ---
789
  def create_interface():
790
  """Create and configure the Gradio interface"""
 
785
  return error_msg, "", "", "", "", None, None, None, None, error_msg, error_msg
786
 
787
 
788
+ def run_pipeline(dna_sequence: str, similarity_threshold: float, do_phylogeny: bool):
789
+ try:
790
+ # Step 1: F Gene Extraction
791
+ f_gene_seq = boundary_model.predict_sequence(dna_sequence)
792
+ if not f_gene_seq:
793
+ return "❌ No F gene found", "", "", "", "F gene extraction failed", None, None, None, None, "", ""
794
+
795
+ # Step 2: F Gene Validation
796
+ is_valid = keras_model.validate_sequence(f_gene_seq)
797
+ keras_result = "✅ Valid F gene" if is_valid else "❌ Not an F gene"
798
+
799
+ # Step 3: Save input to temp FASTA
800
+ temp_fasta_path = os.path.join(BASE_DIR, "input_temp.fasta")
801
+ SeqIO.write(SeqRecord(Seq(f_gene_seq), id="query", description=""), temp_fasta_path, "fasta")
802
+
803
+ # Step 4: Phylogenetic Placement (if enabled)
804
+ tree_result = ""
805
+ analysis_status = ""
806
+ summary_text = ""
807
+ align_file = tree_file = html_file = report_file = None
808
+ tree_html = report_html = "<div style='color:gray'>Skipped</div>"
809
+
810
+ if do_phylogeny:
811
+ # Run analyzer (wraps MAFFT + IQ-TREE + HTML visualizer)
812
+ outputs = analyzer.analyze(
813
+ input_fasta=temp_fasta_path,
814
+ similarity=similarity_threshold / 100.0,
815
+ output_dir=BASE_DIR
816
+ )
817
+ tree_result = outputs["tree_info"]
818
+ analysis_status = outputs["tree_status"]
819
+ summary_text = outputs["summary"]
820
+ align_file = outputs["alignment"]
821
+ tree_file = outputs["tree"]
822
+ html_file = outputs["tree_html"]
823
+ report_file = outputs["report"]
824
+ tree_html = Path(html_file).read_text() if html_file else tree_html
825
+ report_html = Path(report_file).read_text() if report_file else report_html
826
+
827
+ return f_gene_seq, keras_result, tree_result, analysis_status, summary_text, align_file, tree_file, html_file, report_file, tree_html, report_html
828
+
829
+ except Exception as e:
830
+ logging.error(f"Pipeline Error: {e}")
831
+ return "❌ Error during processing", "", "", "", f"Error: {e}", None, None, None, None, "", ""
832
+
833
+ def run_pipeline_from_file(fasta_path, similarity_threshold: float, do_phylogeny: bool):
834
+ try:
835
+ seq_record = next(SeqIO.parse(fasta_path, "fasta"))
836
+ dna_sequence = str(seq_record.seq)
837
+ return run_pipeline(dna_sequence, similarity_threshold, do_phylogeny)
838
+ except Exception as e:
839
+ logging.error(f"File Pipeline Error: {e}")
840
+ return "❌ Invalid FASTA", "", "", "", f"Error: {e}", None, None, None, None, "", ""
841
+
842
  # --- Gradio Interface ---
843
  def create_interface():
844
  """Create and configure the Gradio interface"""