from Bio import Entrez, SeqIO from Bio.Seq import Seq from termcolor import colored # Ustaw swój adres e-mail (wymagany przez NCBI) Entrez.email = "baiobelfer@gmail.com" # Funkcja do pobierania szczegółów genu def get_gene_info(gene_id): try: # Pobierz adnotacje genowe z NCBI handle = Entrez.efetch(db="gene", id=gene_id, retmode="xml") records = Entrez.read(handle) # Wyciągnij podstawowe informacje gene_ref = records[0]["Entrezgene_gene"]["Gene-ref"] gene_name = gene_ref.get("Gene-ref_locus", "Brak danych") summary = records[0].get("Entrezgene_summary", "Brak opisu") chromosome = "Brak danych" if "BioSource" in records[0]["Entrezgene_source"]: chromosome_data = records[0]["Entrezgene_source"]["BioSource"]["BioSource_subtype"] if chromosome_data: chromosome = chromosome_data[0].get("SubSource_name", "Brak danych") exon_count = len(records[0].get("Entrezgene_locus", [])) # Wyświetl podstawowe informacje o genie print(f"Nazwa genu: {gene_name}") print(f"Opis: {summary}") print(f"Chromosom: {chromosome}") print(f"Liczba eksonów: {exon_count}") except Exception as e: print(f"Wystąpił błąd podczas pobierania informacji o genie: {e}") # Funkcja do załadowania sekwencji genów z pliku FASTA def load_sequences(file_path): return list(SeqIO.parse(file_path, "fasta")) # Znajdź potencjalne sekwencje gRNA (20 nukleotydów + PAM "NGG") w określonym regionie def find_crispr_sites_in_region(sequence, start, end): pam = "NGG" sites = [] # Ogranicz przeszukiwanie do wybranego regionu target_region = sequence[start:end] for i in range(len(target_region) - 23): target = target_region[i:i+20] pam_site = target_region[i+20:i+23] if pam_site.endswith("GG"): # Zapisz pełną sekwencję wraz z lokalizacją w genomie sites.append((start + i, target + pam_site)) return sites # Funkcja do kolorowania wyjścia def print_colored_crispr_sites(sites): for pos, site in sites: gRNA = colored(site[:20], 'blue') # Sekwencja gRNA na niebiesko pam = colored(site[20:], 'red', attrs=['bold']) # PAM na czerwono i pogrubione print(f"Position: {pos}, CRISPR site: {gRNA}{pam}") # Przykład użycia # Zmieniamy na ID genu "DREB2A" odpowiedzialnego za odporność na suszę w Arabidopsis gene_id = "355350790" # Przykładowe ID genu DREB2A z NCBI get_gene_info(gene_id) # Zakładamy, że sekwencja DNA jest już wczytana do pliku FASTA genes = load_sequences("arabidopsis_genome.fasta") # Przykładowe pozycje startowe i końcowe genu odpowiedzialnego za odporność na suszę start_position = 1000 # przykładowa pozycja początkowa end_position = 2000 # przykładowa pozycja końcowa for gene in genes: print(f"\nGene ID: {gene.id}") crispr_sites = find_crispr_sites_in_region(str(gene.seq), start_position, end_position) # Wyświetl tylko 5 pierwszych wyników, wraz z ich pozycją w sekwencji DNA i kolorowaniem print_colored_crispr_sites(crispr_sites[:5])