48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
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)
|
|
|