Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
GrAnnoT
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
DIADE
dynadiv
GrAnnoT
Commits
b5415f39
Commit
b5415f39
authored
1 year ago
by
nina.marthe_ird.fr
Browse files
Options
Downloads
Patches
Plain Diff
ajouté le traitement des variations au milieu d'un codon et de différence de taille multiple de 3
parent
ff6c5fda
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
inference.py
+90
-52
90 additions, 52 deletions
inference.py
with
90 additions
and
52 deletions
inference.py
+
90
−
52
View file @
b5415f39
from
Graph_gff
import
Features
,
load_intersect
from
Functions
import
get_segment_sequence
,
convert_strand
target_genome_name
=
"
genome
4
_chr10
"
target_genome_name
=
"
genome
2
_chr10
"
intersect_path
=
'
intersect.bed
'
load_intersect
(
intersect_path
)
pos_seg
=
"
genome
4
_chr10.bed
"
pos_seg
=
"
genome
2
_chr10.bed
"
var
=
open
(
"
genome
4
_chr10_variations.txt
"
,
'
r
'
)
var
=
open
(
"
genome
2
_chr10_variations.txt
"
,
'
r
'
)
gfa
=
"
graph.gfa
"
def
get_segments_sequence_and_paths
(
gfa
):
...
...
@@ -244,12 +244,6 @@ for line in lines:
cds_var
[
cds_id
].
append
(
line
)
for
feature
in
Features
.
values
():
add_feature_sequence
(
feature
,
seg_seq
)
def
findOtherStart
(
cds
,
segments_on_target_genome
):
print
(
"
\n
recherche de nouveau codon start:
"
)
frame_shift
=
0
...
...
@@ -284,30 +278,24 @@ def findOtherStart(cds,segments_on_target_genome):
version
=
"
new
"
import
re
for
feature
in
Features
.
values
():
add_feature_sequence
(
feature
,
seg_seq
)
for
cds_id
in
cds_var
.
keys
():
cds
=
Features
[
cds_id
]
print
(
"
analysing variations in cds
"
,
cds_id
)
frame_shift
=
0
for
var
in
cds_var
[
cds_id
]:
type_var
=
var
[
8
]
if
type_var
!=
"
no_var
"
:
# frame var ? pos_var-1 %3
if
type_var
!=
"
no_var
"
:
# if there is a variation
if
"
/
"
in
var
[
11
]:
if
"
/
"
in
var
[
11
]:
# if the variation has a different ref and alt size
size_var
=
var
[
11
].
split
(
"
/
"
)
else
:
size_var
=
var
[
11
]
pos_var
=
int
(
var
[
12
])
-
1
if
pos_var
<
3
:
print
(
"
codon start touché
"
)
findOtherStart
(
cds
,
segments_on_target_genome
)
# si on a plusieurs start candidats il faut choisir celui qu'on prend, ils sont pas forcément tous sur le même cadre de lecture
# comment traiter la variation sur le start ?
# après avoir détecté que la var touche le start, traiter la var ?
# how to use size_var if it can be in two different formats (list or int) ?
print
(
var
)
if
type_var
==
"
insertion
"
:
...
...
@@ -324,47 +312,97 @@ for cds_id in cds_var.keys():
if
pos_var
%
3
==
0
:
# position 3k
print
(
"
variation entre deux codons
"
)
# simplement insertion et/ou deletion.
# délétion éventuelle
# insertion éventuelle
# dépassement éventuel sur le codon d'après si alt ET ref %3!=0.
if
length_ref
%
3
==
0
:
# taille 3K -> pas d'impact sur l'aa en amont
if
length_ref
!=
0
:
print
(
"
deletion de
"
,
var
[
9
])
if
length_alt
!=
0
:
print
(
"
insertion de
"
,
var
[
10
])
else
:
# taille != 3k : impact sur l'aa d'avant (dans lequel on est)
print
(
"
indel puis modification d
'
un autre codon
"
)
# insere+delete+modifie le codon apres
if
length_alt
>
length_ref
:
# subs puis insertion
print
(
"
substitution de
"
,
length_ref
,
"
bases
"
)
insertion
=
var
[
10
][
length_ref
:]
print
(
"
insertion de
"
)
elif
length_ref
>
length_alt
:
# deletion puis subs
print
(
"
substitution de
"
,
length_alt
,
"
bases
"
)
deletion
=
var
[
9
][
0
:
length_alt
]
print
(
"
deletion de
"
)
else
:
# susb
print
(
"
substitution de
"
,
length_ref
,
"
bases
"
)
else
:
# taille 3k, position !=3k
print
(
"
variation au milieu d
'
un codon
"
)
if
length_ref
%
3
==
0
:
# taille 3K -> pas d'impact sur l'aa en aval
deleted_aa
=
traduction
(
get_rna
(
var
[
9
]))
inserted_aa
=
traduction
(
get_rna
(
var
[
10
]))
if
(
length_ref
!=
0
)
&
(
length_alt
!=
0
):
print
(
"
changement de
"
,
"
,
"
.
join
(
deleted_aa
),
"
en
"
,
"
,
"
.
join
(
inserted_aa
))
elif
length_alt
!=
0
:
print
(
"
insertion de
"
,
"
,
"
.
join
(
inserted_aa
))
else
:
print
(
"
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
]))
# le +3 ajoute l'aa suivant qui est modifié en partie
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
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.
print
(
"
changement de
"
,
"
,
"
.
join
(
deleted_aa
),
"
en
"
,
"
,
"
.
join
(
inserted_aa
))
else
:
# position !=3k, taille diff 3k
print
(
"
variation au milieu d
'
un codon uuu
"
)
# récupérer le codon dans lequel on a inséré, le prendre en compte pour calculer les effets
posVar_on_ref
=
int
(
var
[
12
])
reste_avant_len
=
(
posVar_on_ref
-
1
)
%
3
fin_aa_avant
=
cds
.
sequence
[
posVar_on_ref
-
reste_avant_len
-
1
:
posVar_on_ref
-
1
]
print
(
fin_aa_avant
)
complete_avant_len
=
3
-
reste_avant_len
if
len
(
var
[
9
]
>=
complete_avant_len
):
aa_modifie_avant
=
fin_aa_avant
+
var
[
9
][
0
:
complete_avant_len
]
# else il faut aller chercher dans le segment d'apres !! max un apres pcq min 1 base par segment (avant=1min, var=1min, apres=1min.)
if
len
(
var
[
10
])
>=
complete_avant_len
:
aa_modifie_apres
=
fin_aa_avant
+
var
[
10
][
0
:
complete_avant_len
]
print
(
aa_modifie_avant
,
aa_modifie_apres
)
# else il faut aller chercher dans le segment d'apres !! max un apres pcq min 1 base par segment (avant=1min, var=1min, apres=1min.)
# touche le codon d'avant
# touche le codon d'apres ? pas si reste_avant_len + taille_var%3 =3
if
reste_avant_len
+
(
length_ref
%
3
)
==
3
:
# modifie l'aa dans lequel on a inséré+délété, puis éventuellement insere ou delete
# ne modifie pas l'aa d'après.
a
=
1
else
:
else
:
# taille diff !=3k
print
(
"
frame shift
"
)
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
print
(
"
\n
"
)
if
pos_var
<
3
:
print
(
"
codon start touché
"
)
findOtherStart
(
cds
,
segments_on_target_genome
)
# si on a plusieurs start candidats il faut choisir celui qu'on prend, ils sont pas forcément tous sur le même cadre de lecture
# comment traiter la variation sur le start ?
# après avoir détecté que la var touche le start, traiter la var ? ou l'inverse
print
(
"
\n
"
)
if
version
==
"
old
"
:
for
cds_id
in
cds_var
.
keys
():
# for a gene that has cds, concatenate all cds to make a prot. then detail var by cds.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment