update
This commit is contained in:
parent
4394f3d78b
commit
04ef28e780
|
@ -0,0 +1,32 @@
|
|||
from Bio import Entrez, SeqIO
|
||||
|
||||
# Ustaw swój adres e-mail (wymagany przez NCBI)
|
||||
Entrez.email = "your_email@example.com"
|
||||
|
||||
def download_genome(genome_id, file_name):
|
||||
"""
|
||||
Pobierz sekwencję genomu z NCBI i zapisz ją jako plik FASTA.
|
||||
|
||||
Parameters:
|
||||
genome_id (str): ID genomu w bazie NCBI.
|
||||
file_name (str): Nazwa pliku, do którego zostanie zapisana sekwencja.
|
||||
"""
|
||||
try:
|
||||
# Pobierz rekord z bazy danych NCBI
|
||||
with Entrez.efetch(db="nucleotide", id=genome_id, rettype="fasta", retmode="text") as handle:
|
||||
genome_seq = SeqIO.read(handle, "fasta")
|
||||
|
||||
# Zapisz rekord do pliku FASTA
|
||||
with open(file_name, "w") as output_handle:
|
||||
SeqIO.write(genome_seq, output_handle, "fasta")
|
||||
|
||||
print(f"Genom zapisany do pliku: {file_name}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Wystąpił błąd: {e}")
|
||||
|
||||
# Przykład użycia
|
||||
genome_id = "NC_000932" # Przykładowe ID genomu (np. Arabidopsis thaliana chloroplast)
|
||||
file_name = "arabidopsis_genome.fasta"
|
||||
download_genome(genome_id, file_name)
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
from Bio import SeqIO
|
||||
from Bio.Seq import Seq
|
||||
|
||||
# Załaduj sekwencje 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")
|
||||
def find_crispr_sites(sequence):
|
||||
pam = "NGG"
|
||||
sites = []
|
||||
for i in range(len(sequence) - 23):
|
||||
target = sequence[i:i+20]
|
||||
pam_site = sequence[i+20:i+23]
|
||||
if pam_site.endswith("GG"):
|
||||
sites.append(target + pam_site)
|
||||
return sites
|
||||
|
||||
# Przykład użycia
|
||||
genes = load_sequences("arabidopsis_genome.fasta")
|
||||
for gene in genes:
|
||||
print(f"Gene ID: {gene.id}")
|
||||
crispr_sites = find_crispr_sites(str(gene.seq))
|
||||
print(f"Potential CRISPR sites: {crispr_sites[:5]}") # wyświetl tylko 5 pierwszych
|
|
@ -0,0 +1,47 @@
|
|||
def print_crispr_target(gene_sequence, gRNA, pam, gRNA_position):
|
||||
# Długości sekwencji gRNA i PAM
|
||||
gRNA_length = len(gRNA)
|
||||
pam_length = len(pam)
|
||||
|
||||
# Zbuduj schemat tekstowy
|
||||
dna_display = list(gene_sequence)
|
||||
gRNA_end = gRNA_position + gRNA_length
|
||||
pam_start = gRNA_end
|
||||
pam_end = pam_start + pam_length
|
||||
|
||||
# Upewnij się, że PAM mieści się w sekwencji DNA
|
||||
if pam_end > len(gene_sequence):
|
||||
print("Error: PAM nie mieści się w sekwencji DNA. Sprawdź pozycję gRNA i długość sekwencji.")
|
||||
return
|
||||
|
||||
# Oznaczenie gRNA w konsoli
|
||||
for i in range(gRNA_position, gRNA_end):
|
||||
dna_display[i] = dna_display[i].lower() # Zaznacz gRNA (małe litery)
|
||||
|
||||
# Oznaczenie PAM w konsoli
|
||||
for i in range(pam_start, pam_end):
|
||||
dna_display[i] = dna_display[i].upper() # Zaznacz PAM (wielkie litery)
|
||||
|
||||
# Utwórz linię z końcami 5' i 3'
|
||||
sequence_line = ''.join(dna_display)
|
||||
|
||||
# Generuj znaczniki dla orientacji gRNA i PAM
|
||||
marker_line = ' ' * gRNA_position + '^' * gRNA_length + ' ' * (pam_start - gRNA_end) + 'PAM'
|
||||
|
||||
# Wyświetl wyniki
|
||||
print("Sense Strand (5' to 3'):")
|
||||
print(f"5' {sequence_line} 3'")
|
||||
print(f" {marker_line}")
|
||||
print("\nComplementary Strand (3' to 5'):")
|
||||
complement = gene_sequence.translate(str.maketrans("ATGC", "TACG"))[::-1]
|
||||
print(f"3' {complement} 5'")
|
||||
|
||||
# Przykładowe dane
|
||||
gene_sequence = "ATGCGGCTAGCGACGGGAATTGAACCCGCGATGG"
|
||||
gRNA = "GACGGGAATTGAACCCGCGA" # 20 nt
|
||||
pam = "TGG" # PAM (NGG)
|
||||
gRNA_position = 12 # Gdzie w sekwencji zaczyna się gRNA
|
||||
|
||||
# Wywołanie funkcji
|
||||
print_crispr_target(gene_sequence, gRNA, pam, gRNA_position)
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
from Bio import Entrez, SeqIO
|
||||
from Bio.Seq import Seq
|
||||
|
||||
# Ustaw swój adres e-mail (wymagany przez NCBI)
|
||||
Entrez.email = "your_email@example.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_name = records[0]["Entrezgene_gene"]["Gene-ref"]["Gene-ref_locus"]
|
||||
summary = records[0]["Entrezgene_summary"]
|
||||
chromosome = records[0]["Entrezgene_source"]["BioSource"]["BioSource_subtype"][0]["SubSource_name"]
|
||||
exon_count = len(records[0]["Entrezgene_locus"][0]["Gene-commentary_seqs"])
|
||||
|
||||
# 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
|
||||
|
||||
# Przykład użycia
|
||||
gene_id = "835067" # Przykładowe ID genu (należy zastąpić rzeczywistym ID odpornego na suszę genu)
|
||||
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
|
||||
for pos, site in crispr_sites[:5]:
|
||||
print(f"Position: {pos}, CRISPR site: {site}")
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
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])
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue