Citazione: come faccio a creare delle matrici? questo mi porterà ad una maggiore velocità?
Con una matrice (un dotplot) ti eviti di dover ricominciare da capo l'allineamento quando lo riesegui con una sequenza più corta di una base.
codice di esempio:
""" a simple dotplot"""
seq = 'CTGCTACG'
genome = 'GCATGTCGAGACTGCTACGCTGCTACTGCTAGCAAAAAAATACGAAGC'
# print upper header
print '-',
for j in genome: print (j),
# print the matrix
for i in seq:
print ('\n' + i),
for j in genome:
if i == j:
print ('X'),
else:
print (' '),
output di esempio:
- G C A T G T C G A G A C T G C T A C G C T G C T A C T G C T A G C A A A A A A A T A C G A A G C
C x x x x x x x x x x x x
T x x x x x x x x x
G x x x x x x x x x x x
C x x x x x x x x x x x x
T x x x x x x x x x
A x x x x x x x x x x x x x x x x
C x x x x x x x x x x x x
G x x x x x x x x x x x
Vedi che ad un certo punto vi * una diagonale completa? Quella corrisponde all'allineamento esatto della tua sequenza sul genoma. Ti basta creare questa matrice, e poi cercare al suo interno una diagonale completa. Se ti fai i calcoli, vedi che é computazionalmente molto più veloce cercare il match di una base alla volta piuttosto che il match di una sequenza più lunga.
- G C A T G T C G A G A C T G C T A C G C T G C T A C T G C T A G C A A A A A A A T A C G A A G C
C x x x x x x x x x x x x
T x x x x x x x x x
G x x x x x x x x x x x
C x x x x x x x x x x x x
T x x x x x x x x x
A x x x x x x x x x x x x x x x x
C x x x x x x x x x x x x
G x x x x x x x x x x x
Inoltre, nel caso non riuscissi a trovare una diagonale completa, ti basterebbe eliminare l'ultima riga e ripetere la ricerca.
Puoi trovare del codice migliore del mio in questi appunti: http://www.biocomp.unibo.it/piero/corso/note/node71.html , e inoltre, potresti usare numpy per lavorare con le matrici.
In ogni caso, questo corrisponderebbe a riscrivere un programma di allineamento. Io piuttosto utilizzerei exonerate oppure cercherei quali programmi di assembly vengono utilizzati per problemi simili.
|