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

réuni les cas où la différence de taille et la position sont multiple de 3,...

réuni les cas où la différence de taille et la position sont multiple de 3, réglé des problèmes de coordonnées
parent fc643024
No related branches found
No related tags found
No related merge requests found
...@@ -55,7 +55,7 @@ def add_feature_sequence(feature,seg_seq): ...@@ -55,7 +55,7 @@ def add_feature_sequence(feature,seg_seq):
feature_sequence="" feature_sequence=""
for segment in feature.segments_list: for segment in feature.segments_list:
if segment==feature.segments_list[0]: if segment==feature.segments_list[0]:
feature_sequence+=get_segment_sequence(seg_seq,segment)[feature.pos_start-1:] # revérifier les +/- 1 pour la position, avec de vraies données feature_sequence+=get_segment_sequence(seg_seq,segment)[feature.pos_start-2:] # revérifier les +/- 1 pour la position, avec de vraies données
elif segment==feature.segments_list[-1]: elif segment==feature.segments_list[-1]:
feature_sequence+=get_segment_sequence(seg_seq,segment)[0:feature.pos_stop] # revérifier les +/- 1 pour la position, avec de vraies données feature_sequence+=get_segment_sequence(seg_seq,segment)[0:feature.pos_stop] # revérifier les +/- 1 pour la position, avec de vraies données
else: else:
...@@ -221,7 +221,7 @@ def get_sequence_on_genome(feature,segments_on_target_genome): ...@@ -221,7 +221,7 @@ def get_sequence_on_genome(feature,segments_on_target_genome):
new_sequence="" new_sequence=""
for segment in path_on_target: for segment in path_on_target:
if segment==cds.segments_list[0]: if segment==cds.segments_list[0]:
new_sequence+=get_segment_sequence(seg_seq,segment)[cds.pos_start-1:] new_sequence+=get_segment_sequence(seg_seq,segment)[cds.pos_start-2:]
elif segment==cds.segments_list[-1]: elif segment==cds.segments_list[-1]:
new_sequence+=get_segment_sequence(seg_seq,segment)[0:cds.pos_stop] new_sequence+=get_segment_sequence(seg_seq,segment)[0:cds.pos_stop]
else: else:
...@@ -287,19 +287,11 @@ for cds_id in cds_var.keys(): ...@@ -287,19 +287,11 @@ for cds_id in cds_var.keys():
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
if type_var!="no_var": # if there is a variation if type_var!="no_var": # if there is a variation
posVar_on_ref=int(var[12])
posVar_on_alt=int(var[13])
sequence_target=get_sequence_on_genome(cds_id,segments_on_target_genome)
if "/" in var[11]: # if the variation has a different ref and alt size
size_var=var[11].split("/")
else:
size_var=var[11]
# how to use size_var if it can be in two different formats (list or int) ?
print(var)
if type_var=="insertion": if type_var=="insertion":
length_ref=0 length_ref=0
else: else:
...@@ -308,67 +300,41 @@ for cds_id in cds_var.keys(): ...@@ -308,67 +300,41 @@ for cds_id in cds_var.keys():
length_alt=0 length_alt=0
else: else:
length_alt=len(var[10]) length_alt=len(var[10])
print(var)
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 (posVar_on_ref)%3==0: # position 3k if (posVar_on_ref)%3==0: # taille diff 3k, 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": if type_var=="insertion":
print(type_var,"de",var[10]) print(type_var,"de",var[10])
if type_var=="deletion": elif type_var=="deletion":
print(type_var,"de",var[9]) print(type_var,"de",var[9])
else: else:
print(type_var,"de",var[9],"par",var[10]) 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])) len_fragment_after=(3-length_ref)%3
inserted_aa=traduction(get_rna(var[10])) deleted_aa=traduction(get_rna(cds.sequence[posVar_on_ref:posVar_on_ref+length_ref+len_fragment_after]))
inserted_aa=traduction(get_rna(sequence_target[posVar_on_alt:posVar_on_alt+length_alt+len_fragment_after]))
if (length_ref!=0) & (length_alt!=0):
if deleted_aa!=inserted_aa: if (length_ref!=0) & (length_alt!=0):
print("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else:
print("conséquence : mutation synonyme dans",",".join(deleted_aa))
elif length_alt!=0:
print("conséquence : insertion de",",".join(inserted_aa))
else:
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
## le calcul des derniers aa ins et del parce que ça bug quand il n'y a pas d'ins ou de del
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]))
inserted_aa=traduction(get_rna(var[10][0:taille_ins_entiere]))
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
reste_del=var[9][-(length_ref%3):]
dernier_aa_del=reste_del+reste_cds
deleted_aa.append(traduction(get_rna(dernier_aa_del))[0])
inserted_aa.append(traduction(get_rna(dernier_aa_ins))[0])
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("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa)) print("conséquence : changement de",",".join(deleted_aa),"en",",".join(inserted_aa))
else: else:
print("conséquence : mutation synonyme dans",",".join(deleted_aa)) print("conséquence : mutation synonyme dans",",".join(deleted_aa))
elif length_alt!=0:
print("conséquence : insertion de",",".join(inserted_aa))
else:
print("conséquence : deletion de",",".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": if type_var=="insertion":
print(type_var,"de",var[10]) print(type_var,"de",var[10])
if type_var=="deletion": elif type_var=="deletion":
print(type_var,"de",var[9]) print(type_var,"de",var[9])
else: else:
print(type_var,"de",var[9],"par",var[10]) print(type_var,"de",var[9],"par",var[10])
...@@ -386,7 +352,7 @@ for cds_id in cds_var.keys(): ...@@ -386,7 +352,7 @@ for cds_id in cds_var.keys():
else: else:
print("conséquence : mutation synonyme dans",",".join(deleted_aa)) 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 : # possibilité que j'ai print en compte une variation de trop, 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 ! # pour le traitement de la première j'ai également considéré la dernière !
......
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