Skip to content
Snippets Groups Projects
Commit 0200e5d1 authored by nina.marthe_ird.fr's avatar nina.marthe_ird.fr
Browse files

remanié le cas variation dans un codon avec différence de taille multiple de...

remanié le cas variation dans un codon avec différence de taille multiple de 3. simplifié, réuni des cas, code plus court et plus lisible
parent 77dbfb4e
No related branches found
No related tags found
No related merge requests found
......@@ -283,10 +283,13 @@ for feature in Features.values():
for cds_id in cds_var.keys():
cds=Features[cds_id]
print("analysing variations in cds",cds_id)
print("analyse des variations dans le cds",cds_id)
frame_shift=0
for var in cds_var[cds_id]:
type_var=var[8]
posVar_on_ref=int(var[12])-1
posVar_on_alt=int(var[13])-1
sequence_target=get_sequence_on_genome(cds_id,segments_on_target_genome)
# frame var ? pos_var-1 %3
if type_var!="no_var": # if there is a variation
......@@ -294,7 +297,6 @@ for cds_id in cds_var.keys():
size_var=var[11].split("/")
else:
size_var=var[11]
pos_var=int(var[12])-1
# how to use size_var if it can be in two different formats (list or int) ?
print(var)
......@@ -309,8 +311,14 @@ for cds_id in cds_var.keys():
if abs(length_alt-length_ref)%3 == 0: # taille diff 3k -> pas de frame shift.
if pos_var%3==0: # position 3k
if (posVar_on_ref)%3==0: # position 3k
print("variation entre deux codons sans décalage du cadre de lecture")
if type_var=="insertion":
print(type_var,"de",var[10])
if type_var=="deletion":
print(type_var,"de",var[9])
else:
print(type_var,"de",var[9],"par",var[10])
if length_ref%3==0: # taille 3K -> pas d'impact sur l'aa en aval
deleted_aa=traduction(get_rna(var[9]))
......@@ -318,13 +326,13 @@ for cds_id in cds_var.keys():
if (length_ref!=0) & (length_alt!=0):
if deleted_aa!=inserted_aa:
print("changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
print("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else:
print("mutation synonyme")
print("conséquence : mutation synonyme dans",",".join(deleted_aa))
elif length_alt!=0:
print("insertion de",",".join(inserted_aa))
print("conséquence : insertion de",",".join(inserted_aa))
else:
print("deletion de",",".join(deleted_aa))
print("conséquence : deletion de",",".join(deleted_aa))
else: # taille != 3k : impact sur l'aa d'après.
## on peut peut-être fusionner ces deux cas (if et else courants), mais il faudra modifier
......@@ -333,14 +341,13 @@ for cds_id in cds_var.keys():
taille_del_entiere=(length_ref//3)*3
taille_ins_entiere=(length_alt//3)*3
deleted_aa=traduction(get_rna(var[9][0:taille_del_entiere])) # le +3 ajoute l'aa suivant qui est modifié en partie
deleted_aa=traduction(get_rna(var[9][0:taille_del_entiere]))
inserted_aa=traduction(get_rna(var[10][0:taille_ins_entiere]))
# le +3 ne fonctionne pas. il faut aller chercher l'aa d'apres dans la séquence du cds.
# enlever le +3
# aller chercher l'emplacement de l'insertion, prendre les 3 bases après ?
posVar_on_ref=int(var[12])
reste_len=3-(length_alt%3)
reste_cds=cds.sequence[posVar_on_ref+length_ref-1:posVar_on_ref+length_ref+reste_len-1] # sequence sur le génome d'origine
len_fragment_after=3-(length_ref%3)
reste_cds=cds.sequence[posVar_on_ref+length_ref:posVar_on_ref+length_ref+len_fragment_after] # sequence sur le génome d'origine
# pour inserter_aa, il faudrait faire la meme chose mais avec la sequence target !
# get_sequence_on_genome(cds_id,segments_on_target_genome)
reste_ins=var[10][-(length_alt%3):]
dernier_aa_ins=reste_ins+reste_cds
......@@ -353,54 +360,44 @@ for cds_id in cds_var.keys():
print(dernier_aa_del,"->",dernier_aa_ins) # à supprimer. seulement le dernier aa de la délétion et de l'insertion.
if deleted_aa!=inserted_aa:
print("changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
print("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else:
print("mutation synonyme")
print("conséquence : mutation synonyme dans",",".join(deleted_aa))
else: # position !=3k, taille diff 3k
print("variation au milieu d'un codon sans décalage du cadre de lecture")
# récupérer le début du codon dans lequel on a inséré, le prendre en compte pour calculer les effets
posVar_on_ref=int(var[12])
reste_aa_avant_len=(posVar_on_ref-1)%3
debut_aa_avant=cds.sequence[posVar_on_ref-reste_aa_avant_len-1:posVar_on_ref-1]
fin_aa_avant_len=3-reste_aa_avant_len
aa_modifie_origin=debut_aa_avant+var[9][0:fin_aa_avant_len]
if len(aa_modifie_origin)<3: # on va chercher la base manquante apres la var
aa_modifie_origin+=cds.sequence[posVar_on_ref-1+length_ref]
aa_modifie_target=debut_aa_avant+var[10][0:fin_aa_avant_len]
if len(aa_modifie_target)<3: # on va chercher la base manquante apres la var dans la séquence target
aa_modifie_target+=get_sequence_on_genome(cds_id,segments_on_target_genome)[int(var[13])]
print(aa_modifie_origin,aa_modifie_target)
print("variation au milieu d'un codon sans décalage du cadre de lecture")
if type_var=="insertion":
print(type_var,"de",var[10])
if type_var=="deletion":
print(type_var,"de",var[9])
else:
print(type_var,"de",var[9],"par",var[10])
len_fragment_before=(posVar_on_ref)%3
len_fragment_after=(3-(len_fragment_before+length_ref))%3
if reste_aa_avant_len+(length_ref%3)==3: # on ne modifie pas d'aa apres l'indel
# modifie l'aa dans lequel on a inséré+délété, puis éventuellement insere ou delete, mais ne modifie pas l'aa d'après.
deleted_aa=traduction(get_rna(aa_modifie_origin+var[9][fin_aa_avant_len:]))
inserted_aa=traduction(get_rna(aa_modifie_target+var[10][fin_aa_avant_len:]))
if deleted_aa!=inserted_aa:
print("changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else:
print("mutation synonyme")
else: # il faut calculer l'aa modifé à la fin
print("aa apres modifie")
total_ins=sequence_target[posVar_on_alt-len_fragment_before:posVar_on_alt+length_alt+len_fragment_after]
total_del=cds.sequence[posVar_on_ref-len_fragment_before:posVar_on_ref+length_ref+len_fragment_after]
deleted_aa=traduction(get_rna(total_del))
inserted_aa=traduction(get_rna(total_ins))
if deleted_aa!=inserted_aa:
print("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else:
print("conséquence : mutation synonyme dans",",".join(deleted_aa))
# possibilité que j'ai pris en compte une variation de plus, si on a un snp sur la premiere et la derniere base d'un codon :
# pour le traitement de la première j'ai également considéré la dernière !
else: # taille diff !=3k
print("décalage du cadre de lecture")
frame_shift=(frame_shift+abs(length_alt-length_ref))%3
# cas en plus : modif de la première base du codon et de la troisième : comment prendre en compte ces deux modif pour le changement de l'aa?
# idée : quand on est sur le premier (ou deuxième??), vérifier le reste du codon avant de regarder le changement d'aa
if pos_var<3:
if posVar_on_ref<3:
print("codon start touché")
findOtherStart(cds,segments_on_target_genome)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment