Sunteți pe pagina 1din 5

4. Formatul ASN.

1
Seq-entry ::= set { informatii si secvente
}
1.
2.
3.
4.
5.

conine informaii despre genomul secveniat;


conine informaii despre autorii care au participat la secveniere;
secvena de ADN apare imediat dup apariia irului ncbi2na ' ;
secvena de ADN se termin la ntlnirea caracterului ' ;
pot exista mai multe regiuni de ADN care mpreun alcatuiesc cromozomul
respectiv, fiecare regiune de ADN fiind semnalat de prezena campului
ncbi2na;
6. secvena de ADN este afiat ntr-un mod mai economic (fiind redus la
jumtate ca dimesiune), astfel:
cele 4 nucleotide din ADN sunt codificate de 2 bii, astfel:
A 00
C 01
G 10
T 11
se afieaz cte 2 nucleotide (4 bii) ca un numr Hexazecimal:
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

De exemplu, urmtoarea secven de nucleotide devine urmtorul ir n format


ASN. 1: ATTCGAAC 3C81
Cerinte:
a. S se citeasc dintr-un fiier format ASN. 1 prima secven de ADN
care apare i s se scrie ntr-un alt fiier n format FASTA.
Observaii:
Pentru citire se utilizeaz doar funcia readline(). Citirea se face linie cu linie,
concomitent cu scrierea. Nu se citete toat secvena de ADN ntr-o variabil,
deoarece este prea mare.
Nu se utilizeaz cicluri for/while pentru efectuarea conversiei, ci se utilizeaz
funciile:

map(f, data) aplic funcia f pe elementele din data (data poate


fi lista, sir de caractere, etc.) i ntoarce rezultatele ntr-o lista

sir.join(lista) concateneaz stringurile din lista lista i pune


ntre ele irul sir pentru care este apelat va ntoarce irul obinut n urma
concatenrii.

Exemplu:
a= ['1','2','3','4','5','6']
print '&'.join(a)
print ''.join(a)

Pentru citirea primei secvene de ADN (prima regiune de ADN) nu se


utilizeaz cicluri imbricate. Pentru rezolvarea cerintei a. nu se utilizeaza cicluri
for/while imbricate.
b. Sa se gaseasca un fisier ASN.1 care ontine mai multe regiuni. S se
citeasc toate regiunile de ADN din fiierul n format ASN. 1 i s se scrie
un fiier multisecven FASTA, de forma:
>Regiunea1
ATTTGGG.....
......
>Regiunea2
CCCTTAA.....
.....
Pentru rezolvarea cerintei b. se utilizeaza maxim 2 cicluri for/while imbricate.

Observaii:
Funcia sir.find('xyz') ntoarce indicele de nceput al subirului 'xyz' n
irul sir.

S se utilizeze dicionarul code i funcia conv pentru conversie i s se


implementeze funcia: DNAfromASN1(fin, fout) care primete ca intrare fiierul
ASN. 1 din care va citi i un fiier de ieire n care va scrie.

code = {
'0' : 'AA', '1' : 'AC', '2' : 'AG', '3' : 'AT', '4' : 'CA', '5' : 'CC', '6' : 'CG', '7' : 'CT', '8' :
'GA', '9' : 'GC', 'A' : 'GG', 'B' : 'GT', 'C' : 'TA', 'D' : 'TC', 'E' : 'TG', 'F' : 'TT'
}
def conv(x):
return code[x]
def DNAfromASN1(fin, fout):
pass
if __name__ == '__main__':
DNAfromASN1('seq.asn1', 'seq.fasta')

5. Formatul GenBank
1. conine informaii despre genomul secveniat;
2. conine informaii despre autori;
3. secvena de ADN este ultima intrare n fiier i ncepe dup cuvntul ORIGIN;
4. secvena de ADN se termin la apariia irului //;
5. secvena de ADN (o caten) este scris pe linii; fiecare linie a secvenei de ADN
conine 60 de nucleotide grupate cte 10, iar grupurile de nucleotide sunt
separate printr-un spaiu (ultima linie din secven poate avea mai puin de 60 de
nucleotide);
6. genele codificate n secvena de ADN sau n complementara acesteia sunt
semnalate de cuvntul gene (cnd este precedat de spaii) i/sau CDS;
7. imediat dup semnalarea genei, apare locaia acesteia; locaia unei gene n
secvena de ADN se poate gsi n urmtoarele situaii:
i. 6981..9121 ncepe la poziia 6981 din secvena de ADN din fiier i se
termin la poziia 9121 ;

