bioinf/py/2.py

48 lines
1.6 KiB
Python
Raw Normal View History

2024-10-23 17:08:00 +00:00
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)