Note bien que je ne comprends pas parfaitement tout ce qui se trouve au dessus de la ligne
p.read_Matrice(m2) # partition des log-probabilites maximales en chaque position
parce que je ne connais pas le sujet. L’essentiel est que cela fasse ce que tu veux et que tu en sois satisfaite, tu es seule juge.
Dans cette partie , j’écrirais juste de façon plus agréable à lire, pour que les lignes ne dépassent pas de l’écran:
Code:
1
2
3
4
5
6
7
8 Fichier_a_traiter = tkFileDialog.askopenfilename(filetypes = [("All", "*"), ("Selection du fichier a traiter", "*.fa")]) commands.getstatusoutput('/home/m1sp/bin/decoup_CpG '+\ Fichier_a_traiter +\ ' arbre Fichier_a_traiter.out 3 0.4 2.65 1.5 8.8 1.66')
Proposition supplémentaire:
dans la mesure où je vois tkFileDialog n’apparaître qu’une seule fois dans le code à l’endroit suivant
Fichier_a_traiter = tkFileDialog.askopenfilename(filetypes = [("All", "*"),......
ce serait peut être mieux de faire:
Code:
1
2
3
4
5
6 from tkFileDialog import askopenfilename ..... ..... Fichier_a_traiter = askopenfilename(filetypes = [("All", "*"), ("Selection du fichier a traiter", "*.fa")])
-----------------------------------------------------
Pour ce qui est du bas du code, j’ai l’impression qu’il y a un peu de confusion.
1)
Dans le code de mon message #5, ADN désigne une chaîne ADN dans laquelle on s’intéresse aux segments repérés par des couples de positions contenus dans un objet de nom res.
Le nom ADN est dû au fait que dans ce code de ce message #15, le fichier que je fais ouvrir contient uniquement une séquence ADN.
Mais à la suite de ton message #18, il faut tenir compte du fait que tu prélèves la chaîne ADN (dans laquelle tu veux effectuer les recherches et calculs) dans un fichier que moi j’ai appelé 'hg18_panTro2_rheMac2' dans lequel se trouvent 3 chaînes ADN.
Dans ce fichier, pour récupérer l’une des 3 chaînes , il faut fixer l’objet de nom voulu à une certaine valeur ( 'hg18', ou 'panTro2', ou 'rheMac2' ) et lancer une regex sur le contenu du fichier.
Il convient donc de ne pas appeler ADN ce contenu du fichier, puisque tu veux en extraire une chaîne ADN et la placer dans un objet de nom ADN.
J’ai choisi le nom plusieurs_adn pour ce contenu lu dans le fichier.
Par contre, comme l’identifiant ADN dans le code du message #15 ,
précisément dans les lignes
réfère à une chaîne ADN unique, celle par rapport à laquelle on fait des calculs et des corrections,Code:
1
2 nbtirets_a = nbtirets_b + sum('-'==car for car in ADN[prec:a]) nbtirets_b = nbtirets_a + sum('-'==car for car in ADN[ a:b])
il faut changer l’identifiant sequence dans
en ADN:Code:sequence = re.search(voulu+'\s*((?:[AGCTN-]+\r?\n)+)',ADN).group(1).replace('\n','')
D'où
Code:ADN = re.search(voulu+'\s*((?:[AGCTN-]+\r?\n)+)',plusieurs_adn).group(1).replace('\n','')
2)
Par ailleurs, dans la mesure où il semble que le calcul des positions corrigées n’est effectué qu’une fois dans ce bout de code, je trouve mieux de ne pas confier ces calculs à une fonction positions_corrigees() spécialement isolée, c’est un peu lourdingue, et sans fonction le code sera légèrement plus rapide.
On s’aperçoit même alors qu’on peut condenser les choses, en se passant de créer un objet position préalable. On construit directement un objet p_pc qui comporte des couples de positions avant-après (c’est le zip(positions,pc) )
Code:
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 p=partition.Partition() p.read_Matrice(m2) # partition des log-probabilites maximales en chaque position # for s in p: # if s.num()==[1]: # print s.deb(), s.fin(), s.val()/len(s) with open('hg18_panTro2_rheMac2') as f: plusieurs_adn = f.read() voulu = 'hg18' ADN = re.search(voulu+'\s*((?:[AGCTN-]+\r?\n)+)',plusieurs_adn).group(1).replace('\n','') res = '''s.deb(), s.fin(), s.val()/len(s)''' nbtirets_b , prec = 0 , 0 for a,b,_ in map(str.split,res.splitlines()): a,b = int(a),int(b) nbtirets_a = nbtirets_b + sum('-'==car for car in ADN[prec:a]) nbtirets_b = nbtirets_a + sum('-'==car for car in ADN[ a:b]) p_pc.append( ((a,b)),a-nbtirets_a, b-nbtirets_b)) ) prec = b print ('Positions initiales'.ljust(26) + 'Positions corrigees', 'dans ADN avec gaps '.ljust(26) + 'dans ADN sans gaps ','', sep='\n') print ('\n'.join(repr(avant).ljust(26)+repr(apres) for avant,apres in p_pc)) with open("Fichier_a_traiter_logv.part","w") as f: f.write(str(p)) robjects.r("""source('dess.r')""")
Il reste deux problèmes.
3)
Pour ce qui est de
res = '''s.deb(), s.fin(), s.val()/len(s)'''
c’est simplement une chaîne de caractères.
Ça ne donne aucune liste ou tuple de couples de positions.
N’est ce pas ?
J'ai ecrit les positions dans un objet de nom res dans le message #15 parce qu’il fallait bien que je mette dans quelque chose les données positions que tu avais fournies.
Mais je pensais avoir compris que ces positions sont en fait obtenues dans l’objet p par les deux instructions:
Il faudrait donc à mon avis remplacer cette ligneCode:
1
2 p=partition.Partition() p.read_Matrice(m2)
res = '''s.deb(), s.fin(), s.val()/len(s)'''
par quelque chose du genre
res = traitement_de(p)
si p n’est pas directement exploitable par le code qui suit,
ou alors remplacer res par p dans
for a,b,_ in map(str.split,res.splitlines()):
si p contient directement les couples de positions
4)
Le deuxième problème est que si on calcule des positions corrigées, c’est par rapport à une chaîne ADN précise.
En faisant
on obtient cette chaîne ADN précise: c’est celle qui s’appelle hg18 dans le fichier 'hg18_panTro2_rheMac2'Code:
1
2
3
4
5 with open('hg18_panTro2_rheMac2') as f: plusieurs_adn = f.read() voulu = 'hg18' ADN = re.search(voulu+'\s*((?:[AGCTN-]+\r?\n)+)',plusieurs_adn).group(1).replace('\n','')
Mais les deux lignes
qui crée l’objet p dans lequel je pensais que se trouvent les positions à analyser se trouvent au dessus dans le code.Code:
1
2 p=partition.Partition() p.read_Matrice(m2)
Donc , quel rapport entre le haut du code et le bas ?
----------------------------------------------
j’ai encore quelque chose à dire sur le déroulement du programme, mais j’envoie déjà ça pour clarifier les choses.
=====================================
:(Citation:
et je me serais pas interessée à python
:DCitation:
sauf que c est un des rare langage ou ont peux faire rapidement est assez facilement de chaine de markoff ( ce qui es tres compliqué)
à ce point là ?!Citation:
meme les langage de programmation statistique comme R n 'arrivent pas a realiser ce type de HMM quelles que soient les differentes librairies
Information bien intéressante