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(): ...@@ -283,10 +283,13 @@ for feature in Features.values():
for cds_id in cds_var.keys(): for cds_id in cds_var.keys():
cds=Features[cds_id] cds=Features[cds_id]
print("analysing variations in cds",cds_id) print("analyse des variations dans le cds",cds_id)
frame_shift=0 frame_shift=0
for var in cds_var[cds_id]: for var in cds_var[cds_id]:
type_var=var[8] 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 # frame var ? pos_var-1 %3
if type_var!="no_var": # if there is a variation if type_var!="no_var": # if there is a variation
...@@ -294,7 +297,6 @@ for cds_id in cds_var.keys(): ...@@ -294,7 +297,6 @@ for cds_id in cds_var.keys():
size_var=var[11].split("/") size_var=var[11].split("/")
else: else:
size_var=var[11] 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) ? # how to use size_var if it can be in two different formats (list or int) ?
print(var) print(var)
...@@ -309,8 +311,14 @@ for cds_id in cds_var.keys(): ...@@ -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 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") 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 if length_ref%3==0: # taille 3K -> pas d'impact sur l'aa en aval
deleted_aa=traduction(get_rna(var[9])) deleted_aa=traduction(get_rna(var[9]))
...@@ -318,13 +326,13 @@ for cds_id in cds_var.keys(): ...@@ -318,13 +326,13 @@ for cds_id in cds_var.keys():
if (length_ref!=0) & (length_alt!=0): if (length_ref!=0) & (length_alt!=0):
if deleted_aa!=inserted_aa: 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: else:
print("mutation synonyme") print("conséquence : mutation synonyme dans",",".join(deleted_aa))
elif length_alt!=0: elif length_alt!=0:
print("insertion de",",".join(inserted_aa)) print("conséquence : insertion de",",".join(inserted_aa))
else: 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. 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 ## 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(): ...@@ -333,14 +341,13 @@ for cds_id in cds_var.keys():
taille_del_entiere=(length_ref//3)*3 taille_del_entiere=(length_ref//3)*3
taille_ins_entiere=(length_alt//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])) 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 len_fragment_after=3-(length_ref%3)
# aller chercher l'emplacement de l'insertion, prendre les 3 bases après ? reste_cds=cds.sequence[posVar_on_ref+length_ref:posVar_on_ref+length_ref+len_fragment_after] # sequence sur le génome d'origine
posVar_on_ref=int(var[12]) # pour inserter_aa, il faudrait faire la meme chose mais avec la sequence target !
reste_len=3-(length_alt%3) # get_sequence_on_genome(cds_id,segments_on_target_genome)
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
reste_ins=var[10][-(length_alt%3):] reste_ins=var[10][-(length_alt%3):]
dernier_aa_ins=reste_ins+reste_cds dernier_aa_ins=reste_ins+reste_cds
...@@ -353,54 +360,44 @@ for cds_id in cds_var.keys(): ...@@ -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. 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: 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: else:
print("mutation synonyme") print("conséquence : mutation synonyme dans",",".join(deleted_aa))
else: # position !=3k, taille diff 3k else: # position !=3k, taille diff 3k
print("variation au milieu d'un codon sans décalage du cadre de lecture") print("variation au milieu d'un codon sans décalage du cadre de lecture")
if type_var=="insertion":
# récupérer le début du codon dans lequel on a inséré, le prendre en compte pour calculer les effets print(type_var,"de",var[10])
posVar_on_ref=int(var[12]) if type_var=="deletion":
reste_aa_avant_len=(posVar_on_ref-1)%3 print(type_var,"de",var[9])
debut_aa_avant=cds.sequence[posVar_on_ref-reste_aa_avant_len-1:posVar_on_ref-1] else:
fin_aa_avant_len=3-reste_aa_avant_len print(type_var,"de",var[9],"par",var[10])
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)
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 total_ins=sequence_target[posVar_on_alt-len_fragment_before:posVar_on_alt+length_alt+len_fragment_after]
# 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. total_del=cds.sequence[posVar_on_ref-len_fragment_before:posVar_on_ref+length_ref+len_fragment_after]
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")
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 else: # taille diff !=3k
print("décalage du cadre de lecture") print("décalage du cadre de lecture")
frame_shift=(frame_shift+abs(length_alt-length_ref))%3 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é") print("codon start touché")
findOtherStart(cds,segments_on_target_genome) 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