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
Graph_gff
import
Features
,
load_intersect
from
Functions
import
get_segment_sequence
,
convert_strand
from
Functions
import
get_segment_sequence
,
convert_strand
target_genome_name
=
"
genome
4
_chr10
"
target_genome_name
=
"
genome
2
_chr10
"
intersect_path
=
'
intersect.bed
'
intersect_path
=
'
intersect.bed
'
load_intersect
(
intersect_path
)
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
"
gfa
=
"
graph.gfa
"
def
get_segments_sequence_and_paths
(
gfa
):
def
get_segments_sequence_and_paths
(
gfa
):
...
@@ -244,12 +244,6 @@ for line in lines:
...
@@ -244,12 +244,6 @@ for line in lines:
cds_var
[
cds_id
].
append
(
line
)
cds_var
[
cds_id
].
append
(
line
)
for
feature
in
Features
.
values
():
add_feature_sequence
(
feature
,
seg_seq
)
def
findOtherStart
(
cds
,
segments_on_target_genome
):
def
findOtherStart
(
cds
,
segments_on_target_genome
):
print
(
"
\n
recherche de nouveau codon start:
"
)
print
(
"
\n
recherche de nouveau codon start:
"
)
frame_shift
=
0
frame_shift
=
0
...
@@ -284,30 +278,24 @@ def findOtherStart(cds,segments_on_target_genome):
...
@@ -284,30 +278,24 @@ def findOtherStart(cds,segments_on_target_genome):
version
=
"
new
"
version
=
"
new
"
import
re
import
re
for
feature
in
Features
.
values
():
add_feature_sequence
(
feature
,
seg_seq
)
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
(
"
analysing variations in 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
]
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
(
"
/
"
)
size_var
=
var
[
11
].
split
(
"
/
"
)
else
:
else
:
size_var
=
var
[
11
]
size_var
=
var
[
11
]
pos_var
=
int
(
var
[
12
])
-
1
pos_var
=
int
(
var
[
12
])
-
1
# how to use size_var if it can be in two different formats (list or int) ?
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 ?
print
(
var
)
print
(
var
)
if
type_var
==
"
insertion
"
:
if
type_var
==
"
insertion
"
:
...
@@ -324,47 +312,97 @@ for cds_id in cds_var.keys():
...
@@ -324,47 +312,97 @@ for cds_id in cds_var.keys():
if
pos_var
%
3
==
0
:
# position 3k
if
pos_var
%
3
==
0
:
# position 3k
print
(
"
variation entre deux codons
"
)
print
(
"
variation entre deux codons
"
)
# simplement insertion et/ou deletion.
# délétion éventuelle
if
length_ref
%
3
==
0
:
# taille 3K -> pas d'impact sur l'aa en aval
# insertion éventuelle
deleted_aa
=
traduction
(
get_rna
(
var
[
9
]))
# dépassement éventuel sur le codon d'après si alt ET ref %3!=0.
inserted_aa
=
traduction
(
get_rna
(
var
[
10
]))
if
length_ref
%
3
==
0
:
# taille 3K -> pas d'impact sur l'aa en amont
if
(
length_ref
!=
0
)
&
(
length_alt
!=
0
):
if
length_ref
!=
0
:
print
(
"
changement de
"
,
"
,
"
.
join
(
deleted_aa
),
"
en
"
,
"
,
"
.
join
(
inserted_aa
))
print
(
"
deletion de
"
,
var
[
9
])
elif
length_alt
!=
0
:
if
length_alt
!=
0
:
print
(
"
insertion de
"
,
"
,
"
.
join
(
inserted_aa
))
print
(
"
insertion de
"
,
var
[
10
])
else
:
else
:
# taille != 3k : impact sur l'aa d'avant (dans lequel on est)
print
(
"
deletion de
"
,
"
,
"
.
join
(
deleted_aa
))
print
(
"
indel puis modification d
'
un autre codon
"
)
# insere+delete+modifie le codon apres
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
if
length_alt
>
length_ref
:
# subs puis insertion
print
(
"
substitution de
"
,
length_ref
,
"
bases
"
)
taille_del_entiere
=
(
length_ref
//
3
)
*
3
insertion
=
var
[
10
][
length_ref
:]
taille_ins_entiere
=
(
length_alt
//
3
)
*
3
print
(
"
insertion de
"
)
elif
length_ref
>
length_alt
:
# deletion puis subs
deleted_aa
=
traduction
(
get_rna
(
var
[
9
][
0
:
taille_del_entiere
]))
# le +3 ajoute l'aa suivant qui est modifié en partie
print
(
"
substitution de
"
,
length_alt
,
"
bases
"
)
inserted_aa
=
traduction
(
get_rna
(
var
[
10
][
0
:
taille_ins_entiere
]))
deletion
=
var
[
9
][
0
:
length_alt
]
# le +3 ne fonctionne pas. il faut aller chercher l'aa d'apres dans la séquence du cds.
print
(
"
deletion de
"
)
# enlever le +3
else
:
# susb
# aller chercher l'emplacement de l'insertion, prendre les 3 bases après ?
print
(
"
substitution de
"
,
length_ref
,
"
bases
"
)
posVar_on_ref
=
int
(
var
[
12
])
reste_len
=
3
-
(
length_alt
%
3
)
else
:
# taille 3k, position !=3k
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
print
(
"
variation au milieu d
'
un codon
"
)
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
# 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
"
)
print
(
"
frame shift
"
)
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?
# 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
# 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
"
:
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.
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