Bonjour,
Voila j'ai un souci algorthmique, je m'explique:
Je fais un exemple:
Je prends une proteine coco1 4 14
Je dois aller faire une collection de distance proteique a partir des distances genomiques:
coco 10..39,100..129
ainsi je fais coco1 aa-> codon
ce qui fait concretement:je rajoute +3 a chaque fois
1->10
2->13
3->16
4->19
...
11->39
12->112(100+12)
13->115
14->118
jusqua la fin
ainsi je dois faire la concordance maintenant a partir de mon dico rempli coco1 4 11 je dois dire coco1 4->19 et la position final 11->39
Voila les deux fichiers que j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 C169v2-00001 Aster-03513 64 112 1192 1246 C169v2-00002 Aster-03154 2 83 172 264 C169v2-00003 Aster-06252 74 116 57 96 C169v2-00004 Aster-05984 1 218 24 243Le premier fichier ces les positions pour chaque proteine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 # Colonne 1: scaffold # 2: gene id # 3: start # 4: dir # 5: origine gene model # 6: proteinId # 7: ex-nom # 8: coordonnees genomiques # 9: structure intron/exon # 10: segments du CDS couvert par EST C169-scaffold_1 C169v2-00001 3777 - ORIGINAL JGI 55057 Genemark1.1_g 3777..3857,4046..4192,4443..4561,4940..5234,5406..5540,5734..5847,6009..6098,6421..6492 C169-scaffold_1 C169v2-00002 12682 - ORIGINAL JGI 55058 Genemark1.2_g 12682..12691,13195..13445,13694..13711 C169-scaffold_1 C169v2-00003 18095 + ORIGINAL JGI 31905 fgenesh1_kg.1_#_1_#_4092_1_CBOZ_CBPA 18095..18097,18280..18410,18690..18972 C169-scaffold_1 C169v2-00004 20452 + ORIGINAL JGI 6968 gw1.1.615.1 20452..20496,20636..20726,20881..21046,21194..21382,21567..21735
par exemple pour C169v2-00001 64 112
et pour Aster-03513 1192 1246.
et le deuxieme fichier ce sont les coordonnes genomiques que je remplis dans le dico en faisant +3
voici mon code:
Le souci que j'ai ce que pour un long fichier ca prend plus de temps et ma boucle ne s'arrete pas en remplissant mon dico.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #! /usr/bin/python #coding=utf-8 d = {} def search(idt,filename): with open(filename) as fichier: for line in fichier: if line[0]!='#': tab= line.split('\t') #print tab if(idt==tab[1]): return tab[7] return False with open('test.txt') as fichier: for line in fichier: index = line.split('\t') #print index s=search(index[0],'Coccomyxa_C169_v2_ORDERED-LIST-OF-CDS') tabs=s.split(",") flag=0 for l in tabs: mini,maxi=l.split("..") if flag==0: tmp=int(mini) cpt=1 while(tmp!=int(maxi)): d[cpt]=tmp #print tmp tmp=tmp+3 cpt=cpt+1 flag=1 else: tmp=int(mini)+cpt #print tmp while (tmp!=int(maxi)): d[cpt]=tmp tmp=tmp+3 cpt=cpt+1 if index[2] in d.keys() and index[3] in d.keys(): print d[index[2]]
Est ce que vous avez une idee plus simple, car a chaque fois que je lance le programme ca me plante l'ordi lol !
Je pense que le souci vient du else: car j'ai fait des tests mais ca plante dans la boucle
Car on m'ai dit que c'est simple en perl mais je m'y connais pas du tout
Merci








Répondre avec citation
Partager