ii.

iii.

iv.

v.

complement(2630..3110) ncepe la poziia 2630 i se termin la poziia


3110 din secvena de ADN complementar celei din fiier (catena
complementar din dublul helix) ;
join(1223..1567, 2110..2304) gena este alcatuit din dou segmente din
secvena de ADN gsit n fiier segmentul care ncepe la poziia 1223
i se termin la poziia 1567 i segmentul care ncepe la poziia 2110 i se
termin la poziia 2304 (gena poate fi alcatuit i din mai mult de dou
segmente, acestea fiind separate prin ",") ;
complement (join(1223..1567, 2110..2304)) gena este alctuit din
mai multe secvene de pe catena de ADN complementar celei gsite n
fiier
7193..>8061 semnul ">" arat c nu se tie exact unde se termin gena;
pentru a extrage locaia unei regiuni codificatoare trebuie tratate toate
aceste situaii

8. Cuvintele cheie ncep de la caracterul al 6-lea (coloana 6 n fiier) i au o


lungime maxim de 15 caractere. Locaia ncepe de la caracterul al 22-lea
(coloana 22 n fiier). (ftp://ftp.ncbi.nih.gov/genbank/gbrel.txt)

Aplicaii. Formatul GenBank


1. S se acceseze baza de date Genome de la NCBI (National Center for
Biotechnology Information): http://www.ncbi.nlm.nih.gov/sites/genome si
sa se salveze secventa cu numarul de acces NC_014378 in format
GenBank. Pentru afisarea intregii secvente in fisierul GenBank, inainte de
salvarea fisierului, sa se selecteze optiunea Show sequence de la
Customize view.
2. Parsarea GenBank
S se implementeze funcia extractDNA(fin, fout), care citete secvena de
ADN dintr-un fiier n format GenBank ('sequence.gb') i o scrie apoi ntrun fiier n format FASTA ('sequence.adn' ).
3. Pe baza scheletului de cod din fiierul schelet_genbank.py, s se extrag
din secvena de ADN toate genele indicate n fiierul GenBank i s se
scrie cte una pe linie n fiierul 'sequence.genes'. Trebuie tratate toate
cazurile posibile ale poziiei unei gene: complement, join, etc. Sa se
utilizeze fisierul FASTA creat la 2.

Trebuie completate urmtoarele funcii:


join(str, fADN) care trateaz cazul n care o gen este alcatuit din
mai multe subsecvene din ADN i ntoarce gena n urma concatenarii
secvenelor care o compun.
extractGeneFromFile(a,b,fADN)
care extrage din fiierul cu
numele fADN
(format FASTA) secvena de ADN cuprins ntre poziia a i poziia b
i ntoarce gena ca un string.
Observaii:
S se utilizeze funciile split() i strip():
sir.split(,) care intoarce o lista cu subsirurile din sirul sir separat prin
separatorul ,
sir.strip() care elimin toate spaiile, taburile, caracterele \n de la capetele
sirului sir
sir.lstrip() care elimin toate spaiile de la stnga irului
sir.rstrip() care elimin toate spaiile de la dreapta irului
sir.strip(chars) elimin de la capetele irului sir toate caracterele coninute n
irul chars
sir.lstrip(chars) elimin din stnga irului sir toate caracterele coninute n
irul chars
sir.rstrip(chars) elimin din dreapta irului sir toate caracterele coninute n
irul chars
sir.replace('c1','c2') nlocuiete caracterul c1 cu c2 din irul sir
sir.upper() - transform literele din irul sir n litere mari
sir.find('subs') ntoarce indicele de nceput al subirului subs n irul sir

S-ar putea să vă placă și